Skip to content

Commit

Permalink
omapdrm: hdmi4: hook up the HDMI CEC support
Browse files Browse the repository at this point in the history
Hook up the HDMI CEC support in the hdmi4 driver.

It add the CEC irq handler, the CEC (un)init calls and tells the CEC
implementation when the physical address changes.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Hans Verkuil authored and Tomi Valkeinen committed Oct 12, 2017
1 parent 8d7f934 commit 1897e1a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
8 changes: 8 additions & 0 deletions drivers/gpu/drm/omapdrm/dss/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,14 @@ config OMAP4_DSS_HDMI
help
HDMI support for OMAP4 based SoCs.

config OMAP4_DSS_HDMI_CEC
bool "Enable HDMI CEC support for OMAP4"
depends on OMAP4_DSS_HDMI
select CEC_CORE
default y
---help---
When selected the HDMI transmitter will support the CEC feature.

config OMAP5_DSS_HDMI
bool "HDMI support for OMAP5"
default n
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/omapdrm/dss/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ omapdss-$(CONFIG_OMAP2_DSS_DSI) += dsi.o
omapdss-$(CONFIG_OMAP2_DSS_HDMI_COMMON) += hdmi_common.o hdmi_wp.o hdmi_pll.o \
hdmi_phy.o
omapdss-$(CONFIG_OMAP4_DSS_HDMI) += hdmi4.o hdmi4_core.o
omapdss-$(CONFIG_OMAP4_DSS_HDMI_CEC) += hdmi4_cec.o
omapdss-$(CONFIG_OMAP5_DSS_HDMI) += hdmi5.o hdmi5_core.o
ccflags-$(CONFIG_OMAP2_DSS_DEBUG) += -DDEBUG
23 changes: 22 additions & 1 deletion drivers/gpu/drm/omapdrm/dss/hdmi4.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@
#include <linux/of.h>
#include <linux/of_graph.h>
#include <sound/omap-hdmi-audio.h>
#include <media/cec.h>

#include "omapdss.h"
#include "hdmi4_core.h"
#include "hdmi4_cec.h"
#include "dss.h"
#include "hdmi.h"

Expand Down Expand Up @@ -96,6 +98,13 @@ static irqreturn_t hdmi_irq_handler(int irq, void *data)
} else if (irqstatus & HDMI_IRQ_LINK_DISCONNECT) {
hdmi_wp_set_phy_pwr(wp, HDMI_PHYPWRCMD_LDOON);
}
if (irqstatus & HDMI_IRQ_CORE) {
u32 intr4 = hdmi_read_reg(hdmi->core.base, HDMI_CORE_SYS_INTR4);

hdmi_write_reg(hdmi->core.base, HDMI_CORE_SYS_INTR4, intr4);
if (intr4 & 8)
hdmi4_cec_irq(&hdmi->core);
}

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -392,6 +401,8 @@ static void hdmi_display_disable(struct omap_dss_device *dssdev)

DSSDBG("Enter hdmi_display_disable\n");

hdmi4_cec_set_phys_addr(&hdmi.core, CEC_PHYS_ADDR_INVALID);

mutex_lock(&hdmi.lock);

spin_lock_irqsave(&hdmi.audio_playing_lock, flags);
Expand Down Expand Up @@ -492,7 +503,11 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev,
}

r = read_edid(edid, len);

if (r >= 256)
hdmi4_cec_set_phys_addr(&hdmi.core,
cec_get_edid_phys_addr(edid, r, NULL));
else
hdmi4_cec_set_phys_addr(&hdmi.core, CEC_PHYS_ADDR_INVALID);
if (need_enable)
hdmi4_core_disable(dssdev);

Expand Down Expand Up @@ -726,6 +741,10 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data)
if (r)
goto err;

r = hdmi4_cec_init(pdev, &hdmi.core, &hdmi.wp);
if (r)
goto err;

irq = platform_get_irq(pdev, 0);
if (irq < 0) {
DSSERR("platform_get_irq failed\n");
Expand Down Expand Up @@ -770,6 +789,8 @@ static void hdmi4_unbind(struct device *dev, struct device *master, void *data)

hdmi_uninit_output(pdev);

hdmi4_cec_uninit(&hdmi.core);

hdmi_pll_uninit(&hdmi.pll);

pm_runtime_disable(&pdev->dev);
Expand Down

0 comments on commit 1897e1a

Please sign in to comment.