diff options
author | Rich Felker <dalias@libc.org> | 2016-03-30 00:53:03 +0300 |
---|---|---|
committer | Rich Felker <dalias@libc.org> | 2016-03-30 00:53:03 +0300 |
commit | 16b02d711f4059b8338ef967064195b47cae65ea (patch) | |
tree | 6d3e0b7629210b56f8d6cfa39184c878d8a15367 /drivers/misc/mic/cosm/cosm_main.c | |
parent | b15d53d009558d14c4f394a6d1fa2039c7f45c43 (diff) | |
parent | f55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff) | |
download | linux-16b02d711f4059b8338ef967064195b47cae65ea.tar.xz |
Merge tag 'v4.6-rc1'
Linux 4.6-rc1
Diffstat (limited to 'drivers/misc/mic/cosm/cosm_main.c')
-rw-r--r-- | drivers/misc/mic/cosm/cosm_main.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/misc/mic/cosm/cosm_main.c b/drivers/misc/mic/cosm/cosm_main.c index 4b4b356c797d..7005cb1e01d2 100644 --- a/drivers/misc/mic/cosm/cosm_main.c +++ b/drivers/misc/mic/cosm/cosm_main.c @@ -153,8 +153,10 @@ void cosm_stop(struct cosm_device *cdev, bool force) * stop(..) calls device_unregister and will crash the system if * called multiple times. */ - bool call_hw_ops = cdev->state != MIC_RESET_FAILED && - cdev->state != MIC_READY; + u8 state = cdev->state == MIC_RESETTING ? + cdev->prev_state : cdev->state; + bool call_hw_ops = state != MIC_RESET_FAILED && + state != MIC_READY; if (cdev->state != MIC_RESETTING) cosm_set_state(cdev, MIC_RESETTING); @@ -195,8 +197,11 @@ int cosm_reset(struct cosm_device *cdev) mutex_lock(&cdev->cosm_mutex); if (cdev->state != MIC_READY) { - cosm_set_state(cdev, MIC_RESETTING); - schedule_work(&cdev->reset_trigger_work); + if (cdev->state != MIC_RESETTING) { + cdev->prev_state = cdev->state; + cosm_set_state(cdev, MIC_RESETTING); + schedule_work(&cdev->reset_trigger_work); + } } else { dev_err(&cdev->dev, "%s %d MIC is READY\n", __func__, __LINE__); rc = -EINVAL; |