Skip to content

Commit 724fc85

Browse files
committed
drm/vc4: hdmi: Split the CEC disable / enable functions in two
In order to ease further additions to the CEC enable and disable, let's split the function into two functions, one to enable and the other to disable. Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-5-maxime@cerno.tech
1 parent caa51a4 commit 724fc85

File tree

1 file changed

+45
-30
lines changed

1 file changed

+45
-30
lines changed

drivers/gpu/drm/vc4/vc4_hdmi.c

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,7 +1736,7 @@ static irqreturn_t vc4_cec_irq_handler(int irq, void *priv)
17361736
return ret;
17371737
}
17381738

1739-
static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
1739+
static int vc4_hdmi_cec_enable(struct cec_adapter *adap)
17401740
{
17411741
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
17421742
/* clock period in microseconds */
@@ -1749,38 +1749,53 @@ static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
17491749
val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
17501750
((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
17511751

1752-
if (enable) {
1753-
HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
1754-
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
1755-
HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
1756-
HDMI_WRITE(HDMI_CEC_CNTRL_2,
1757-
((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
1758-
((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
1759-
((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
1760-
((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
1761-
((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
1762-
HDMI_WRITE(HDMI_CEC_CNTRL_3,
1763-
((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
1764-
((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
1765-
((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
1766-
((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
1767-
HDMI_WRITE(HDMI_CEC_CNTRL_4,
1768-
((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
1769-
((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
1770-
((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
1771-
((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
1772-
1773-
if (!vc4_hdmi->variant->external_irq_controller)
1774-
HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
1775-
} else {
1776-
if (!vc4_hdmi->variant->external_irq_controller)
1777-
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
1778-
HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
1779-
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
1780-
}
1752+
HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
1753+
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
1754+
HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
1755+
HDMI_WRITE(HDMI_CEC_CNTRL_2,
1756+
((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
1757+
((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
1758+
((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
1759+
((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
1760+
((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
1761+
HDMI_WRITE(HDMI_CEC_CNTRL_3,
1762+
((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
1763+
((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
1764+
((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
1765+
((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
1766+
HDMI_WRITE(HDMI_CEC_CNTRL_4,
1767+
((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
1768+
((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
1769+
((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
1770+
((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
1771+
1772+
if (!vc4_hdmi->variant->external_irq_controller)
1773+
HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
1774+
1775+
return 0;
1776+
}
1777+
1778+
static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
1779+
{
1780+
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
1781+
1782+
if (!vc4_hdmi->variant->external_irq_controller)
1783+
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
1784+
1785+
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
1786+
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
1787+
17811788
return 0;
17821789
}
17831790

1791+
static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
1792+
{
1793+
if (enable)
1794+
return vc4_hdmi_cec_enable(adap);
1795+
else
1796+
return vc4_hdmi_cec_disable(adap);
1797+
}
1798+
17841799
static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
17851800
{
17861801
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);

0 commit comments

Comments
 (0)