Loading MAINTAINERS +16 −0 Original line number Diff line number Diff line Loading @@ -2657,6 +2657,22 @@ F: drivers/net/ieee802154/cc2520.c F: include/linux/spi/cc2520.h F: Documentation/devicetree/bindings/net/ieee802154/cc2520.txt CEC DRIVER M: Hans Verkuil <hans.verkuil@cisco.com> L: linux-media@vger.kernel.org T: git git://linuxtv.org/media_tree.git W: http://linuxtv.org S: Supported F: Documentation/cec.txt F: Documentation/DocBook/media/v4l/cec* F: drivers/staging/media/cec/ F: drivers/media/cec-edid.c F: drivers/media/rc/keymaps/rc-cec.c F: include/media/cec.h F: include/media/cec-edid.h F: include/linux/cec.h F: include/linux/cec-funcs.h CELL BROADBAND ENGINE ARCHITECTURE M: Arnd Bergmann <arnd@arndb.de> L: linuxppc-dev@lists.ozlabs.org Loading drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c +48 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/gpio.h> #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/irqdomain.h> #include "sde_kms.h" #include "sde_connector.h" Loading Loading @@ -967,6 +968,18 @@ static void _sde_hdmi_connector_irq(struct sde_hdmi *sde_hdmi) } } static void _sde_hdmi_cec_irq(struct sde_hdmi *sde_hdmi) { struct hdmi *hdmi = sde_hdmi->ctrl.ctrl; u32 cec_intr = hdmi_read(hdmi, REG_HDMI_CEC_INT); /* Routing interrupt to external CEC drivers */ if (cec_intr) generic_handle_irq(irq_find_mapping( sde_hdmi->irq_domain, 1)); } static irqreturn_t _sde_hdmi_irq(int irq, void *dev_id) { struct sde_hdmi *sde_hdmi = dev_id; Loading @@ -987,7 +1000,8 @@ static irqreturn_t _sde_hdmi_irq(int irq, void *dev_id) if (hdmi->hdcp_ctrl && hdmi->is_hdcp_supported) hdmi_hdcp_ctrl_irq(hdmi->hdcp_ctrl); /* TODO audio.. */ /* Process CEC: */ _sde_hdmi_cec_irq(sde_hdmi); return IRQ_HANDLED; } Loading Loading @@ -2017,6 +2031,29 @@ static struct platform_driver sde_hdmi_driver = { }, }; static int sde_hdmi_irqdomain_map(struct irq_domain *domain, unsigned int irq, irq_hw_number_t hwirq) { struct sde_hdmi *display; int rc; if (!domain || !domain->host_data) { pr_err("invalid parameters domain\n"); return -EINVAL; } display = domain->host_data; irq_set_chip_and_handler(irq, &dummy_irq_chip, handle_level_irq); rc = irq_set_chip_data(irq, display); return rc; } static const struct irq_domain_ops sde_hdmi_irqdomain_ops = { .map = sde_hdmi_irqdomain_map, .xlate = irq_domain_xlate_onecell, }; int sde_hdmi_drm_init(struct sde_hdmi *display, struct drm_encoder *enc) { int rc = 0; Loading Loading @@ -2071,6 +2108,13 @@ int sde_hdmi_drm_init(struct sde_hdmi *display, struct drm_encoder *enc) goto error; } display->irq_domain = irq_domain_add_linear(pdev->dev.of_node, 8, &sde_hdmi_irqdomain_ops, display); if (!display->irq_domain) { SDE_ERROR("failed to create IRQ domain\n"); goto error; } enc->bridge = hdmi->bridge; priv->bridges[priv->num_bridges++] = hdmi->bridge; Loading @@ -2096,6 +2140,9 @@ int sde_hdmi_drm_deinit(struct sde_hdmi *display) return -EINVAL; } if (display->irq_domain) irq_domain_remove(display->irq_domain); return rc; } Loading drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h +3 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ struct sde_hdmi_ctrl { * @hpd_work: HPD work structure. * @codec_ready: If audio codec is ready. * @client_notify_pending: If there is client notification pending. * @irq_domain: IRQ domain structure. * @root: Debug fs root entry. */ struct sde_hdmi { Loading Loading @@ -114,6 +115,8 @@ struct sde_hdmi { bool codec_ready; bool client_notify_pending; struct irq_domain *irq_domain; /* DEBUG FS */ struct dentry *root; }; Loading drivers/media/Kconfig +19 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,25 @@ config MEDIA_RC_SUPPORT Say Y when you have a TV or an IR device. config MEDIA_CEC_SUPPORT bool "HDMI CEC support" select MEDIA_CEC_EDID ---help--- Enable support for HDMI CEC (Consumer Electronics Control), which is an optional HDMI feature. Say Y when you have an HDMI receiver, transmitter or a USB CEC adapter that supports HDMI CEC. config MEDIA_CEC_DEBUG bool "HDMI CEC debugfs interface" depends on MEDIA_CEC_SUPPORT && DEBUG_FS ---help--- Turns on the DebugFS interface for CEC devices. config MEDIA_CEC_EDID bool # # Media controller # Selectable only for webcam/grabbers, as other drivers don't use it Loading drivers/media/Makefile +8 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,14 @@ # Makefile for the kernel multimedia device drivers. # ifeq ($(CONFIG_MEDIA_CEC_EDID),y) obj-$(CONFIG_MEDIA_SUPPORT) += cec-edid.o endif ifeq ($(CONFIG_MEDIA_CEC_SUPPORT),y) obj-$(CONFIG_MEDIA_SUPPORT) += cec/ endif media-objs := media-device.o media-devnode.o media-entity.o # Loading Loading
MAINTAINERS +16 −0 Original line number Diff line number Diff line Loading @@ -2657,6 +2657,22 @@ F: drivers/net/ieee802154/cc2520.c F: include/linux/spi/cc2520.h F: Documentation/devicetree/bindings/net/ieee802154/cc2520.txt CEC DRIVER M: Hans Verkuil <hans.verkuil@cisco.com> L: linux-media@vger.kernel.org T: git git://linuxtv.org/media_tree.git W: http://linuxtv.org S: Supported F: Documentation/cec.txt F: Documentation/DocBook/media/v4l/cec* F: drivers/staging/media/cec/ F: drivers/media/cec-edid.c F: drivers/media/rc/keymaps/rc-cec.c F: include/media/cec.h F: include/media/cec-edid.h F: include/linux/cec.h F: include/linux/cec-funcs.h CELL BROADBAND ENGINE ARCHITECTURE M: Arnd Bergmann <arnd@arndb.de> L: linuxppc-dev@lists.ozlabs.org Loading
drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c +48 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include <linux/gpio.h> #include <linux/of_irq.h> #include <linux/of_platform.h> #include <linux/irqdomain.h> #include "sde_kms.h" #include "sde_connector.h" Loading Loading @@ -967,6 +968,18 @@ static void _sde_hdmi_connector_irq(struct sde_hdmi *sde_hdmi) } } static void _sde_hdmi_cec_irq(struct sde_hdmi *sde_hdmi) { struct hdmi *hdmi = sde_hdmi->ctrl.ctrl; u32 cec_intr = hdmi_read(hdmi, REG_HDMI_CEC_INT); /* Routing interrupt to external CEC drivers */ if (cec_intr) generic_handle_irq(irq_find_mapping( sde_hdmi->irq_domain, 1)); } static irqreturn_t _sde_hdmi_irq(int irq, void *dev_id) { struct sde_hdmi *sde_hdmi = dev_id; Loading @@ -987,7 +1000,8 @@ static irqreturn_t _sde_hdmi_irq(int irq, void *dev_id) if (hdmi->hdcp_ctrl && hdmi->is_hdcp_supported) hdmi_hdcp_ctrl_irq(hdmi->hdcp_ctrl); /* TODO audio.. */ /* Process CEC: */ _sde_hdmi_cec_irq(sde_hdmi); return IRQ_HANDLED; } Loading Loading @@ -2017,6 +2031,29 @@ static struct platform_driver sde_hdmi_driver = { }, }; static int sde_hdmi_irqdomain_map(struct irq_domain *domain, unsigned int irq, irq_hw_number_t hwirq) { struct sde_hdmi *display; int rc; if (!domain || !domain->host_data) { pr_err("invalid parameters domain\n"); return -EINVAL; } display = domain->host_data; irq_set_chip_and_handler(irq, &dummy_irq_chip, handle_level_irq); rc = irq_set_chip_data(irq, display); return rc; } static const struct irq_domain_ops sde_hdmi_irqdomain_ops = { .map = sde_hdmi_irqdomain_map, .xlate = irq_domain_xlate_onecell, }; int sde_hdmi_drm_init(struct sde_hdmi *display, struct drm_encoder *enc) { int rc = 0; Loading Loading @@ -2071,6 +2108,13 @@ int sde_hdmi_drm_init(struct sde_hdmi *display, struct drm_encoder *enc) goto error; } display->irq_domain = irq_domain_add_linear(pdev->dev.of_node, 8, &sde_hdmi_irqdomain_ops, display); if (!display->irq_domain) { SDE_ERROR("failed to create IRQ domain\n"); goto error; } enc->bridge = hdmi->bridge; priv->bridges[priv->num_bridges++] = hdmi->bridge; Loading @@ -2096,6 +2140,9 @@ int sde_hdmi_drm_deinit(struct sde_hdmi *display) return -EINVAL; } if (display->irq_domain) irq_domain_remove(display->irq_domain); return rc; } Loading
drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h +3 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ struct sde_hdmi_ctrl { * @hpd_work: HPD work structure. * @codec_ready: If audio codec is ready. * @client_notify_pending: If there is client notification pending. * @irq_domain: IRQ domain structure. * @root: Debug fs root entry. */ struct sde_hdmi { Loading Loading @@ -114,6 +115,8 @@ struct sde_hdmi { bool codec_ready; bool client_notify_pending; struct irq_domain *irq_domain; /* DEBUG FS */ struct dentry *root; }; Loading
drivers/media/Kconfig +19 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,25 @@ config MEDIA_RC_SUPPORT Say Y when you have a TV or an IR device. config MEDIA_CEC_SUPPORT bool "HDMI CEC support" select MEDIA_CEC_EDID ---help--- Enable support for HDMI CEC (Consumer Electronics Control), which is an optional HDMI feature. Say Y when you have an HDMI receiver, transmitter or a USB CEC adapter that supports HDMI CEC. config MEDIA_CEC_DEBUG bool "HDMI CEC debugfs interface" depends on MEDIA_CEC_SUPPORT && DEBUG_FS ---help--- Turns on the DebugFS interface for CEC devices. config MEDIA_CEC_EDID bool # # Media controller # Selectable only for webcam/grabbers, as other drivers don't use it Loading
drivers/media/Makefile +8 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,14 @@ # Makefile for the kernel multimedia device drivers. # ifeq ($(CONFIG_MEDIA_CEC_EDID),y) obj-$(CONFIG_MEDIA_SUPPORT) += cec-edid.o endif ifeq ($(CONFIG_MEDIA_CEC_SUPPORT),y) obj-$(CONFIG_MEDIA_SUPPORT) += cec/ endif media-objs := media-device.o media-devnode.o media-entity.o # Loading