Hi Russell, On 08/12/2016 04:15 PM, Russell King wrote: > Add a CEC driver for the dw-hdmi hardware using Hans Verkil's CEC > implementation. > > Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/bridge/Kconfig | 7 + > drivers/gpu/drm/bridge/Makefile | 1 + > drivers/gpu/drm/bridge/dw-hdmi-cec.c | 344 ++++++++++++++++++++++++++++++ > drivers/gpu/drm/bridge/dw-hdmi.c | 64 +++++- > include/linux/platform_data/dw_hdmi-cec.h | 16 ++ > 5 files changed, 421 insertions(+), 11 deletions(-) > create mode 100644 drivers/gpu/drm/bridge/dw-hdmi-cec.c > create mode 100644 include/linux/platform_data/dw_hdmi-cec.h > <snip> > +static unsigned int parse_hdmi_addr(const struct edid *edid) > +{ > + if (!edid || edid->extensions == 0) > + return (u16)~0; > + > + return cec_get_edid_phys_addr((u8 *)edid, > + EDID_LENGTH * (edid->extensions + 1), NULL); > +} > + > +static int dw_hdmi_cec_notify(struct notifier_block *nb, unsigned long event, > + void *data) > +{ > + struct dw_hdmi_cec *cec = container_of(nb, struct dw_hdmi_cec, nb); > + union hdmi_event *event_block = data; > + unsigned int phys; > + > + dev_info(event_block->base.source, "event %lu\n", event); > + > + if (event_block->base.source != cec->adap->devnode.parent) > + return NOTIFY_OK; > + > + switch (event) { > + case HDMI_CONNECTED: > + break; > + > + case HDMI_DISCONNECTED: > + cec_s_phys_addr(cec->adap, CEC_PHYS_ADDR_INVALID, false); > + break; > + > + case HDMI_NEW_EDID: > + phys = parse_hdmi_addr(event_block->edid.edid); > + cec_s_phys_addr(cec->adap, phys, false); > + break; > + } > + > + return NOTIFY_OK; > +} Wouldn't it make a lot of sense to integrate this into the cec framework? All you need is to pass an hdmi_notifier_dev as argument to cec_allocate_adapter() and you can integrate this. If you are OK with that, then I can make patches for that. Regards, Hans _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel