drm: sun4i: hdmi: Remove extra HPD polling
The HPD sense mechanism in Allwinner's old HDMI encoder hardware is more or less an input-only GPIO. Other GPIO-based HPD implementations directly return the current state, instead of polling for a specific state and returning the other if that times out. Remove the I/O polling from sun4i_hdmi_connector_detect() and directly return a known state based on the current reading. This also gets rid of excessive CPU usage by kworker as reported on Stack Exchange [1] and Armbian forums [2]. [1] https://superuser.com/questions/1515001/debian-10-buster-on-cubietruck-with-bug-in-sun4i-drm-hdmi [2] https://forum.armbian.com/topic/14282-headless-systems-and-sun4i_drm_hdmi-a10a20/ Fixes: 9c5681011a0c ("drm/sun4i: Add HDMI support") Signed-off-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20200629060032.24134-1-wens@kernel.org
This commit is contained in:
parent
4ab59c3c63
commit
bda8eaa6de
@ -259,9 +259,8 @@ sun4i_hdmi_connector_detect(struct drm_connector *connector, bool force)
|
|||||||
struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
|
struct sun4i_hdmi *hdmi = drm_connector_to_sun4i_hdmi(connector);
|
||||||
unsigned long reg;
|
unsigned long reg;
|
||||||
|
|
||||||
if (readl_poll_timeout(hdmi->base + SUN4I_HDMI_HPD_REG, reg,
|
reg = readl(hdmi->base + SUN4I_HDMI_HPD_REG);
|
||||||
reg & SUN4I_HDMI_HPD_HIGH,
|
if (reg & SUN4I_HDMI_HPD_HIGH) {
|
||||||
0, 500000)) {
|
|
||||||
cec_phys_addr_invalidate(hdmi->cec_adap);
|
cec_phys_addr_invalidate(hdmi->cec_adap);
|
||||||
return connector_status_disconnected;
|
return connector_status_disconnected;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user