drm/vc4: hdmi: Split the CEC disable / enable functions in two
authorMaxime Ripard <maxime@cerno.tech>
Tue, 29 Jun 2021 07:53:52 +0000 (09:53 +0200)
committerPhil Elwell <8911409+pelwell@users.noreply.github.com>
Fri, 2 Jul 2021 15:45:04 +0000 (16:45 +0100)
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.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drivers/gpu/drm/vc4/vc4_hdmi.c

index a64cfb7..82a0601 100644 (file)
@@ -1774,7 +1774,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 */
@@ -1787,38 +1787,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);