On 08/18/17 11:02, Tomi Valkeinen wrote: > Hi Hans, > > > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki > > On 11/08/17 13:57, Tomi Valkeinen wrote: > >> I'm doing some testing with this series on my panda. One issue I see is >> that when I unload the display modules, I get: >> >> [ 75.180206] platform 58006000.encoder: enabled after unload, idling >> [ 75.187896] platform 58001000.dispc: enabled after unload, idling >> [ 75.198242] platform 58000000.dss: enabled after unload, idling > > This one is caused by hdmi_cec_adap_enable() never getting called with > enable=false when unloading the modules. Should that be called > explicitly in hdmi4_cec_uninit, or is the CEC framework supposed to call it? Nicely found! The cec_delete_adapter() function calls __cec_s_phys_addr(CEC_PHYS_ADDR_INVALID) which would normally call adap_enable(false), except when the device node was already unregistered, in which case it just returns immediately. The patch below should fix this. Let me know if it works, and I'll post a proper patch and get that in for 4.14 (and possible backported as well, I'll have to look at that). Regards, Hans Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> --- diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c index bf45977b2823..61dffe165565 100644 --- a/drivers/media/cec/cec-adap.c +++ b/drivers/media/cec/cec-adap.c @@ -1390,7 +1390,9 @@ 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 || adap->devnode.unregistered) + if (phys_addr == adap->phys_addr) + return; + if (phys_addr != CEC_PHYS_ADDR_INVALID && adap->devnode.unregistered) return; dprintk(1, "new physical address %x.%x.%x.%x\n",