* [RESEND 0/6] drm: struct drm_edid conversions
@ 2024-05-10 13:26 Jani Nikula
2024-05-10 13:26 ` [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid Jani Nikula
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel; +Cc: jani.nikula
Resend of the remaining patches from [1].
BR,
Jani.
[1] https://lore.kernel.org/r/cover.1713273659.git.jani.nikula@intel.com
Jani Nikula (6):
drm/bridge/analogix/anx6345: switch to struct drm_edid
drm/bridge/analogix/anx78xx: switch to struct drm_edid
drm/bridge: anx7625: use struct drm_edid more
drm/i2c: tda998x: switch to struct drm_edid
drm/bochs: switch to struct drm_edid
drm/virtio: switch to struct drm_edid
.../drm/bridge/analogix/analogix-anx6345.c | 15 +++++------
.../drm/bridge/analogix/analogix-anx78xx.c | 23 ++++++++--------
drivers/gpu/drm/bridge/analogix/anx7625.c | 26 ++++++++++++-------
drivers/gpu/drm/bridge/analogix/anx7625.h | 10 ++-----
drivers/gpu/drm/i2c/tda998x_drv.c | 19 +++++++-------
drivers/gpu/drm/tiny/bochs.c | 23 +++++++---------
drivers/gpu/drm/virtio/virtgpu_display.c | 10 +++----
drivers/gpu/drm/virtio/virtgpu_drv.h | 2 +-
drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++-----
9 files changed, 69 insertions(+), 71 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:08 ` Robert Foss
2024-05-10 13:26 ` [RESEND 2/6] drm/bridge/analogix/anx78xx: " Jani Nikula
` (5 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel
Cc: jani.nikula, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
---
.../gpu/drm/bridge/analogix/analogix-anx6345.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
index c9e35731e6a1..42ab6014fe12 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
@@ -47,7 +47,7 @@ struct anx6345 {
struct drm_dp_aux aux;
struct drm_bridge bridge;
struct i2c_client *client;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
struct drm_connector connector;
struct drm_panel *panel;
struct regulator *dvdd12;
@@ -458,7 +458,7 @@ static int anx6345_get_modes(struct drm_connector *connector)
mutex_lock(&anx6345->lock);
- if (!anx6345->edid) {
+ if (!anx6345->drm_edid) {
if (!anx6345->powered) {
anx6345_poweron(anx6345);
power_off = true;
@@ -470,19 +470,18 @@ static int anx6345_get_modes(struct drm_connector *connector)
goto unlock;
}
- anx6345->edid = drm_get_edid(connector, &anx6345->aux.ddc);
- if (!anx6345->edid)
+ anx6345->drm_edid = drm_edid_read_ddc(connector, &anx6345->aux.ddc);
+ if (!anx6345->drm_edid)
DRM_ERROR("Failed to read EDID from panel\n");
- err = drm_connector_update_edid_property(connector,
- anx6345->edid);
+ err = drm_edid_connector_update(connector, anx6345->drm_edid);
if (err) {
DRM_ERROR("Failed to update EDID property: %d\n", err);
goto unlock;
}
}
- num_modes += drm_add_edid_modes(connector, anx6345->edid);
+ num_modes += drm_edid_connector_add_modes(connector);
/* Driver currently supports only 6bpc */
connector->display_info.bpc = 6;
@@ -793,7 +792,7 @@ static void anx6345_i2c_remove(struct i2c_client *client)
unregister_i2c_dummy_clients(anx6345);
- kfree(anx6345->edid);
+ drm_edid_free(anx6345->drm_edid);
mutex_destroy(&anx6345->lock);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 2/6] drm/bridge/analogix/anx78xx: switch to struct drm_edid
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
2024-05-10 13:26 ` [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:09 ` Robert Foss
2024-05-10 13:26 ` [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more Jani Nikula
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel
Cc: jani.nikula, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
---
.../drm/bridge/analogix/analogix-anx78xx.c | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
index 5748a8581af4..ae79bcd8fa55 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
@@ -67,7 +67,7 @@ struct anx78xx {
struct drm_dp_aux aux;
struct drm_bridge bridge;
struct i2c_client *client;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
struct drm_connector connector;
struct anx78xx_platform_data pdata;
struct mutex lock;
@@ -830,8 +830,8 @@ static int anx78xx_get_modes(struct drm_connector *connector)
if (WARN_ON(!anx78xx->powered))
return 0;
- if (anx78xx->edid)
- return drm_add_edid_modes(connector, anx78xx->edid);
+ if (anx78xx->drm_edid)
+ return drm_edid_connector_add_modes(connector);
mutex_lock(&anx78xx->lock);
@@ -841,20 +841,21 @@ static int anx78xx_get_modes(struct drm_connector *connector)
goto unlock;
}
- anx78xx->edid = drm_get_edid(connector, &anx78xx->aux.ddc);
- if (!anx78xx->edid) {
+ anx78xx->drm_edid = drm_edid_read_ddc(connector, &anx78xx->aux.ddc);
+
+ err = drm_edid_connector_update(connector, anx78xx->drm_edid);
+
+ if (!anx78xx->drm_edid) {
DRM_ERROR("Failed to read EDID\n");
goto unlock;
}
- err = drm_connector_update_edid_property(connector,
- anx78xx->edid);
if (err) {
DRM_ERROR("Failed to update EDID property: %d\n", err);
goto unlock;
}
- num_modes = drm_add_edid_modes(connector, anx78xx->edid);
+ num_modes = drm_edid_connector_add_modes(connector);
unlock:
mutex_unlock(&anx78xx->lock);
@@ -1091,8 +1092,8 @@ static bool anx78xx_handle_common_int_4(struct anx78xx *anx78xx, u8 irq)
event = true;
anx78xx_poweroff(anx78xx);
/* Free cached EDID */
- kfree(anx78xx->edid);
- anx78xx->edid = NULL;
+ drm_edid_free(anx78xx->drm_edid);
+ anx78xx->drm_edid = NULL;
} else if (irq & SP_HPD_PLUG) {
DRM_DEBUG_KMS("IRQ: Hot plug detect - cable plug\n");
event = true;
@@ -1363,7 +1364,7 @@ static void anx78xx_i2c_remove(struct i2c_client *client)
unregister_i2c_dummy_clients(anx78xx);
- kfree(anx78xx->edid);
+ drm_edid_free(anx78xx->drm_edid);
}
static const struct of_device_id anx78xx_match_table[] = {
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
2024-05-10 13:26 ` [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid Jani Nikula
2024-05-10 13:26 ` [RESEND 2/6] drm/bridge/analogix/anx78xx: " Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:10 ` Robert Foss
2024-05-10 13:26 ` [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid Jani Nikula
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel
Cc: jani.nikula, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
---
drivers/gpu/drm/bridge/analogix/anx7625.c | 26 +++++++++++++++--------
drivers/gpu/drm/bridge/analogix/anx7625.h | 10 ++-------
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
index 59e9ad349969..d19975c5e5e5 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -464,9 +464,11 @@ static int anx7625_odfc_config(struct anx7625_data *ctx,
*/
static int anx7625_set_k_value(struct anx7625_data *ctx)
{
- struct edid *edid = (struct edid *)ctx->slimport_edid_p.edid_raw_data;
+ struct drm_edid_product_id id;
- if (edid->mfg_id[0] == IVO_MID0 && edid->mfg_id[1] == IVO_MID1)
+ drm_edid_get_product_id(ctx->cached_drm_edid, &id);
+
+ if (be16_to_cpu(id.manufacturer_name) == IVO_MID)
return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client,
MIPI_DIGITAL_ADJ_1, 0x3B);
@@ -1526,7 +1528,8 @@ static int anx7625_wait_hpd_asserted(struct drm_dp_aux *aux,
static void anx7625_remove_edid(struct anx7625_data *ctx)
{
- ctx->slimport_edid_p.edid_block_num = -1;
+ drm_edid_free(ctx->cached_drm_edid);
+ ctx->cached_drm_edid = NULL;
}
static void anx7625_dp_adjust_swing(struct anx7625_data *ctx)
@@ -1787,27 +1790,32 @@ static ssize_t anx7625_aux_transfer(struct drm_dp_aux *aux,
static const struct drm_edid *anx7625_edid_read(struct anx7625_data *ctx)
{
struct device *dev = ctx->dev;
- struct s_edid_data *p_edid = &ctx->slimport_edid_p;
+ u8 *edid_buf;
int edid_num;
- if (ctx->slimport_edid_p.edid_block_num > 0)
+ if (ctx->cached_drm_edid)
goto out;
+ edid_buf = kmalloc(FOUR_BLOCK_SIZE, GFP_KERNEL);
+ if (!edid_buf)
+ return NULL;
+
pm_runtime_get_sync(dev);
_anx7625_hpd_polling(ctx, 5000 * 100);
- edid_num = sp_tx_edid_read(ctx, p_edid->edid_raw_data);
+ edid_num = sp_tx_edid_read(ctx, edid_buf);
pm_runtime_put_sync(dev);
if (edid_num < 1) {
DRM_DEV_ERROR(dev, "Fail to read EDID: %d\n", edid_num);
+ kfree(edid_buf);
return NULL;
}
- p_edid->edid_block_num = edid_num;
+ ctx->cached_drm_edid = drm_edid_alloc(edid_buf, FOUR_BLOCK_SIZE);
+ kfree(edid_buf);
out:
- return drm_edid_alloc(ctx->slimport_edid_p.edid_raw_data,
- FOUR_BLOCK_SIZE);
+ return drm_edid_dup(ctx->cached_drm_edid);
}
static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx)
diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.h b/drivers/gpu/drm/bridge/analogix/anx7625.h
index 39ed35d33836..eb5580f1ab2f 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.h
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.h
@@ -286,8 +286,7 @@
#define MIPI_LANE_CTRL_10 0x0F
#define MIPI_DIGITAL_ADJ_1 0x1B
-#define IVO_MID0 0x26
-#define IVO_MID1 0xCF
+#define IVO_MID 0x26CF
#define MIPI_PLL_M_NUM_23_16 0x1E
#define MIPI_PLL_M_NUM_15_8 0x1F
@@ -417,11 +416,6 @@ enum audio_wd_len {
#define EDID_TRY_CNT 3
#define SUPPORT_PIXEL_CLOCK 300000
-struct s_edid_data {
- int edid_block_num;
- u8 edid_raw_data[FOUR_BLOCK_SIZE];
-};
-
/***************** Display End *****************/
#define MAX_LANES_SUPPORT 4
@@ -466,7 +460,7 @@ struct anx7625_data {
struct anx7625_i2c_client i2c;
struct i2c_client *last_client;
struct timer_list hdcp_timer;
- struct s_edid_data slimport_edid_p;
+ const struct drm_edid *cached_drm_edid;
struct device *codec_dev;
hdmi_codec_plugged_cb plugged_cb;
struct work_struct work;
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
` (2 preceding siblings ...)
2024-05-10 13:26 ` [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:07 ` Robert Foss
2024-05-10 13:26 ` [RESEND 5/6] drm/bochs: " Jani Nikula
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel; +Cc: jani.nikula, Russell King
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: Russell King <linux@armlinux.org.uk>
---
drivers/gpu/drm/i2c/tda998x_drv.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index d8d7de18dd65..2160f05bbd16 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -1283,7 +1283,7 @@ static int read_edid_block(void *data, u8 *buf, unsigned int blk, size_t length)
static int tda998x_connector_get_modes(struct drm_connector *connector)
{
struct tda998x_priv *priv = conn_to_tda998x_priv(connector);
- struct edid *edid;
+ const struct drm_edid *drm_edid;
int n;
/*
@@ -1297,25 +1297,26 @@ static int tda998x_connector_get_modes(struct drm_connector *connector)
if (priv->rev == TDA19988)
reg_clear(priv, REG_TX4, TX4_PD_RAM);
- edid = drm_do_get_edid(connector, read_edid_block, priv);
+ drm_edid = drm_edid_read_custom(connector, read_edid_block, priv);
if (priv->rev == TDA19988)
reg_set(priv, REG_TX4, TX4_PD_RAM);
- if (!edid) {
+ drm_edid_connector_update(connector, drm_edid);
+ cec_notifier_set_phys_addr(priv->cec_notify,
+ connector->display_info.source_physical_address);
+
+ if (!drm_edid) {
dev_warn(&priv->hdmi->dev, "failed to read EDID\n");
return 0;
}
- drm_connector_update_edid_property(connector, edid);
- cec_notifier_set_phys_addr_from_edid(priv->cec_notify, edid);
-
mutex_lock(&priv->audio_mutex);
- n = drm_add_edid_modes(connector, edid);
- priv->sink_has_audio = drm_detect_monitor_audio(edid);
+ n = drm_edid_connector_add_modes(connector);
+ priv->sink_has_audio = connector->display_info.has_audio;
mutex_unlock(&priv->audio_mutex);
- kfree(edid);
+ drm_edid_free(drm_edid);
return n;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 5/6] drm/bochs: switch to struct drm_edid
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
` (3 preceding siblings ...)
2024-05-10 13:26 ` [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:04 ` Robert Foss
2024-05-10 13:26 ` [RESEND 6/6] drm/virtio: " Jani Nikula
2024-05-13 17:16 ` [RESEND 0/6] drm: struct drm_edid conversions Robert Foss
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel; +Cc: jani.nikula, Gerd Hoffmann, virtualization
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/tiny/bochs.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
index 2d7ad808cc0e..d12d6e0bf3df 100644
--- a/drivers/gpu/drm/tiny/bochs.c
+++ b/drivers/gpu/drm/tiny/bochs.c
@@ -85,7 +85,7 @@ struct bochs_device {
u16 yres_virtual;
u32 stride;
u32 bpp;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
/* drm */
struct drm_device *dev;
@@ -199,10 +199,10 @@ static int bochs_hw_load_edid(struct bochs_device *bochs)
if (drm_edid_header_is_valid(header) != 8)
return -1;
- kfree(bochs->edid);
- bochs->edid = drm_do_get_edid(&bochs->connector,
- bochs_get_edid_block, bochs);
- if (bochs->edid == NULL)
+ drm_edid_free(bochs->drm_edid);
+ bochs->drm_edid = drm_edid_read_custom(&bochs->connector,
+ bochs_get_edid_block, bochs);
+ if (bochs->drm_edid == NULL)
return -1;
return 0;
@@ -303,7 +303,7 @@ static void bochs_hw_fini(struct drm_device *dev)
if (bochs->fb_map)
iounmap(bochs->fb_map);
pci_release_regions(to_pci_dev(dev->dev));
- kfree(bochs->edid);
+ drm_edid_free(bochs->drm_edid);
}
static void bochs_hw_blank(struct bochs_device *bochs, bool blank)
@@ -471,12 +471,9 @@ static const struct drm_simple_display_pipe_funcs bochs_pipe_funcs = {
static int bochs_connector_get_modes(struct drm_connector *connector)
{
- struct bochs_device *bochs =
- container_of(connector, struct bochs_device, connector);
- int count = 0;
+ int count;
- if (bochs->edid)
- count = drm_add_edid_modes(connector, bochs->edid);
+ count = drm_edid_connector_add_modes(connector);
if (!count) {
count = drm_add_modes_noedid(connector, 8192, 8192);
@@ -507,10 +504,10 @@ static void bochs_connector_init(struct drm_device *dev)
drm_connector_helper_add(connector, &bochs_connector_connector_helper_funcs);
bochs_hw_load_edid(bochs);
- if (bochs->edid) {
+ if (bochs->drm_edid) {
DRM_INFO("Found EDID data blob.\n");
drm_connector_attach_edid_property(connector);
- drm_connector_update_edid_property(connector, bochs->edid);
+ drm_edid_connector_update(&bochs->connector, bochs->drm_edid);
}
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 6/6] drm/virtio: switch to struct drm_edid
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
` (4 preceding siblings ...)
2024-05-10 13:26 ` [RESEND 5/6] drm/bochs: " Jani Nikula
@ 2024-05-10 13:26 ` Jani Nikula
2024-05-13 17:03 ` Robert Foss
2024-05-13 17:16 ` [RESEND 0/6] drm: struct drm_edid conversions Robert Foss
6 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-05-10 13:26 UTC (permalink / raw)
To: dri-devel
Cc: jani.nikula, David Airlie, Gerd Hoffmann, Gurchetan Singh,
Chia-I Wu, virtualization
Prefer struct drm_edid based functions over struct edid.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Cc: David Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: virtualization@lists.linux.dev
---
drivers/gpu/drm/virtio/virtgpu_display.c | 10 ++++------
drivers/gpu/drm/virtio/virtgpu_drv.h | 2 +-
drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++------
3 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index ad924a8502e9..64baf2f22d9f 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -164,11 +164,9 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
struct drm_display_mode *mode = NULL;
int count, width, height;
- if (output->edid) {
- count = drm_add_edid_modes(connector, output->edid);
- if (count)
- return count;
- }
+ count = drm_edid_connector_add_modes(connector);
+ if (count)
+ return count;
width = le32_to_cpu(output->info.r.width);
height = le32_to_cpu(output->info.r.height);
@@ -369,5 +367,5 @@ void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
return;
for (i = 0 ; i < vgdev->num_scanouts; ++i)
- kfree(vgdev->outputs[i].edid);
+ drm_edid_free(vgdev->outputs[i].drm_edid);
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
index bb7d86a0c6a1..64c236169db8 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -179,7 +179,7 @@ struct virtio_gpu_output {
struct drm_encoder enc;
struct virtio_gpu_display_one info;
struct virtio_gpu_update_cursor cursor;
- struct edid *edid;
+ const struct drm_edid *drm_edid;
int cur_x;
int cur_y;
bool needs_modeset;
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index b1a00c0c25a7..0d3d0d09f39b 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -741,21 +741,21 @@ static void virtio_gpu_cmd_get_edid_cb(struct virtio_gpu_device *vgdev,
(struct virtio_gpu_resp_edid *)vbuf->resp_buf;
uint32_t scanout = le32_to_cpu(cmd->scanout);
struct virtio_gpu_output *output;
- struct edid *new_edid, *old_edid;
+ const struct drm_edid *new_edid, *old_edid;
if (scanout >= vgdev->num_scanouts)
return;
output = vgdev->outputs + scanout;
- new_edid = drm_do_get_edid(&output->conn, virtio_get_edid_block, resp);
- drm_connector_update_edid_property(&output->conn, new_edid);
+ new_edid = drm_edid_read_custom(&output->conn, virtio_get_edid_block, resp);
+ drm_edid_connector_update(&output->conn, new_edid);
spin_lock(&vgdev->display_info_lock);
- old_edid = output->edid;
- output->edid = new_edid;
+ old_edid = output->drm_edid;
+ output->drm_edid = new_edid;
spin_unlock(&vgdev->display_info_lock);
- kfree(old_edid);
+ drm_edid_free(old_edid);
wake_up(&vgdev->resp_wq);
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RESEND 6/6] drm/virtio: switch to struct drm_edid
2024-05-10 13:26 ` [RESEND 6/6] drm/virtio: " Jani Nikula
@ 2024-05-13 17:03 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:03 UTC (permalink / raw)
To: Jani Nikula
Cc: dri-devel, David Airlie, Gerd Hoffmann, Gurchetan Singh,
Chia-I Wu, virtualization
On Fri, May 10, 2024 at 3:34 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: David Airlie <airlied@redhat.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Gurchetan Singh <gurchetansingh@chromium.org>
> Cc: Chia-I Wu <olvaffe@gmail.com>
> Cc: virtualization@lists.linux.dev
> ---
> drivers/gpu/drm/virtio/virtgpu_display.c | 10 ++++------
> drivers/gpu/drm/virtio/virtgpu_drv.h | 2 +-
> drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++------
> 3 files changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> index ad924a8502e9..64baf2f22d9f 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> @@ -164,11 +164,9 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
> struct drm_display_mode *mode = NULL;
> int count, width, height;
>
> - if (output->edid) {
> - count = drm_add_edid_modes(connector, output->edid);
> - if (count)
> - return count;
> - }
> + count = drm_edid_connector_add_modes(connector);
> + if (count)
> + return count;
>
> width = le32_to_cpu(output->info.r.width);
> height = le32_to_cpu(output->info.r.height);
> @@ -369,5 +367,5 @@ void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
> return;
>
> for (i = 0 ; i < vgdev->num_scanouts; ++i)
> - kfree(vgdev->outputs[i].edid);
> + drm_edid_free(vgdev->outputs[i].drm_edid);
> }
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index bb7d86a0c6a1..64c236169db8 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -179,7 +179,7 @@ struct virtio_gpu_output {
> struct drm_encoder enc;
> struct virtio_gpu_display_one info;
> struct virtio_gpu_update_cursor cursor;
> - struct edid *edid;
> + const struct drm_edid *drm_edid;
> int cur_x;
> int cur_y;
> bool needs_modeset;
> diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
> index b1a00c0c25a7..0d3d0d09f39b 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
> @@ -741,21 +741,21 @@ static void virtio_gpu_cmd_get_edid_cb(struct virtio_gpu_device *vgdev,
> (struct virtio_gpu_resp_edid *)vbuf->resp_buf;
> uint32_t scanout = le32_to_cpu(cmd->scanout);
> struct virtio_gpu_output *output;
> - struct edid *new_edid, *old_edid;
> + const struct drm_edid *new_edid, *old_edid;
>
> if (scanout >= vgdev->num_scanouts)
> return;
> output = vgdev->outputs + scanout;
>
> - new_edid = drm_do_get_edid(&output->conn, virtio_get_edid_block, resp);
> - drm_connector_update_edid_property(&output->conn, new_edid);
> + new_edid = drm_edid_read_custom(&output->conn, virtio_get_edid_block, resp);
> + drm_edid_connector_update(&output->conn, new_edid);
>
> spin_lock(&vgdev->display_info_lock);
> - old_edid = output->edid;
> - output->edid = new_edid;
> + old_edid = output->drm_edid;
> + output->drm_edid = new_edid;
> spin_unlock(&vgdev->display_info_lock);
>
> - kfree(old_edid);
> + drm_edid_free(old_edid);
> wake_up(&vgdev->resp_wq);
> }
>
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 5/6] drm/bochs: switch to struct drm_edid
2024-05-10 13:26 ` [RESEND 5/6] drm/bochs: " Jani Nikula
@ 2024-05-13 17:04 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:04 UTC (permalink / raw)
To: Jani Nikula; +Cc: dri-devel, Gerd Hoffmann, virtualization
On Fri, May 10, 2024 at 3:27 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: virtualization@lists.linux.dev
> ---
> drivers/gpu/drm/tiny/bochs.c | 23 ++++++++++-------------
> 1 file changed, 10 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
> index 2d7ad808cc0e..d12d6e0bf3df 100644
> --- a/drivers/gpu/drm/tiny/bochs.c
> +++ b/drivers/gpu/drm/tiny/bochs.c
> @@ -85,7 +85,7 @@ struct bochs_device {
> u16 yres_virtual;
> u32 stride;
> u32 bpp;
> - struct edid *edid;
> + const struct drm_edid *drm_edid;
>
> /* drm */
> struct drm_device *dev;
> @@ -199,10 +199,10 @@ static int bochs_hw_load_edid(struct bochs_device *bochs)
> if (drm_edid_header_is_valid(header) != 8)
> return -1;
>
> - kfree(bochs->edid);
> - bochs->edid = drm_do_get_edid(&bochs->connector,
> - bochs_get_edid_block, bochs);
> - if (bochs->edid == NULL)
> + drm_edid_free(bochs->drm_edid);
> + bochs->drm_edid = drm_edid_read_custom(&bochs->connector,
> + bochs_get_edid_block, bochs);
> + if (bochs->drm_edid == NULL)
> return -1;
>
> return 0;
> @@ -303,7 +303,7 @@ static void bochs_hw_fini(struct drm_device *dev)
> if (bochs->fb_map)
> iounmap(bochs->fb_map);
> pci_release_regions(to_pci_dev(dev->dev));
> - kfree(bochs->edid);
> + drm_edid_free(bochs->drm_edid);
> }
>
> static void bochs_hw_blank(struct bochs_device *bochs, bool blank)
> @@ -471,12 +471,9 @@ static const struct drm_simple_display_pipe_funcs bochs_pipe_funcs = {
>
> static int bochs_connector_get_modes(struct drm_connector *connector)
> {
> - struct bochs_device *bochs =
> - container_of(connector, struct bochs_device, connector);
> - int count = 0;
> + int count;
>
> - if (bochs->edid)
> - count = drm_add_edid_modes(connector, bochs->edid);
> + count = drm_edid_connector_add_modes(connector);
>
> if (!count) {
> count = drm_add_modes_noedid(connector, 8192, 8192);
> @@ -507,10 +504,10 @@ static void bochs_connector_init(struct drm_device *dev)
> drm_connector_helper_add(connector, &bochs_connector_connector_helper_funcs);
>
> bochs_hw_load_edid(bochs);
> - if (bochs->edid) {
> + if (bochs->drm_edid) {
> DRM_INFO("Found EDID data blob.\n");
> drm_connector_attach_edid_property(connector);
> - drm_connector_update_edid_property(connector, bochs->edid);
> + drm_edid_connector_update(&bochs->connector, bochs->drm_edid);
> }
> }
>
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid
2024-05-10 13:26 ` [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid Jani Nikula
@ 2024-05-13 17:07 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:07 UTC (permalink / raw)
To: Jani Nikula; +Cc: dri-devel, Russell King
On Fri, May 10, 2024 at 3:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: Russell King <linux@armlinux.org.uk>
> ---
> drivers/gpu/drm/i2c/tda998x_drv.c | 19 ++++++++++---------
> 1 file changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
> index d8d7de18dd65..2160f05bbd16 100644
> --- a/drivers/gpu/drm/i2c/tda998x_drv.c
> +++ b/drivers/gpu/drm/i2c/tda998x_drv.c
> @@ -1283,7 +1283,7 @@ static int read_edid_block(void *data, u8 *buf, unsigned int blk, size_t length)
> static int tda998x_connector_get_modes(struct drm_connector *connector)
> {
> struct tda998x_priv *priv = conn_to_tda998x_priv(connector);
> - struct edid *edid;
> + const struct drm_edid *drm_edid;
> int n;
>
> /*
> @@ -1297,25 +1297,26 @@ static int tda998x_connector_get_modes(struct drm_connector *connector)
> if (priv->rev == TDA19988)
> reg_clear(priv, REG_TX4, TX4_PD_RAM);
>
> - edid = drm_do_get_edid(connector, read_edid_block, priv);
> + drm_edid = drm_edid_read_custom(connector, read_edid_block, priv);
>
> if (priv->rev == TDA19988)
> reg_set(priv, REG_TX4, TX4_PD_RAM);
>
> - if (!edid) {
> + drm_edid_connector_update(connector, drm_edid);
> + cec_notifier_set_phys_addr(priv->cec_notify,
> + connector->display_info.source_physical_address);
> +
> + if (!drm_edid) {
> dev_warn(&priv->hdmi->dev, "failed to read EDID\n");
> return 0;
> }
>
> - drm_connector_update_edid_property(connector, edid);
> - cec_notifier_set_phys_addr_from_edid(priv->cec_notify, edid);
> -
> mutex_lock(&priv->audio_mutex);
> - n = drm_add_edid_modes(connector, edid);
> - priv->sink_has_audio = drm_detect_monitor_audio(edid);
> + n = drm_edid_connector_add_modes(connector);
> + priv->sink_has_audio = connector->display_info.has_audio;
> mutex_unlock(&priv->audio_mutex);
>
> - kfree(edid);
> + drm_edid_free(drm_edid);
>
> return n;
> }
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid
2024-05-10 13:26 ` [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid Jani Nikula
@ 2024-05-13 17:08 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:08 UTC (permalink / raw)
To: Jani Nikula
Cc: dri-devel, Andrzej Hajda, Neil Armstrong, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec
On Fri, May 10, 2024 at 3:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> ---
> .../gpu/drm/bridge/analogix/analogix-anx6345.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> index c9e35731e6a1..42ab6014fe12 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
> @@ -47,7 +47,7 @@ struct anx6345 {
> struct drm_dp_aux aux;
> struct drm_bridge bridge;
> struct i2c_client *client;
> - struct edid *edid;
> + const struct drm_edid *drm_edid;
> struct drm_connector connector;
> struct drm_panel *panel;
> struct regulator *dvdd12;
> @@ -458,7 +458,7 @@ static int anx6345_get_modes(struct drm_connector *connector)
>
> mutex_lock(&anx6345->lock);
>
> - if (!anx6345->edid) {
> + if (!anx6345->drm_edid) {
> if (!anx6345->powered) {
> anx6345_poweron(anx6345);
> power_off = true;
> @@ -470,19 +470,18 @@ static int anx6345_get_modes(struct drm_connector *connector)
> goto unlock;
> }
>
> - anx6345->edid = drm_get_edid(connector, &anx6345->aux.ddc);
> - if (!anx6345->edid)
> + anx6345->drm_edid = drm_edid_read_ddc(connector, &anx6345->aux.ddc);
> + if (!anx6345->drm_edid)
> DRM_ERROR("Failed to read EDID from panel\n");
>
> - err = drm_connector_update_edid_property(connector,
> - anx6345->edid);
> + err = drm_edid_connector_update(connector, anx6345->drm_edid);
> if (err) {
> DRM_ERROR("Failed to update EDID property: %d\n", err);
> goto unlock;
> }
> }
>
> - num_modes += drm_add_edid_modes(connector, anx6345->edid);
> + num_modes += drm_edid_connector_add_modes(connector);
>
> /* Driver currently supports only 6bpc */
> connector->display_info.bpc = 6;
> @@ -793,7 +792,7 @@ static void anx6345_i2c_remove(struct i2c_client *client)
>
> unregister_i2c_dummy_clients(anx6345);
>
> - kfree(anx6345->edid);
> + drm_edid_free(anx6345->drm_edid);
>
> mutex_destroy(&anx6345->lock);
> }
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 2/6] drm/bridge/analogix/anx78xx: switch to struct drm_edid
2024-05-10 13:26 ` [RESEND 2/6] drm/bridge/analogix/anx78xx: " Jani Nikula
@ 2024-05-13 17:09 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:09 UTC (permalink / raw)
To: Jani Nikula
Cc: dri-devel, Andrzej Hajda, Neil Armstrong, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec
On Fri, May 10, 2024 at 3:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> ---
> .../drm/bridge/analogix/analogix-anx78xx.c | 23 ++++++++++---------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
> index 5748a8581af4..ae79bcd8fa55 100644
> --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
> +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c
> @@ -67,7 +67,7 @@ struct anx78xx {
> struct drm_dp_aux aux;
> struct drm_bridge bridge;
> struct i2c_client *client;
> - struct edid *edid;
> + const struct drm_edid *drm_edid;
> struct drm_connector connector;
> struct anx78xx_platform_data pdata;
> struct mutex lock;
> @@ -830,8 +830,8 @@ static int anx78xx_get_modes(struct drm_connector *connector)
> if (WARN_ON(!anx78xx->powered))
> return 0;
>
> - if (anx78xx->edid)
> - return drm_add_edid_modes(connector, anx78xx->edid);
> + if (anx78xx->drm_edid)
> + return drm_edid_connector_add_modes(connector);
>
> mutex_lock(&anx78xx->lock);
>
> @@ -841,20 +841,21 @@ static int anx78xx_get_modes(struct drm_connector *connector)
> goto unlock;
> }
>
> - anx78xx->edid = drm_get_edid(connector, &anx78xx->aux.ddc);
> - if (!anx78xx->edid) {
> + anx78xx->drm_edid = drm_edid_read_ddc(connector, &anx78xx->aux.ddc);
> +
> + err = drm_edid_connector_update(connector, anx78xx->drm_edid);
> +
> + if (!anx78xx->drm_edid) {
> DRM_ERROR("Failed to read EDID\n");
> goto unlock;
> }
>
> - err = drm_connector_update_edid_property(connector,
> - anx78xx->edid);
> if (err) {
> DRM_ERROR("Failed to update EDID property: %d\n", err);
> goto unlock;
> }
>
> - num_modes = drm_add_edid_modes(connector, anx78xx->edid);
> + num_modes = drm_edid_connector_add_modes(connector);
>
> unlock:
> mutex_unlock(&anx78xx->lock);
> @@ -1091,8 +1092,8 @@ static bool anx78xx_handle_common_int_4(struct anx78xx *anx78xx, u8 irq)
> event = true;
> anx78xx_poweroff(anx78xx);
> /* Free cached EDID */
> - kfree(anx78xx->edid);
> - anx78xx->edid = NULL;
> + drm_edid_free(anx78xx->drm_edid);
> + anx78xx->drm_edid = NULL;
> } else if (irq & SP_HPD_PLUG) {
> DRM_DEBUG_KMS("IRQ: Hot plug detect - cable plug\n");
> event = true;
> @@ -1363,7 +1364,7 @@ static void anx78xx_i2c_remove(struct i2c_client *client)
>
> unregister_i2c_dummy_clients(anx78xx);
>
> - kfree(anx78xx->edid);
> + drm_edid_free(anx78xx->drm_edid);
> }
>
> static const struct of_device_id anx78xx_match_table[] = {
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more
2024-05-10 13:26 ` [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more Jani Nikula
@ 2024-05-13 17:10 ` Robert Foss
0 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:10 UTC (permalink / raw)
To: Jani Nikula
Cc: dri-devel, Andrzej Hajda, Neil Armstrong, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec
On Fri, May 10, 2024 at 3:26 PM Jani Nikula <jani.nikula@intel.com> wrote:
>
> Prefer struct drm_edid based functions over struct edid.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Cc: Andrzej Hajda <andrzej.hajda@intel.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Robert Foss <rfoss@kernel.org>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
> ---
> drivers/gpu/drm/bridge/analogix/anx7625.c | 26 +++++++++++++++--------
> drivers/gpu/drm/bridge/analogix/anx7625.h | 10 ++-------
> 2 files changed, 19 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
> index 59e9ad349969..d19975c5e5e5 100644
> --- a/drivers/gpu/drm/bridge/analogix/anx7625.c
> +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
> @@ -464,9 +464,11 @@ static int anx7625_odfc_config(struct anx7625_data *ctx,
> */
> static int anx7625_set_k_value(struct anx7625_data *ctx)
> {
> - struct edid *edid = (struct edid *)ctx->slimport_edid_p.edid_raw_data;
> + struct drm_edid_product_id id;
>
> - if (edid->mfg_id[0] == IVO_MID0 && edid->mfg_id[1] == IVO_MID1)
> + drm_edid_get_product_id(ctx->cached_drm_edid, &id);
> +
> + if (be16_to_cpu(id.manufacturer_name) == IVO_MID)
> return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client,
> MIPI_DIGITAL_ADJ_1, 0x3B);
>
> @@ -1526,7 +1528,8 @@ static int anx7625_wait_hpd_asserted(struct drm_dp_aux *aux,
>
> static void anx7625_remove_edid(struct anx7625_data *ctx)
> {
> - ctx->slimport_edid_p.edid_block_num = -1;
> + drm_edid_free(ctx->cached_drm_edid);
> + ctx->cached_drm_edid = NULL;
> }
>
> static void anx7625_dp_adjust_swing(struct anx7625_data *ctx)
> @@ -1787,27 +1790,32 @@ static ssize_t anx7625_aux_transfer(struct drm_dp_aux *aux,
> static const struct drm_edid *anx7625_edid_read(struct anx7625_data *ctx)
> {
> struct device *dev = ctx->dev;
> - struct s_edid_data *p_edid = &ctx->slimport_edid_p;
> + u8 *edid_buf;
> int edid_num;
>
> - if (ctx->slimport_edid_p.edid_block_num > 0)
> + if (ctx->cached_drm_edid)
> goto out;
>
> + edid_buf = kmalloc(FOUR_BLOCK_SIZE, GFP_KERNEL);
> + if (!edid_buf)
> + return NULL;
> +
> pm_runtime_get_sync(dev);
> _anx7625_hpd_polling(ctx, 5000 * 100);
> - edid_num = sp_tx_edid_read(ctx, p_edid->edid_raw_data);
> + edid_num = sp_tx_edid_read(ctx, edid_buf);
> pm_runtime_put_sync(dev);
>
> if (edid_num < 1) {
> DRM_DEV_ERROR(dev, "Fail to read EDID: %d\n", edid_num);
> + kfree(edid_buf);
> return NULL;
> }
>
> - p_edid->edid_block_num = edid_num;
> + ctx->cached_drm_edid = drm_edid_alloc(edid_buf, FOUR_BLOCK_SIZE);
> + kfree(edid_buf);
>
> out:
> - return drm_edid_alloc(ctx->slimport_edid_p.edid_raw_data,
> - FOUR_BLOCK_SIZE);
> + return drm_edid_dup(ctx->cached_drm_edid);
> }
>
> static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx)
> diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.h b/drivers/gpu/drm/bridge/analogix/anx7625.h
> index 39ed35d33836..eb5580f1ab2f 100644
> --- a/drivers/gpu/drm/bridge/analogix/anx7625.h
> +++ b/drivers/gpu/drm/bridge/analogix/anx7625.h
> @@ -286,8 +286,7 @@
>
> #define MIPI_LANE_CTRL_10 0x0F
> #define MIPI_DIGITAL_ADJ_1 0x1B
> -#define IVO_MID0 0x26
> -#define IVO_MID1 0xCF
> +#define IVO_MID 0x26CF
>
> #define MIPI_PLL_M_NUM_23_16 0x1E
> #define MIPI_PLL_M_NUM_15_8 0x1F
> @@ -417,11 +416,6 @@ enum audio_wd_len {
> #define EDID_TRY_CNT 3
> #define SUPPORT_PIXEL_CLOCK 300000
>
> -struct s_edid_data {
> - int edid_block_num;
> - u8 edid_raw_data[FOUR_BLOCK_SIZE];
> -};
> -
> /***************** Display End *****************/
>
> #define MAX_LANES_SUPPORT 4
> @@ -466,7 +460,7 @@ struct anx7625_data {
> struct anx7625_i2c_client i2c;
> struct i2c_client *last_client;
> struct timer_list hdcp_timer;
> - struct s_edid_data slimport_edid_p;
> + const struct drm_edid *cached_drm_edid;
> struct device *codec_dev;
> hdmi_codec_plugged_cb plugged_cb;
> struct work_struct work;
> --
> 2.39.2
>
Reviewed-by: Robert Foss <rfoss@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 0/6] drm: struct drm_edid conversions
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
` (5 preceding siblings ...)
2024-05-10 13:26 ` [RESEND 6/6] drm/virtio: " Jani Nikula
@ 2024-05-13 17:16 ` Robert Foss
6 siblings, 0 replies; 14+ messages in thread
From: Robert Foss @ 2024-05-13 17:16 UTC (permalink / raw)
To: dri-devel, Jani Nikula; +Cc: Robert Foss
On Fri, 10 May 2024 16:26:03 +0300, Jani Nikula wrote:
> Resend of the remaining patches from [1].
>
> BR,
> Jani.
>
> [1] https://lore.kernel.org/r/cover.1713273659.git.jani.nikula@intel.com
>
> [...]
Fixed checkpatch issue in "drm/bochs: switch to struct drm_edid"
Applied, thanks!
[1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=37f3821c7cc8
[2/6] drm/bridge/analogix/anx78xx: switch to struct drm_edid
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=8aa8781ba3c1
[3/6] drm/bridge: anx7625: use struct drm_edid more
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=7c585f9a71aa
[4/6] drm/i2c: tda998x: switch to struct drm_edid
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=78e90e003b96
[5/6] drm/bochs: switch to struct drm_edid
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=5c465601d423
[6/6] drm/virtio: switch to struct drm_edid
https://cgit.freedesktop.org/drm/drm-misc/commit/?id=ac15c653fb09
Rob
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-05-13 17:17 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-10 13:26 [RESEND 0/6] drm: struct drm_edid conversions Jani Nikula
2024-05-10 13:26 ` [RESEND 1/6] drm/bridge/analogix/anx6345: switch to struct drm_edid Jani Nikula
2024-05-13 17:08 ` Robert Foss
2024-05-10 13:26 ` [RESEND 2/6] drm/bridge/analogix/anx78xx: " Jani Nikula
2024-05-13 17:09 ` Robert Foss
2024-05-10 13:26 ` [RESEND 3/6] drm/bridge: anx7625: use struct drm_edid more Jani Nikula
2024-05-13 17:10 ` Robert Foss
2024-05-10 13:26 ` [RESEND 4/6] drm/i2c: tda998x: switch to struct drm_edid Jani Nikula
2024-05-13 17:07 ` Robert Foss
2024-05-10 13:26 ` [RESEND 5/6] drm/bochs: " Jani Nikula
2024-05-13 17:04 ` Robert Foss
2024-05-10 13:26 ` [RESEND 6/6] drm/virtio: " Jani Nikula
2024-05-13 17:03 ` Robert Foss
2024-05-13 17:16 ` [RESEND 0/6] drm: struct drm_edid conversions Robert Foss
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.