mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
drm: bridge: adv7511: Fix ADV7535 HPD enablement
[ Upstream commit3dbc84a595] Existing HPD enablement logic is not compatible with ADV7535 bridge, thus any runtime plug-in of HDMI cable is not working on these bridge designs. Unlike other ADV7511 family of bridges, the ADV7535 require HPD_OVERRIDE bit to set and reset for proper handling of HPD functionality. Fix it. Fixes:8501fe4b14("drm: bridge: adv7511: Add support for ADV7535") Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> Signed-off-by: Robert Foss <robert.foss@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220109172949.168167-1-jagan@amarulasolutions.com Reviewed-by: Robert Foss <robert.foss@linaro.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d9d61beb21
commit
fb2be762a4
|
|
@ -169,6 +169,7 @@
|
||||||
#define ADV7511_PACKET_ENABLE_SPARE2 BIT(1)
|
#define ADV7511_PACKET_ENABLE_SPARE2 BIT(1)
|
||||||
#define ADV7511_PACKET_ENABLE_SPARE1 BIT(0)
|
#define ADV7511_PACKET_ENABLE_SPARE1 BIT(0)
|
||||||
|
|
||||||
|
#define ADV7535_REG_POWER2_HPD_OVERRIDE BIT(6)
|
||||||
#define ADV7511_REG_POWER2_HPD_SRC_MASK 0xc0
|
#define ADV7511_REG_POWER2_HPD_SRC_MASK 0xc0
|
||||||
#define ADV7511_REG_POWER2_HPD_SRC_BOTH 0x00
|
#define ADV7511_REG_POWER2_HPD_SRC_BOTH 0x00
|
||||||
#define ADV7511_REG_POWER2_HPD_SRC_HPD 0x40
|
#define ADV7511_REG_POWER2_HPD_SRC_HPD 0x40
|
||||||
|
|
|
||||||
|
|
@ -351,8 +351,14 @@ static void __adv7511_power_on(struct adv7511 *adv7511)
|
||||||
* from standby or are enabled. When the HPD goes low the adv7511 is
|
* from standby or are enabled. When the HPD goes low the adv7511 is
|
||||||
* reset and the outputs are disabled which might cause the monitor to
|
* reset and the outputs are disabled which might cause the monitor to
|
||||||
* go to standby again. To avoid this we ignore the HPD pin for the
|
* go to standby again. To avoid this we ignore the HPD pin for the
|
||||||
* first few seconds after enabling the output.
|
* first few seconds after enabling the output. On the other hand
|
||||||
|
* adv7535 require to enable HPD Override bit for proper HPD.
|
||||||
*/
|
*/
|
||||||
|
if (adv7511->type == ADV7535)
|
||||||
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
||||||
|
ADV7535_REG_POWER2_HPD_OVERRIDE,
|
||||||
|
ADV7535_REG_POWER2_HPD_OVERRIDE);
|
||||||
|
else
|
||||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
||||||
ADV7511_REG_POWER2_HPD_SRC_MASK,
|
ADV7511_REG_POWER2_HPD_SRC_MASK,
|
||||||
ADV7511_REG_POWER2_HPD_SRC_NONE);
|
ADV7511_REG_POWER2_HPD_SRC_NONE);
|
||||||
|
|
@ -375,6 +381,10 @@ static void adv7511_power_on(struct adv7511 *adv7511)
|
||||||
static void __adv7511_power_off(struct adv7511 *adv7511)
|
static void __adv7511_power_off(struct adv7511 *adv7511)
|
||||||
{
|
{
|
||||||
/* TODO: setup additional power down modes */
|
/* TODO: setup additional power down modes */
|
||||||
|
if (adv7511->type == ADV7535)
|
||||||
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
||||||
|
ADV7535_REG_POWER2_HPD_OVERRIDE, 0);
|
||||||
|
|
||||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
|
||||||
ADV7511_POWER_POWER_DOWN,
|
ADV7511_POWER_POWER_DOWN,
|
||||||
ADV7511_POWER_POWER_DOWN);
|
ADV7511_POWER_POWER_DOWN);
|
||||||
|
|
@ -672,6 +682,11 @@ adv7511_detect(struct adv7511 *adv7511, struct drm_connector *connector)
|
||||||
status = connector_status_disconnected;
|
status = connector_status_disconnected;
|
||||||
} else {
|
} else {
|
||||||
/* Renable HPD sensing */
|
/* Renable HPD sensing */
|
||||||
|
if (adv7511->type == ADV7535)
|
||||||
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
||||||
|
ADV7535_REG_POWER2_HPD_OVERRIDE,
|
||||||
|
ADV7535_REG_POWER2_HPD_OVERRIDE);
|
||||||
|
else
|
||||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
|
||||||
ADV7511_REG_POWER2_HPD_SRC_MASK,
|
ADV7511_REG_POWER2_HPD_SRC_MASK,
|
||||||
ADV7511_REG_POWER2_HPD_SRC_BOTH);
|
ADV7511_REG_POWER2_HPD_SRC_BOTH);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user