| From 8e2d3f0fc3531d4d30fa925f4843ee5c5700b726 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 12 Jun 2022 16:48:53 +0200 |
| Subject: drm: bridge: adv7511: fix CEC power down control register offset |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Alvin Šipraga <alsi@bang-olufsen.dk> |
| |
| [ Upstream commit 1d22b6033ea113a4c3850dfa2c0770885c81aec8 ] |
| |
| The ADV7511_REG_CEC_CTRL = 0xE2 register is part of the main register |
| map - not the CEC register map. As such, we shouldn't apply an offset to |
| the register address. Doing so will cause us to address a bogus register |
| for chips with a CEC register map offset (e.g. ADV7533). |
| |
| Fixes: 3b1b975003e4 ("drm: adv7511/33: add HDMI CEC support") |
| Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk> |
| Reviewed-by: Robert Foss <robert.foss@linaro.org> |
| Signed-off-by: Robert Foss <robert.foss@linaro.org> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20220612144854.2223873-2-alvin@pqrs.dk |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/bridge/adv7511/adv7511.h | 5 +---- |
| drivers/gpu/drm/bridge/adv7511/adv7511_cec.c | 4 ++-- |
| 2 files changed, 3 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h |
| index 1b00dfda6e0d..aeeb09a27202 100644 |
| --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h |
| +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h |
| @@ -387,10 +387,7 @@ void adv7511_cec_irq_process(struct adv7511 *adv7511, unsigned int irq1); |
| #else |
| static inline int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) |
| { |
| - unsigned int offset = adv7511->type == ADV7533 ? |
| - ADV7533_REG_CEC_OFFSET : 0; |
| - |
| - regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, |
| + regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL, |
| ADV7511_CEC_CTRL_POWER_DOWN); |
| return 0; |
| } |
| diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c b/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c |
| index a20a45c0b353..ddd1305b82b2 100644 |
| --- a/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c |
| +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_cec.c |
| @@ -316,7 +316,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) |
| goto err_cec_alloc; |
| } |
| |
| - regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, 0); |
| + regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL, 0); |
| /* cec soft reset */ |
| regmap_write(adv7511->regmap_cec, |
| ADV7511_REG_CEC_SOFT_RESET + offset, 0x01); |
| @@ -343,7 +343,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511) |
| dev_info(dev, "Initializing CEC failed with error %d, disabling CEC\n", |
| ret); |
| err_cec_parse_dt: |
| - regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, |
| + regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL, |
| ADV7511_CEC_CTRL_POWER_DOWN); |
| return ret == -EPROBE_DEFER ? ret : 0; |
| } |
| -- |
| 2.35.1 |
| |