mei: bus: unregister callbacks upon me client disable call
Stop and unregister receive and notification callbacks from the disable function, to allow its later re-enablement. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5d88246090
commit
57080e8824
|
@ -498,6 +498,25 @@ out:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mei_cldev_enable);
|
||||
|
||||
/**
|
||||
* mei_cldev_unregister_callbacks - internal wrapper for unregistering
|
||||
* callbacks.
|
||||
*
|
||||
* @cldev: client device
|
||||
*/
|
||||
static void mei_cldev_unregister_callbacks(struct mei_cl_device *cldev)
|
||||
{
|
||||
if (cldev->rx_cb) {
|
||||
cancel_work_sync(&cldev->rx_work);
|
||||
cldev->rx_cb = NULL;
|
||||
}
|
||||
|
||||
if (cldev->notif_cb) {
|
||||
cancel_work_sync(&cldev->notif_work);
|
||||
cldev->notif_cb = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mei_cldev_disable - disable me client device
|
||||
* disconnect form the me client
|
||||
|
@ -519,6 +538,8 @@ int mei_cldev_disable(struct mei_cl_device *cldev)
|
|||
|
||||
bus = cldev->bus;
|
||||
|
||||
mei_cldev_unregister_callbacks(cldev);
|
||||
|
||||
mutex_lock(&bus->device_lock);
|
||||
|
||||
if (!mei_cl_is_connected(cl)) {
|
||||
|
@ -700,14 +721,7 @@ static int mei_cl_device_remove(struct device *dev)
|
|||
if (cldrv->remove)
|
||||
ret = cldrv->remove(cldev);
|
||||
|
||||
if (cldev->rx_cb) {
|
||||
cancel_work_sync(&cldev->rx_work);
|
||||
cldev->rx_cb = NULL;
|
||||
}
|
||||
if (cldev->notif_cb) {
|
||||
cancel_work_sync(&cldev->notif_work);
|
||||
cldev->notif_cb = NULL;
|
||||
}
|
||||
mei_cldev_unregister_callbacks(cldev);
|
||||
|
||||
module_put(THIS_MODULE);
|
||||
dev->driver = NULL;
|
||||
|
|
Loading…
Reference in New Issue