linux-rockchip/drivers/video/hdmi-notifier.c
Philipp Zabel 0e3070da06 FROMLIST: video: rmk's HDMI notification prototype
This is Russell's HDMI notification prototype [1], currently waiting
for the HDMI CEC situation to resolve.

The use case for the notifications on MediaTek MT8173 is to let the
(dis)connection notifications control an ALSA jack object.

No Signed-off-by since this is not my code, and still up for discussion.

[1] https://patchwork.kernel.org/patch/8351501/

(am from https://patchwork.kernel.org/patch/8887261/)

Signed-off-by: Chris Zhong <zyw@rock-chips.com>
Change-Id: I87daa156de6cfa7ff8db9df9d8ecc8c42d76798f
2016-12-20 20:02:17 +08:00

61 lines
1.5 KiB
C

#include <linux/export.h>
#include <linux/hdmi-notifier.h>
#include <linux/notifier.h>
#include <linux/string.h>
static BLOCKING_NOTIFIER_HEAD(hdmi_notifier);
int hdmi_register_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&hdmi_notifier, nb);
}
EXPORT_SYMBOL_GPL(hdmi_register_notifier);
int hdmi_unregister_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_unregister(&hdmi_notifier, nb);
}
EXPORT_SYMBOL_GPL(hdmi_unregister_notifier);
void hdmi_event_connect(struct device *dev)
{
struct hdmi_event_base base;
base.source = dev;
blocking_notifier_call_chain(&hdmi_notifier, HDMI_CONNECTED, &base);
}
EXPORT_SYMBOL_GPL(hdmi_event_connect);
void hdmi_event_disconnect(struct device *dev)
{
struct hdmi_event_base base;
base.source = dev;
blocking_notifier_call_chain(&hdmi_notifier, HDMI_DISCONNECTED, &base);
}
EXPORT_SYMBOL_GPL(hdmi_event_disconnect);
void hdmi_event_new_edid(struct device *dev, const void *edid, size_t size)
{
struct hdmi_event_new_edid new_edid;
new_edid.base.source = dev;
new_edid.edid = edid;
new_edid.size = size;
blocking_notifier_call_chain(&hdmi_notifier, HDMI_NEW_EDID, &new_edid);
}
EXPORT_SYMBOL_GPL(hdmi_event_new_edid);
void hdmi_event_new_eld(struct device *dev, const void *eld)
{
struct hdmi_event_new_eld new_eld;
new_eld.base.source = dev;
memcpy(new_eld.eld, eld, sizeof(new_eld.eld));
blocking_notifier_call_chain(&hdmi_notifier, HDMI_NEW_ELD, &new_eld);
}
EXPORT_SYMBOL_GPL(hdmi_event_new_eld);