From patchwork Sun Aug 13 18:05:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Biju Das X-Patchwork-Id: 13352205 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 10224C001DB for ; Sun, 13 Aug 2023 18:06:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6BAFE10E0F4; Sun, 13 Aug 2023 18:06:09 +0000 (UTC) Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by gabe.freedesktop.org (Postfix) with ESMTP id B083910E0F4 for ; Sun, 13 Aug 2023 18:06:06 +0000 (UTC) X-IronPort-AV: E=Sophos;i="6.01,170,1684767600"; d="scan'208";a="172836586" Received: from unknown (HELO relmlir6.idc.renesas.com) ([10.200.68.152]) by relmlie5.idc.renesas.com with ESMTP; 14 Aug 2023 03:06:06 +0900 Received: from localhost.localdomain (unknown [10.226.92.13]) by relmlir6.idc.renesas.com (Postfix) with ESMTP id 4109A405E63A; Mon, 14 Aug 2023 03:05:59 +0900 (JST) From: Biju Das To: Andrzej Hajda , Neil Armstrong , Robert Foss , David Airlie , Daniel Vetter Subject: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info Date: Sun, 13 Aug 2023 19:05:12 +0100 Message-Id: <20230813180512.307418-8-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230813180512.307418-1-biju.das.jz@bp.renesas.com> References: <20230813180512.307418-1-biju.das.jz@bp.renesas.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ahmad Fatoum , Geert Uytterhoeven , Jonas Karlman , dri-devel@lists.freedesktop.org, Abhinav Kumar , Jernej Skrabec , Javier Martinez Canillas , linux-renesas-soc@vger.kernel.org, Andy Shevchenko , Laurent Pinchart , =?utf-8?q?Uwe_Kleine-?= =?utf-8?q?K=C3=B6nig?= , Biju Das , Adam Ford , Bogdan Togorean Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" As per spec, it is allowed to pulse the HPD signal to indicate that the EDID information has changed. Some monitors do this when they wake up 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 go to standby again. To avoid this we ignore the HPD pin for the first few seconds after enabling the output. On the other hand, adv7535 require to enable HPD Override bit for proper HPD. Add hpd_override_enable feature bit to struct adv7511_chip_info to handle this scenario. While at it, drop the enum adv7511_type as it is unused. Signed-off-by: Biju Das --- drivers/gpu/drm/bridge/adv7511/adv7511.h | 8 +------- drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 12 +++++------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h index 627531f48f84..c523ac4c9bc8 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h @@ -325,22 +325,16 @@ struct adv7511_video_config { struct hdmi_avi_infoframe avi_infoframe; }; -enum adv7511_type { - ADV7511, - ADV7533, - ADV7535, -}; - #define ADV7511_MAX_ADDRS 3 struct adv7511_chip_info { - enum adv7511_type type; unsigned long max_mode_clock; unsigned long max_lane_freq; const char * const *supply_names; unsigned int num_supplies; unsigned has_dsi:1; unsigned link_config:1; + unsigned hpd_override_enable:1; }; struct adv7511 { diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index 6974c267b1d5..7b06a0a21685 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -354,7 +354,7 @@ static void __adv7511_power_on(struct adv7511 *adv7511) * first few seconds after enabling the output. On the other hand * adv7535 require to enable HPD Override bit for proper HPD. */ - if (adv7511->info->type == ADV7535) + if (adv7511->info->hpd_override_enable) regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2, ADV7535_REG_POWER2_HPD_OVERRIDE, ADV7535_REG_POWER2_HPD_OVERRIDE); @@ -381,7 +381,7 @@ static void adv7511_power_on(struct adv7511 *adv7511) static void __adv7511_power_off(struct adv7511 *adv7511) { /* TODO: setup additional power down modes */ - if (adv7511->info->type == ADV7535) + if (adv7511->info->hpd_override_enable) regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2, ADV7535_REG_POWER2_HPD_OVERRIDE, 0); @@ -682,7 +682,7 @@ adv7511_detect(struct adv7511 *adv7511, struct drm_connector *connector) status = connector_status_disconnected; } else { /* Renable HPD sensing */ - if (adv7511->info->type == ADV7535) + if (adv7511->info->hpd_override_enable) regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2, ADV7535_REG_POWER2_HPD_OVERRIDE, ADV7535_REG_POWER2_HPD_OVERRIDE); @@ -1360,14 +1360,12 @@ static void adv7511_remove(struct i2c_client *i2c) } static const struct adv7511_chip_info adv7511_chip_info = { - .type = ADV7511, .supply_names = adv7511_supply_names, .num_supplies = ARRAY_SIZE(adv7511_supply_names), .link_config = 1 }; static const struct adv7511_chip_info adv7533_chip_info = { - .type = ADV7533, .max_mode_clock = 80000, .max_lane_freq = 800000, .supply_names = adv7533_supply_names, @@ -1376,12 +1374,12 @@ static const struct adv7511_chip_info adv7533_chip_info = { }; static const struct adv7511_chip_info adv7535_chip_info = { - .type = ADV7535, .max_mode_clock = 148500, .max_lane_freq = 891000, .supply_names = adv7533_supply_names, .num_supplies = ARRAY_SIZE(adv7533_supply_names), - .has_dsi = 1 + .has_dsi = 1, + .hpd_override_enable = 1 }; static const struct i2c_device_id adv7511_i2c_ids[] = {