All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Biju Das <biju.das.jz@bp.renesas.com>
Cc: "Andrzej Hajda" <andrzej.hajda@intel.com>,
	"Neil Armstrong" <neil.armstrong@linaro.org>,
	"Robert Foss" <rfoss@kernel.org>,
	"David Airlie" <airlied@gmail.com>,
	"Daniel Vetter" <daniel@ffwll.ch>,
	"Jonas Karlman" <jonas@kwiboo.se>,
	"Jernej Skrabec" <jernej.skrabec@gmail.com>,
	"Abhinav Kumar" <quic_abhinavk@quicinc.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Andy Shevchenko" <andy.shevchenko@gmail.com>,
	"Javier Martinez Canillas" <javierm@redhat.com>,
	"Ahmad Fatoum" <a.fatoum@pengutronix.de>,
	"Rob Herring" <robh@kernel.org>,
	"Bogdan Togorean" <bogdan.togorean@analog.com>,
	"Adam Ford" <aford173@gmail.com>,
	dri-devel@lists.freedesktop.org,
	"Geert Uytterhoeven" <geert+renesas@glider.be>,
	linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
Date: Tue, 29 Aug 2023 10:22:23 +0300	[thread overview]
Message-ID: <20230829072223.GK17083@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20230813180512.307418-2-biju.das.jz@bp.renesas.com>

Hi Biju,

Thank you for the patch.

On Sun, Aug 13, 2023 at 07:05:06PM +0100, Biju Das wrote:
> Add struct adv7511_chip_info to handle hw differences between various
> chips rather checking against the 'type' variable in various places.
> Replace 'adv->type'->'info->type' by moving variable 'type' from
> struct adv7511 to struct adv7511_chip_info.
> 
> Replace of_device_get_match_data() and ID lookup for retrieving match data
> with i2c_get_match_data() by adding adv7511_chip_info as device data for
> both OF and ID tables.

As commented in similar patches, please try to explain in the commit
message the reason *why* the change is good and/or needed. It's quite
straightforward for me to understand the change to i2c_get_match_data()
given the discussions we've had recently, but it would be more difficult
without that background information.

> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
>  drivers/gpu/drm/bridge/adv7511/adv7511.h     |  6 +-
>  drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 68 +++++++++++---------
>  drivers/gpu/drm/bridge/adv7511/adv7533.c     |  4 +-
>  3 files changed, 46 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 17445800248d..59e8ef10d72e 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -333,6 +333,10 @@ enum adv7511_type {
>  
>  #define ADV7511_MAX_ADDRS 3
>  
> +struct adv7511_chip_info {
> +	enum adv7511_type type;
> +};
> +
>  struct adv7511 {
>  	struct i2c_client *i2c_main;
>  	struct i2c_client *i2c_edid;
> @@ -377,7 +381,7 @@ struct adv7511 {
>  	u8 num_dsi_lanes;
>  	bool use_timing_gen;
>  
> -	enum adv7511_type type;
> +	const struct adv7511_chip_info *info;
>  	struct platform_device *audio_pdev;
>  
>  	struct cec_adapter *cec_adap;
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 2611afd2c1c1..013d8d640ef4 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->type == ADV7535)
> +	if (adv7511->info->type == ADV7535)
>  		regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE);
> @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
>  	 */
>  	regcache_sync(adv7511->regmap);
>  
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535)
> +	if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
>  		adv7533_dsi_power_on(adv7511);
>  	adv7511->powered = true;
>  }
> @@ -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->type == ADV7535)
> +	if (adv7511->info->type == ADV7535)
>  		regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE, 0);
>  
> @@ -397,7 +397,7 @@ static void __adv7511_power_off(struct adv7511 *adv7511)
>  static void adv7511_power_off(struct adv7511 *adv7511)
>  {
>  	__adv7511_power_off(adv7511);
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535)
> +	if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
>  		adv7533_dsi_power_off(adv7511);
>  	adv7511->powered = false;
>  }
> @@ -682,7 +682,7 @@ adv7511_detect(struct adv7511 *adv7511, struct drm_connector *connector)
>  			status = connector_status_disconnected;
>  	} else {
>  		/* Renable HPD sensing */
> -		if (adv7511->type == ADV7535)
> +		if (adv7511->info->type == ADV7535)
>  			regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  					   ADV7535_REG_POWER2_HPD_OVERRIDE,
>  					   ADV7535_REG_POWER2_HPD_OVERRIDE);
> @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
>  	else
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
>  
> -	if (adv7511->type == ADV7511)
> +	if (adv7511->info->type == ADV7511)
>  		regmap_update_bits(adv7511->regmap, 0xfb,
>  				   0x6, low_refresh_rate << 1);
>  	else
> @@ -921,7 +921,7 @@ static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
>  {
>  	struct adv7511 *adv = bridge_to_adv7511(bridge);
>  
> -	if (adv->type == ADV7533 || adv->type == ADV7535)
> +	if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
>  		return adv7533_mode_valid(adv, mode);
>  	else
>  		return adv7511_mode_valid(adv, mode);
> @@ -1009,7 +1009,7 @@ static int adv7511_init_regulators(struct adv7511 *adv)
>  	unsigned int i;
>  	int ret;
>  
> -	if (adv->type == ADV7511) {
> +	if (adv->info->type == ADV7511) {
>  		supply_names = adv7511_supply_names;
>  		adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
>  	} else {
> @@ -1093,7 +1093,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
>  		goto err;
>  	}
>  
> -	if (adv->type == ADV7533 || adv->type == ADV7535) {
> +	if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
>  		ret = adv7533_patch_cec_registers(adv);
>  		if (ret)
>  			goto err;
> @@ -1192,7 +1192,7 @@ static int adv7511_parse_dt(struct device_node *np,
>  
>  static int adv7511_probe(struct i2c_client *i2c)
>  {
> -	const struct i2c_device_id *id = i2c_client_get_device_id(i2c);
> +	static const struct adv7511_chip_info *info;
>  	struct adv7511_link_config link_config;
>  	struct adv7511 *adv7511;
>  	struct device *dev = &i2c->dev;
> @@ -1206,18 +1206,16 @@ static int adv7511_probe(struct i2c_client *i2c)
>  	if (!adv7511)
>  		return -ENOMEM;
>  
> +	info = i2c_get_match_data(i2c);
> +
>  	adv7511->i2c_main = i2c;
>  	adv7511->powered = false;
>  	adv7511->status = connector_status_disconnected;
> -
> -	if (dev->of_node)
> -		adv7511->type = (enum adv7511_type)of_device_get_match_data(dev);
> -	else
> -		adv7511->type = id->driver_data;
> +	adv7511->info = info;

You can drop the local info variable and write

	adv7511->info = i2c_get_match_data(i2c);

>  
>  	memset(&link_config, 0, sizeof(link_config));
>  
> -	if (adv7511->type == ADV7511)
> +	if (adv7511->info->type == ADV7511)
>  		ret = adv7511_parse_dt(dev->of_node, &link_config);
>  	else
>  		ret = adv7533_parse_dt(dev->of_node, adv7511);
> @@ -1254,7 +1252,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  		goto uninit_regulators;
>  	dev_dbg(dev, "Rev. %d\n", val);
>  
> -	if (adv7511->type == ADV7511)
> +	if (info->type == ADV7511)

And use adv7511->info->type here and below, the same way you use it
above.

With this addressed,

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

>  		ret = regmap_register_patch(adv7511->regmap,
>  					    adv7511_fixed_registers,
>  					    ARRAY_SIZE(adv7511_fixed_registers));
> @@ -1306,7 +1304,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  
>  	i2c_set_clientdata(i2c, adv7511);
>  
> -	if (adv7511->type == ADV7511)
> +	if (info->type == ADV7511)
>  		adv7511_set_link_config(adv7511, &link_config);
>  
>  	ret = adv7511_cec_init(dev, adv7511);
> @@ -1325,7 +1323,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  
>  	adv7511_audio_init(dev, adv7511);
>  
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535) {
> +	if (info->type == ADV7533 || info->type == ADV7535) {
>  		ret = adv7533_attach_dsi(adv7511);
>  		if (ret)
>  			goto err_unregister_audio;
> @@ -1368,22 +1366,34 @@ static void adv7511_remove(struct i2c_client *i2c)
>  	i2c_unregister_device(adv7511->i2c_edid);
>  }
>  
> +static const struct adv7511_chip_info adv7511_chip_info = {
> +	.type = ADV7511
> +};
> +
> +static const struct adv7511_chip_info adv7533_chip_info = {
> +	.type = ADV7533
> +};
> +
> +static const struct adv7511_chip_info adv7535_chip_info = {
> +	.type = ADV7535
> +};
> +
>  static const struct i2c_device_id adv7511_i2c_ids[] = {
> -	{ "adv7511", ADV7511 },
> -	{ "adv7511w", ADV7511 },
> -	{ "adv7513", ADV7511 },
> -	{ "adv7533", ADV7533 },
> -	{ "adv7535", ADV7535 },
> +	{ "adv7511", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7511w", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7513", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7533", (kernel_ulong_t)&adv7533_chip_info },
> +	{ "adv7535", (kernel_ulong_t)&adv7535_chip_info },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(i2c, adv7511_i2c_ids);
>  
>  static const struct of_device_id adv7511_of_ids[] = {
> -	{ .compatible = "adi,adv7511", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7511w", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7513", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7533", .data = (void *)ADV7533 },
> -	{ .compatible = "adi,adv7535", .data = (void *)ADV7535 },
> +	{ .compatible = "adi,adv7511", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7511w", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7513", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7533", .data = &adv7533_chip_info },
> +	{ .compatible = "adi,adv7535", .data = &adv7535_chip_info },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, adv7511_of_ids);
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index 7e3e56441aed..c452c4dc1c3f 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,11 +108,11 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
>  	u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
>  
>  	/* Check max clock for either 7533 or 7535 */
> -	if (mode->clock > (adv->type == ADV7533 ? 80000 : 148500))
> +	if (mode->clock > (adv->info->type == ADV7533 ? 80000 : 148500))
>  		return MODE_CLOCK_HIGH;
>  
>  	/* Check max clock for each lane */
> -	max_lane_freq = (adv->type == ADV7533 ? 800000 : 891000);
> +	max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
>  
>  	if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
>  		return MODE_CLOCK_HIGH;

-- 
Regards,

Laurent Pinchart

WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Biju Das <biju.das.jz@bp.renesas.com>
Cc: "Neil Armstrong" <neil.armstrong@linaro.org>,
	"Robert Foss" <rfoss@kernel.org>,
	"Andrzej Hajda" <andrzej.hajda@intel.com>,
	"Geert Uytterhoeven" <geert+renesas@glider.be>,
	"Jonas Karlman" <jonas@kwiboo.se>,
	"Adam Ford" <aford173@gmail.com>,
	dri-devel@lists.freedesktop.org,
	"Abhinav Kumar" <quic_abhinavk@quicinc.com>,
	"Jernej Skrabec" <jernej.skrabec@gmail.com>,
	"Javier Martinez Canillas" <javierm@redhat.com>,
	linux-renesas-soc@vger.kernel.org,
	"Andy Shevchenko" <andy.shevchenko@gmail.com>,
	"Bogdan Togorean" <bogdan.togorean@analog.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Ahmad Fatoum" <a.fatoum@pengutronix.de>
Subject: Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
Date: Tue, 29 Aug 2023 10:22:23 +0300	[thread overview]
Message-ID: <20230829072223.GK17083@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20230813180512.307418-2-biju.das.jz@bp.renesas.com>

Hi Biju,

Thank you for the patch.

On Sun, Aug 13, 2023 at 07:05:06PM +0100, Biju Das wrote:
> Add struct adv7511_chip_info to handle hw differences between various
> chips rather checking against the 'type' variable in various places.
> Replace 'adv->type'->'info->type' by moving variable 'type' from
> struct adv7511 to struct adv7511_chip_info.
> 
> Replace of_device_get_match_data() and ID lookup for retrieving match data
> with i2c_get_match_data() by adding adv7511_chip_info as device data for
> both OF and ID tables.

As commented in similar patches, please try to explain in the commit
message the reason *why* the change is good and/or needed. It's quite
straightforward for me to understand the change to i2c_get_match_data()
given the discussions we've had recently, but it would be more difficult
without that background information.

> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
>  drivers/gpu/drm/bridge/adv7511/adv7511.h     |  6 +-
>  drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 68 +++++++++++---------
>  drivers/gpu/drm/bridge/adv7511/adv7533.c     |  4 +-
>  3 files changed, 46 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 17445800248d..59e8ef10d72e 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -333,6 +333,10 @@ enum adv7511_type {
>  
>  #define ADV7511_MAX_ADDRS 3
>  
> +struct adv7511_chip_info {
> +	enum adv7511_type type;
> +};
> +
>  struct adv7511 {
>  	struct i2c_client *i2c_main;
>  	struct i2c_client *i2c_edid;
> @@ -377,7 +381,7 @@ struct adv7511 {
>  	u8 num_dsi_lanes;
>  	bool use_timing_gen;
>  
> -	enum adv7511_type type;
> +	const struct adv7511_chip_info *info;
>  	struct platform_device *audio_pdev;
>  
>  	struct cec_adapter *cec_adap;
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 2611afd2c1c1..013d8d640ef4 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->type == ADV7535)
> +	if (adv7511->info->type == ADV7535)
>  		regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE);
> @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
>  	 */
>  	regcache_sync(adv7511->regmap);
>  
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535)
> +	if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
>  		adv7533_dsi_power_on(adv7511);
>  	adv7511->powered = true;
>  }
> @@ -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->type == ADV7535)
> +	if (adv7511->info->type == ADV7535)
>  		regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  				   ADV7535_REG_POWER2_HPD_OVERRIDE, 0);
>  
> @@ -397,7 +397,7 @@ static void __adv7511_power_off(struct adv7511 *adv7511)
>  static void adv7511_power_off(struct adv7511 *adv7511)
>  {
>  	__adv7511_power_off(adv7511);
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535)
> +	if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
>  		adv7533_dsi_power_off(adv7511);
>  	adv7511->powered = false;
>  }
> @@ -682,7 +682,7 @@ adv7511_detect(struct adv7511 *adv7511, struct drm_connector *connector)
>  			status = connector_status_disconnected;
>  	} else {
>  		/* Renable HPD sensing */
> -		if (adv7511->type == ADV7535)
> +		if (adv7511->info->type == ADV7535)
>  			regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
>  					   ADV7535_REG_POWER2_HPD_OVERRIDE,
>  					   ADV7535_REG_POWER2_HPD_OVERRIDE);
> @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
>  	else
>  		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
>  
> -	if (adv7511->type == ADV7511)
> +	if (adv7511->info->type == ADV7511)
>  		regmap_update_bits(adv7511->regmap, 0xfb,
>  				   0x6, low_refresh_rate << 1);
>  	else
> @@ -921,7 +921,7 @@ static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
>  {
>  	struct adv7511 *adv = bridge_to_adv7511(bridge);
>  
> -	if (adv->type == ADV7533 || adv->type == ADV7535)
> +	if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
>  		return adv7533_mode_valid(adv, mode);
>  	else
>  		return adv7511_mode_valid(adv, mode);
> @@ -1009,7 +1009,7 @@ static int adv7511_init_regulators(struct adv7511 *adv)
>  	unsigned int i;
>  	int ret;
>  
> -	if (adv->type == ADV7511) {
> +	if (adv->info->type == ADV7511) {
>  		supply_names = adv7511_supply_names;
>  		adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
>  	} else {
> @@ -1093,7 +1093,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
>  		goto err;
>  	}
>  
> -	if (adv->type == ADV7533 || adv->type == ADV7535) {
> +	if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
>  		ret = adv7533_patch_cec_registers(adv);
>  		if (ret)
>  			goto err;
> @@ -1192,7 +1192,7 @@ static int adv7511_parse_dt(struct device_node *np,
>  
>  static int adv7511_probe(struct i2c_client *i2c)
>  {
> -	const struct i2c_device_id *id = i2c_client_get_device_id(i2c);
> +	static const struct adv7511_chip_info *info;
>  	struct adv7511_link_config link_config;
>  	struct adv7511 *adv7511;
>  	struct device *dev = &i2c->dev;
> @@ -1206,18 +1206,16 @@ static int adv7511_probe(struct i2c_client *i2c)
>  	if (!adv7511)
>  		return -ENOMEM;
>  
> +	info = i2c_get_match_data(i2c);
> +
>  	adv7511->i2c_main = i2c;
>  	adv7511->powered = false;
>  	adv7511->status = connector_status_disconnected;
> -
> -	if (dev->of_node)
> -		adv7511->type = (enum adv7511_type)of_device_get_match_data(dev);
> -	else
> -		adv7511->type = id->driver_data;
> +	adv7511->info = info;

You can drop the local info variable and write

	adv7511->info = i2c_get_match_data(i2c);

>  
>  	memset(&link_config, 0, sizeof(link_config));
>  
> -	if (adv7511->type == ADV7511)
> +	if (adv7511->info->type == ADV7511)
>  		ret = adv7511_parse_dt(dev->of_node, &link_config);
>  	else
>  		ret = adv7533_parse_dt(dev->of_node, adv7511);
> @@ -1254,7 +1252,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  		goto uninit_regulators;
>  	dev_dbg(dev, "Rev. %d\n", val);
>  
> -	if (adv7511->type == ADV7511)
> +	if (info->type == ADV7511)

And use adv7511->info->type here and below, the same way you use it
above.

With this addressed,

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

>  		ret = regmap_register_patch(adv7511->regmap,
>  					    adv7511_fixed_registers,
>  					    ARRAY_SIZE(adv7511_fixed_registers));
> @@ -1306,7 +1304,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  
>  	i2c_set_clientdata(i2c, adv7511);
>  
> -	if (adv7511->type == ADV7511)
> +	if (info->type == ADV7511)
>  		adv7511_set_link_config(adv7511, &link_config);
>  
>  	ret = adv7511_cec_init(dev, adv7511);
> @@ -1325,7 +1323,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>  
>  	adv7511_audio_init(dev, adv7511);
>  
> -	if (adv7511->type == ADV7533 || adv7511->type == ADV7535) {
> +	if (info->type == ADV7533 || info->type == ADV7535) {
>  		ret = adv7533_attach_dsi(adv7511);
>  		if (ret)
>  			goto err_unregister_audio;
> @@ -1368,22 +1366,34 @@ static void adv7511_remove(struct i2c_client *i2c)
>  	i2c_unregister_device(adv7511->i2c_edid);
>  }
>  
> +static const struct adv7511_chip_info adv7511_chip_info = {
> +	.type = ADV7511
> +};
> +
> +static const struct adv7511_chip_info adv7533_chip_info = {
> +	.type = ADV7533
> +};
> +
> +static const struct adv7511_chip_info adv7535_chip_info = {
> +	.type = ADV7535
> +};
> +
>  static const struct i2c_device_id adv7511_i2c_ids[] = {
> -	{ "adv7511", ADV7511 },
> -	{ "adv7511w", ADV7511 },
> -	{ "adv7513", ADV7511 },
> -	{ "adv7533", ADV7533 },
> -	{ "adv7535", ADV7535 },
> +	{ "adv7511", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7511w", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7513", (kernel_ulong_t)&adv7511_chip_info },
> +	{ "adv7533", (kernel_ulong_t)&adv7533_chip_info },
> +	{ "adv7535", (kernel_ulong_t)&adv7535_chip_info },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(i2c, adv7511_i2c_ids);
>  
>  static const struct of_device_id adv7511_of_ids[] = {
> -	{ .compatible = "adi,adv7511", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7511w", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7513", .data = (void *)ADV7511 },
> -	{ .compatible = "adi,adv7533", .data = (void *)ADV7533 },
> -	{ .compatible = "adi,adv7535", .data = (void *)ADV7535 },
> +	{ .compatible = "adi,adv7511", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7511w", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7513", .data = &adv7511_chip_info },
> +	{ .compatible = "adi,adv7533", .data = &adv7533_chip_info },
> +	{ .compatible = "adi,adv7535", .data = &adv7535_chip_info },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, adv7511_of_ids);
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index 7e3e56441aed..c452c4dc1c3f 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,11 +108,11 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
>  	u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
>  
>  	/* Check max clock for either 7533 or 7535 */
> -	if (mode->clock > (adv->type == ADV7533 ? 80000 : 148500))
> +	if (mode->clock > (adv->info->type == ADV7533 ? 80000 : 148500))
>  		return MODE_CLOCK_HIGH;
>  
>  	/* Check max clock for each lane */
> -	max_lane_freq = (adv->type == ADV7533 ? 800000 : 891000);
> +	max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
>  
>  	if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
>  		return MODE_CLOCK_HIGH;

-- 
Regards,

Laurent Pinchart

  parent reply	other threads:[~2023-08-29  7:23 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-13 18:05 [PATCH 0/7] ADV7511 driver enhancements Biju Das
2023-08-13 18:05 ` Biju Das
2023-08-13 18:05 ` [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data() Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-18 14:49   ` Adam Ford
2023-08-18 14:49     ` Adam Ford
2023-08-29  7:22   ` Laurent Pinchart [this message]
2023-08-29  7:22     ` Laurent Pinchart
2023-08-29 14:00     ` Biju Das
2023-08-29 14:00       ` Biju Das
2023-08-13 18:05 ` [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-28 22:36   ` Adam Ford
2023-08-28 22:36     ` Adam Ford
2023-08-29  7:23   ` Laurent Pinchart
2023-08-29  7:23     ` Laurent Pinchart
2023-08-29 14:01     ` Biju Das
2023-08-29 14:01       ` Biju Das
2023-08-13 18:05 ` [PATCH 3/7] drm: adv7511: Add max_lane_freq " Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-29  7:25   ` Laurent Pinchart
2023-08-29  7:25     ` Laurent Pinchart
2023-08-29 14:05     ` Biju Das
2023-08-29 14:05       ` Biju Das
2023-08-13 18:05 ` [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables " Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-29  7:26   ` Laurent Pinchart
2023-08-29  7:26     ` Laurent Pinchart
2023-08-29 14:06     ` Biju Das
2023-08-29 14:06       ` Biju Das
2023-08-13 18:05 ` [PATCH 5/7] drm: adv7511: Add has_dsi feature bit " Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-29  7:30   ` Laurent Pinchart
2023-08-29  7:30     ` Laurent Pinchart
2023-08-29 14:19     ` Biju Das
2023-08-29 14:19       ` Biju Das
2023-08-29 15:35       ` Laurent Pinchart
2023-08-29 15:35         ` Laurent Pinchart
2023-08-29 15:42         ` Biju Das
2023-08-29 15:42           ` Biju Das
2023-08-30  8:22           ` Laurent Pinchart
2023-08-30  8:22             ` Laurent Pinchart
2023-08-13 18:05 ` [PATCH 6/7] drm: adv7511: Add link_config " Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-29  7:34   ` Laurent Pinchart
2023-08-29  7:34     ` Laurent Pinchart
2023-08-29 14:20     ` Biju Das
2023-08-29 14:20       ` Biju Das
2023-08-13 18:05 ` [PATCH 7/7] drm: adv7511: Add hpd_override_enable " Biju Das
2023-08-13 18:05   ` Biju Das
2023-08-18 12:41   ` Adam Ford
2023-08-18 12:41     ` Adam Ford
2023-08-18 13:34     ` Biju Das
2023-08-18 13:34       ` Biju Das
2023-08-18 13:37       ` Adam Ford
2023-08-18 13:37         ` Adam Ford
2023-08-18 13:44         ` Biju Das
2023-08-18 13:44           ` Biju Das
2023-08-29  7:36     ` Laurent Pinchart
2023-08-29  7:36       ` Laurent Pinchart
2023-08-29 14:22       ` Biju Das
2023-08-29 14:22         ` Biju Das
2023-08-18 13:56 ` [PATCH 0/7] ADV7511 driver enhancements Fabio Estevam
2023-08-18 13:56   ` Fabio Estevam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230829072223.GK17083@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=a.fatoum@pengutronix.de \
    --cc=aford173@gmail.com \
    --cc=airlied@gmail.com \
    --cc=andrzej.hajda@intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=bogdan.togorean@analog.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=geert+renesas@glider.be \
    --cc=javierm@redhat.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=quic_abhinavk@quicinc.com \
    --cc=rfoss@kernel.org \
    --cc=robh@kernel.org \
    --cc=u.kleine-koenig@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.