]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm/dp: move more AUX functions to dp_aux.c
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Sun, 18 May 2025 11:21:42 +0000 (14:21 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Fri, 4 Jul 2025 13:35:18 +0000 (16:35 +0300)
Move several misnamed functions accessing AUX bus to dp_aux.c, further
cleaning up dp_catalog submodule.

Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Tested-by: Stephen Boyd <swboyd@chromium.org> # sc7180-trogdor
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/654333/
Link: https://lore.kernel.org/r/20250518-fd-dp-audio-fixup-v6-9-2f0ec3ec000d@oss.qualcomm.com
drivers/gpu/drm/msm/dp/dp_aux.c
drivers/gpu/drm/msm/dp/dp_aux.h
drivers/gpu/drm/msm/dp/dp_catalog.c
drivers/gpu/drm/msm/dp/dp_catalog.h
drivers/gpu/drm/msm/dp/dp_ctrl.c
drivers/gpu/drm/msm/dp/dp_display.c
drivers/gpu/drm/msm/dp/dp_panel.c

index cdcab948ae7086964d9e913dadadacc333f46231..f8ea1754665afa37ff9dbaf3f883d94c48bf07b8 100644 (file)
@@ -403,7 +403,7 @@ static ssize_t msm_dp_aux_transfer(struct drm_dp_aux *msm_dp_aux,
                                phy_calibrate(aux->phy);
                }
                /* reset aux if link is in connected state */
-               if (msm_dp_catalog_link_is_connected(aux->catalog))
+               if (msm_dp_aux_is_link_connected(msm_dp_aux))
                        msm_dp_aux_reset(aux);
        } else {
                aux->retry_cnt = 0;
@@ -591,6 +591,98 @@ static int msm_dp_wait_hpd_asserted(struct drm_dp_aux *msm_dp_aux,
        return ret;
 }
 
+void msm_dp_aux_hpd_enable(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       u32 reg;
+
+       /* Configure REFTIMER and enable it */
+       reg = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER);
+       reg |= DP_DP_HPD_REFTIMER_ENABLE;
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER, reg);
+
+       /* Enable HPD */
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_CTRL, DP_DP_HPD_CTRL_HPD_EN);
+}
+
+void msm_dp_aux_hpd_disable(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       u32 reg;
+
+       reg = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER);
+       reg &= ~DP_DP_HPD_REFTIMER_ENABLE;
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER, reg);
+
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_CTRL, 0);
+}
+
+void msm_dp_aux_hpd_intr_enable(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       u32 reg;
+
+       reg = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK);
+       reg |= DP_DP_HPD_INT_MASK;
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK,
+                    reg & DP_DP_HPD_INT_MASK);
+}
+
+void msm_dp_aux_hpd_intr_disable(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       u32 reg;
+
+       reg = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK);
+       reg &= ~DP_DP_HPD_INT_MASK;
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK,
+                    reg & DP_DP_HPD_INT_MASK);
+}
+
+u32 msm_dp_aux_get_hpd_intr_status(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       int isr, mask;
+
+       isr = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_STATUS);
+       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_ACK,
+                                (isr & DP_DP_HPD_INT_MASK));
+       mask = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK);
+
+       /*
+        * We only want to return interrupts that are unmasked to the caller.
+        * However, the interrupt status field also contains other
+        * informational bits about the HPD state status, so we only mask
+        * out the part of the register that tells us about which interrupts
+        * are pending.
+        */
+       return isr & (mask | ~DP_DP_HPD_INT_MASK);
+}
+
+u32 msm_dp_aux_is_link_connected(struct drm_dp_aux *msm_dp_aux)
+{
+       struct msm_dp_aux_private *aux =
+               container_of(msm_dp_aux, struct msm_dp_aux_private, msm_dp_aux);
+       struct msm_dp_catalog *msm_dp_catalog = aux->catalog;
+       u32 status;
+
+       status = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_STATUS);
+       status >>= DP_DP_HPD_STATE_STATUS_BITS_SHIFT;
+       status &= DP_DP_HPD_STATE_STATUS_BITS_MASK;
+
+       return status;
+}
+
 struct drm_dp_aux *msm_dp_aux_get(struct device *dev, struct msm_dp_catalog *catalog,
                              struct phy *phy,
                              bool is_edp)
index 39c5b4c8596ab28d822493a6b4d479f5f786cdee..624395a41ed0a75ead4826e78d05ca21e8fb8967 100644 (file)
@@ -17,6 +17,13 @@ void msm_dp_aux_init(struct drm_dp_aux *msm_dp_aux);
 void msm_dp_aux_deinit(struct drm_dp_aux *msm_dp_aux);
 void msm_dp_aux_reconfig(struct drm_dp_aux *msm_dp_aux);
 
+void msm_dp_aux_hpd_enable(struct drm_dp_aux *msm_dp_aux);
+void msm_dp_aux_hpd_disable(struct drm_dp_aux *msm_dp_aux);
+void msm_dp_aux_hpd_intr_enable(struct drm_dp_aux *msm_dp_aux);
+void msm_dp_aux_hpd_intr_disable(struct drm_dp_aux *msm_dp_aux);
+u32 msm_dp_aux_get_hpd_intr_status(struct drm_dp_aux *msm_dp_aux);
+u32 msm_dp_aux_is_link_connected(struct drm_dp_aux *msm_dp_aux);
+
 struct phy;
 struct drm_dp_aux *msm_dp_aux_get(struct device *dev, struct msm_dp_catalog *catalog,
                              struct phy *phy,
index 7021effc7020073b8b7f633b96286e3996d78d6e..9d6d59264a592cc3ae312b35e51d48c11bd141e6 100644 (file)
@@ -85,8 +85,8 @@ u32 msm_dp_catalog_aux_get_irq(struct msm_dp_catalog *msm_dp_catalog)
        intr &= ~DP_INTERRUPT_STATUS1_MASK;
        intr_ack = (intr & DP_INTERRUPT_STATUS1)
                        << DP_INTERRUPT_STATUS_ACK_SHIFT;
-       msm_dp_write_ahb(msm_dp_catalog, REG_DP_INTR_STATUS, intr_ack |
-                       DP_INTERRUPT_STATUS1_MASK);
+       msm_dp_write_ahb(msm_dp_catalog, REG_DP_INTR_STATUS,
+                    intr_ack | DP_INTERRUPT_STATUS1_MASK);
 
        return intr;
 
@@ -106,77 +106,6 @@ void msm_dp_catalog_ctrl_enable_irq(struct msm_dp_catalog *msm_dp_catalog,
        }
 }
 
-void msm_dp_catalog_hpd_config_intr(struct msm_dp_catalog *msm_dp_catalog,
-                       u32 intr_mask, bool en)
-{
-       struct msm_dp_catalog_private *catalog = container_of(msm_dp_catalog,
-                               struct msm_dp_catalog_private, msm_dp_catalog);
-
-       u32 config = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK);
-
-       config = (en ? config | intr_mask : config & ~intr_mask);
-
-       drm_dbg_dp(catalog->drm_dev, "intr_mask=%#x config=%#x\n",
-                                       intr_mask, config);
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK,
-                               config & DP_DP_HPD_INT_MASK);
-}
-
-void msm_dp_catalog_ctrl_hpd_enable(struct msm_dp_catalog *msm_dp_catalog)
-{
-       u32 reftimer = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER);
-
-       /* Configure REFTIMER and enable it */
-       reftimer |= DP_DP_HPD_REFTIMER_ENABLE;
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER, reftimer);
-
-       /* Enable HPD */
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_CTRL, DP_DP_HPD_CTRL_HPD_EN);
-}
-
-void msm_dp_catalog_ctrl_hpd_disable(struct msm_dp_catalog *msm_dp_catalog)
-{
-       u32 reftimer = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER);
-
-       reftimer &= ~DP_DP_HPD_REFTIMER_ENABLE;
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_REFTIMER, reftimer);
-
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_CTRL, 0);
-}
-
-u32 msm_dp_catalog_link_is_connected(struct msm_dp_catalog *msm_dp_catalog)
-{
-       struct msm_dp_catalog_private *catalog = container_of(msm_dp_catalog,
-                               struct msm_dp_catalog_private, msm_dp_catalog);
-       u32 status;
-
-       status = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_STATUS);
-       drm_dbg_dp(catalog->drm_dev, "aux status: %#x\n", status);
-       status >>= DP_DP_HPD_STATE_STATUS_BITS_SHIFT;
-       status &= DP_DP_HPD_STATE_STATUS_BITS_MASK;
-
-       return status;
-}
-
-u32 msm_dp_catalog_hpd_get_intr_status(struct msm_dp_catalog *msm_dp_catalog)
-{
-       int isr, mask;
-
-       isr = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_STATUS);
-       msm_dp_write_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_ACK,
-                                (isr & DP_DP_HPD_INT_MASK));
-       mask = msm_dp_read_aux(msm_dp_catalog, REG_DP_DP_HPD_INT_MASK);
-
-       /*
-        * We only want to return interrupts that are unmasked to the caller.
-        * However, the interrupt status field also contains other
-        * informational bits about the HPD state status, so we only mask
-        * out the part of the register that tells us about which interrupts
-        * are pending.
-        */
-       return isr & (mask | ~DP_DP_HPD_INT_MASK);
-}
-
 u32 msm_dp_catalog_ctrl_read_psr_interrupt_status(struct msm_dp_catalog *msm_dp_catalog)
 {
        u32 intr, intr_ack;
index a7b11fc08ea595aad50f09ca8d49696404514bad..5196188059f3ade2b6cc260ee65a7efb38844664 100644 (file)
@@ -117,12 +117,6 @@ u32 msm_dp_catalog_aux_get_irq(struct msm_dp_catalog *msm_dp_catalog);
 
 /* DP Controller APIs */
 void msm_dp_catalog_ctrl_enable_irq(struct msm_dp_catalog *msm_dp_catalog, bool enable);
-void msm_dp_catalog_hpd_config_intr(struct msm_dp_catalog *msm_dp_catalog,
-                       u32 intr_mask, bool en);
-void msm_dp_catalog_ctrl_hpd_enable(struct msm_dp_catalog *msm_dp_catalog);
-void msm_dp_catalog_ctrl_hpd_disable(struct msm_dp_catalog *msm_dp_catalog);
-u32 msm_dp_catalog_link_is_connected(struct msm_dp_catalog *msm_dp_catalog);
-u32 msm_dp_catalog_hpd_get_intr_status(struct msm_dp_catalog *msm_dp_catalog);
 int msm_dp_catalog_ctrl_get_interrupt(struct msm_dp_catalog *msm_dp_catalog);
 void msm_dp_catalog_ctrl_config_psr_interrupt(struct msm_dp_catalog *msm_dp_catalog);
 u32 msm_dp_catalog_ctrl_read_psr_interrupt_status(struct msm_dp_catalog *msm_dp_catalog);
index 7f676e53d098a11901ef4bcee323d3ea79e53760..97a5f854f8344962c36e67d1cca480c1d5a3ef00 100644 (file)
@@ -2206,7 +2206,7 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ctrl)
                        break;
                } else if (training_step == DP_TRAINING_1) {
                        /* link train_1 failed */
-                       if (!msm_dp_catalog_link_is_connected(ctrl->catalog))
+                       if (!msm_dp_aux_is_link_connected(ctrl->aux))
                                break;
 
                        drm_dp_dpcd_read_link_status(ctrl->aux, link_status);
@@ -2231,7 +2231,7 @@ int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ctrl)
                        }
                } else if (training_step == DP_TRAINING_2) {
                        /* link train_2 failed */
-                       if (!msm_dp_catalog_link_is_connected(ctrl->catalog))
+                       if (!msm_dp_aux_is_link_connected(ctrl->aux))
                                break;
 
                        drm_dp_dpcd_read_link_status(ctrl->aux, link_status);
index a48e6db4f156a1feed5a370dabf633eae91cfb14..ede82789f3be502257f88057c5ab9412a4f209d0 100644 (file)
@@ -1148,7 +1148,7 @@ static irqreturn_t msm_dp_display_irq_handler(int irq, void *dev_id)
                return IRQ_NONE;
        }
 
-       hpd_isr_status = msm_dp_catalog_hpd_get_intr_status(dp->catalog);
+       hpd_isr_status = msm_dp_aux_get_hpd_intr_status(dp->aux);
 
        if (hpd_isr_status & 0x0F) {
                drm_dbg_dp(dp->drm_dev, "type=%d isr=0x%x\n",
@@ -1363,7 +1363,7 @@ static int msm_dp_pm_runtime_suspend(struct device *dev)
 
        if (dp->msm_dp_display.is_edp) {
                msm_dp_display_host_phy_exit(dp);
-               msm_dp_catalog_ctrl_hpd_disable(dp->catalog);
+               msm_dp_aux_hpd_disable(dp->aux);
        }
        msm_dp_display_host_deinit(dp);
 
@@ -1384,7 +1384,7 @@ static int msm_dp_pm_runtime_resume(struct device *dev)
         */
        msm_dp_display_host_init(dp);
        if (dp->msm_dp_display.is_edp) {
-               msm_dp_catalog_ctrl_hpd_enable(dp->catalog);
+               msm_dp_aux_hpd_enable(dp->aux);
                msm_dp_display_host_phy_init(dp);
        }
 
@@ -1671,10 +1671,8 @@ void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge)
                return;
        }
 
-       msm_dp_catalog_ctrl_hpd_enable(dp->catalog);
-
-       /* enable HDP interrupts */
-       msm_dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_INT_MASK, true);
+       msm_dp_aux_hpd_enable(dp->aux);
+       msm_dp_aux_hpd_intr_enable(dp->aux);
 
        msm_dp_display->internal_hpd = true;
        mutex_unlock(&dp->event_mutex);
@@ -1687,9 +1685,9 @@ void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge)
        struct msm_dp_display_private *dp = container_of(msm_dp_display, struct msm_dp_display_private, msm_dp_display);
 
        mutex_lock(&dp->event_mutex);
-       /* disable HDP interrupts */
-       msm_dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_INT_MASK, false);
-       msm_dp_catalog_ctrl_hpd_disable(dp->catalog);
+
+       msm_dp_aux_hpd_intr_disable(dp->aux);
+       msm_dp_aux_hpd_disable(dp->aux);
 
        msm_dp_display->internal_hpd = false;
 
index ce7e710a0ded1fc2703dc16b1fa3bd61d47714cb..7953b09b2fbd5c512ffe7c217b7fce986e4d9262 100644 (file)
@@ -175,7 +175,7 @@ int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
        if (!msm_dp_panel->drm_edid) {
                DRM_ERROR("panel edid read failed\n");
                /* check edid read fail is due to unplug */
-               if (!msm_dp_catalog_link_is_connected(panel->catalog)) {
+               if (!msm_dp_aux_is_link_connected(panel->aux)) {
                        rc = -ETIMEDOUT;
                        goto end;
                }