forked from Minki/linux
mei: bus: call device disable handler prior to disconnection
call device's disable handler prior to disconnection so it can possibly close the communication with fw client in graceful way Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a9bed61053
commit
b3de8e3719
@ -467,37 +467,34 @@ int mei_cl_disable_device(struct mei_cl_device *device)
|
||||
|
||||
dev = cl->dev;
|
||||
|
||||
if (device->ops && device->ops->disable)
|
||||
device->ops->disable(device);
|
||||
|
||||
device->event_cb = NULL;
|
||||
|
||||
mutex_lock(&dev->device_lock);
|
||||
|
||||
if (cl->state != MEI_FILE_CONNECTED) {
|
||||
mutex_unlock(&dev->device_lock);
|
||||
dev_err(dev->dev, "Already disconnected");
|
||||
|
||||
return 0;
|
||||
err = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cl->state = MEI_FILE_DISCONNECTING;
|
||||
|
||||
err = mei_cl_disconnect(cl);
|
||||
if (err < 0) {
|
||||
mutex_unlock(&dev->device_lock);
|
||||
dev_err(dev->dev,
|
||||
"Could not disconnect from the ME client");
|
||||
|
||||
return err;
|
||||
dev_err(dev->dev, "Could not disconnect from the ME client");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Flush queues and remove any pending read */
|
||||
mei_cl_flush_queues(cl, NULL);
|
||||
|
||||
device->event_cb = NULL;
|
||||
|
||||
out:
|
||||
mutex_unlock(&dev->device_lock);
|
||||
return err;
|
||||
|
||||
if (!device->ops || !device->ops->disable)
|
||||
return 0;
|
||||
|
||||
return device->ops->disable(device);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mei_cl_disable_device);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user