drm/vc4: hdmi: Split the CEC disable / enable functions in two
authorMaxime Ripard <maxime@cerno.tech>
Thu, 19 Aug 2021 13:59:29 +0000 (15:59 +0200)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:03:43 +0000 (16:03 +0000)
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
drivers/gpu/drm/vc4/vc4_hdmi.c

index 07887cb..37b7f57 100644 (file)
@@ -1739,7 +1739,7 @@ static irqreturn_t vc4_cec_irq_handler(int irq, void *priv)
        return ret;
 }
 
-static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
+static int vc4_hdmi_cec_enable(struct cec_adapter *adap)
 {
        struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
        /* clock period in microseconds */
@@ -1752,38 +1752,53 @@ static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
        val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
               ((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
 
-       if (enable) {
-               HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
-                          VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
-               HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
-               HDMI_WRITE(HDMI_CEC_CNTRL_2,
-                          ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
-                          ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
-                          ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
-                          ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
-                          ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
-               HDMI_WRITE(HDMI_CEC_CNTRL_3,
-                          ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
-                          ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
-                          ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
-                          ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
-               HDMI_WRITE(HDMI_CEC_CNTRL_4,
-                          ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
-                          ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
-                          ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
-                          ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
-
-               if (!vc4_hdmi->variant->external_irq_controller)
-                       HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
-       } else {
-               if (!vc4_hdmi->variant->external_irq_controller)
-                       HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
-               HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
-                          VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
-       }
+       HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
+                  VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
+       HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
+       HDMI_WRITE(HDMI_CEC_CNTRL_2,
+                  ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
+                  ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
+                  ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
+                  ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
+                  ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
+       HDMI_WRITE(HDMI_CEC_CNTRL_3,
+                  ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
+                  ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
+                  ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
+                  ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
+       HDMI_WRITE(HDMI_CEC_CNTRL_4,
+                  ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
+                  ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
+                  ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
+                  ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
+
+       if (!vc4_hdmi->variant->external_irq_controller)
+               HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
+
+       return 0;
+}
+
+static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
+{
+       struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
+
+       if (!vc4_hdmi->variant->external_irq_controller)
+               HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
+
+       HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
+                  VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
+
        return 0;
 }
 
+static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
+{
+       if (enable)
+               return vc4_hdmi_cec_enable(adap);
+       else
+               return vc4_hdmi_cec_disable(adap);
+}
+
 static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
 {
        struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);