diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c index a7ea27d2aa8e..d892f98b0b13 100644 --- a/drivers/media/cec/cec-adap.c +++ b/drivers/media/cec/cec-adap.c @@ -169,6 +169,9 @@ void cec_queue_pin_hpd_event(struct cec_adapter *adap, bool is_high, ktime_t ts) }; struct cec_fh *fh; + /* hdmi HPD may occur before devnode is registered */ + if (!adap->devnode.registered) + return; mutex_lock(&adap->devnode.lock); list_for_each_entry(fh, &adap->devnode.fhs, list) cec_queue_event_fh(fh, &ev, ktime_to_ns(ts)); diff --git a/drivers/media/cec/cec-notifier.c b/drivers/media/cec/cec-notifier.c index dd2078b27a41..c0fb7bb9e744 100644 --- a/drivers/media/cec/cec-notifier.c +++ b/drivers/media/cec/cec-notifier.c @@ -106,6 +106,15 @@ void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n, } EXPORT_SYMBOL_GPL(cec_notifier_set_phys_addr_from_edid); +void cec_notifier_repo_cec_hpd(struct cec_notifier *n, + bool hpd_state, ktime_t ts) +{ + if (!n) + return; + cec_queue_pin_hpd_event(n->cec_adap, hpd_state, ts); +} +EXPORT_SYMBOL_GPL(cec_notifier_repo_cec_hpd); + void cec_notifier_register(struct cec_notifier *n, struct cec_adapter *adap, void (*callback)(struct cec_adapter *adap, u16 pa)) diff --git a/include/media/cec-notifier.h b/include/media/cec-notifier.h index 814eeef35a5c..71666ec2e96b 100644 --- a/include/media/cec-notifier.h +++ b/include/media/cec-notifier.h @@ -52,6 +52,9 @@ void cec_notifier_put(struct cec_notifier *n); */ void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa); +void cec_notifier_repo_cec_hpd(struct cec_notifier *n, + bool hpd_state, ktime_t ts); + /** * cec_notifier_set_phys_addr_from_edid - set parse the PA from the EDID. * @n: the CEC notifier