Lines Matching +full:hdmi +full:- +full:bridge
1 // SPDX-License-Identifier: GPL-2.0-only
12 #include "hdmi.h"
14 static void msm_hdmi_phy_reset(struct hdmi *hdmi)
18 val = hdmi_read(hdmi, REG_HDMI_PHY_CTRL);
22 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
26 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
32 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
36 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
44 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
48 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
54 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
58 hdmi_write(hdmi, REG_HDMI_PHY_CTRL,
63 void msm_hdmi_hpd_enable(struct drm_bridge *bridge)
65 struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
66 struct hdmi *hdmi = hdmi_bridge->hdmi;
67 struct device *dev = &hdmi->pdev->dev;
72 if (hdmi->hpd_gpiod)
73 gpiod_set_value_cansleep(hdmi->hpd_gpiod, 1);
79 mutex_lock(&hdmi->state_mutex);
80 msm_hdmi_set_mode(hdmi, false);
81 msm_hdmi_phy_reset(hdmi);
82 msm_hdmi_set_mode(hdmi, true);
84 hdmi->hpd_enabled = true;
85 mutex_unlock(&hdmi->state_mutex);
87 hdmi_write(hdmi, REG_HDMI_USEC_REFTIMER, 0x0001001b);
90 hdmi_write(hdmi, REG_HDMI_HPD_INT_CTRL,
95 spin_lock_irqsave(&hdmi->reg_lock, flags);
96 hpd_ctrl = hdmi_read(hdmi, REG_HDMI_HPD_CTRL);
100 hdmi_write(hdmi, REG_HDMI_HPD_CTRL,
102 hdmi_write(hdmi, REG_HDMI_HPD_CTRL,
104 spin_unlock_irqrestore(&hdmi->reg_lock, flags);
107 void msm_hdmi_hpd_disable(struct drm_bridge *bridge)
109 struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
110 struct hdmi *hdmi = hdmi_bridge->hdmi;
111 struct device *dev = &hdmi->pdev->dev;
114 hdmi_write(hdmi, REG_HDMI_HPD_INT_CTRL, 0);
116 mutex_lock(&hdmi->state_mutex);
117 hdmi->hpd_enabled = false;
118 msm_hdmi_set_mode(hdmi, hdmi->power_on);
119 mutex_unlock(&hdmi->state_mutex);
124 void msm_hdmi_hpd_irq(struct drm_bridge *bridge)
126 struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
127 struct hdmi *hdmi = hdmi_bridge->hdmi;
131 hpd_int_status = hdmi_read(hdmi, REG_HDMI_HPD_INT_STATUS);
132 hpd_int_ctrl = hdmi_read(hdmi, REG_HDMI_HPD_INT_CTRL);
139 hdmi_write(hdmi, REG_HDMI_HPD_INT_CTRL,
148 hdmi_write(hdmi, REG_HDMI_HPD_INT_CTRL, hpd_int_ctrl);
150 queue_work(hdmi->workq, &hdmi_bridge->hpd_work);
154 static enum drm_connector_status detect_reg(struct hdmi *hdmi)
159 ret = pm_runtime_resume_and_get(&hdmi->pdev->dev);
163 hpd_int_status = hdmi_read(hdmi, REG_HDMI_HPD_INT_STATUS);
166 pm_runtime_put(&hdmi->pdev->dev);
173 static enum drm_connector_status detect_gpio(struct hdmi *hdmi)
175 return gpiod_get_value(hdmi->hpd_gpiod) ?
181 msm_hdmi_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
183 struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
184 struct hdmi *hdmi = hdmi_bridge->hdmi;
192 if (!hdmi->hpd_gpiod)
193 return detect_reg(hdmi);
196 stat_gpio = detect_gpio(hdmi);
197 stat_reg = detect_reg(hdmi);
203 } while (--retry);
206 * so trust that one the most if we didn't manage to get hdmi and