diff options
author | Tomas Winkler <tomas.winkler@intel.com> | 2013-03-10 13:56:08 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-03-15 11:18:07 -0700 |
commit | 7cb035d9e619a8d20f5d3b9791f8cb5160d19e70 (patch) | |
tree | e4dd1bb6addf4dc4e49370cbcfb5a1cdabe49174 /drivers/misc/mei/init.c | |
parent | 3d374d09f16f64ab4d71704cbe621514d36cd0b1 (diff) |
mei: add mei_stop function to stop mei device
mei_stop calls mei_reset with disabling the interrupts.
It will have the same effect as the open code it replaces in the mei_remove.
The reset sequence on remove is required for the Lynx Point LP devices
to clean the reset state.
mei_stop is called from mei_pci_suspend and mei_remove functions
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/init.c')
-rw-r--r-- | drivers/misc/mei/init.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 6ec530168af..356179991a2 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c @@ -183,6 +183,24 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled) mei_cl_all_write_clear(dev); } +void mei_stop(struct mei_device *dev) +{ + dev_dbg(&dev->pdev->dev, "stopping the device.\n"); + + mutex_lock(&dev->device_lock); + + cancel_delayed_work(&dev->timer_work); + + mei_wd_stop(dev); + + dev->dev_state = MEI_DEV_POWER_DOWN; + mei_reset(dev, 0); + + mutex_unlock(&dev->device_lock); + + flush_scheduled_work(); +} + |