|
@@ -160,8 +160,9 @@ clr_bit:
|
|
|
* This function can safely be called if the device node has never been
|
|
|
* registered or has already been unregistered.
|
|
|
*/
|
|
|
-static void cec_devnode_unregister(struct cec_devnode *devnode)
|
|
|
+static void cec_devnode_unregister(struct cec_adapter *adap)
|
|
|
{
|
|
|
+ struct cec_devnode *devnode = &adap->devnode;
|
|
|
struct cec_fh *fh;
|
|
|
|
|
|
mutex_lock(&devnode->lock);
|
|
@@ -179,6 +180,11 @@ static void cec_devnode_unregister(struct cec_devnode *devnode)
|
|
|
devnode->unregistered = true;
|
|
|
mutex_unlock(&devnode->lock);
|
|
|
|
|
|
+ mutex_lock(&adap->lock);
|
|
|
+ __cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false);
|
|
|
+ __cec_s_log_addrs(adap, NULL, false);
|
|
|
+ mutex_unlock(&adap->lock);
|
|
|
+
|
|
|
cdev_device_del(&devnode->cdev, &devnode->dev);
|
|
|
put_device(&devnode->dev);
|
|
|
}
|
|
@@ -192,7 +198,7 @@ static void cec_cec_notify(struct cec_adapter *adap, u16 pa)
|
|
|
void cec_register_cec_notifier(struct cec_adapter *adap,
|
|
|
struct cec_notifier *notifier)
|
|
|
{
|
|
|
- if (WARN_ON(!adap->devnode.registered))
|
|
|
+ if (WARN_ON(!cec_is_registered(adap)))
|
|
|
return;
|
|
|
|
|
|
adap->notifier = notifier;
|
|
@@ -373,7 +379,7 @@ void cec_unregister_adapter(struct cec_adapter *adap)
|
|
|
if (adap->notifier)
|
|
|
cec_notifier_unregister(adap->notifier);
|
|
|
#endif
|
|
|
- cec_devnode_unregister(&adap->devnode);
|
|
|
+ cec_devnode_unregister(adap);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(cec_unregister_adapter);
|
|
|
|
|
@@ -381,9 +387,6 @@ void cec_delete_adapter(struct cec_adapter *adap)
|
|
|
{
|
|
|
if (IS_ERR_OR_NULL(adap))
|
|
|
return;
|
|
|
- mutex_lock(&adap->lock);
|
|
|
- __cec_s_phys_addr(adap, CEC_PHYS_ADDR_INVALID, false);
|
|
|
- mutex_unlock(&adap->lock);
|
|
|
kthread_stop(adap->kthread);
|
|
|
if (adap->kthread_config)
|
|
|
kthread_stop(adap->kthread_config);
|