[media] cec: add check if adapter is unregistered
authorHans Verkuil <hans.verkuil@cisco.com>
Sun, 10 Jul 2016 13:11:17 +0000 (10:11 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Tue, 12 Jul 2016 16:38:16 +0000 (13:38 -0300)
CEC USB dongles can be unplugged at any time, and at that point they will
be unregistered. Make sure that any attempt afterwards to set the physical
or logical addresses will be ignored.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/staging/media/cec/cec-adap.c

index 7df61870473caebdc706ae2dc03c61e3c470d2f0..2cd656bd5272f62e51ffad8941b914bf5d265072 100644 (file)
@@ -1104,7 +1104,7 @@ static void cec_claim_log_addrs(struct cec_adapter *adap, bool block)
  */
 void __cec_s_phys_addr(struct cec_adapter *adap, u16 phys_addr, bool block)
 {
-       if (phys_addr == adap->phys_addr)
+       if (phys_addr == adap->phys_addr || adap->devnode.unregistered)
                return;
 
        if (phys_addr == CEC_PHYS_ADDR_INVALID ||
@@ -1158,6 +1158,9 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
        u16 type_mask = 0;
        int i;
 
+       if (adap->devnode.unregistered)
+               return -ENODEV;
+
        if (!log_addrs || log_addrs->num_log_addrs == 0) {
                adap->log_addrs.num_log_addrs = 0;
                cec_adap_unconfigure(adap);