* [PATCH 0/7] ADV7511 driver enhancements
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
This patch series aims to improve ADV7511 driver by adding
feature bits and data instead of comparing enum adv7511_type for
various hardware differences between ADV7511, ADV7533 and ADV7535.
This patch series tested with[1] on RZ/G2L SMARC EVK which embeds
ADV7535.
[1] https://patchwork.kernel.org/project/linux-renesas-soc/list/?series=762260
Biju Das (7):
drm: adv7511: Add struct adv7511_chip_info and use
i2c_get_match_data()
drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
drm: adv7511: Add supply_names and num_supplies variables to struct
adv7511_chip_info
drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
drm: adv7511: Add hpd_override_enable feature bit to struct
adv7511_chip_info
drivers/gpu/drm/bridge/adv7511/adv7511.h | 19 ++--
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 98 +++++++++++---------
drivers/gpu/drm/bridge/adv7511/adv7533.c | 7 +-
3 files changed, 69 insertions(+), 55 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 64+ messages in thread* [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
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.
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;
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)
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;
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
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.
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;
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)
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;
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
2023-08-13 18:05 ` Biju Das
@ 2023-08-18 14:49 ` Adam Ford
-1 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 14:49 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel, Geert Uytterhoeven, linux-renesas-soc
On Sun, Aug 13, 2023 at 1:05 PM Biju Das <biju.das.jz@bp.renesas.com> 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.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Adam Ford <aford173@gmail.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;
>
> 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)
> 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;
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
@ 2023-08-18 14:49 ` Adam Ford
0 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 14:49 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, dri-devel, Abhinav Kumar, Jernej Skrabec,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Laurent Pinchart, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
On Sun, Aug 13, 2023 at 1:05 PM Biju Das <biju.das.jz@bp.renesas.com> 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.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Adam Ford <aford173@gmail.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;
>
> 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)
> 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;
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:22 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:22 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
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
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
@ 2023-08-29 7:22 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:22 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
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
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
2023-08-29 7:22 ` Laurent Pinchart
@ 2023-08-29 14:00 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:00 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use
> i2c_get_match_data()
>
> 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.
Ok will add the info. Basically it simplifies the probe() by
replacing of_device_get_match_data() and ID lookup for retrieving
Match data.
>
> > 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
OK.
>
> 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.
OK.
Cheers,
Biju
>
> 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
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use i2c_get_match_data()
@ 2023-08-29 14:00 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:00 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 1/7] drm: adv7511: Add struct adv7511_chip_info and use
> i2c_get_match_data()
>
> 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.
Ok will add the info. Basically it simplifies the probe() by
replacing of_device_get_match_data() and ID lookup for retrieving
Match data.
>
> > 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
OK.
>
> 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.
OK.
Cheers,
Biju
>
> 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
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
handle this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 59e8ef10d72e..f8190442ffca 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -335,6 +335,7 @@ enum adv7511_type {
struct adv7511_chip_info {
enum adv7511_type type;
+ unsigned long max_mode_clock;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 013d8d640ef4..193b2d5bc7e6 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
};
static const struct adv7511_chip_info adv7533_chip_info = {
- .type = ADV7533
+ .type = ADV7533,
+ .max_mode_clock = 80000
};
static const struct adv7511_chip_info adv7535_chip_info = {
- .type = ADV7535
+ .type = ADV7535,
+ .max_mode_clock = 148500
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
index c452c4dc1c3f..e92b27e0afd1 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
@@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
+ if (mode->clock > adv->info->max_mode_clock)
return MODE_CLOCK_HIGH;
/* Check max clock for each lane */
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
handle this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 59e8ef10d72e..f8190442ffca 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -335,6 +335,7 @@ enum adv7511_type {
struct adv7511_chip_info {
enum adv7511_type type;
+ unsigned long max_mode_clock;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 013d8d640ef4..193b2d5bc7e6 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
};
static const struct adv7511_chip_info adv7533_chip_info = {
- .type = ADV7533
+ .type = ADV7533,
+ .max_mode_clock = 80000
};
static const struct adv7511_chip_info adv7535_chip_info = {
- .type = ADV7535
+ .type = ADV7535,
+ .max_mode_clock = 148500
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
index c452c4dc1c3f..e92b27e0afd1 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
@@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
+ if (mode->clock > adv->info->max_mode_clock)
return MODE_CLOCK_HIGH;
/* Check max clock for each lane */
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-28 22:36 ` Adam Ford
-1 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-28 22:36 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel, Geert Uytterhoeven, linux-renesas-soc
On Sun, Aug 13, 2023 at 1:05 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
> for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
For the series:
Reviewed-by: Adam Ford <aford173@gmail.com>
Tested-by: Adam Ford <aford173@gmail.com> #imx8mm-beacon
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 59e8ef10d72e..f8190442ffca 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -335,6 +335,7 @@ enum adv7511_type {
>
> struct adv7511_chip_info {
> enum adv7511_type type;
> + unsigned long max_mode_clock;
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 013d8d640ef4..193b2d5bc7e6 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> - .type = ADV7533
> + .type = ADV7533,
> + .max_mode_clock = 80000
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> - .type = ADV7535
> + .type = ADV7535,
> + .max_mode_clock = 148500
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index c452c4dc1c3f..e92b27e0afd1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> + if (mode->clock > adv->info->max_mode_clock)
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
@ 2023-08-28 22:36 ` Adam Ford
0 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-28 22:36 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, dri-devel, Abhinav Kumar, Jernej Skrabec,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Laurent Pinchart, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
On Sun, Aug 13, 2023 at 1:05 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
> for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
For the series:
Reviewed-by: Adam Ford <aford173@gmail.com>
Tested-by: Adam Ford <aford173@gmail.com> #imx8mm-beacon
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 59e8ef10d72e..f8190442ffca 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -335,6 +335,7 @@ enum adv7511_type {
>
> struct adv7511_chip_info {
> enum adv7511_type type;
> + unsigned long max_mode_clock;
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 013d8d640ef4..193b2d5bc7e6 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> - .type = ADV7533
> + .type = ADV7533,
> + .max_mode_clock = 80000
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> - .type = ADV7535
> + .type = ADV7535,
> + .max_mode_clock = 148500
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index c452c4dc1c3f..e92b27e0afd1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> + if (mode->clock > adv->info->max_mode_clock)
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:23 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:23 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:07PM +0100, Biju Das wrote:
> The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
> for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 59e8ef10d72e..f8190442ffca 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -335,6 +335,7 @@ enum adv7511_type {
>
> struct adv7511_chip_info {
> enum adv7511_type type;
> + unsigned long max_mode_clock;
unsigned int is enough as the clock is expressed in kHz. To make it
extra clear, you could also name the field max_mode_clock_khz.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 013d8d640ef4..193b2d5bc7e6 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> - .type = ADV7533
> + .type = ADV7533,
> + .max_mode_clock = 80000
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> - .type = ADV7535
> + .type = ADV7535,
> + .max_mode_clock = 148500
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index c452c4dc1c3f..e92b27e0afd1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> + if (mode->clock > adv->info->max_mode_clock)
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
@ 2023-08-29 7:23 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:23 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:07PM +0100, Biju Das wrote:
> The ADV7533 supports a maximum pixel clock of 80MHz whereas it is 148.5MHz
> for ADV7535. Add max_mode_clock variable to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 59e8ef10d72e..f8190442ffca 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -335,6 +335,7 @@ enum adv7511_type {
>
> struct adv7511_chip_info {
> enum adv7511_type type;
> + unsigned long max_mode_clock;
unsigned int is enough as the clock is expressed in kHz. To make it
extra clear, you could also name the field max_mode_clock_khz.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 013d8d640ef4..193b2d5bc7e6 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info adv7511_chip_info = {
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> - .type = ADV7533
> + .type = ADV7533,
> + .max_mode_clock = 80000
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> - .type = ADV7535
> + .type = ADV7535,
> + .max_mode_clock = 148500
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index c452c4dc1c3f..e92b27e0afd1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> + if (mode->clock > adv->info->max_mode_clock)
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
2023-08-29 7:23 ` Laurent Pinchart
@ 2023-08-29 14:01 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:01 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to
> struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:07PM +0100, Biju Das wrote:
> > The ADV7533 supports a maximum pixel clock of 80MHz whereas it is
> > 148.5MHz for ADV7535. Add max_mode_clock variable to struct
> > adv7511_chip_info to handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> > drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> > 3 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 59e8ef10d72e..f8190442ffca 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -335,6 +335,7 @@ enum adv7511_type {
> >
> > struct adv7511_chip_info {
> > enum adv7511_type type;
> > + unsigned long max_mode_clock;
>
> unsigned int is enough as the clock is expressed in kHz. To make it extra
> clear, you could also name the field max_mode_clock_khz.
Agreed.
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 013d8d640ef4..193b2d5bc7e6 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info
> > adv7511_chip_info = { };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > - .type = ADV7533
> > + .type = ADV7533,
> > + .max_mode_clock = 80000
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = {
> > - .type = ADV7535
> > + .type = ADV7535,
> > + .max_mode_clock = 148500
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = { diff --git
> > a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > index c452c4dc1c3f..e92b27e0afd1 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> > + if (mode->clock > adv->info->max_mode_clock)
> > return MODE_CLOCK_HIGH;
> >
> > /* Check max clock for each lane */
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to struct adv7511_chip_info
@ 2023-08-29 14:01 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:01 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 2/7] drm: adv7511: Add max_mode_clock variable to
> struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:07PM +0100, Biju Das wrote:
> > The ADV7533 supports a maximum pixel clock of 80MHz whereas it is
> > 148.5MHz for ADV7535. Add max_mode_clock variable to struct
> > adv7511_chip_info to handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> > drivers/gpu/drm/bridge/adv7511/adv7533.c | 2 +-
> > 3 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 59e8ef10d72e..f8190442ffca 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -335,6 +335,7 @@ enum adv7511_type {
> >
> > struct adv7511_chip_info {
> > enum adv7511_type type;
> > + unsigned long max_mode_clock;
>
> unsigned int is enough as the clock is expressed in kHz. To make it extra
> clear, you could also name the field max_mode_clock_khz.
Agreed.
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 013d8d640ef4..193b2d5bc7e6 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1371,11 +1371,13 @@ static const struct adv7511_chip_info
> > adv7511_chip_info = { };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > - .type = ADV7533
> > + .type = ADV7533,
> > + .max_mode_clock = 80000
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = {
> > - .type = ADV7535
> > + .type = ADV7535,
> > + .max_mode_clock = 148500
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = { diff --git
> > a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > index c452c4dc1c3f..e92b27e0afd1 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > @@ -108,7 +108,7 @@ 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->info->type == ADV7533 ? 80000 : 148500))
> > + if (mode->clock > adv->info->max_mode_clock)
> > return MODE_CLOCK_HIGH;
> >
> > /* Check max clock for each lane */
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
The ADV7533 supports a maximum lane clock of 800MHz whereas it is 891MHz
for ADV7535. Add max_lane_freq variable to struct adv7511_chip_info to
handle this difference.
While at it, drop the unused local variable max_lane_freq.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index f8190442ffca..0e2c721a856f 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -336,6 +336,7 @@ enum adv7511_type {
struct adv7511_chip_info {
enum adv7511_type type;
unsigned long max_mode_clock;
+ unsigned long max_lane_freq;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 193b2d5bc7e6..29e087e6d721 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info adv7511_chip_info = {
static const struct adv7511_chip_info adv7533_chip_info = {
.type = ADV7533,
- .max_mode_clock = 80000
+ .max_mode_clock = 80000,
+ .max_lane_freq = 800000,
};
static const struct adv7511_chip_info adv7535_chip_info = {
.type = ADV7535,
- .max_mode_clock = 148500
+ .max_mode_clock = 148500,
+ .max_lane_freq = 891000,
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
index e92b27e0afd1..c1e744d4f2b1 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
@@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
const struct drm_display_mode *mode)
{
- unsigned long max_lane_freq;
struct mipi_dsi_device *dsi = adv->dsi;
u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
@@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
return MODE_CLOCK_HIGH;
/* Check max clock for each lane */
- max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
-
- if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
+ if (mode->clock * bpp > adv->info->max_lane_freq * adv->num_dsi_lanes)
return MODE_CLOCK_HIGH;
return MODE_OK;
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
The ADV7533 supports a maximum lane clock of 800MHz whereas it is 891MHz
for ADV7535. Add max_lane_freq variable to struct adv7511_chip_info to
handle this difference.
While at it, drop the unused local variable max_lane_freq.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index f8190442ffca..0e2c721a856f 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -336,6 +336,7 @@ enum adv7511_type {
struct adv7511_chip_info {
enum adv7511_type type;
unsigned long max_mode_clock;
+ unsigned long max_lane_freq;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 193b2d5bc7e6..29e087e6d721 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info adv7511_chip_info = {
static const struct adv7511_chip_info adv7533_chip_info = {
.type = ADV7533,
- .max_mode_clock = 80000
+ .max_mode_clock = 80000,
+ .max_lane_freq = 800000,
};
static const struct adv7511_chip_info adv7535_chip_info = {
.type = ADV7535,
- .max_mode_clock = 148500
+ .max_mode_clock = 148500,
+ .max_lane_freq = 891000,
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
index e92b27e0afd1..c1e744d4f2b1 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
@@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
const struct drm_display_mode *mode)
{
- unsigned long max_lane_freq;
struct mipi_dsi_device *dsi = adv->dsi;
u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
@@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
return MODE_CLOCK_HIGH;
/* Check max clock for each lane */
- max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
-
- if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
+ if (mode->clock * bpp > adv->info->max_lane_freq * adv->num_dsi_lanes)
return MODE_CLOCK_HIGH;
return MODE_OK;
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:25 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:25 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:08PM +0100, Biju Das wrote:
> The ADV7533 supports a maximum lane clock of 800MHz whereas it is 891MHz
> for ADV7535. Add max_lane_freq variable to struct adv7511_chip_info to
> handle this difference.
>
> While at it, drop the unused local variable max_lane_freq.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index f8190442ffca..0e2c721a856f 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -336,6 +336,7 @@ enum adv7511_type {
> struct adv7511_chip_info {
> enum adv7511_type type;
> unsigned long max_mode_clock;
> + unsigned long max_lane_freq;
Same comment as for patch 2/7, you could name the field
max_lane_freq_khz. An unsigned int may be enough too if the calculation
below doesn't overflow.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 193b2d5bc7e6..29e087e6d721 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info adv7511_chip_info = {
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> .type = ADV7533,
> - .max_mode_clock = 80000
> + .max_mode_clock = 80000,
> + .max_lane_freq = 800000,
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> .type = ADV7535,
> - .max_mode_clock = 148500
> + .max_mode_clock = 148500,
> + .max_lane_freq = 891000,
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index e92b27e0afd1..c1e744d4f2b1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
> enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> const struct drm_display_mode *mode)
> {
> - unsigned long max_lane_freq;
> struct mipi_dsi_device *dsi = adv->dsi;
> u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
>
> @@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
> - max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
> -
> - if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
> + if (mode->clock * bpp > adv->info->max_lane_freq * adv->num_dsi_lanes)
> return MODE_CLOCK_HIGH;
>
> return MODE_OK;
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
@ 2023-08-29 7:25 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:25 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:08PM +0100, Biju Das wrote:
> The ADV7533 supports a maximum lane clock of 800MHz whereas it is 891MHz
> for ADV7535. Add max_lane_freq variable to struct adv7511_chip_info to
> handle this difference.
>
> While at it, drop the unused local variable max_lane_freq.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index f8190442ffca..0e2c721a856f 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -336,6 +336,7 @@ enum adv7511_type {
> struct adv7511_chip_info {
> enum adv7511_type type;
> unsigned long max_mode_clock;
> + unsigned long max_lane_freq;
Same comment as for patch 2/7, you could name the field
max_lane_freq_khz. An unsigned int may be enough too if the calculation
below doesn't overflow.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 193b2d5bc7e6..29e087e6d721 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info adv7511_chip_info = {
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> .type = ADV7533,
> - .max_mode_clock = 80000
> + .max_mode_clock = 80000,
> + .max_lane_freq = 800000,
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> .type = ADV7535,
> - .max_mode_clock = 148500
> + .max_mode_clock = 148500,
> + .max_lane_freq = 891000,
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> index e92b27e0afd1..c1e744d4f2b1 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> @@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
> enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> const struct drm_display_mode *mode)
> {
> - unsigned long max_lane_freq;
> struct mipi_dsi_device *dsi = adv->dsi;
> u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
>
> @@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> return MODE_CLOCK_HIGH;
>
> /* Check max clock for each lane */
> - max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
> -
> - if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
> + if (mode->clock * bpp > adv->info->max_lane_freq * adv->num_dsi_lanes)
> return MODE_CLOCK_HIGH;
>
> return MODE_OK;
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
2023-08-29 7:25 ` Laurent Pinchart
@ 2023-08-29 14:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:05 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent,
> Subject: Re: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct
> adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:08PM +0100, Biju Das wrote:
> > The ADV7533 supports a maximum lane clock of 800MHz whereas it is
> > 891MHz for ADV7535. Add max_lane_freq variable to struct
> > adv7511_chip_info to handle this difference.
> >
> > While at it, drop the unused local variable max_lane_freq.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> > drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
> > 3 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index f8190442ffca..0e2c721a856f 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -336,6 +336,7 @@ enum adv7511_type { struct adv7511_chip_info {
> > enum adv7511_type type;
> > unsigned long max_mode_clock;
> > + unsigned long max_lane_freq;
>
> Same comment as for patch 2/7, you could name the field max_lane_freq_khz.
> An unsigned int may be enough too if the calculation below doesn't
> overflow.
Agreed.
2 power 32 = 4,294,967,295 is large value compared to below calculation to trigger an overflow.
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 193b2d5bc7e6..29e087e6d721 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info
> > adv7511_chip_info = {
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > .type = ADV7533,
> > - .max_mode_clock = 80000
> > + .max_mode_clock = 80000,
> > + .max_lane_freq = 800000,
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = {
> > .type = ADV7535,
> > - .max_mode_clock = 148500
> > + .max_mode_clock = 148500,
> > + .max_lane_freq = 891000,
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = { diff --git
> > a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > index e92b27e0afd1..c1e744d4f2b1 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > @@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
> > enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> > const struct drm_display_mode *mode) {
> > - unsigned long max_lane_freq;
> > struct mipi_dsi_device *dsi = adv->dsi;
> > u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
> >
> > @@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct
> adv7511 *adv,
> > return MODE_CLOCK_HIGH;
> >
> > /* Check max clock for each lane */
> > - max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
> > -
> > - if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
> > + if (mode->clock * bpp > adv->info->max_lane_freq *
> > +adv->num_dsi_lanes)
> > return MODE_CLOCK_HIGH;
> >
> > return MODE_OK;
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct adv7511_chip_info
@ 2023-08-29 14:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:05 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent,
> Subject: Re: [PATCH 3/7] drm: adv7511: Add max_lane_freq variable to struct
> adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:08PM +0100, Biju Das wrote:
> > The ADV7533 supports a maximum lane clock of 800MHz whereas it is
> > 891MHz for ADV7535. Add max_lane_freq variable to struct
> > adv7511_chip_info to handle this difference.
> >
> > While at it, drop the unused local variable max_lane_freq.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 6 ++++--
> > drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 +----
> > 3 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index f8190442ffca..0e2c721a856f 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -336,6 +336,7 @@ enum adv7511_type { struct adv7511_chip_info {
> > enum adv7511_type type;
> > unsigned long max_mode_clock;
> > + unsigned long max_lane_freq;
>
> Same comment as for patch 2/7, you could name the field max_lane_freq_khz.
> An unsigned int may be enough too if the calculation below doesn't
> overflow.
Agreed.
2 power 32 = 4,294,967,295 is large value compared to below calculation to trigger an overflow.
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 193b2d5bc7e6..29e087e6d721 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1372,12 +1372,14 @@ static const struct adv7511_chip_info
> > adv7511_chip_info = {
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > .type = ADV7533,
> > - .max_mode_clock = 80000
> > + .max_mode_clock = 80000,
> > + .max_lane_freq = 800000,
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = {
> > .type = ADV7535,
> > - .max_mode_clock = 148500
> > + .max_mode_clock = 148500,
> > + .max_lane_freq = 891000,
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = { diff --git
> > a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > index e92b27e0afd1..c1e744d4f2b1 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c
> > @@ -103,7 +103,6 @@ void adv7533_dsi_power_off(struct adv7511 *adv)
> > enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,
> > const struct drm_display_mode *mode) {
> > - unsigned long max_lane_freq;
> > struct mipi_dsi_device *dsi = adv->dsi;
> > u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
> >
> > @@ -112,9 +111,7 @@ enum drm_mode_status adv7533_mode_valid(struct
> adv7511 *adv,
> > return MODE_CLOCK_HIGH;
> >
> > /* Check max clock for each lane */
> > - max_lane_freq = (adv->info->type == ADV7533 ? 800000 : 891000);
> > -
> > - if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes)
> > + if (mode->clock * bpp > adv->info->max_lane_freq *
> > +adv->num_dsi_lanes)
> > return MODE_CLOCK_HIGH;
> >
> > return MODE_OK;
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}. Add
supply_names and num_supplies variables to struct adv7511_chip_info to
handle this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29 ++++++++++----------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 0e2c721a856f..b29d11cae932 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -337,6 +337,8 @@ 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;
};
struct adv7511 {
@@ -375,7 +377,6 @@ struct adv7511 {
struct gpio_desc *gpio_pd;
struct regulator_bulk_data *supplies;
- unsigned int num_supplies;
/* ADV7533 DSI RX related params */
struct device_node *host_node;
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 29e087e6d721..f6f15c1b0882 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1004,37 +1004,30 @@ static const char * const adv7533_supply_names[] = {
static int adv7511_init_regulators(struct adv7511 *adv)
{
+ const char * const *supply_names = adv->info->supply_names;
+ unsigned int num_supplies = adv->info->num_supplies;
struct device *dev = &adv->i2c_main->dev;
- const char * const *supply_names;
unsigned int i;
int ret;
- if (adv->info->type == ADV7511) {
- supply_names = adv7511_supply_names;
- adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
- } else {
- supply_names = adv7533_supply_names;
- adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
- }
-
- adv->supplies = devm_kcalloc(dev, adv->num_supplies,
+ adv->supplies = devm_kcalloc(dev, num_supplies,
sizeof(*adv->supplies), GFP_KERNEL);
if (!adv->supplies)
return -ENOMEM;
- for (i = 0; i < adv->num_supplies; i++)
+ for (i = 0; i < num_supplies; i++)
adv->supplies[i].supply = supply_names[i];
- ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
+ ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
if (ret)
return ret;
- return regulator_bulk_enable(adv->num_supplies, adv->supplies);
+ return regulator_bulk_enable(num_supplies, adv->supplies);
}
static void adv7511_uninit_regulators(struct adv7511 *adv)
{
- regulator_bulk_disable(adv->num_supplies, adv->supplies);
+ regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
}
static bool adv7511_cec_register_volatile(struct device *dev, unsigned int reg)
@@ -1367,19 +1360,25 @@ static void adv7511_remove(struct i2c_client *i2c)
}
static const struct adv7511_chip_info adv7511_chip_info = {
- .type = ADV7511
+ .type = ADV7511,
+ .supply_names = adv7511_supply_names,
+ .num_supplies = ARRAY_SIZE(adv7511_supply_names)
};
static const struct adv7511_chip_info adv7533_chip_info = {
.type = ADV7533,
.max_mode_clock = 80000,
.max_lane_freq = 800000,
+ .supply_names = adv7533_supply_names,
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names)
};
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)
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}. Add
supply_names and num_supplies variables to struct adv7511_chip_info to
handle this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29 ++++++++++----------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 0e2c721a856f..b29d11cae932 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -337,6 +337,8 @@ 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;
};
struct adv7511 {
@@ -375,7 +377,6 @@ struct adv7511 {
struct gpio_desc *gpio_pd;
struct regulator_bulk_data *supplies;
- unsigned int num_supplies;
/* ADV7533 DSI RX related params */
struct device_node *host_node;
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 29e087e6d721..f6f15c1b0882 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1004,37 +1004,30 @@ static const char * const adv7533_supply_names[] = {
static int adv7511_init_regulators(struct adv7511 *adv)
{
+ const char * const *supply_names = adv->info->supply_names;
+ unsigned int num_supplies = adv->info->num_supplies;
struct device *dev = &adv->i2c_main->dev;
- const char * const *supply_names;
unsigned int i;
int ret;
- if (adv->info->type == ADV7511) {
- supply_names = adv7511_supply_names;
- adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
- } else {
- supply_names = adv7533_supply_names;
- adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
- }
-
- adv->supplies = devm_kcalloc(dev, adv->num_supplies,
+ adv->supplies = devm_kcalloc(dev, num_supplies,
sizeof(*adv->supplies), GFP_KERNEL);
if (!adv->supplies)
return -ENOMEM;
- for (i = 0; i < adv->num_supplies; i++)
+ for (i = 0; i < num_supplies; i++)
adv->supplies[i].supply = supply_names[i];
- ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
+ ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
if (ret)
return ret;
- return regulator_bulk_enable(adv->num_supplies, adv->supplies);
+ return regulator_bulk_enable(num_supplies, adv->supplies);
}
static void adv7511_uninit_regulators(struct adv7511 *adv)
{
- regulator_bulk_disable(adv->num_supplies, adv->supplies);
+ regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
}
static bool adv7511_cec_register_volatile(struct device *dev, unsigned int reg)
@@ -1367,19 +1360,25 @@ static void adv7511_remove(struct i2c_client *i2c)
}
static const struct adv7511_chip_info adv7511_chip_info = {
- .type = ADV7511
+ .type = ADV7511,
+ .supply_names = adv7511_supply_names,
+ .num_supplies = ARRAY_SIZE(adv7511_supply_names)
};
static const struct adv7511_chip_info adv7533_chip_info = {
.type = ADV7533,
.max_mode_clock = 80000,
.max_lane_freq = 800000,
+ .supply_names = adv7533_supply_names,
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names)
};
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)
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:26 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:26 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:09PM +0100, Biju Das wrote:
> The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}. Add
> supply_names and num_supplies variables to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29 ++++++++++----------
> 2 files changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 0e2c721a856f..b29d11cae932 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -337,6 +337,8 @@ 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;
> };
>
> struct adv7511 {
> @@ -375,7 +377,6 @@ struct adv7511 {
> struct gpio_desc *gpio_pd;
>
> struct regulator_bulk_data *supplies;
> - unsigned int num_supplies;
>
> /* ADV7533 DSI RX related params */
> struct device_node *host_node;
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 29e087e6d721..f6f15c1b0882 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1004,37 +1004,30 @@ static const char * const adv7533_supply_names[] = {
>
> static int adv7511_init_regulators(struct adv7511 *adv)
> {
> + const char * const *supply_names = adv->info->supply_names;
> + unsigned int num_supplies = adv->info->num_supplies;
> struct device *dev = &adv->i2c_main->dev;
> - const char * const *supply_names;
> unsigned int i;
> int ret;
>
> - if (adv->info->type == ADV7511) {
> - supply_names = adv7511_supply_names;
> - adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
> - } else {
> - supply_names = adv7533_supply_names;
> - adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
> - }
> -
> - adv->supplies = devm_kcalloc(dev, adv->num_supplies,
> + adv->supplies = devm_kcalloc(dev, num_supplies,
> sizeof(*adv->supplies), GFP_KERNEL);
> if (!adv->supplies)
> return -ENOMEM;
>
> - for (i = 0; i < adv->num_supplies; i++)
> + for (i = 0; i < num_supplies; i++)
> adv->supplies[i].supply = supply_names[i];
>
> - ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
> + ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
> if (ret)
> return ret;
>
> - return regulator_bulk_enable(adv->num_supplies, adv->supplies);
> + return regulator_bulk_enable(num_supplies, adv->supplies);
> }
>
> static void adv7511_uninit_regulators(struct adv7511 *adv)
> {
> - regulator_bulk_disable(adv->num_supplies, adv->supplies);
> + regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
> }
>
> static bool adv7511_cec_register_volatile(struct device *dev, unsigned int reg)
> @@ -1367,19 +1360,25 @@ static void adv7511_remove(struct i2c_client *i2c)
> }
>
> static const struct adv7511_chip_info adv7511_chip_info = {
> - .type = ADV7511
> + .type = ADV7511,
> + .supply_names = adv7511_supply_names,
> + .num_supplies = ARRAY_SIZE(adv7511_supply_names)
Please add a comma at the end of the line. Same below.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> .type = ADV7533,
> .max_mode_clock = 80000,
> .max_lane_freq = 800000,
> + .supply_names = adv7533_supply_names,
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> };
>
> 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)
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
@ 2023-08-29 7:26 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:26 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:09PM +0100, Biju Das wrote:
> The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}. Add
> supply_names and num_supplies variables to struct adv7511_chip_info to
> handle this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29 ++++++++++----------
> 2 files changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 0e2c721a856f..b29d11cae932 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -337,6 +337,8 @@ 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;
> };
>
> struct adv7511 {
> @@ -375,7 +377,6 @@ struct adv7511 {
> struct gpio_desc *gpio_pd;
>
> struct regulator_bulk_data *supplies;
> - unsigned int num_supplies;
>
> /* ADV7533 DSI RX related params */
> struct device_node *host_node;
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 29e087e6d721..f6f15c1b0882 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1004,37 +1004,30 @@ static const char * const adv7533_supply_names[] = {
>
> static int adv7511_init_regulators(struct adv7511 *adv)
> {
> + const char * const *supply_names = adv->info->supply_names;
> + unsigned int num_supplies = adv->info->num_supplies;
> struct device *dev = &adv->i2c_main->dev;
> - const char * const *supply_names;
> unsigned int i;
> int ret;
>
> - if (adv->info->type == ADV7511) {
> - supply_names = adv7511_supply_names;
> - adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
> - } else {
> - supply_names = adv7533_supply_names;
> - adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
> - }
> -
> - adv->supplies = devm_kcalloc(dev, adv->num_supplies,
> + adv->supplies = devm_kcalloc(dev, num_supplies,
> sizeof(*adv->supplies), GFP_KERNEL);
> if (!adv->supplies)
> return -ENOMEM;
>
> - for (i = 0; i < adv->num_supplies; i++)
> + for (i = 0; i < num_supplies; i++)
> adv->supplies[i].supply = supply_names[i];
>
> - ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
> + ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
> if (ret)
> return ret;
>
> - return regulator_bulk_enable(adv->num_supplies, adv->supplies);
> + return regulator_bulk_enable(num_supplies, adv->supplies);
> }
>
> static void adv7511_uninit_regulators(struct adv7511 *adv)
> {
> - regulator_bulk_disable(adv->num_supplies, adv->supplies);
> + regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
> }
>
> static bool adv7511_cec_register_volatile(struct device *dev, unsigned int reg)
> @@ -1367,19 +1360,25 @@ static void adv7511_remove(struct i2c_client *i2c)
> }
>
> static const struct adv7511_chip_info adv7511_chip_info = {
> - .type = ADV7511
> + .type = ADV7511,
> + .supply_names = adv7511_supply_names,
> + .num_supplies = ARRAY_SIZE(adv7511_supply_names)
Please add a comma at the end of the line. Same below.
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
> .type = ADV7533,
> .max_mode_clock = 80000,
> .max_lane_freq = 800000,
> + .supply_names = adv7533_supply_names,
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> };
>
> 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)
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
2023-08-29 7:26 ` Laurent Pinchart
@ 2023-08-29 14:06 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:06 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies
> variables to struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:09PM +0100, Biju Das wrote:
> > The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}.
> > Add supply_names and num_supplies variables to struct
> > adv7511_chip_info to handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29
> > ++++++++++----------
> > 2 files changed, 16 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 0e2c721a856f..b29d11cae932 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -337,6 +337,8 @@ 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;
> > };
> >
> > struct adv7511 {
> > @@ -375,7 +377,6 @@ struct adv7511 {
> > struct gpio_desc *gpio_pd;
> >
> > struct regulator_bulk_data *supplies;
> > - unsigned int num_supplies;
> >
> > /* ADV7533 DSI RX related params */
> > struct device_node *host_node;
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 29e087e6d721..f6f15c1b0882 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1004,37 +1004,30 @@ static const char * const
> > adv7533_supply_names[] = {
> >
> > static int adv7511_init_regulators(struct adv7511 *adv) {
> > + const char * const *supply_names = adv->info->supply_names;
> > + unsigned int num_supplies = adv->info->num_supplies;
> > struct device *dev = &adv->i2c_main->dev;
> > - const char * const *supply_names;
> > unsigned int i;
> > int ret;
> >
> > - if (adv->info->type == ADV7511) {
> > - supply_names = adv7511_supply_names;
> > - adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
> > - } else {
> > - supply_names = adv7533_supply_names;
> > - adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
> > - }
> > -
> > - adv->supplies = devm_kcalloc(dev, adv->num_supplies,
> > + adv->supplies = devm_kcalloc(dev, num_supplies,
> > sizeof(*adv->supplies), GFP_KERNEL);
> > if (!adv->supplies)
> > return -ENOMEM;
> >
> > - for (i = 0; i < adv->num_supplies; i++)
> > + for (i = 0; i < num_supplies; i++)
> > adv->supplies[i].supply = supply_names[i];
> >
> > - ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
> > + ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
> > if (ret)
> > return ret;
> >
> > - return regulator_bulk_enable(adv->num_supplies, adv->supplies);
> > + return regulator_bulk_enable(num_supplies, adv->supplies);
> > }
> >
> > static void adv7511_uninit_regulators(struct adv7511 *adv) {
> > - regulator_bulk_disable(adv->num_supplies, adv->supplies);
> > + regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
> > }
> >
> > static bool adv7511_cec_register_volatile(struct device *dev,
> > unsigned int reg) @@ -1367,19 +1360,25 @@ static void
> > adv7511_remove(struct i2c_client *i2c) }
> >
> > static const struct adv7511_chip_info adv7511_chip_info = {
> > - .type = ADV7511
> > + .type = ADV7511,
> > + .supply_names = adv7511_supply_names,
> > + .num_supplies = ARRAY_SIZE(adv7511_supply_names)
>
> Please add a comma at the end of the line. Same below.
Agreed,
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > .type = ADV7533,
> > .max_mode_clock = 80000,
> > .max_lane_freq = 800000,
> > + .supply_names = adv7533_supply_names,
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > };
> >
> > 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)
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
@ 2023-08-29 14:06 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:06 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 4/7] drm: adv7511: Add supply_names and num_supplies
> variables to struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:09PM +0100, Biju Das wrote:
> > The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}.
> > Add supply_names and num_supplies variables to struct
> > adv7511_chip_info to handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 3 +-
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 29
> > ++++++++++----------
> > 2 files changed, 16 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 0e2c721a856f..b29d11cae932 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -337,6 +337,8 @@ 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;
> > };
> >
> > struct adv7511 {
> > @@ -375,7 +377,6 @@ struct adv7511 {
> > struct gpio_desc *gpio_pd;
> >
> > struct regulator_bulk_data *supplies;
> > - unsigned int num_supplies;
> >
> > /* ADV7533 DSI RX related params */
> > struct device_node *host_node;
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 29e087e6d721..f6f15c1b0882 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1004,37 +1004,30 @@ static const char * const
> > adv7533_supply_names[] = {
> >
> > static int adv7511_init_regulators(struct adv7511 *adv) {
> > + const char * const *supply_names = adv->info->supply_names;
> > + unsigned int num_supplies = adv->info->num_supplies;
> > struct device *dev = &adv->i2c_main->dev;
> > - const char * const *supply_names;
> > unsigned int i;
> > int ret;
> >
> > - if (adv->info->type == ADV7511) {
> > - supply_names = adv7511_supply_names;
> > - adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
> > - } else {
> > - supply_names = adv7533_supply_names;
> > - adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
> > - }
> > -
> > - adv->supplies = devm_kcalloc(dev, adv->num_supplies,
> > + adv->supplies = devm_kcalloc(dev, num_supplies,
> > sizeof(*adv->supplies), GFP_KERNEL);
> > if (!adv->supplies)
> > return -ENOMEM;
> >
> > - for (i = 0; i < adv->num_supplies; i++)
> > + for (i = 0; i < num_supplies; i++)
> > adv->supplies[i].supply = supply_names[i];
> >
> > - ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
> > + ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
> > if (ret)
> > return ret;
> >
> > - return regulator_bulk_enable(adv->num_supplies, adv->supplies);
> > + return regulator_bulk_enable(num_supplies, adv->supplies);
> > }
> >
> > static void adv7511_uninit_regulators(struct adv7511 *adv) {
> > - regulator_bulk_disable(adv->num_supplies, adv->supplies);
> > + regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
> > }
> >
> > static bool adv7511_cec_register_volatile(struct device *dev,
> > unsigned int reg) @@ -1367,19 +1360,25 @@ static void
> > adv7511_remove(struct i2c_client *i2c) }
> >
> > static const struct adv7511_chip_info adv7511_chip_info = {
> > - .type = ADV7511
> > + .type = ADV7511,
> > + .supply_names = adv7511_supply_names,
> > + .num_supplies = ARRAY_SIZE(adv7511_supply_names)
>
> Please add a comma at the end of the line. Same below.
Agreed,
Cheers,
Biju
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> > };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
> > .type = ADV7533,
> > .max_mode_clock = 80000,
> > .max_lane_freq = 800000,
> > + .supply_names = adv7533_supply_names,
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > };
> >
> > 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)
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
struct adv7511_chip_info for handling configuration related to DSI.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 +++++++++++---------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index b29d11cae932..2a017bb31a14 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -339,6 +339,7 @@ struct adv7511_chip_info {
unsigned long max_lane_freq;
const char * const *supply_names;
unsigned int num_supplies;
+ unsigned has_dsi:1;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index f6f15c1b0882..66b3f8fcf67d 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
*/
regcache_sync(adv7511->regmap);
- if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
+ if (adv7511->info->has_dsi)
adv7533_dsi_power_on(adv7511);
adv7511->powered = true;
}
@@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
+ if (adv7511->info->has_dsi)
adv7533_dsi_power_off(adv7511);
adv7511->powered = false;
}
@@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
else
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
- if (adv7511->info->type == ADV7511)
+ if (!adv7511->info->has_dsi)
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->info->type == ADV7533 || adv->info->type == ADV7535)
+ if (adv->info->has_dsi)
return adv7533_mode_valid(adv, mode);
else
return adv7511_mode_valid(adv, mode);
@@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
goto err;
}
- if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
+ if (adv->info->has_dsi) {
ret = adv7533_patch_cec_registers(adv);
if (ret)
goto err;
@@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
goto uninit_regulators;
dev_dbg(dev, "Rev. %d\n", val);
- if (info->type == ADV7511)
+ if (!info->has_dsi)
ret = regmap_register_patch(adv7511->regmap,
adv7511_fixed_registers,
ARRAY_SIZE(adv7511_fixed_registers));
@@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
adv7511_audio_init(dev, adv7511);
- if (info->type == ADV7533 || info->type == ADV7535) {
+ if (info->has_dsi) {
ret = adv7533_attach_dsi(adv7511);
if (ret)
goto err_unregister_audio;
@@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info adv7533_chip_info = {
.max_mode_clock = 80000,
.max_lane_freq = 800000,
.supply_names = adv7533_supply_names,
- .num_supplies = ARRAY_SIZE(adv7533_supply_names)
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names),
+ .has_dsi = 1
};
static const struct adv7511_chip_info adv7535_chip_info = {
@@ -1378,7 +1379,8 @@ static const struct adv7511_chip_info adv7535_chip_info = {
.max_mode_clock = 148500,
.max_lane_freq = 891000,
.supply_names = adv7533_supply_names,
- .num_supplies = ARRAY_SIZE(adv7533_supply_names)
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names),
+ .has_dsi = 1
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
struct adv7511_chip_info for handling configuration related to DSI.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 +++++++++++---------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index b29d11cae932..2a017bb31a14 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -339,6 +339,7 @@ struct adv7511_chip_info {
unsigned long max_lane_freq;
const char * const *supply_names;
unsigned int num_supplies;
+ unsigned has_dsi:1;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index f6f15c1b0882..66b3f8fcf67d 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
*/
regcache_sync(adv7511->regmap);
- if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
+ if (adv7511->info->has_dsi)
adv7533_dsi_power_on(adv7511);
adv7511->powered = true;
}
@@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
+ if (adv7511->info->has_dsi)
adv7533_dsi_power_off(adv7511);
adv7511->powered = false;
}
@@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
else
low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
- if (adv7511->info->type == ADV7511)
+ if (!adv7511->info->has_dsi)
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->info->type == ADV7533 || adv->info->type == ADV7535)
+ if (adv->info->has_dsi)
return adv7533_mode_valid(adv, mode);
else
return adv7511_mode_valid(adv, mode);
@@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
goto err;
}
- if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
+ if (adv->info->has_dsi) {
ret = adv7533_patch_cec_registers(adv);
if (ret)
goto err;
@@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
goto uninit_regulators;
dev_dbg(dev, "Rev. %d\n", val);
- if (info->type == ADV7511)
+ if (!info->has_dsi)
ret = regmap_register_patch(adv7511->regmap,
adv7511_fixed_registers,
ARRAY_SIZE(adv7511_fixed_registers));
@@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
adv7511_audio_init(dev, adv7511);
- if (info->type == ADV7533 || info->type == ADV7535) {
+ if (info->has_dsi) {
ret = adv7533_attach_dsi(adv7511);
if (ret)
goto err_unregister_audio;
@@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info adv7533_chip_info = {
.max_mode_clock = 80000,
.max_lane_freq = 800000,
.supply_names = adv7533_supply_names,
- .num_supplies = ARRAY_SIZE(adv7533_supply_names)
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names),
+ .has_dsi = 1
};
static const struct adv7511_chip_info adv7535_chip_info = {
@@ -1378,7 +1379,8 @@ static const struct adv7511_chip_info adv7535_chip_info = {
.max_mode_clock = 148500,
.max_lane_freq = 891000,
.supply_names = adv7533_supply_names,
- .num_supplies = ARRAY_SIZE(adv7533_supply_names)
+ .num_supplies = ARRAY_SIZE(adv7533_supply_names),
+ .has_dsi = 1
};
static const struct i2c_device_id adv7511_i2c_ids[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:30 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:30 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> struct adv7511_chip_info for handling configuration related to DSI.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 +++++++++++---------
> 2 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index b29d11cae932..2a017bb31a14 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> unsigned long max_lane_freq;
> const char * const *supply_names;
> unsigned int num_supplies;
> + unsigned has_dsi:1;
As you're not short of space here, I'd make this a bool.
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index f6f15c1b0882..66b3f8fcf67d 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> */
> regcache_sync(adv7511->regmap);
>
> - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> + if (adv7511->info->has_dsi)
> adv7533_dsi_power_on(adv7511);
> adv7511->powered = true;
> }
> @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> + if (adv7511->info->has_dsi)
> adv7533_dsi_power_off(adv7511);
> adv7511->powered = false;
> }
> @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> else
> low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
>
> - if (adv7511->info->type == ADV7511)
> + if (!adv7511->info->has_dsi)
While this is functionally equivalent, is the register below really
related to DSI ? If not, I'd rather not check the has_dsi field here but
keep checking the type.
> 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->info->type == ADV7533 || adv->info->type == ADV7535)
> + if (adv->info->has_dsi)
> return adv7533_mode_valid(adv, mode);
> else
> return adv7511_mode_valid(adv, mode);
> @@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
> goto err;
> }
>
> - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> + if (adv->info->has_dsi) {
Same comment here, this doesn't seem logically right.
> ret = adv7533_patch_cec_registers(adv);
> if (ret)
> goto err;
> @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> goto uninit_regulators;
> dev_dbg(dev, "Rev. %d\n", val);
>
> - if (info->type == ADV7511)
> + if (!info->has_dsi)
And here too.
> ret = regmap_register_patch(adv7511->regmap,
> adv7511_fixed_registers,
> ARRAY_SIZE(adv7511_fixed_registers));
> @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> adv7511_audio_init(dev, adv7511);
>
> - if (info->type == ADV7533 || info->type == ADV7535) {
> + if (info->has_dsi) {
> ret = adv7533_attach_dsi(adv7511);
> if (ret)
> goto err_unregister_audio;
> @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info adv7533_chip_info = {
> .max_mode_clock = 80000,
> .max_lane_freq = 800000,
> .supply_names = adv7533_supply_names,
> - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> + .has_dsi = 1
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> @@ -1378,7 +1379,8 @@ static const struct adv7511_chip_info adv7535_chip_info = {
> .max_mode_clock = 148500,
> .max_lane_freq = 891000,
> .supply_names = adv7533_supply_names,
> - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> + .has_dsi = 1
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-29 7:30 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:30 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> struct adv7511_chip_info for handling configuration related to DSI.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20 +++++++++++---------
> 2 files changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index b29d11cae932..2a017bb31a14 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> unsigned long max_lane_freq;
> const char * const *supply_names;
> unsigned int num_supplies;
> + unsigned has_dsi:1;
As you're not short of space here, I'd make this a bool.
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index f6f15c1b0882..66b3f8fcf67d 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> */
> regcache_sync(adv7511->regmap);
>
> - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> + if (adv7511->info->has_dsi)
> adv7533_dsi_power_on(adv7511);
> adv7511->powered = true;
> }
> @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> + if (adv7511->info->has_dsi)
> adv7533_dsi_power_off(adv7511);
> adv7511->powered = false;
> }
> @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> else
> low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
>
> - if (adv7511->info->type == ADV7511)
> + if (!adv7511->info->has_dsi)
While this is functionally equivalent, is the register below really
related to DSI ? If not, I'd rather not check the has_dsi field here but
keep checking the type.
> 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->info->type == ADV7533 || adv->info->type == ADV7535)
> + if (adv->info->has_dsi)
> return adv7533_mode_valid(adv, mode);
> else
> return adv7511_mode_valid(adv, mode);
> @@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
> goto err;
> }
>
> - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> + if (adv->info->has_dsi) {
Same comment here, this doesn't seem logically right.
> ret = adv7533_patch_cec_registers(adv);
> if (ret)
> goto err;
> @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> goto uninit_regulators;
> dev_dbg(dev, "Rev. %d\n", val);
>
> - if (info->type == ADV7511)
> + if (!info->has_dsi)
And here too.
> ret = regmap_register_patch(adv7511->regmap,
> adv7511_fixed_registers,
> ARRAY_SIZE(adv7511_fixed_registers));
> @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> adv7511_audio_init(dev, adv7511);
>
> - if (info->type == ADV7533 || info->type == ADV7535) {
> + if (info->has_dsi) {
> ret = adv7533_attach_dsi(adv7511);
> if (ret)
> goto err_unregister_audio;
> @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info adv7533_chip_info = {
> .max_mode_clock = 80000,
> .max_lane_freq = 800000,
> .supply_names = adv7533_supply_names,
> - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> + .has_dsi = 1
> };
>
> static const struct adv7511_chip_info adv7535_chip_info = {
> @@ -1378,7 +1379,8 @@ static const struct adv7511_chip_info adv7535_chip_info = {
> .max_mode_clock = 148500,
> .max_lane_freq = 891000,
> .supply_names = adv7533_supply_names,
> - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> + .has_dsi = 1
> };
>
> static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-29 7:30 ` Laurent Pinchart
@ 2023-08-29 14:19 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:19 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> > struct adv7511_chip_info for handling configuration related to DSI.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > +++++++++++---------
> > 2 files changed, 12 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index b29d11cae932..2a017bb31a14 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > unsigned long max_lane_freq;
> > const char * const *supply_names;
> > unsigned int num_supplies;
> > + unsigned has_dsi:1;
>
> As you're not short of space here, I'd make this a bool.
OK, will use bool here.
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index f6f15c1b0882..66b3f8fcf67d 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> > */
> > regcache_sync(adv7511->regmap);
> >
> > - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > + if (adv7511->info->has_dsi)
> > adv7533_dsi_power_on(adv7511);
> > adv7511->powered = true;
> > }
> > @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > + if (adv7511->info->has_dsi)
> > adv7533_dsi_power_off(adv7511);
> > adv7511->powered = false;
> > }
> > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> > else
> > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> >
> > - if (adv7511->info->type == ADV7511)
> > + if (!adv7511->info->has_dsi)
>
> While this is functionally equivalent, is the register below really related
> to DSI ? If not, I'd rather not check the has_dsi field here but keep
> checking the type.
What creating a packed value for this hardware difference
as driver data?
{ 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int
driver data low_refresh_data and we can get rid of this
if statement and depack it here.
>
> > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > + if (adv->info->has_dsi)
> > return adv7533_mode_valid(adv, mode);
> > else
> > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7 @@
> static
> > int adv7511_init_cec_regmap(struct adv7511 *adv)
> > goto err;
> > }
> >
> > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> > + if (adv->info->has_dsi) {
>
> Same comment here, this doesn't seem logically right.
But this patching is applicable for DSI.
>
> > ret = adv7533_patch_cec_registers(adv);
> > if (ret)
> > goto err;
> > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > goto uninit_regulators;
> > dev_dbg(dev, "Rev. %d\n", val);
> >
> > - if (info->type == ADV7511)
> > + if (!info->has_dsi)
>
> And here too.
Will create another bool. info->has_dpi, is it ok??
Cheers,
Biju
>
> > ret = regmap_register_patch(adv7511->regmap,
> > adv7511_fixed_registers,
> > ARRAY_SIZE(adv7511_fixed_registers));
> > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > adv7511_audio_init(dev, adv7511);
> >
> > - if (info->type == ADV7533 || info->type == ADV7535) {
> > + if (info->has_dsi) {
> > ret = adv7533_attach_dsi(adv7511);
> > if (ret)
> > goto err_unregister_audio;
> > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> adv7533_chip_info = {
> > .max_mode_clock = 80000,
> > .max_lane_freq = 800000,
> > .supply_names = adv7533_supply_names,
> > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > + .has_dsi = 1
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> adv7535_chip_info = {
> > .max_mode_clock = 148500,
> > .max_lane_freq = 891000,
> > .supply_names = adv7533_supply_names,
> > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > + .has_dsi = 1
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-29 14:19 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:19 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> > struct adv7511_chip_info for handling configuration related to DSI.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > +++++++++++---------
> > 2 files changed, 12 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index b29d11cae932..2a017bb31a14 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > unsigned long max_lane_freq;
> > const char * const *supply_names;
> > unsigned int num_supplies;
> > + unsigned has_dsi:1;
>
> As you're not short of space here, I'd make this a bool.
OK, will use bool here.
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index f6f15c1b0882..66b3f8fcf67d 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> > */
> > regcache_sync(adv7511->regmap);
> >
> > - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > + if (adv7511->info->has_dsi)
> > adv7533_dsi_power_on(adv7511);
> > adv7511->powered = true;
> > }
> > @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > + if (adv7511->info->has_dsi)
> > adv7533_dsi_power_off(adv7511);
> > adv7511->powered = false;
> > }
> > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> > else
> > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> >
> > - if (adv7511->info->type == ADV7511)
> > + if (!adv7511->info->has_dsi)
>
> While this is functionally equivalent, is the register below really related
> to DSI ? If not, I'd rather not check the has_dsi field here but keep
> checking the type.
What creating a packed value for this hardware difference
as driver data?
{ 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int
driver data low_refresh_data and we can get rid of this
if statement and depack it here.
>
> > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > + if (adv->info->has_dsi)
> > return adv7533_mode_valid(adv, mode);
> > else
> > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7 @@
> static
> > int adv7511_init_cec_regmap(struct adv7511 *adv)
> > goto err;
> > }
> >
> > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> > + if (adv->info->has_dsi) {
>
> Same comment here, this doesn't seem logically right.
But this patching is applicable for DSI.
>
> > ret = adv7533_patch_cec_registers(adv);
> > if (ret)
> > goto err;
> > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > goto uninit_regulators;
> > dev_dbg(dev, "Rev. %d\n", val);
> >
> > - if (info->type == ADV7511)
> > + if (!info->has_dsi)
>
> And here too.
Will create another bool. info->has_dpi, is it ok??
Cheers,
Biju
>
> > ret = regmap_register_patch(adv7511->regmap,
> > adv7511_fixed_registers,
> > ARRAY_SIZE(adv7511_fixed_registers));
> > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > adv7511_audio_init(dev, adv7511);
> >
> > - if (info->type == ADV7533 || info->type == ADV7535) {
> > + if (info->has_dsi) {
> > ret = adv7533_attach_dsi(adv7511);
> > if (ret)
> > goto err_unregister_audio;
> > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> adv7533_chip_info = {
> > .max_mode_clock = 80000,
> > .max_lane_freq = 800000,
> > .supply_names = adv7533_supply_names,
> > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > + .has_dsi = 1
> > };
> >
> > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> adv7535_chip_info = {
> > .max_mode_clock = 148500,
> > .max_lane_freq = 891000,
> > .supply_names = adv7533_supply_names,
> > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > + .has_dsi = 1
> > };
> >
> > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-29 14:19 ` Biju Das
@ 2023-08-29 15:35 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 15:35 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Biju,
On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
> > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> > > struct adv7511_chip_info for handling configuration related to DSI.
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > +++++++++++---------
> > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > index b29d11cae932..2a017bb31a14 100644
> > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > unsigned long max_lane_freq;
> > > const char * const *supply_names;
> > > unsigned int num_supplies;
> > > + unsigned has_dsi:1;
> >
> > As you're not short of space here, I'd make this a bool.
>
> OK, will use bool here.
>
> > > };
> > >
> > > struct adv7511 {
> > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> > > */
> > > regcache_sync(adv7511->regmap);
> > >
> > > - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > > + if (adv7511->info->has_dsi)
> > > adv7533_dsi_power_on(adv7511);
> > > adv7511->powered = true;
> > > }
> > > @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > > + if (adv7511->info->has_dsi)
> > > adv7533_dsi_power_off(adv7511);
> > > adv7511->powered = false;
> > > }
> > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> > > else
> > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > >
> > > - if (adv7511->info->type == ADV7511)
> > > + if (!adv7511->info->has_dsi)
> >
> > While this is functionally equivalent, is the register below really related
> > to DSI ? If not, I'd rather not check the has_dsi field here but keep
> > checking the type.
>
> What creating a packed value for this hardware difference
> as driver data?
>
> { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int
> driver data low_refresh_data and we can get rid of this
> if statement and depack it here.
As we're not in a hot path, I think the most important criteria to
consider are maintainability and readability. Making it easy to add
support for a new chip without creating a mess of spaghetti code falls
into those criteria, but as far as I'm aware there's no indication that
we will suddenly see several new compatible devices.
When it comes to readability, code such as
if (has_dsi)
init_dsi();
is great, but code such as
if (has_dsi)
init_cec();
because only the DSI-enabled version happens to also support CEC is not
good. Similarly, I don't think packing the refresh rate register
addresses and value in the info structure would increase readability, or
help in any real way. I'm tempted to leave it as-is.
What would help readability, if you feel inclined to keep working on
this driver, is to replace the register addresses with named macros :-)
> > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > + if (adv->info->has_dsi)
> > > return adv7533_mode_valid(adv, mode);
> > > else
> > > return adv7511_mode_valid(adv, mode);
> > > @@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > goto err;
> > > }
> > >
> > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> > > + if (adv->info->has_dsi) {
> >
> > Same comment here, this doesn't seem logically right.
>
> But this patching is applicable for DSI.
CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's
not linked to DSI as such.
> > > ret = adv7533_patch_cec_registers(adv);
> > > if (ret)
> > > goto err;
> > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > > goto uninit_regulators;
> > > dev_dbg(dev, "Rev. %d\n", val);
> > >
> > > - if (info->type == ADV7511)
> > > + if (!info->has_dsi)
> >
> > And here too.
>
> Will create another bool. info->has_dpi, is it ok??
Can't we leave type comparisons in the handful of cases where they are
simpler ? Is there a specific reason why you think the type enum really
has to go ?
> > > ret = regmap_register_patch(adv7511->regmap,
> > > adv7511_fixed_registers,
> > > ARRAY_SIZE(adv7511_fixed_registers));
> > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > >
> > > adv7511_audio_init(dev, adv7511);
> > >
> > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > + if (info->has_dsi) {
> > > ret = adv7533_attach_dsi(adv7511);
> > > if (ret)
> > > goto err_unregister_audio;
> > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > adv7533_chip_info = {
> > > .max_mode_clock = 80000,
> > > .max_lane_freq = 800000,
> > > .supply_names = adv7533_supply_names,
> > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > + .has_dsi = 1
> > > };
> > >
> > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > adv7535_chip_info = {
> > > .max_mode_clock = 148500,
> > > .max_lane_freq = 891000,
> > > .supply_names = adv7533_supply_names,
> > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > + .has_dsi = 1
> > > };
> > >
> > > static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-29 15:35 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 15:35 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Biju,
On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
> > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > The ADV7533 and ADV7535 have DSI support. Add a feature bit has_dsi to
> > > struct adv7511_chip_info for handling configuration related to DSI.
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > +++++++++++---------
> > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > index b29d11cae932..2a017bb31a14 100644
> > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > unsigned long max_lane_freq;
> > > const char * const *supply_names;
> > > unsigned int num_supplies;
> > > + unsigned has_dsi:1;
> >
> > As you're not short of space here, I'd make this a bool.
>
> OK, will use bool here.
>
> > > };
> > >
> > > struct adv7511 {
> > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511 *adv7511)
> > > */
> > > regcache_sync(adv7511->regmap);
> > >
> > > - if (adv7511->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > > + if (adv7511->info->has_dsi)
> > > adv7533_dsi_power_on(adv7511);
> > > adv7511->powered = true;
> > > }
> > > @@ -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->info->type == ADV7533 || adv7511->info->type == ADV7535)
> > > + if (adv7511->info->has_dsi)
> > > adv7533_dsi_power_off(adv7511);
> > > adv7511->powered = false;
> > > }
> > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
> > > else
> > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > >
> > > - if (adv7511->info->type == ADV7511)
> > > + if (!adv7511->info->has_dsi)
> >
> > While this is functionally equivalent, is the register below really related
> > to DSI ? If not, I'd rather not check the has_dsi field here but keep
> > checking the type.
>
> What creating a packed value for this hardware difference
> as driver data?
>
> { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int
> driver data low_refresh_data and we can get rid of this
> if statement and depack it here.
As we're not in a hot path, I think the most important criteria to
consider are maintainability and readability. Making it easy to add
support for a new chip without creating a mess of spaghetti code falls
into those criteria, but as far as I'm aware there's no indication that
we will suddenly see several new compatible devices.
When it comes to readability, code such as
if (has_dsi)
init_dsi();
is great, but code such as
if (has_dsi)
init_cec();
because only the DSI-enabled version happens to also support CEC is not
good. Similarly, I don't think packing the refresh rate register
addresses and value in the info structure would increase readability, or
help in any real way. I'm tempted to leave it as-is.
What would help readability, if you feel inclined to keep working on
this driver, is to replace the register addresses with named macros :-)
> > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > + if (adv->info->has_dsi)
> > > return adv7533_mode_valid(adv, mode);
> > > else
> > > return adv7511_mode_valid(adv, mode);
> > > @@ -1086,7 +1086,7 @@ static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > goto err;
> > > }
> > >
> > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535) {
> > > + if (adv->info->has_dsi) {
> >
> > Same comment here, this doesn't seem logically right.
>
> But this patching is applicable for DSI.
CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's
not linked to DSI as such.
> > > ret = adv7533_patch_cec_registers(adv);
> > > if (ret)
> > > goto err;
> > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > > goto uninit_regulators;
> > > dev_dbg(dev, "Rev. %d\n", val);
> > >
> > > - if (info->type == ADV7511)
> > > + if (!info->has_dsi)
> >
> > And here too.
>
> Will create another bool. info->has_dpi, is it ok??
Can't we leave type comparisons in the handful of cases where they are
simpler ? Is there a specific reason why you think the type enum really
has to go ?
> > > ret = regmap_register_patch(adv7511->regmap,
> > > adv7511_fixed_registers,
> > > ARRAY_SIZE(adv7511_fixed_registers));
> > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> > >
> > > adv7511_audio_init(dev, adv7511);
> > >
> > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > + if (info->has_dsi) {
> > > ret = adv7533_attach_dsi(adv7511);
> > > if (ret)
> > > goto err_unregister_audio;
> > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > adv7533_chip_info = {
> > > .max_mode_clock = 80000,
> > > .max_lane_freq = 800000,
> > > .supply_names = adv7533_supply_names,
> > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > + .has_dsi = 1
> > > };
> > >
> > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > adv7535_chip_info = {
> > > .max_mode_clock = 148500,
> > > .max_lane_freq = 891000,
> > > .supply_names = adv7533_supply_names,
> > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > + .has_dsi = 1
> > > };
> > >
> > > static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-29 15:35 ` Laurent Pinchart
@ 2023-08-29 15:42 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 15:42 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> adv7511_chip_info
>
> Hi Biju,
>
> On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to
> > struct adv7511_chip_info
> > > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > > The ADV7533 and ADV7535 have DSI support. Add a feature bit
> > > > has_dsi to struct adv7511_chip_info for handling configuration
> related to DSI.
> > > >
> > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > ---
> > > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > > +++++++++++---------
> > > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > index b29d11cae932..2a017bb31a14 100644
> > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > > unsigned long max_lane_freq;
> > > > const char * const *supply_names;
> > > > unsigned int num_supplies;
> > > > + unsigned has_dsi:1;
> > >
> > > As you're not short of space here, I'd make this a bool.
> >
> > OK, will use bool here.
> >
> > > > };
> > > >
> > > > struct adv7511 {
> > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511
> *adv7511)
> > > > */
> > > > regcache_sync(adv7511->regmap);
> > > >
> > > > - if (adv7511->info->type == ADV7533 || adv7511->info->type ==
> ADV7535)
> > > > + if (adv7511->info->has_dsi)
> > > > adv7533_dsi_power_on(adv7511);
> > > > adv7511->powered = true;
> > > > }
> > > > @@ -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->info->type == ADV7533 || adv7511->info->type ==
> ADV7535)
> > > > + if (adv7511->info->has_dsi)
> > > > adv7533_dsi_power_off(adv7511);
> > > > adv7511->powered = false;
> > > > }
> > > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511
> *adv7511,
> > > > else
> > > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > > >
> > > > - if (adv7511->info->type == ADV7511)
> > > > + if (!adv7511->info->has_dsi)
> > >
> > > While this is functionally equivalent, is the register below really
> > > related to DSI ? If not, I'd rather not check the has_dsi field here
> > > but keep checking the type.
> >
> > What creating a packed value for this hardware difference as driver
> > data?
> >
> > { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int driver
> > data low_refresh_data and we can get rid of this if statement and
> > depack it here.
>
> As we're not in a hot path, I think the most important criteria to consider
> are maintainability and readability. Making it easy to add support for a
> new chip without creating a mess of spaghetti code falls into those
> criteria, but as far as I'm aware there's no indication that we will
> suddenly see several new compatible devices.
>
> When it comes to readability, code such as
>
> if (has_dsi)
> init_dsi();
>
> is great, but code such as
>
> if (has_dsi)
> init_cec();
>
> because only the DSI-enabled version happens to also support CEC is not
> good. Similarly, I don't think packing the refresh rate register addresses
> and value in the info structure would increase readability, or help in any
> real way. I'm tempted to leave it as-is.
Agreed. Will keep as it is for low_refresh_rate() change.
>
> What would help readability, if you feel inclined to keep working on this
> driver, is to replace the register addresses with named macros :-)
>
> > > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > > + if (adv->info->has_dsi)
> > > > return adv7533_mode_valid(adv, mode);
> > > > else
> > > > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7
> @@
> > > > static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > > goto err;
> > > > }
> > > >
> > > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
> {
> > > > + if (adv->info->has_dsi) {
> > >
> > > Same comment here, this doesn't seem logically right.
> >
> > But this patching is applicable for DSI.
>
> CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's not
> linked to DSI as such.
OK, what about using "has_cec" here instead, which avoids 2 run time comparisons against 1??
>
> > > > ret = adv7533_patch_cec_registers(adv);
> > > > if (ret)
> > > > goto err;
> > > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client
> *i2c)
> > > > goto uninit_regulators;
> > > > dev_dbg(dev, "Rev. %d\n", val);
> > > >
> > > > - if (info->type == ADV7511)
> > > > + if (!info->has_dsi)
> > >
> > > And here too.
> >
> > Will create another bool. info->has_dpi, is it ok??
>
> Can't we leave type comparisons in the handful of cases where they are
> simpler ? Is there a specific reason why you think the type enum really has
> to go ?
Agreed, will use type here as well.
Cheers,
Biju
>
> > > > ret = regmap_register_patch(adv7511->regmap,
> > > > adv7511_fixed_registers,
> > > >
> ARRAY_SIZE(adv7511_fixed_registers));
> > > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client
> > > > *i2c)
> > > >
> > > > adv7511_audio_init(dev, adv7511);
> > > >
> > > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > > + if (info->has_dsi) {
> > > > ret = adv7533_attach_dsi(adv7511);
> > > > if (ret)
> > > > goto err_unregister_audio;
> > > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > > adv7533_chip_info = {
> > > > .max_mode_clock = 80000,
> > > > .max_lane_freq = 800000,
> > > > .supply_names = adv7533_supply_names,
> > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > + .has_dsi = 1
> > > > };
> > > >
> > > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > > adv7535_chip_info = {
> > > > .max_mode_clock = 148500,
> > > > .max_lane_freq = 891000,
> > > > .supply_names = adv7533_supply_names,
> > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > + .has_dsi = 1
> > > > };
> > > >
> > > > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-29 15:42 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 15:42 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent Pinchart,
Thanks for the feedback.
> Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> adv7511_chip_info
>
> Hi Biju,
>
> On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to
> > struct adv7511_chip_info
> > > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > > The ADV7533 and ADV7535 have DSI support. Add a feature bit
> > > > has_dsi to struct adv7511_chip_info for handling configuration
> related to DSI.
> > > >
> > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > ---
> > > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > > +++++++++++---------
> > > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > index b29d11cae932..2a017bb31a14 100644
> > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > > unsigned long max_lane_freq;
> > > > const char * const *supply_names;
> > > > unsigned int num_supplies;
> > > > + unsigned has_dsi:1;
> > >
> > > As you're not short of space here, I'd make this a bool.
> >
> > OK, will use bool here.
> >
> > > > };
> > > >
> > > > struct adv7511 {
> > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511
> *adv7511)
> > > > */
> > > > regcache_sync(adv7511->regmap);
> > > >
> > > > - if (adv7511->info->type == ADV7533 || adv7511->info->type ==
> ADV7535)
> > > > + if (adv7511->info->has_dsi)
> > > > adv7533_dsi_power_on(adv7511);
> > > > adv7511->powered = true;
> > > > }
> > > > @@ -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->info->type == ADV7533 || adv7511->info->type ==
> ADV7535)
> > > > + if (adv7511->info->has_dsi)
> > > > adv7533_dsi_power_off(adv7511);
> > > > adv7511->powered = false;
> > > > }
> > > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511
> *adv7511,
> > > > else
> > > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > > >
> > > > - if (adv7511->info->type == ADV7511)
> > > > + if (!adv7511->info->has_dsi)
> > >
> > > While this is functionally equivalent, is the register below really
> > > related to DSI ? If not, I'd rather not check the has_dsi field here
> > > but keep checking the type.
> >
> > What creating a packed value for this hardware difference as driver
> > data?
> >
> > { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int driver
> > data low_refresh_data and we can get rid of this if statement and
> > depack it here.
>
> As we're not in a hot path, I think the most important criteria to consider
> are maintainability and readability. Making it easy to add support for a
> new chip without creating a mess of spaghetti code falls into those
> criteria, but as far as I'm aware there's no indication that we will
> suddenly see several new compatible devices.
>
> When it comes to readability, code such as
>
> if (has_dsi)
> init_dsi();
>
> is great, but code such as
>
> if (has_dsi)
> init_cec();
>
> because only the DSI-enabled version happens to also support CEC is not
> good. Similarly, I don't think packing the refresh rate register addresses
> and value in the info structure would increase readability, or help in any
> real way. I'm tempted to leave it as-is.
Agreed. Will keep as it is for low_refresh_rate() change.
>
> What would help readability, if you feel inclined to keep working on this
> driver, is to replace the register addresses with named macros :-)
>
> > > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > > + if (adv->info->has_dsi)
> > > > return adv7533_mode_valid(adv, mode);
> > > > else
> > > > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7
> @@
> > > > static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > > goto err;
> > > > }
> > > >
> > > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
> {
> > > > + if (adv->info->has_dsi) {
> > >
> > > Same comment here, this doesn't seem logically right.
> >
> > But this patching is applicable for DSI.
>
> CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's not
> linked to DSI as such.
OK, what about using "has_cec" here instead, which avoids 2 run time comparisons against 1??
>
> > > > ret = adv7533_patch_cec_registers(adv);
> > > > if (ret)
> > > > goto err;
> > > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client
> *i2c)
> > > > goto uninit_regulators;
> > > > dev_dbg(dev, "Rev. %d\n", val);
> > > >
> > > > - if (info->type == ADV7511)
> > > > + if (!info->has_dsi)
> > >
> > > And here too.
> >
> > Will create another bool. info->has_dpi, is it ok??
>
> Can't we leave type comparisons in the handful of cases where they are
> simpler ? Is there a specific reason why you think the type enum really has
> to go ?
Agreed, will use type here as well.
Cheers,
Biju
>
> > > > ret = regmap_register_patch(adv7511->regmap,
> > > > adv7511_fixed_registers,
> > > >
> ARRAY_SIZE(adv7511_fixed_registers));
> > > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client
> > > > *i2c)
> > > >
> > > > adv7511_audio_init(dev, adv7511);
> > > >
> > > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > > + if (info->has_dsi) {
> > > > ret = adv7533_attach_dsi(adv7511);
> > > > if (ret)
> > > > goto err_unregister_audio;
> > > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > > adv7533_chip_info = {
> > > > .max_mode_clock = 80000,
> > > > .max_lane_freq = 800000,
> > > > .supply_names = adv7533_supply_names,
> > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > + .has_dsi = 1
> > > > };
> > > >
> > > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > > adv7535_chip_info = {
> > > > .max_mode_clock = 148500,
> > > > .max_lane_freq = 891000,
> > > > .supply_names = adv7533_supply_names,
> > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > + .has_dsi = 1
> > > > };
> > > >
> > > > static const struct i2c_device_id adv7511_i2c_ids[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
2023-08-29 15:42 ` Biju Das
@ 2023-08-30 8:22 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-30 8:22 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
On Tue, Aug 29, 2023 at 03:42:40PM +0000, Biju Das wrote:
> Hi Laurent Pinchart,
>
> Thanks for the feedback.
>
> > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> > adv7511_chip_info
> >
> > Hi Biju,
> >
> > On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> > > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to
> > > struct adv7511_chip_info
> > > > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > > > The ADV7533 and ADV7535 have DSI support. Add a feature bit
> > > > > has_dsi to struct adv7511_chip_info for handling configuration
> > related to DSI.
> > > > >
> > > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > > ---
> > > > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > > > +++++++++++---------
> > > > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > index b29d11cae932..2a017bb31a14 100644
> > > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > > > unsigned long max_lane_freq;
> > > > > const char * const *supply_names;
> > > > > unsigned int num_supplies;
> > > > > + unsigned has_dsi:1;
> > > >
> > > > As you're not short of space here, I'd make this a bool.
> > >
> > > OK, will use bool here.
> > >
> > > > > };
> > > > >
> > > > > struct adv7511 {
> > > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511
> > *adv7511)
> > > > > */
> > > > > regcache_sync(adv7511->regmap);
> > > > >
> > > > > - if (adv7511->info->type == ADV7533 || adv7511->info->type ==
> > ADV7535)
> > > > > + if (adv7511->info->has_dsi)
> > > > > adv7533_dsi_power_on(adv7511);
> > > > > adv7511->powered = true;
> > > > > }
> > > > > @@ -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->info->type == ADV7533 || adv7511->info->type ==
> > ADV7535)
> > > > > + if (adv7511->info->has_dsi)
> > > > > adv7533_dsi_power_off(adv7511);
> > > > > adv7511->powered = false;
> > > > > }
> > > > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511
> > *adv7511,
> > > > > else
> > > > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > > > >
> > > > > - if (adv7511->info->type == ADV7511)
> > > > > + if (!adv7511->info->has_dsi)
> > > >
> > > > While this is functionally equivalent, is the register below really
> > > > related to DSI ? If not, I'd rather not check the has_dsi field here
> > > > but keep checking the type.
> > >
> > > What creating a packed value for this hardware difference as driver
> > > data?
> > >
> > > { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int driver
> > > data low_refresh_data and we can get rid of this if statement and
> > > depack it here.
> >
> > As we're not in a hot path, I think the most important criteria to consider
> > are maintainability and readability. Making it easy to add support for a
> > new chip without creating a mess of spaghetti code falls into those
> > criteria, but as far as I'm aware there's no indication that we will
> > suddenly see several new compatible devices.
> >
> > When it comes to readability, code such as
> >
> > if (has_dsi)
> > init_dsi();
> >
> > is great, but code such as
> >
> > if (has_dsi)
> > init_cec();
> >
> > because only the DSI-enabled version happens to also support CEC is not
> > good. Similarly, I don't think packing the refresh rate register addresses
> > and value in the info structure would increase readability, or help in any
> > real way. I'm tempted to leave it as-is.
>
> Agreed. Will keep as it is for low_refresh_rate() change.
>
> >
> > What would help readability, if you feel inclined to keep working on this
> > driver, is to replace the register addresses with named macros :-)
> >
> > > > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > > > + if (adv->info->has_dsi)
> > > > > return adv7533_mode_valid(adv, mode);
> > > > > else
> > > > > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7
> > @@
> > > > > static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > > > goto err;
> > > > > }
> > > > >
> > > > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
> > {
> > > > > + if (adv->info->has_dsi) {
> > > >
> > > > Same comment here, this doesn't seem logically right.
> > >
> > > But this patching is applicable for DSI.
> >
> > CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's not
> > linked to DSI as such.
>
> OK, what about using "has_cec" here instead, which avoids 2 run time comparisons against 1??
I'm OK with that.
> > > > > ret = adv7533_patch_cec_registers(adv);
> > > > > if (ret)
> > > > > goto err;
> > > > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client
> > *i2c)
> > > > > goto uninit_regulators;
> > > > > dev_dbg(dev, "Rev. %d\n", val);
> > > > >
> > > > > - if (info->type == ADV7511)
> > > > > + if (!info->has_dsi)
> > > >
> > > > And here too.
> > >
> > > Will create another bool. info->has_dpi, is it ok??
> >
> > Can't we leave type comparisons in the handful of cases where they are
> > simpler ? Is there a specific reason why you think the type enum really has
> > to go ?
>
> Agreed, will use type here as well.
>
> > > > > ret = regmap_register_patch(adv7511->regmap,
> > > > > adv7511_fixed_registers,
> > > > >
> > ARRAY_SIZE(adv7511_fixed_registers));
> > > > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client
> > > > > *i2c)
> > > > >
> > > > > adv7511_audio_init(dev, adv7511);
> > > > >
> > > > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > > > + if (info->has_dsi) {
> > > > > ret = adv7533_attach_dsi(adv7511);
> > > > > if (ret)
> > > > > goto err_unregister_audio;
> > > > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > > > adv7533_chip_info = {
> > > > > .max_mode_clock = 80000,
> > > > > .max_lane_freq = 800000,
> > > > > .supply_names = adv7533_supply_names,
> > > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > > + .has_dsi = 1
> > > > > };
> > > > >
> > > > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > > > adv7535_chip_info = {
> > > > > .max_mode_clock = 148500,
> > > > > .max_lane_freq = 891000,
> > > > > .supply_names = adv7533_supply_names,
> > > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > > + .has_dsi = 1
> > > > > };
> > > > >
> > > > > static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct adv7511_chip_info
@ 2023-08-30 8:22 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-30 8:22 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
On Tue, Aug 29, 2023 at 03:42:40PM +0000, Biju Das wrote:
> Hi Laurent Pinchart,
>
> Thanks for the feedback.
>
> > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to struct
> > adv7511_chip_info
> >
> > Hi Biju,
> >
> > On Tue, Aug 29, 2023 at 02:19:02PM +0000, Biju Das wrote:
> > > Subject: Re: [PATCH 5/7] drm: adv7511: Add has_dsi feature bit to
> > > struct adv7511_chip_info
> > > > On Sun, Aug 13, 2023 at 07:05:10PM +0100, Biju Das wrote:
> > > > > The ADV7533 and ADV7535 have DSI support. Add a feature bit
> > > > > has_dsi to struct adv7511_chip_info for handling configuration
> > related to DSI.
> > > > >
> > > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > > ---
> > > > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > > > > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 20
> > > > > +++++++++++---------
> > > > > 2 files changed, 12 insertions(+), 9 deletions(-)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > index b29d11cae932..2a017bb31a14 100644
> > > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > > @@ -339,6 +339,7 @@ struct adv7511_chip_info {
> > > > > unsigned long max_lane_freq;
> > > > > const char * const *supply_names;
> > > > > unsigned int num_supplies;
> > > > > + unsigned has_dsi:1;
> > > >
> > > > As you're not short of space here, I'd make this a bool.
> > >
> > > OK, will use bool here.
> > >
> > > > > };
> > > > >
> > > > > struct adv7511 {
> > > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > index f6f15c1b0882..66b3f8fcf67d 100644
> > > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > > > > @@ -373,7 +373,7 @@ static void adv7511_power_on(struct adv7511
> > *adv7511)
> > > > > */
> > > > > regcache_sync(adv7511->regmap);
> > > > >
> > > > > - if (adv7511->info->type == ADV7533 || adv7511->info->type ==
> > ADV7535)
> > > > > + if (adv7511->info->has_dsi)
> > > > > adv7533_dsi_power_on(adv7511);
> > > > > adv7511->powered = true;
> > > > > }
> > > > > @@ -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->info->type == ADV7533 || adv7511->info->type ==
> > ADV7535)
> > > > > + if (adv7511->info->has_dsi)
> > > > > adv7533_dsi_power_off(adv7511);
> > > > > adv7511->powered = false;
> > > > > }
> > > > > @@ -786,7 +786,7 @@ static void adv7511_mode_set(struct adv7511
> > *adv7511,
> > > > > else
> > > > > low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
> > > > >
> > > > > - if (adv7511->info->type == ADV7511)
> > > > > + if (!adv7511->info->has_dsi)
> > > >
> > > > While this is functionally equivalent, is the register below really
> > > > related to DSI ? If not, I'd rather not check the has_dsi field here
> > > > but keep checking the type.
> > >
> > > What creating a packed value for this hardware difference as driver
> > > data?
> > >
> > > { 0xfb, 0x6, 0x1} and { 0x4a, 0xc, 2) packed as unsigned int driver
> > > data low_refresh_data and we can get rid of this if statement and
> > > depack it here.
> >
> > As we're not in a hot path, I think the most important criteria to consider
> > are maintainability and readability. Making it easy to add support for a
> > new chip without creating a mess of spaghetti code falls into those
> > criteria, but as far as I'm aware there's no indication that we will
> > suddenly see several new compatible devices.
> >
> > When it comes to readability, code such as
> >
> > if (has_dsi)
> > init_dsi();
> >
> > is great, but code such as
> >
> > if (has_dsi)
> > init_cec();
> >
> > because only the DSI-enabled version happens to also support CEC is not
> > good. Similarly, I don't think packing the refresh rate register addresses
> > and value in the info structure would increase readability, or help in any
> > real way. I'm tempted to leave it as-is.
>
> Agreed. Will keep as it is for low_refresh_rate() change.
>
> >
> > What would help readability, if you feel inclined to keep working on this
> > driver, is to replace the register addresses with named macros :-)
> >
> > > > > 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->info->type == ADV7533 || adv->info->type == ADV7535)
> > > > > + if (adv->info->has_dsi)
> > > > > return adv7533_mode_valid(adv, mode);
> > > > > else
> > > > > return adv7511_mode_valid(adv, mode); @@ -1086,7 +1086,7
> > @@
> > > > > static int adv7511_init_cec_regmap(struct adv7511 *adv)
> > > > > goto err;
> > > > > }
> > > > >
> > > > > - if (adv->info->type == ADV7533 || adv->info->type == ADV7535)
> > {
> > > > > + if (adv->info->has_dsi) {
> > > >
> > > > Same comment here, this doesn't seem logically right.
> > >
> > > But this patching is applicable for DSI.
> >
> > CEC is an HDMI feature. The ADV7511 may not have CEC support, but it's not
> > linked to DSI as such.
>
> OK, what about using "has_cec" here instead, which avoids 2 run time comparisons against 1??
I'm OK with that.
> > > > > ret = adv7533_patch_cec_registers(adv);
> > > > > if (ret)
> > > > > goto err;
> > > > > @@ -1245,7 +1245,7 @@ static int adv7511_probe(struct i2c_client
> > *i2c)
> > > > > goto uninit_regulators;
> > > > > dev_dbg(dev, "Rev. %d\n", val);
> > > > >
> > > > > - if (info->type == ADV7511)
> > > > > + if (!info->has_dsi)
> > > >
> > > > And here too.
> > >
> > > Will create another bool. info->has_dpi, is it ok??
> >
> > Can't we leave type comparisons in the handful of cases where they are
> > simpler ? Is there a specific reason why you think the type enum really has
> > to go ?
>
> Agreed, will use type here as well.
>
> > > > > ret = regmap_register_patch(adv7511->regmap,
> > > > > adv7511_fixed_registers,
> > > > >
> > ARRAY_SIZE(adv7511_fixed_registers));
> > > > > @@ -1316,7 +1316,7 @@ static int adv7511_probe(struct i2c_client
> > > > > *i2c)
> > > > >
> > > > > adv7511_audio_init(dev, adv7511);
> > > > >
> > > > > - if (info->type == ADV7533 || info->type == ADV7535) {
> > > > > + if (info->has_dsi) {
> > > > > ret = adv7533_attach_dsi(adv7511);
> > > > > if (ret)
> > > > > goto err_unregister_audio;
> > > > > @@ -1370,7 +1370,8 @@ static const struct adv7511_chip_info
> > > > adv7533_chip_info = {
> > > > > .max_mode_clock = 80000,
> > > > > .max_lane_freq = 800000,
> > > > > .supply_names = adv7533_supply_names,
> > > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > > + .has_dsi = 1
> > > > > };
> > > > >
> > > > > static const struct adv7511_chip_info adv7535_chip_info = { @@
> > > > > -1378,7 +1379,8 @@ static const struct adv7511_chip_info
> > > > adv7535_chip_info = {
> > > > > .max_mode_clock = 148500,
> > > > > .max_lane_freq = 891000,
> > > > > .supply_names = adv7533_supply_names,
> > > > > - .num_supplies = ARRAY_SIZE(adv7533_supply_names)
> > > > > + .num_supplies = ARRAY_SIZE(adv7533_supply_names),
> > > > > + .has_dsi = 1
> > > > > };
> > > > >
> > > > > static const struct i2c_device_id adv7511_i2c_ids[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
The ADV7511 needs link configuration whereas ADV75{33,35} does not need
it. Add a feature bit link_config to struct adv7511_chip_info to handle
this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 2a017bb31a14..627531f48f84 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -340,6 +340,7 @@ struct adv7511_chip_info {
const char * const *supply_names;
unsigned int num_supplies;
unsigned has_dsi:1;
+ unsigned link_config:1;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 66b3f8fcf67d..6974c267b1d5 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
memset(&link_config, 0, sizeof(link_config));
- if (adv7511->info->type == ADV7511)
+ if (info->link_config)
ret = adv7511_parse_dt(dev->of_node, &link_config);
else
ret = adv7533_parse_dt(dev->of_node, adv7511);
@@ -1297,7 +1297,7 @@ static int adv7511_probe(struct i2c_client *i2c)
i2c_set_clientdata(i2c, adv7511);
- if (info->type == ADV7511)
+ if (info->link_config)
adv7511_set_link_config(adv7511, &link_config);
ret = adv7511_cec_init(dev, adv7511);
@@ -1362,7 +1362,8 @@ 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)
+ .num_supplies = ARRAY_SIZE(adv7511_supply_names),
+ .link_config = 1
};
static const struct adv7511_chip_info adv7533_chip_info = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
The ADV7511 needs link configuration whereas ADV75{33,35} does not need
it. Add a feature bit link_config to struct adv7511_chip_info to handle
this difference.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
index 2a017bb31a14..627531f48f84 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
@@ -340,6 +340,7 @@ struct adv7511_chip_info {
const char * const *supply_names;
unsigned int num_supplies;
unsigned has_dsi:1;
+ unsigned link_config:1;
};
struct adv7511 {
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 66b3f8fcf67d..6974c267b1d5 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
memset(&link_config, 0, sizeof(link_config));
- if (adv7511->info->type == ADV7511)
+ if (info->link_config)
ret = adv7511_parse_dt(dev->of_node, &link_config);
else
ret = adv7533_parse_dt(dev->of_node, adv7511);
@@ -1297,7 +1297,7 @@ static int adv7511_probe(struct i2c_client *i2c)
i2c_set_clientdata(i2c, adv7511);
- if (info->type == ADV7511)
+ if (info->link_config)
adv7511_set_link_config(adv7511, &link_config);
ret = adv7511_cec_init(dev, adv7511);
@@ -1362,7 +1362,8 @@ 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)
+ .num_supplies = ARRAY_SIZE(adv7511_supply_names),
+ .link_config = 1
};
static const struct adv7511_chip_info adv7533_chip_info = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-29 7:34 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:34 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford, dri-devel,
Geert Uytterhoeven, linux-renesas-soc
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:11PM +0100, Biju Das wrote:
> The ADV7511 needs link configuration whereas ADV75{33,35} does not need
> it. Add a feature bit link_config to struct adv7511_chip_info to handle
> this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 2a017bb31a14..627531f48f84 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -340,6 +340,7 @@ struct adv7511_chip_info {
> const char * const *supply_names;
> unsigned int num_supplies;
> unsigned has_dsi:1;
> + unsigned link_config:1;
I would use a bool here too.
I'm not entirely sure about this particular patch, it seems that testing
the chip type would be better. I'm not totally against it though, so
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 66b3f8fcf67d..6974c267b1d5 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> memset(&link_config, 0, sizeof(link_config));
>
> - if (adv7511->info->type == ADV7511)
> + if (info->link_config)
> ret = adv7511_parse_dt(dev->of_node, &link_config);
> else
> ret = adv7533_parse_dt(dev->of_node, adv7511);
> @@ -1297,7 +1297,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> i2c_set_clientdata(i2c, adv7511);
>
> - if (info->type == ADV7511)
> + if (info->link_config)
> adv7511_set_link_config(adv7511, &link_config);
>
> ret = adv7511_cec_init(dev, adv7511);
> @@ -1362,7 +1362,8 @@ 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)
> + .num_supplies = ARRAY_SIZE(adv7511_supply_names),
> + .link_config = 1
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
@ 2023-08-29 7:34 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:34 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas, linux-renesas-soc,
Andy Shevchenko, Bogdan Togorean, Uwe Kleine-König,
Ahmad Fatoum
Hi Biju,
Thank you for the patch.
On Sun, Aug 13, 2023 at 07:05:11PM +0100, Biju Das wrote:
> The ADV7511 needs link configuration whereas ADV75{33,35} does not need
> it. Add a feature bit link_config to struct adv7511_chip_info to handle
> this difference.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 2a017bb31a14..627531f48f84 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -340,6 +340,7 @@ struct adv7511_chip_info {
> const char * const *supply_names;
> unsigned int num_supplies;
> unsigned has_dsi:1;
> + unsigned link_config:1;
I would use a bool here too.
I'm not entirely sure about this particular patch, it seems that testing
the chip type would be better. I'm not totally against it though, so
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> };
>
> struct adv7511 {
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index 66b3f8fcf67d..6974c267b1d5 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> memset(&link_config, 0, sizeof(link_config));
>
> - if (adv7511->info->type == ADV7511)
> + if (info->link_config)
> ret = adv7511_parse_dt(dev->of_node, &link_config);
> else
> ret = adv7533_parse_dt(dev->of_node, adv7511);
> @@ -1297,7 +1297,7 @@ static int adv7511_probe(struct i2c_client *i2c)
>
> i2c_set_clientdata(i2c, adv7511);
>
> - if (info->type == ADV7511)
> + if (info->link_config)
> adv7511_set_link_config(adv7511, &link_config);
>
> ret = adv7511_cec_init(dev, adv7511);
> @@ -1362,7 +1362,8 @@ 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)
> + .num_supplies = ARRAY_SIZE(adv7511_supply_names),
> + .link_config = 1
> };
>
> static const struct adv7511_chip_info adv7533_chip_info = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
2023-08-29 7:34 ` Laurent Pinchart
@ 2023-08-29 14:20 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:20 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean, Adam Ford,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 6/7] drm: adv7511: Add link_config feature bit to
> struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:11PM +0100, Biju Das wrote:
> > The ADV7511 needs link configuration whereas ADV75{33,35} does not
> > need it. Add a feature bit link_config to struct adv7511_chip_info to
> > handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
> > 2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 2a017bb31a14..627531f48f84 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -340,6 +340,7 @@ struct adv7511_chip_info {
> > const char * const *supply_names;
> > unsigned int num_supplies;
> > unsigned has_dsi:1;
> > + unsigned link_config:1;
>
> I would use a bool here too.
OK, will use Boolean.
Cheers,
Biju
>
> I'm not entirely sure about this particular patch, it seems that testing
> the chip type would be better. I'm not totally against it though, so
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 66b3f8fcf67d..6974c267b1d5 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > memset(&link_config, 0, sizeof(link_config));
> >
> > - if (adv7511->info->type == ADV7511)
> > + if (info->link_config)
> > ret = adv7511_parse_dt(dev->of_node, &link_config);
> > else
> > ret = adv7533_parse_dt(dev->of_node, adv7511); @@ -1297,7
> +1297,7
> > @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > i2c_set_clientdata(i2c, adv7511);
> >
> > - if (info->type == ADV7511)
> > + if (info->link_config)
> > adv7511_set_link_config(adv7511, &link_config);
> >
> > ret = adv7511_cec_init(dev, adv7511); @@ -1362,7 +1362,8 @@ 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)
> > + .num_supplies = ARRAY_SIZE(adv7511_supply_names),
> > + .link_config = 1
> > };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 6/7] drm: adv7511: Add link_config feature bit to struct adv7511_chip_info
@ 2023-08-29 14:20 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:20 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, dri-devel@lists.freedesktop.org,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent,
Thanks for the feedback.
> Subject: Re: [PATCH 6/7] drm: adv7511: Add link_config feature bit to
> struct adv7511_chip_info
>
> Hi Biju,
>
> Thank you for the patch.
>
> On Sun, Aug 13, 2023 at 07:05:11PM +0100, Biju Das wrote:
> > The ADV7511 needs link configuration whereas ADV75{33,35} does not
> > need it. Add a feature bit link_config to struct adv7511_chip_info to
> > handle this difference.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 7 ++++---
> > 2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 2a017bb31a14..627531f48f84 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -340,6 +340,7 @@ struct adv7511_chip_info {
> > const char * const *supply_names;
> > unsigned int num_supplies;
> > unsigned has_dsi:1;
> > + unsigned link_config:1;
>
> I would use a bool here too.
OK, will use Boolean.
Cheers,
Biju
>
> I'm not entirely sure about this particular patch, it seems that testing
> the chip type would be better. I'm not totally against it though, so
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> > };
> >
> > struct adv7511 {
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > index 66b3f8fcf67d..6974c267b1d5 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> > @@ -1208,7 +1208,7 @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > memset(&link_config, 0, sizeof(link_config));
> >
> > - if (adv7511->info->type == ADV7511)
> > + if (info->link_config)
> > ret = adv7511_parse_dt(dev->of_node, &link_config);
> > else
> > ret = adv7533_parse_dt(dev->of_node, adv7511); @@ -1297,7
> +1297,7
> > @@ static int adv7511_probe(struct i2c_client *i2c)
> >
> > i2c_set_clientdata(i2c, adv7511);
> >
> > - if (info->type == ADV7511)
> > + if (info->link_config)
> > adv7511_set_link_config(adv7511, &link_config);
> >
> > ret = adv7511_cec_init(dev, adv7511); @@ -1362,7 +1362,8 @@ 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)
> > + .num_supplies = ARRAY_SIZE(adv7511_supply_names),
> > + .link_config = 1
> > };
> >
> > static const struct adv7511_chip_info adv7533_chip_info = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-13 18:05 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Biju Das, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, Adam Ford, dri-devel, Geert Uytterhoeven,
linux-renesas-soc
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 <biju.das.jz@bp.renesas.com>
---
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[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-13 18:05 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-13 18:05 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter
Cc: Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman, dri-devel,
Abhinav Kumar, Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc, Andy Shevchenko, Laurent Pinchart,
Uwe Kleine-König, Biju Das, Adam Ford, Bogdan Togorean
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 <biju.das.jz@bp.renesas.com>
---
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[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 64+ messages in thread* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-13 18:05 ` Biju Das
@ 2023-08-18 12:41 ` Adam Ford
-1 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 12:41 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel, Geert Uytterhoeven, linux-renesas-soc
On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> 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.
It seems like dropping adv7511_type is unrelated to the rest of the
patch, and I think it should be split from this into its own patch
adam
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> 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[] = {
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-18 12:41 ` Adam Ford
0 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 12:41 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, dri-devel, Abhinav Kumar, Jernej Skrabec,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Laurent Pinchart, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> 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.
It seems like dropping adv7511_type is unrelated to the rest of the
patch, and I think it should be split from this into its own patch
adam
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> 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[] = {
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-18 12:41 ` Adam Ford
@ 2023-08-18 13:34 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-18 13:34 UTC (permalink / raw)
To: Adam Ford
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel@lists.freedesktop.org,
Geert Uytterhoeven, linux-renesas-soc@vger.kernel.org
Hi Adam Ford,
Thanks for the feedback.
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> >
> > 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.
>
> It seems like dropping adv7511_type is unrelated to the rest of the patch,
> and I think it should be split from this into its own patch
With this patch, there is no user for adv7511_type that is the
reason it is added here. I thought that is the common practice.
Please correct me if that is not the case.
Cheers,
Biju
>
> adam
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > 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[] = {
> > --
> > 2.25.1
> >
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-18 13:34 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-18 13:34 UTC (permalink / raw)
To: Adam Ford
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, 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, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
Hi Adam Ford,
Thanks for the feedback.
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> >
> > 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.
>
> It seems like dropping adv7511_type is unrelated to the rest of the patch,
> and I think it should be split from this into its own patch
With this patch, there is no user for adv7511_type that is the
reason it is added here. I thought that is the common practice.
Please correct me if that is not the case.
Cheers,
Biju
>
> adam
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > 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[] = {
> > --
> > 2.25.1
> >
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-18 13:34 ` Biju Das
@ 2023-08-18 13:37 ` Adam Ford
-1 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 13:37 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel@lists.freedesktop.org,
Geert Uytterhoeven, linux-renesas-soc@vger.kernel.org
On Fri, Aug 18, 2023 at 8:35 AM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> Hi Adam Ford,
>
> Thanks for the feedback.
>
> > Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> > to struct adv7511_chip_info
> >
> > On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> > wrote:
> > >
> > > 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.
> >
> > It seems like dropping adv7511_type is unrelated to the rest of the patch,
> > and I think it should be split from this into its own patch
>
> With this patch, there is no user for adv7511_type that is the
> reason it is added here. I thought that is the common practice.
>
I wasn't sure.
> Please correct me if that is not the case.
I'll defer to the maintainers. In general I like the series because
it reduces the number of compare evaluations. I'll try to run some
tests on a board that I have with a adv7535 this weekend.
adam
>
> Cheers,
> Biju
>
> >
> > adam
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > 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[] = {
> > > --
> > > 2.25.1
> > >
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-18 13:37 ` Adam Ford
0 siblings, 0 replies; 64+ messages in thread
From: Adam Ford @ 2023-08-18 13:37 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, 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, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
On Fri, Aug 18, 2023 at 8:35 AM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> Hi Adam Ford,
>
> Thanks for the feedback.
>
> > Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> > to struct adv7511_chip_info
> >
> > On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> > wrote:
> > >
> > > 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.
> >
> > It seems like dropping adv7511_type is unrelated to the rest of the patch,
> > and I think it should be split from this into its own patch
>
> With this patch, there is no user for adv7511_type that is the
> reason it is added here. I thought that is the common practice.
>
I wasn't sure.
> Please correct me if that is not the case.
I'll defer to the maintainers. In general I like the series because
it reduces the number of compare evaluations. I'll try to run some
tests on a board that I have with a adv7535 this weekend.
adam
>
> Cheers,
> Biju
>
> >
> > adam
> > >
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > 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[] = {
> > > --
> > > 2.25.1
> > >
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-18 13:37 ` Adam Ford
@ 2023-08-18 13:44 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-18 13:44 UTC (permalink / raw)
To: Adam Ford
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel@lists.freedesktop.org,
Geert Uytterhoeven, linux-renesas-soc@vger.kernel.org
Hi Adam,
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Fri, Aug 18, 2023 at 8:35 AM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> >
> > Hi Adam Ford,
> >
> > Thanks for the feedback.
> >
> > > Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable
> > > feature bit to struct adv7511_chip_info
> > >
> > > On Sun, Aug 13, 2023 at 1:06 PM Biju Das
> > > <biju.das.jz@bp.renesas.com>
> > > wrote:
> > > >
> > > > 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.
> > >
> > > It seems like dropping adv7511_type is unrelated to the rest of the
> > > patch, and I think it should be split from this into its own patch
> >
> > With this patch, there is no user for adv7511_type that is the reason
> > it is added here. I thought that is the common practice.
> >
> I wasn't sure.
>
> > Please correct me if that is not the case.
>
> I'll defer to the maintainers. In general I like the series because it
> reduces the number of compare evaluations. I'll try to run some tests on a
> board that I have with a adv7535 this weekend.
Thank you,
Biju
> >
> > Cheers,
> > Biju
> >
> > >
> > > adam
> > > >
> > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > ---
> > > > 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[] = {
> > > > --
> > > > 2.25.1
> > > >
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-18 13:44 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-18 13:44 UTC (permalink / raw)
To: Adam Ford
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, 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, Uwe Kleine-König, Ahmad Fatoum,
Bogdan Togorean
Hi Adam,
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Fri, Aug 18, 2023 at 8:35 AM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> >
> > Hi Adam Ford,
> >
> > Thanks for the feedback.
> >
> > > Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable
> > > feature bit to struct adv7511_chip_info
> > >
> > > On Sun, Aug 13, 2023 at 1:06 PM Biju Das
> > > <biju.das.jz@bp.renesas.com>
> > > wrote:
> > > >
> > > > 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.
> > >
> > > It seems like dropping adv7511_type is unrelated to the rest of the
> > > patch, and I think it should be split from this into its own patch
> >
> > With this patch, there is no user for adv7511_type that is the reason
> > it is added here. I thought that is the common practice.
> >
> I wasn't sure.
>
> > Please correct me if that is not the case.
>
> I'll defer to the maintainers. In general I like the series because it
> reduces the number of compare evaluations. I'll try to run some tests on a
> board that I have with a adv7535 this weekend.
Thank you,
Biju
> >
> > Cheers,
> > Biju
> >
> > >
> > > adam
> > > >
> > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > > ---
> > > > 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[] = {
> > > > --
> > > > 2.25.1
> > > >
^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-18 12:41 ` Adam Ford
@ 2023-08-29 7:36 ` Laurent Pinchart
-1 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:36 UTC (permalink / raw)
To: Adam Ford
Cc: Biju Das, Andrzej Hajda, Neil Armstrong, Robert Foss,
David Airlie, Daniel Vetter, Jonas Karlman, Jernej Skrabec,
Abhinav Kumar, Uwe Kleine-König, Andy Shevchenko,
Javier Martinez Canillas, Ahmad Fatoum, Rob Herring,
Bogdan Togorean, dri-devel, Geert Uytterhoeven, linux-renesas-soc
On Fri, Aug 18, 2023 at 07:41:45AM -0500, Adam Ford wrote:
> On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
> >
> > 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.
>
> It seems like dropping adv7511_type is unrelated to the rest of the
> patch, and I think it should be split from this into its own patch
Dropping the enum with its last user makes sense, but I think the series
may go a bit too far by adding to the info structure bits that don't
really describe logical features, but are half made up for the sole
purpose of dropping the enum. I would prefer keeping the enum for the
handful of places where a type check makes more sense (in my opinion).
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > 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[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-29 7:36 ` Laurent Pinchart
0 siblings, 0 replies; 64+ messages in thread
From: Laurent Pinchart @ 2023-08-29 7:36 UTC (permalink / raw)
To: Adam Ford
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, dri-devel, Abhinav Kumar, Jernej Skrabec,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Biju Das, Ahmad Fatoum
On Fri, Aug 18, 2023 at 07:41:45AM -0500, Adam Ford wrote:
> On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
> >
> > 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.
>
> It seems like dropping adv7511_type is unrelated to the rest of the
> patch, and I think it should be split from this into its own patch
Dropping the enum with its last user makes sense, but I think the series
may go a bit too far by adding to the info structure bits that don't
really describe logical features, but are half made up for the sole
purpose of dropping the enum. I would prefer keeping the enum for the
handful of places where a type check makes more sense (in my opinion).
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > ---
> > 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[] = {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
2023-08-29 7:36 ` Laurent Pinchart
@ 2023-08-29 14:22 ` Biju Das
-1 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:22 UTC (permalink / raw)
To: Laurent Pinchart, Adam Ford
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Jonas Karlman, Jernej Skrabec, Abhinav Kumar,
Uwe Kleine-König, Andy Shevchenko, Javier Martinez Canillas,
Ahmad Fatoum, Rob Herring, Bogdan Togorean,
dri-devel@lists.freedesktop.org, Geert Uytterhoeven,
linux-renesas-soc@vger.kernel.org
Hi Laurent,
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Fri, Aug 18, 2023 at 07:41:45AM -0500, Adam Ford wrote:
> > On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> > >
> > > 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.
> >
> > It seems like dropping adv7511_type is unrelated to the rest of the
> > patch, and I think it should be split from this into its own patch
>
> Dropping the enum with its last user makes sense, but I think the series
> may go a bit too far by adding to the info structure bits that don't really
> describe logical features, but are half made up for the sole purpose of
> dropping the enum. I would prefer keeping the enum for the handful of
> places where a type check makes more sense (in my opinion).
Based on your feedback on patch#5 we can decide. Still we can
avoid type for hw differences mentioned in patch#5.
Cheers,
Biju
>
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > 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[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread* RE: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit to struct adv7511_chip_info
@ 2023-08-29 14:22 ` Biju Das
0 siblings, 0 replies; 64+ messages in thread
From: Biju Das @ 2023-08-29 14:22 UTC (permalink / raw)
To: Laurent Pinchart, Adam Ford
Cc: Neil Armstrong, Robert Foss, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, dri-devel@lists.freedesktop.org, Abhinav Kumar,
Jernej Skrabec, Javier Martinez Canillas,
linux-renesas-soc@vger.kernel.org, Andy Shevchenko,
Bogdan Togorean, Uwe Kleine-König, Ahmad Fatoum
Hi Laurent,
> Subject: Re: [PATCH 7/7] drm: adv7511: Add hpd_override_enable feature bit
> to struct adv7511_chip_info
>
> On Fri, Aug 18, 2023 at 07:41:45AM -0500, Adam Ford wrote:
> > On Sun, Aug 13, 2023 at 1:06 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> > >
> > > 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.
> >
> > It seems like dropping adv7511_type is unrelated to the rest of the
> > patch, and I think it should be split from this into its own patch
>
> Dropping the enum with its last user makes sense, but I think the series
> may go a bit too far by adding to the info structure bits that don't really
> describe logical features, but are half made up for the sole purpose of
> dropping the enum. I would prefer keeping the enum for the handful of
> places where a type check makes more sense (in my opinion).
Based on your feedback on patch#5 we can decide. Still we can
avoid type for hw differences mentioned in patch#5.
Cheers,
Biju
>
> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > ---
> > > 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[] = {
>
> --
> Regards,
>
> Laurent Pinchart
^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: [PATCH 0/7] ADV7511 driver enhancements
2023-08-13 18:05 ` Biju Das
@ 2023-08-18 13:56 ` Fabio Estevam
-1 siblings, 0 replies; 64+ messages in thread
From: Fabio Estevam @ 2023-08-18 13:56 UTC (permalink / raw)
To: Biju Das
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, David Airlie,
Daniel Vetter, Ahmad Fatoum, Geert Uytterhoeven, Jonas Karlman,
dri-devel, Abhinav Kumar, Jernej Skrabec,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Laurent Pinchart, Uwe Kleine-König, Adam Ford,
Bogdan Togorean
Hi Biju,
On Sun, Aug 13, 2023 at 3:05 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> This patch series aims to improve ADV7511 driver by adding
> feature bits and data instead of comparing enum adv7511_type for
> various hardware differences between ADV7511, ADV7533 and ADV7535.
>
> This patch series tested with[1] on RZ/G2L SMARC EVK which embeds
> ADV7535.
I have successfully tested this series on a imx8mm-evk, which has an ADV7535:
Tested-by: Fabio Estevam <festevam@gmail.com>
^ permalink raw reply [flat|nested] 64+ messages in thread
* Re: [PATCH 0/7] ADV7511 driver enhancements
@ 2023-08-18 13:56 ` Fabio Estevam
0 siblings, 0 replies; 64+ messages in thread
From: Fabio Estevam @ 2023-08-18 13:56 UTC (permalink / raw)
To: Biju Das
Cc: Neil Armstrong, Ahmad Fatoum, Andrzej Hajda, Geert Uytterhoeven,
Jonas Karlman, Adam Ford, Abhinav Kumar, dri-devel,
Javier Martinez Canillas, linux-renesas-soc, Andy Shevchenko,
Bogdan Togorean, Jernej Skrabec, Uwe Kleine-König,
Robert Foss, Laurent Pinchart
Hi Biju,
On Sun, Aug 13, 2023 at 3:05 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
>
> This patch series aims to improve ADV7511 driver by adding
> feature bits and data instead of comparing enum adv7511_type for
> various hardware differences between ADV7511, ADV7533 and ADV7535.
>
> This patch series tested with[1] on RZ/G2L SMARC EVK which embeds
> ADV7535.
I have successfully tested this series on a imx8mm-evk, which has an ADV7535:
Tested-by: Fabio Estevam <festevam@gmail.com>
^ permalink raw reply [flat|nested] 64+ messages in thread