* [PATCH 00/12] drm/i915: Populate connector->ddc always
@ 2023-08-29 11:39 Ville Syrjala
2023-08-29 11:39 ` [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove() Ville Syrjala
` (12 more replies)
0 siblings, 13 replies; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc for all output types that don't already
do so, and clean up a bunch of code as a result of having the
ddc i2c adapter in easy reach. And this also provides the sysfs
"ddc" symlink.
There are potentially a few oddball (mostly DVI-I) cases where
the connector detection/EDID read uses an alternate DDC bus
internally, and so for those the symlink might not point at the
correct i2c adapter. I'm not interested in spending extra brain
cells on those, so we'll leave them as is for now.
Ville Syrjälä (12):
drm: Reorder drm_sysfs_connector_remove() vs.
drm_debugfs_connector_remove()
drm/sysfs: Register "ddc" symlink later
drm/i915: Call the DDC bus i2c adapter "ddc"
drm/i915/lvds: Populate connector->ddc
drm/i915/crt: Populate connector->ddc
drm/i915/dvo: Populate connector->ddc
drm/i915/dp: Populate connector->ddc
drm/i915/mst: Populate connector->ddc
drm/i915/hdmi: Use connector->ddc everwhere
drm/i915/hdmi: Nuke hdmi->ddc_bus
drm/i915/hdmi: Remove old i2c symlink
drm/i915/sdvo: Constify mapping structs
drivers/gpu/drm/drm_connector.c | 11 ++-
drivers/gpu/drm/drm_internal.h | 2 +
drivers/gpu/drm/drm_sysfs.c | 22 +++--
.../gpu/drm/i915/display/intel_connector.c | 6 +-
.../gpu/drm/i915/display/intel_connector.h | 2 +-
drivers/gpu/drm/i915/display/intel_crt.c | 38 +++----
drivers/gpu/drm/i915/display/intel_ddi.c | 5 +-
.../drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_dp.c | 9 +-
drivers/gpu/drm/i915/display/intel_dp_mst.c | 6 +-
drivers/gpu/drm/i915/display/intel_dvo.c | 11 +--
drivers/gpu/drm/i915/display/intel_hdmi.c | 98 ++++++-------------
drivers/gpu/drm/i915/display/intel_lspcon.c | 14 +--
drivers/gpu/drm/i915/display/intel_lvds.c | 23 +++--
drivers/gpu/drm/i915/display/intel_sdvo.c | 6 +-
15 files changed, 119 insertions(+), 135 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove()
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 11:52 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 02/12] drm/sysfs: Register "ddc" symlink later Ville Syrjala
` (11 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Use the standard onion peeling approach and call
drm_debugfs_connector_remove() and
drm_sysfs_connector_remove() in the reverse order in
drm_connector_unregister() than what we called their
add counterpartse in drm_connector_register().
The error unwiding in drm_connector_register() is
already doing this the correct way around.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/drm_connector.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index c44d5bcf1284..988996cf6da5 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -684,8 +684,8 @@ void drm_connector_unregister(struct drm_connector *connector)
if (connector->funcs->early_unregister)
connector->funcs->early_unregister(connector);
- drm_sysfs_connector_remove(connector);
drm_debugfs_connector_remove(connector);
+ drm_sysfs_connector_remove(connector);
connector->registration_state = DRM_CONNECTOR_UNREGISTERED;
mutex_unlock(&connector->mutex);
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 02/12] drm/sysfs: Register "ddc" symlink later
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
2023-08-29 11:39 ` [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove() Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 11:59 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc" Ville Syrjala
` (10 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx
Cc: Neil Armstrong, Daniel Vetter, dri-devel, Andrzej Pietrasiewicz,
Andrzej Hajda, Sam Ravnborg, Emil Velikov
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Currently drm_sysfs_connector_add() attempts to register
the "ddc" symlink (based one connector->ddc) before the
driver's .early_register() hook has been called. That is
too early for i915 which only fully registers the aux ch
and associated i2c bus from said hook (to prevent half
initialized stuff getting exposed to userspace). This
causes my attempt at using drm_connector_init_with_ddc()
to fail, and the entire connector disappears from sysfs
on account of sysfs_create_link() failing.
To fix that split the sysfs symlink stuff into separate
functions (drm_sysfs_connector_add_late() and
drm_sysfs_connector_remove_early()) which are called
on the opposite side of the .later_register() and
.early_unregister() hooks.
Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Emil Velikov <emil.velikov@collabora.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/drm_connector.c | 9 +++++++++
drivers/gpu/drm/drm_internal.h | 2 ++
drivers/gpu/drm/drm_sysfs.c | 22 +++++++++++++++-------
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 988996cf6da5..9d4c7b0c5c05 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -631,6 +631,10 @@ int drm_connector_register(struct drm_connector *connector)
goto err_debugfs;
}
+ ret = drm_sysfs_connector_add_late(connector);
+ if (ret)
+ goto err_late_register;
+
drm_mode_object_register(connector->dev, &connector->base);
connector->registration_state = DRM_CONNECTOR_REGISTERED;
@@ -647,6 +651,9 @@ int drm_connector_register(struct drm_connector *connector)
mutex_unlock(&connector_list_lock);
goto unlock;
+err_late_register:
+ if (connector->funcs->early_unregister)
+ connector->funcs->early_unregister(connector);
err_debugfs:
drm_debugfs_connector_remove(connector);
drm_sysfs_connector_remove(connector);
@@ -681,6 +688,8 @@ void drm_connector_unregister(struct drm_connector *connector)
connector->privacy_screen,
&connector->privacy_screen_notifier);
+ drm_sysfs_connector_remove_early(connector);
+
if (connector->funcs->early_unregister)
connector->funcs->early_unregister(connector);
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index ba12acd55139..4053cf8105ce 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -153,6 +153,8 @@ int drm_sysfs_init(void);
void drm_sysfs_destroy(void);
struct device *drm_sysfs_minor_alloc(struct drm_minor *minor);
int drm_sysfs_connector_add(struct drm_connector *connector);
+int drm_sysfs_connector_add_late(struct drm_connector *connector);
+void drm_sysfs_connector_remove_early(struct drm_connector *connector);
void drm_sysfs_connector_remove(struct drm_connector *connector);
void drm_sysfs_lease_event(struct drm_device *dev);
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index b169b3e44a92..a953f69a34b6 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -400,10 +400,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
drm_err(dev, "failed to add component to create link to typec connector\n");
}
- if (connector->ddc)
- return sysfs_create_link(&connector->kdev->kobj,
- &connector->ddc->dev.kobj, "ddc");
-
return 0;
err_free:
@@ -411,14 +407,26 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
return r;
}
+int drm_sysfs_connector_add_late(struct drm_connector *connector)
+{
+ if (connector->ddc)
+ return sysfs_create_link(&connector->kdev->kobj,
+ &connector->ddc->dev.kobj, "ddc");
+
+ return 0;
+}
+
+void drm_sysfs_connector_remove_early(struct drm_connector *connector)
+{
+ if (connector->ddc)
+ sysfs_remove_link(&connector->kdev->kobj, "ddc");
+}
+
void drm_sysfs_connector_remove(struct drm_connector *connector)
{
if (!connector->kdev)
return;
- if (connector->ddc)
- sysfs_remove_link(&connector->kdev->kobj, "ddc");
-
if (dev_fwnode(connector->kdev))
component_del(connector->kdev, &typec_connector_ops);
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc"
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
2023-08-29 11:39 ` [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove() Ville Syrjala
2023-08-29 11:39 ` [PATCH 02/12] drm/sysfs: Register "ddc" symlink later Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 11:19 ` Jani Nikula
2023-08-31 10:43 ` [PATCH v2 " Ville Syrjala
2023-08-29 11:39 ` [PATCH 04/12] drm/i915/lvds: Populate connector->ddc Ville Syrjala
` (9 subsequent siblings)
12 siblings, 2 replies; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Rename the various names we've used for the DDC bus
i2c adapter ("i2c", "adapter", etc.) to just "ddc".
This differentiates it from the various other i2c
busses we might have (DSI panel stuff, DVO control bus, etc.).
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
.../gpu/drm/i915/display/intel_connector.c | 6 +--
.../gpu/drm/i915/display/intel_connector.h | 2 +-
drivers/gpu/drm/i915/display/intel_crt.c | 32 ++++++------
drivers/gpu/drm/i915/display/intel_ddi.c | 4 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 51 +++++++++----------
drivers/gpu/drm/i915/display/intel_lspcon.c | 14 ++---
6 files changed, 52 insertions(+), 57 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index ff3bcadebe59..c65887870ddc 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -192,17 +192,17 @@ int intel_connector_update_modes(struct drm_connector *connector,
/**
* intel_ddc_get_modes - get modelist from monitor
* @connector: DRM connector device to use
- * @adapter: i2c adapter
+ * @ddc: DDC bus i2c adapter
*
* Fetch the EDID information from @connector using the DDC bus.
*/
int intel_ddc_get_modes(struct drm_connector *connector,
- struct i2c_adapter *adapter)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
int ret;
- drm_edid = drm_edid_read_ddc(connector, adapter);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
if (!drm_edid)
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h
index aaf7281462dc..bafde3f11ff4 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.h
+++ b/drivers/gpu/drm/i915/display/intel_connector.h
@@ -26,7 +26,7 @@ bool intel_connector_get_hw_state(struct intel_connector *connector);
enum pipe intel_connector_get_pipe(struct intel_connector *connector);
int intel_connector_update_modes(struct drm_connector *connector,
const struct drm_edid *drm_edid);
-int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
+int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *ddc);
void intel_attach_force_audio_property(struct drm_connector *connector);
void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
void intel_attach_aspect_ratio_property(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index f66340b4caf0..8145511bd5c3 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -610,18 +610,18 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
}
static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector,
- struct i2c_adapter *i2c)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
- drm_edid = drm_edid_read_ddc(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
- if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
drm_dbg_kms(connector->dev,
"CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
- intel_gmbus_force_bit(i2c, true);
- drm_edid = drm_edid_read_ddc(connector, i2c);
- intel_gmbus_force_bit(i2c, false);
+ intel_gmbus_force_bit(ddc, true);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
+ intel_gmbus_force_bit(ddc, false);
}
return drm_edid;
@@ -629,12 +629,12 @@ static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector
/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
static int intel_crt_ddc_get_modes(struct drm_connector *connector,
- struct i2c_adapter *adapter)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
int ret;
- drm_edid = intel_crt_get_edid(connector, adapter);
+ drm_edid = intel_crt_get_edid(connector, ddc);
if (!drm_edid)
return 0;
@@ -650,11 +650,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
const struct drm_edid *drm_edid;
- struct i2c_adapter *i2c;
+ struct i2c_adapter *ddc;
bool ret = false;
- i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- drm_edid = intel_crt_get_edid(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
+ drm_edid = intel_crt_get_edid(connector, ddc);
if (drm_edid) {
const struct edid *edid = drm_edid_raw(drm_edid);
@@ -917,20 +917,20 @@ static int intel_crt_get_modes(struct drm_connector *connector)
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct intel_encoder *intel_encoder = &crt->base;
intel_wakeref_t wakeref;
- struct i2c_adapter *i2c;
+ struct i2c_adapter *ddc;
int ret;
wakeref = intel_display_power_get(dev_priv,
intel_encoder->power_domain);
- i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- ret = intel_crt_ddc_get_modes(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
+ ret = intel_crt_ddc_get_modes(connector, ddc);
if (ret || !IS_G4X(dev_priv))
goto out;
/* Try to probe digital port for output in DVI-I -> VGA mode. */
- i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
- ret = intel_crt_ddc_get_modes(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
+ ret = intel_crt_ddc_get_modes(connector, ddc);
out:
intel_display_power_put(dev_priv, intel_encoder->power_domain, wakeref);
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index b7f4281b8658..e6cc4dab3201 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4323,7 +4323,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_hdmi *hdmi = enc_to_intel_hdmi(encoder);
struct intel_connector *connector = hdmi->attached_connector;
- struct i2c_adapter *adapter =
+ struct i2c_adapter *ddc =
intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
struct drm_connector_state *conn_state;
struct intel_crtc_state *crtc_state;
@@ -4365,7 +4365,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
!try_wait_for_completion(&conn_state->commit->hw_done))
return 0;
- ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
+ ret = drm_scdc_readb(ddc, SCDC_TMDS_CONFIG, &config);
if (ret < 0) {
drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
connector->base.base.id, connector->base.name, ret);
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 116556d6352a..82f9a40b34e3 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1240,17 +1240,16 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
{
struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
- struct i2c_adapter *adapter;
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
return;
- adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
-
drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n",
enable ? "Enabling" : "Disabling");
- drm_dp_dual_mode_set_tmds_output(&dev_priv->drm, hdmi->dp_dual_mode.type, adapter, enable);
+ drm_dp_dual_mode_set_tmds_output(&dev_priv->drm,
+ hdmi->dp_dual_mode.type, ddc, enable);
}
static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
@@ -1258,8 +1257,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
u8 start = offset & 0xff;
struct i2c_msg msgs[] = {
@@ -1276,7 +1274,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
.buf = buffer
}
};
- ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs));
+ ret = i2c_transfer(ddc, msgs, ARRAY_SIZE(msgs));
if (ret == ARRAY_SIZE(msgs))
return 0;
return ret >= 0 ? -EIO : ret;
@@ -1287,8 +1285,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
u8 *write_buf;
struct i2c_msg msg;
@@ -1305,7 +1302,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
msg.len = size + 1,
msg.buf = write_buf;
- ret = i2c_transfer(adapter, &msg, 1);
+ ret = i2c_transfer(ddc, &msg, 1);
if (ret == 1)
ret = 0;
else if (ret >= 0)
@@ -1321,8 +1318,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
ret = intel_hdmi_hdcp_write(dig_port, DRM_HDCP_DDC_AN, an,
@@ -1333,7 +1329,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
return ret;
}
- ret = intel_gmbus_output_aksv(adapter);
+ ret = intel_gmbus_output_aksv(ddc);
if (ret < 0) {
drm_dbg_kms(&i915->drm, "Failed to output aksv (%d)\n", ret);
return ret;
@@ -2402,9 +2398,8 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base;
- struct i2c_adapter *adapter =
- intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
- enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, adapter);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+ enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
/*
* Type 1 DVI adaptors are not required to implement any
@@ -2431,7 +2426,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
hdmi->dp_dual_mode.type = type;
hdmi->dp_dual_mode.max_tmds_clock =
- drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, adapter);
+ drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, ddc);
drm_dbg_kms(&dev_priv->drm,
"DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n",
@@ -2452,24 +2447,24 @@ intel_hdmi_set_edid(struct drm_connector *connector)
{
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
intel_wakeref_t wakeref;
const struct drm_edid *drm_edid;
const struct edid *edid;
bool connected = false;
- struct i2c_adapter *i2c;
wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
- i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
+ edid = drm_get_edid(connector, ddc);
- drm_edid = drm_edid_read_ddc(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
- if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
drm_dbg_kms(&dev_priv->drm,
"HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
- intel_gmbus_force_bit(i2c, true);
- drm_edid = drm_edid_read_ddc(connector, i2c);
- intel_gmbus_force_bit(i2c, false);
+ intel_gmbus_force_bit(ddc, true);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
+ intel_gmbus_force_bit(ddc, false);
}
/* Below we depend on display info having been updated */
@@ -2561,8 +2556,8 @@ intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
{
struct drm_i915_private *i915 = to_i915(connector->dev);
- struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
- struct kobject *i2c_kobj = &adapter->dev.kobj;
+ struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
int ret;
@@ -2573,8 +2568,8 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
{
- struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
- struct kobject *i2c_kobj = &adapter->dev.kobj;
+ struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
sysfs_remove_link(connector_kobj, i2c_kobj->name);
diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
index bb3b5355a0d9..152a22a8ffd2 100644
--- a/drivers/gpu/drm/i915/display/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
@@ -144,9 +144,9 @@ static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
enum drm_lspcon_mode current_mode;
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
- if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode)) {
+ if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode)) {
drm_dbg_kms(&i915->drm, "Error reading LSPCON mode\n");
return DRM_LSPCON_MODE_INVALID;
}
@@ -185,9 +185,9 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
int err;
enum drm_lspcon_mode current_mode;
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
- err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode);
+ err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode);
if (err) {
drm_err(&i915->drm, "Error reading LSPCON mode\n");
return err;
@@ -198,7 +198,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
return 0;
}
- err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, adapter, mode);
+ err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode);
if (err < 0) {
drm_err(&i915->drm, "LSPCON mode change failed\n");
return err;
@@ -233,7 +233,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
enum drm_dp_dual_mode_type adaptor_type;
struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
enum drm_lspcon_mode expected_mode;
expected_mode = lspcon_wake_native_aux_ch(lspcon) ?
@@ -244,7 +244,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
if (retry)
usleep_range(500, 1000);
- adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, adapter);
+ adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc);
if (adaptor_type == DRM_DP_DUAL_MODE_LSPCON)
break;
}
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 04/12] drm/i915/lvds: Populate connector->ddc
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (2 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc" Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:05 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 05/12] drm/i915/crt: " Ville Syrjala
` (8 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc, and thus create the "ddc" symlink
in sysfs for the LVDS port.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_lvds.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 3ace56979b70..2306e133e3f6 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -837,7 +837,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
struct intel_encoder *encoder;
i915_reg_t lvds_reg;
u32 lvds;
- u8 pin;
+ u8 ddc_pin;
/* Skip init on machines we know falsely report LVDS */
if (dmi_check_system(intel_no_lvds)) {
@@ -864,8 +864,8 @@ void intel_lvds_init(struct drm_i915_private *i915)
return;
}
- pin = GMBUS_PIN_PANEL;
- if (!intel_bios_is_lvds_present(i915, &pin)) {
+ ddc_pin = GMBUS_PIN_PANEL;
+ if (!intel_bios_is_lvds_present(i915, &ddc_pin)) {
if ((lvds & LVDS_PORT_EN) == 0) {
drm_dbg_kms(&i915->drm,
"LVDS is not present in VBT\n");
@@ -888,8 +888,10 @@ void intel_lvds_init(struct drm_i915_private *i915)
lvds_encoder->attached_connector = connector;
encoder = &lvds_encoder->base;
- drm_connector_init(&i915->drm, &connector->base, &intel_lvds_connector_funcs,
- DRM_MODE_CONNECTOR_LVDS);
+ drm_connector_init_with_ddc(&i915->drm, &connector->base,
+ &intel_lvds_connector_funcs,
+ DRM_MODE_CONNECTOR_LVDS,
+ intel_gmbus_get_adapter(i915, ddc_pin));
drm_encoder_init(&i915->drm, &encoder->base, &intel_lvds_enc_funcs,
DRM_MODE_ENCODER_LVDS, "LVDS");
@@ -943,13 +945,10 @@ void intel_lvds_init(struct drm_i915_private *i915)
* preferred mode is the right one.
*/
mutex_lock(&i915->drm.mode_config.mutex);
- if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC) {
- drm_edid = drm_edid_read_switcheroo(&connector->base,
- intel_gmbus_get_adapter(i915, pin));
- } else {
- drm_edid = drm_edid_read_ddc(&connector->base,
- intel_gmbus_get_adapter(i915, pin));
- }
+ if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC)
+ drm_edid = drm_edid_read_switcheroo(&connector->base, connector->base.ddc);
+ else
+ drm_edid = drm_edid_read_ddc(&connector->base, connector->base.ddc);
if (drm_edid) {
if (drm_edid_connector_update(&connector->base, drm_edid) ||
!drm_edid_connector_add_modes(&connector->base)) {
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 05/12] drm/i915/crt: Populate connector->ddc
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (3 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 04/12] drm/i915/lvds: Populate connector->ddc Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:06 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 06/12] drm/i915/dvo: " Ville Syrjala
` (7 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc, and thus create the "ddc" symlink
in sysfs for analog VGA connectors.
As a bonus we can replace a bunch of intel_gmbus_get_adapter()
lookups with just the connector->ddc pointer. Sadly one extra
lookup still remains due to the g4x DVI-I shenanigans. We could
perhaps consider borrowing the ddc proxy idea from SDVO to deal
with that in a perhaps nicer way, but can't really be bothered
right now at least. Also not sure exposing such a dual ddc bus
to userspace would be quite wise.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_crt.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 8145511bd5c3..ea3908fd2505 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -650,11 +650,9 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
const struct drm_edid *drm_edid;
- struct i2c_adapter *ddc;
bool ret = false;
- ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- drm_edid = intel_crt_get_edid(connector, ddc);
+ drm_edid = intel_crt_get_edid(connector, connector->ddc);
if (drm_edid) {
const struct edid *edid = drm_edid_raw(drm_edid);
@@ -923,8 +921,7 @@ static int intel_crt_get_modes(struct drm_connector *connector)
wakeref = intel_display_power_get(dev_priv,
intel_encoder->power_domain);
- ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- ret = intel_crt_ddc_get_modes(connector, ddc);
+ ret = intel_crt_ddc_get_modes(connector, connector->ddc);
if (ret || !IS_G4X(dev_priv))
goto out;
@@ -988,6 +985,7 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
struct intel_crt *crt;
struct intel_connector *intel_connector;
i915_reg_t adpa_reg;
+ u8 ddc_pin;
u32 adpa;
if (HAS_PCH_SPLIT(dev_priv))
@@ -1024,10 +1022,14 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
return;
}
+ ddc_pin = dev_priv->display.vbt.crt_ddc_pin;
+
connector = &intel_connector->base;
crt->connector = intel_connector;
- drm_connector_init(&dev_priv->drm, &intel_connector->base,
- &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
+ drm_connector_init_with_ddc(&dev_priv->drm, connector,
+ &intel_crt_connector_funcs,
+ DRM_MODE_CONNECTOR_VGA,
+ intel_gmbus_get_adapter(dev_priv, ddc_pin));
drm_encoder_init(&dev_priv->drm, &crt->base.base, &intel_crt_enc_funcs,
DRM_MODE_ENCODER_DAC, "CRT");
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 06/12] drm/i915/dvo: Populate connector->ddc
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (4 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 05/12] drm/i915/crt: " Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:06 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 07/12] drm/i915/dp: " Ville Syrjala
` (6 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc, and thus create the "ddc" symlink
in sysfs for DVO connectors.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_dvo.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index b386894c3a6d..d9f427856fb8 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -328,7 +328,6 @@ intel_dvo_detect(struct drm_connector *_connector, bool force)
static int intel_dvo_get_modes(struct drm_connector *_connector)
{
struct intel_connector *connector = to_intel_connector(_connector);
- struct drm_i915_private *i915 = to_i915(connector->base.dev);
int num_modes;
/*
@@ -337,8 +336,7 @@ static int intel_dvo_get_modes(struct drm_connector *_connector)
* (TV-out, for example), but for now with just TMDS and LVDS,
* that's not the case.
*/
- num_modes = intel_ddc_get_modes(&connector->base,
- intel_gmbus_get_adapter(i915, GMBUS_PIN_DPC));
+ num_modes = intel_ddc_get_modes(&connector->base, connector->base.ddc);
if (num_modes)
return num_modes;
@@ -533,9 +531,10 @@ void intel_dvo_init(struct drm_i915_private *i915)
connector->polled = DRM_CONNECTOR_POLL_CONNECT |
DRM_CONNECTOR_POLL_DISCONNECT;
- drm_connector_init(&i915->drm, &connector->base,
- &intel_dvo_connector_funcs,
- intel_dvo_connector_type(&intel_dvo->dev));
+ drm_connector_init_with_ddc(&i915->drm, &connector->base,
+ &intel_dvo_connector_funcs,
+ intel_dvo_connector_type(&intel_dvo->dev),
+ intel_gmbus_get_adapter(i915, GMBUS_PIN_DPC));
drm_connector_helper_add(&connector->base,
&intel_dvo_connector_helper_funcs);
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 07/12] drm/i915/dp: Populate connector->ddc
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (5 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 06/12] drm/i915/dvo: " Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:06 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 08/12] drm/i915/mst: " Ville Syrjala
` (5 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc, and thus create the "ddc" symlink
in sysfs for analog DP SST connectors.
Let's also reorder intel_dp_aux_init() vs. drm_connector_init_with_ddc()
a bit to make sure the i2c aux ch is at least somewhat populated
before we pass it on, though drm_connector_init_with_ddc() does
not actually do anything with it.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 05694e0b6143..9b35b1d6adbb 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5914,7 +5914,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
}
mutex_lock(&dev_priv->drm.mode_config.mutex);
- drm_edid = drm_edid_read_ddc(connector, &intel_dp->aux.ddc);
+ drm_edid = drm_edid_read_ddc(connector, connector->ddc);
if (!drm_edid) {
/* Fallback to EDID from ACPI OpRegion, if any */
drm_edid = intel_opregion_get_edid(intel_connector);
@@ -6053,12 +6053,15 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
intel_dp->pps.active_pipe = vlv_active_pipe(intel_dp);
+ intel_dp_aux_init(intel_dp);
+
drm_dbg_kms(&dev_priv->drm,
"Adding %s connector on [ENCODER:%d:%s]\n",
type == DRM_MODE_CONNECTOR_eDP ? "eDP" : "DP",
intel_encoder->base.base.id, intel_encoder->base.name);
- drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
+ drm_connector_init_with_ddc(dev, connector, &intel_dp_connector_funcs,
+ type, &intel_dp->aux.ddc);
drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
if (!HAS_GMCH(dev_priv) && DISPLAY_VER(dev_priv) < 12)
@@ -6066,8 +6069,6 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
intel_connector->polled = DRM_CONNECTOR_POLL_HPD;
- intel_dp_aux_init(intel_dp);
-
intel_connector_attach_encoder(intel_connector, intel_encoder);
if (HAS_DDI(dev_priv))
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 08/12] drm/i915/mst: Populate connector->ddc
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (6 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 07/12] drm/i915/dp: " Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:08 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere Ville Syrjala
` (4 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Populate connector->ddc, and thus create the "ddc" symlink
in sysfs for DP MST connectors.
TODO: test that this actually works
References: https://gitlab.freedesktop.org/drm/intel/-/issues/3605
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_dp_mst.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 2d1c42a5e684..0bf02a29e371 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1104,8 +1104,10 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
drm_dp_mst_get_port_malloc(port);
connector = &intel_connector->base;
- ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs,
- DRM_MODE_CONNECTOR_DisplayPort);
+ ret = drm_connector_init_with_ddc(dev, connector,
+ &intel_dp_mst_connector_funcs,
+ DRM_MODE_CONNECTOR_DisplayPort,
+ &port->aux.ddc);
if (ret) {
drm_dp_mst_put_port_malloc(port);
intel_connector_free(intel_connector);
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (7 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 08/12] drm/i915/mst: " Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:08 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus Ville Syrjala
` (3 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
We already populate connector->ddc for HDMI ports, but
so far we've not taken full advantage of it. Do that by
eliminating a bunch of intel_gmbus_get_adapter() lookups.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 3 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 37 ++++++++---------------
2 files changed, 14 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index e6cc4dab3201..d86ce93fb57f 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4323,8 +4323,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_hdmi *hdmi = enc_to_intel_hdmi(encoder);
struct intel_connector *connector = hdmi->attached_connector;
- struct i2c_adapter *ddc =
- intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+ struct i2c_adapter *ddc = connector->base.ddc;
struct drm_connector_state *conn_state;
struct intel_crtc_state *crtc_state;
struct intel_crtc *crtc;
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 82f9a40b34e3..efa9bb93cfb1 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1240,7 +1240,7 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
{
struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+ struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
return;
@@ -1255,9 +1255,8 @@ void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
unsigned int offset, void *buffer, size_t size)
{
- struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
+ struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
int ret;
u8 start = offset & 0xff;
struct i2c_msg msgs[] = {
@@ -1283,9 +1282,8 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
unsigned int offset, void *buffer, size_t size)
{
- struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
+ struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
int ret;
u8 *write_buf;
struct i2c_msg msg;
@@ -1318,7 +1316,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
+ struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
int ret;
ret = intel_hdmi_hdcp_write(dig_port, DRM_HDCP_DDC_AN, an,
@@ -2398,8 +2396,10 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base;
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
- enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
+ struct i2c_adapter *ddc = connector->ddc;
+ enum drm_dp_dual_mode_type type;
+
+ type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
/*
* Type 1 DVI adaptors are not required to implement any
@@ -2447,7 +2447,7 @@ intel_hdmi_set_edid(struct drm_connector *connector)
{
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
- struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
+ struct i2c_adapter *ddc = connector->ddc;
intel_wakeref_t wakeref;
const struct drm_edid *drm_edid;
const struct edid *edid;
@@ -2544,19 +2544,10 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
return drm_edid_connector_add_modes(connector);
}
-static struct i2c_adapter *
-intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
-{
- struct drm_i915_private *dev_priv = to_i915(connector->dev);
- struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
-
- return intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
-}
-
static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
{
struct drm_i915_private *i915 = to_i915(connector->dev);
- struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct i2c_adapter *ddc = connector->ddc;
struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
int ret;
@@ -2568,7 +2559,7 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
{
- struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct i2c_adapter *ddc = connector->ddc;
struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
@@ -3007,7 +2998,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
struct intel_encoder *intel_encoder = &dig_port->base;
struct drm_device *dev = intel_encoder->base.dev;
struct drm_i915_private *dev_priv = to_i915(dev);
- struct i2c_adapter *ddc;
enum port port = intel_encoder->port;
struct cec_connector_info conn_info;
@@ -3028,12 +3018,11 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
if (!intel_hdmi->ddc_bus)
return;
- ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
-
drm_connector_init_with_ddc(dev, connector,
&intel_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_HDMIA,
- ddc);
+ intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus));
+
drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
if (DISPLAY_VER(dev_priv) < 12)
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (8 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-31 10:34 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink Ville Syrjala
` (2 subsequent siblings)
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Remove the mostly redundant hdmi->ddc_bus. The only thing that needs
it anymore is get_encoder_by_ddc_bus(), but that can be replaced with
a slight detour through attached_connector+intel_gmbus_get_adapter().
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_display_types.h | 1 -
drivers/gpu/drm/i915/display/intel_hdmi.c | 13 +++++++++----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index c62f4ec315e8..363b6573a5f9 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1581,7 +1581,6 @@ struct intel_watermark_params {
struct intel_hdmi {
i915_reg_t hdmi_reg;
- int ddc_bus;
struct {
enum drm_dp_dual_mode_type type;
int max_tmds_clock;
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index efa9bb93cfb1..6b8754290304 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2900,13 +2900,17 @@ get_encoder_by_ddc_pin(struct intel_encoder *encoder, u8 ddc_pin)
struct intel_encoder *other;
for_each_intel_encoder(&i915->drm, other) {
+ struct intel_connector *connector;
+
if (other == encoder)
continue;
if (!intel_encoder_is_dig_port(other))
continue;
- if (enc_to_dig_port(other)->hdmi.ddc_bus == ddc_pin)
+ connector = enc_to_dig_port(other)->hdmi.attached_connector;
+
+ if (connector && connector->base.ddc == intel_gmbus_get_adapter(i915, ddc_pin))
return other;
}
@@ -3000,6 +3004,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
struct drm_i915_private *dev_priv = to_i915(dev);
enum port port = intel_encoder->port;
struct cec_connector_info conn_info;
+ u8 ddc_pin;
drm_dbg_kms(&dev_priv->drm,
"Adding HDMI connector on [ENCODER:%d:%s]\n",
@@ -3014,14 +3019,14 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
intel_encoder->base.name))
return;
- intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(intel_encoder);
- if (!intel_hdmi->ddc_bus)
+ ddc_pin = intel_hdmi_ddc_pin(intel_encoder);
+ if (!ddc_pin)
return;
drm_connector_init_with_ddc(dev, connector,
&intel_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_HDMIA,
- intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus));
+ intel_gmbus_get_adapter(dev_priv, ddc_pin));
drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (9 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-31 10:40 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 12/12] drm/i915/sdvo: Constify mapping structs Ville Syrjala
2023-09-13 12:28 ` [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjälä
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Remove the i915 specific i2c-N symlink from HDMI connectors.
This was added to sort of mirror the DP connectors that alreayd
had their aux ch based i2c adapter sitting beneath them in the
sysfs hierarchy. But now that we have the standard "ddc" symlink
approach provided by the core let's switch to that fully.
I don't think anything beyond igt depends on this.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_hdmi.c | 25 -----------------------
1 file changed, 25 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 6b8754290304..e9dcd3d5f6e4 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2544,28 +2544,6 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
return drm_edid_connector_add_modes(connector);
}
-static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
-{
- struct drm_i915_private *i915 = to_i915(connector->dev);
- struct i2c_adapter *ddc = connector->ddc;
- struct kobject *i2c_kobj = &ddc->dev.kobj;
- struct kobject *connector_kobj = &connector->kdev->kobj;
- int ret;
-
- ret = sysfs_create_link(connector_kobj, i2c_kobj, i2c_kobj->name);
- if (ret)
- drm_err(&i915->drm, "Failed to create i2c symlink (%d)\n", ret);
-}
-
-static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
-{
- struct i2c_adapter *ddc = connector->ddc;
- struct kobject *i2c_kobj = &ddc->dev.kobj;
- struct kobject *connector_kobj = &connector->kdev->kobj;
-
- sysfs_remove_link(connector_kobj, i2c_kobj->name);
-}
-
static int
intel_hdmi_connector_register(struct drm_connector *connector)
{
@@ -2575,8 +2553,6 @@ intel_hdmi_connector_register(struct drm_connector *connector)
if (ret)
return ret;
- intel_hdmi_create_i2c_symlink(connector);
-
return ret;
}
@@ -2586,7 +2562,6 @@ static void intel_hdmi_connector_unregister(struct drm_connector *connector)
cec_notifier_conn_unregister(n);
- intel_hdmi_remove_i2c_symlink(connector);
intel_connector_unregister(connector);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 12/12] drm/i915/sdvo: Constify mapping structs
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (10 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink Ville Syrjala
@ 2023-08-29 11:39 ` Ville Syrjala
2023-08-30 12:09 ` [Intel-gfx] " Jani Nikula
2023-09-13 12:28 ` [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjälä
12 siblings, 1 reply; 28+ messages in thread
From: Ville Syrjala @ 2023-08-29 11:39 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
We aren't intending to mutate the SDVO device mapping structs,
so make them const.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_sdvo.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index b988e05274c1..0bd815bf2e69 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -2579,7 +2579,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
struct intel_sdvo_connector *connector)
{
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
- struct sdvo_device_mapping *mapping;
+ const struct sdvo_device_mapping *mapping;
int ddc_bus;
if (sdvo->base.port == PORT_B)
@@ -2602,7 +2602,7 @@ static void
intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
{
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
- struct sdvo_device_mapping *mapping;
+ const struct sdvo_device_mapping *mapping;
u8 pin;
if (sdvo->base.port == PORT_B)
@@ -2647,7 +2647,7 @@ static u8
intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
{
struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
- struct sdvo_device_mapping *my_mapping, *other_mapping;
+ const struct sdvo_device_mapping *my_mapping, *other_mapping;
if (sdvo->base.port == PORT_B) {
my_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc"
2023-08-29 11:39 ` [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc" Ville Syrjala
@ 2023-08-30 11:19 ` Jani Nikula
2023-08-30 12:04 ` [Intel-gfx] " Jani Nikula
2023-08-31 10:43 ` [PATCH v2 " Ville Syrjala
1 sibling, 1 reply; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 11:19 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Rename the various names we've used for the DDC bus
> i2c adapter ("i2c", "adapter", etc.) to just "ddc".
> This differentiates it from the various other i2c
> busses we might have (DSI panel stuff, DVO control bus, etc.).
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> .../gpu/drm/i915/display/intel_connector.c | 6 +--
> .../gpu/drm/i915/display/intel_connector.h | 2 +-
> drivers/gpu/drm/i915/display/intel_crt.c | 32 ++++++------
> drivers/gpu/drm/i915/display/intel_ddi.c | 4 +-
> drivers/gpu/drm/i915/display/intel_hdmi.c | 51 +++++++++----------
> drivers/gpu/drm/i915/display/intel_lspcon.c | 14 ++---
> 6 files changed, 52 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
> index ff3bcadebe59..c65887870ddc 100644
> --- a/drivers/gpu/drm/i915/display/intel_connector.c
> +++ b/drivers/gpu/drm/i915/display/intel_connector.c
> @@ -192,17 +192,17 @@ int intel_connector_update_modes(struct drm_connector *connector,
> /**
> * intel_ddc_get_modes - get modelist from monitor
> * @connector: DRM connector device to use
> - * @adapter: i2c adapter
> + * @ddc: DDC bus i2c adapter
> *
> * Fetch the EDID information from @connector using the DDC bus.
> */
> int intel_ddc_get_modes(struct drm_connector *connector,
> - struct i2c_adapter *adapter)
> + struct i2c_adapter *ddc)
> {
> const struct drm_edid *drm_edid;
> int ret;
>
> - drm_edid = drm_edid_read_ddc(connector, adapter);
> + drm_edid = drm_edid_read_ddc(connector, ddc);
> if (!drm_edid)
> return 0;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h
> index aaf7281462dc..bafde3f11ff4 100644
> --- a/drivers/gpu/drm/i915/display/intel_connector.h
> +++ b/drivers/gpu/drm/i915/display/intel_connector.h
> @@ -26,7 +26,7 @@ bool intel_connector_get_hw_state(struct intel_connector *connector);
> enum pipe intel_connector_get_pipe(struct intel_connector *connector);
> int intel_connector_update_modes(struct drm_connector *connector,
> const struct drm_edid *drm_edid);
> -int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
> +int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *ddc);
> void intel_attach_force_audio_property(struct drm_connector *connector);
> void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
> void intel_attach_aspect_ratio_property(struct drm_connector *connector);
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
> index f66340b4caf0..8145511bd5c3 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -610,18 +610,18 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
> }
>
> static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector,
> - struct i2c_adapter *i2c)
> + struct i2c_adapter *ddc)
> {
> const struct drm_edid *drm_edid;
>
> - drm_edid = drm_edid_read_ddc(connector, i2c);
> + drm_edid = drm_edid_read_ddc(connector, ddc);
>
> - if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
> + if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
> drm_dbg_kms(connector->dev,
> "CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
> - intel_gmbus_force_bit(i2c, true);
> - drm_edid = drm_edid_read_ddc(connector, i2c);
> - intel_gmbus_force_bit(i2c, false);
> + intel_gmbus_force_bit(ddc, true);
> + drm_edid = drm_edid_read_ddc(connector, ddc);
> + intel_gmbus_force_bit(ddc, false);
> }
>
> return drm_edid;
> @@ -629,12 +629,12 @@ static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector
>
> /* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
> static int intel_crt_ddc_get_modes(struct drm_connector *connector,
> - struct i2c_adapter *adapter)
> + struct i2c_adapter *ddc)
> {
> const struct drm_edid *drm_edid;
> int ret;
>
> - drm_edid = intel_crt_get_edid(connector, adapter);
> + drm_edid = intel_crt_get_edid(connector, ddc);
> if (!drm_edid)
> return 0;
>
> @@ -650,11 +650,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
> struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
> struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
> const struct drm_edid *drm_edid;
> - struct i2c_adapter *i2c;
> + struct i2c_adapter *ddc;
> bool ret = false;
>
> - i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> - drm_edid = intel_crt_get_edid(connector, i2c);
> + ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> + drm_edid = intel_crt_get_edid(connector, ddc);
>
> if (drm_edid) {
> const struct edid *edid = drm_edid_raw(drm_edid);
> @@ -917,20 +917,20 @@ static int intel_crt_get_modes(struct drm_connector *connector)
> struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
> struct intel_encoder *intel_encoder = &crt->base;
> intel_wakeref_t wakeref;
> - struct i2c_adapter *i2c;
> + struct i2c_adapter *ddc;
> int ret;
>
> wakeref = intel_display_power_get(dev_priv,
> intel_encoder->power_domain);
>
> - i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> - ret = intel_crt_ddc_get_modes(connector, i2c);
> + ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> + ret = intel_crt_ddc_get_modes(connector, ddc);
> if (ret || !IS_G4X(dev_priv))
> goto out;
>
> /* Try to probe digital port for output in DVI-I -> VGA mode. */
> - i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
> - ret = intel_crt_ddc_get_modes(connector, i2c);
> + ddc = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
> + ret = intel_crt_ddc_get_modes(connector, ddc);
>
> out:
> intel_display_power_put(dev_priv, intel_encoder->power_domain, wakeref);
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index b7f4281b8658..e6cc4dab3201 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4323,7 +4323,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> struct intel_hdmi *hdmi = enc_to_intel_hdmi(encoder);
> struct intel_connector *connector = hdmi->attached_connector;
> - struct i2c_adapter *adapter =
> + struct i2c_adapter *ddc =
> intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> struct drm_connector_state *conn_state;
> struct intel_crtc_state *crtc_state;
> @@ -4365,7 +4365,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> !try_wait_for_completion(&conn_state->commit->hw_done))
> return 0;
>
> - ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
> + ret = drm_scdc_readb(ddc, SCDC_TMDS_CONFIG, &config);
> if (ret < 0) {
> drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
> connector->base.base.id, connector->base.name, ret);
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 116556d6352a..82f9a40b34e3 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -1240,17 +1240,16 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
> void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
> {
> struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
> - struct i2c_adapter *adapter;
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
>
> if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
> return;
>
> - adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> -
> drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n",
> enable ? "Enabling" : "Disabling");
>
> - drm_dp_dual_mode_set_tmds_output(&dev_priv->drm, hdmi->dp_dual_mode.type, adapter, enable);
> + drm_dp_dual_mode_set_tmds_output(&dev_priv->drm,
> + hdmi->dp_dual_mode.type, ddc, enable);
> }
>
> static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
> @@ -1258,8 +1257,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
> {
> struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
> - hdmi->ddc_bus);
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> int ret;
> u8 start = offset & 0xff;
> struct i2c_msg msgs[] = {
> @@ -1276,7 +1274,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
> .buf = buffer
> }
> };
> - ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs));
> + ret = i2c_transfer(ddc, msgs, ARRAY_SIZE(msgs));
> if (ret == ARRAY_SIZE(msgs))
> return 0;
> return ret >= 0 ? -EIO : ret;
> @@ -1287,8 +1285,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
> {
> struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
> - hdmi->ddc_bus);
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> int ret;
> u8 *write_buf;
> struct i2c_msg msg;
> @@ -1305,7 +1302,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
> msg.len = size + 1,
> msg.buf = write_buf;
>
> - ret = i2c_transfer(adapter, &msg, 1);
> + ret = i2c_transfer(ddc, &msg, 1);
> if (ret == 1)
> ret = 0;
> else if (ret >= 0)
> @@ -1321,8 +1318,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
> {
> struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
> - hdmi->ddc_bus);
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> int ret;
>
> ret = intel_hdmi_hdcp_write(dig_port, DRM_HDCP_DDC_AN, an,
> @@ -1333,7 +1329,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
> return ret;
> }
>
> - ret = intel_gmbus_output_aksv(adapter);
> + ret = intel_gmbus_output_aksv(ddc);
> if (ret < 0) {
> drm_dbg_kms(&i915->drm, "Failed to output aksv (%d)\n", ret);
> return ret;
> @@ -2402,9 +2398,8 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
> struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base;
> - struct i2c_adapter *adapter =
> - intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> - enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, adapter);
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> + enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
>
> /*
> * Type 1 DVI adaptors are not required to implement any
> @@ -2431,7 +2426,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
>
> hdmi->dp_dual_mode.type = type;
> hdmi->dp_dual_mode.max_tmds_clock =
> - drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, adapter);
> + drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, ddc);
>
> drm_dbg_kms(&dev_priv->drm,
> "DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n",
> @@ -2452,24 +2447,24 @@ intel_hdmi_set_edid(struct drm_connector *connector)
> {
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
> intel_wakeref_t wakeref;
> const struct drm_edid *drm_edid;
> const struct edid *edid;
> bool connected = false;
> - struct i2c_adapter *i2c;
>
> wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
>
> - i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
> + edid = drm_get_edid(connector, ddc);
Must be a rebase fail.
BR,
Jani.
>
> - drm_edid = drm_edid_read_ddc(connector, i2c);
> + drm_edid = drm_edid_read_ddc(connector, ddc);
>
> - if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
> + if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
> drm_dbg_kms(&dev_priv->drm,
> "HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
> - intel_gmbus_force_bit(i2c, true);
> - drm_edid = drm_edid_read_ddc(connector, i2c);
> - intel_gmbus_force_bit(i2c, false);
> + intel_gmbus_force_bit(ddc, true);
> + drm_edid = drm_edid_read_ddc(connector, ddc);
> + intel_gmbus_force_bit(ddc, false);
> }
>
> /* Below we depend on display info having been updated */
> @@ -2561,8 +2556,8 @@ intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
> static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
> {
> struct drm_i915_private *i915 = to_i915(connector->dev);
> - struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
> - struct kobject *i2c_kobj = &adapter->dev.kobj;
> + struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
> + struct kobject *i2c_kobj = &ddc->dev.kobj;
> struct kobject *connector_kobj = &connector->kdev->kobj;
> int ret;
>
> @@ -2573,8 +2568,8 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
>
> static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
> {
> - struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
> - struct kobject *i2c_kobj = &adapter->dev.kobj;
> + struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
> + struct kobject *i2c_kobj = &ddc->dev.kobj;
> struct kobject *connector_kobj = &connector->kdev->kobj;
>
> sysfs_remove_link(connector_kobj, i2c_kobj->name);
> diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
> index bb3b5355a0d9..152a22a8ffd2 100644
> --- a/drivers/gpu/drm/i915/display/intel_lspcon.c
> +++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
> @@ -144,9 +144,9 @@ static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
> struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> enum drm_lspcon_mode current_mode;
> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
>
> - if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode)) {
> + if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode)) {
> drm_dbg_kms(&i915->drm, "Error reading LSPCON mode\n");
> return DRM_LSPCON_MODE_INVALID;
> }
> @@ -185,9 +185,9 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> int err;
> enum drm_lspcon_mode current_mode;
> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
>
> - err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode);
> + err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode);
> if (err) {
> drm_err(&i915->drm, "Error reading LSPCON mode\n");
> return err;
> @@ -198,7 +198,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
> return 0;
> }
>
> - err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, adapter, mode);
> + err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode);
> if (err < 0) {
> drm_err(&i915->drm, "LSPCON mode change failed\n");
> return err;
> @@ -233,7 +233,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
> enum drm_dp_dual_mode_type adaptor_type;
> struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
> enum drm_lspcon_mode expected_mode;
>
> expected_mode = lspcon_wake_native_aux_ch(lspcon) ?
> @@ -244,7 +244,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
> if (retry)
> usleep_range(500, 1000);
>
> - adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, adapter);
> + adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc);
> if (adaptor_type == DRM_DP_DUAL_MODE_LSPCON)
> break;
> }
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove()
2023-08-29 11:39 ` [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove() Ville Syrjala
@ 2023-08-30 11:52 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 11:52 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use the standard onion peeling approach and call
> drm_debugfs_connector_remove() and
> drm_sysfs_connector_remove() in the reverse order in
> drm_connector_unregister() than what we called their
> add counterpartse in drm_connector_register().
>
> The error unwiding in drm_connector_register() is
> already doing this the correct way around.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_connector.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index c44d5bcf1284..988996cf6da5 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -684,8 +684,8 @@ void drm_connector_unregister(struct drm_connector *connector)
> if (connector->funcs->early_unregister)
> connector->funcs->early_unregister(connector);
>
> - drm_sysfs_connector_remove(connector);
> drm_debugfs_connector_remove(connector);
> + drm_sysfs_connector_remove(connector);
>
> connector->registration_state = DRM_CONNECTOR_UNREGISTERED;
> mutex_unlock(&connector->mutex);
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 02/12] drm/sysfs: Register "ddc" symlink later
2023-08-29 11:39 ` [PATCH 02/12] drm/sysfs: Register "ddc" symlink later Ville Syrjala
@ 2023-08-30 11:59 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 11:59 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx
Cc: Neil Armstrong, Daniel Vetter, dri-devel, Andrzej Pietrasiewicz,
Andrzej Hajda, Sam Ravnborg, Emil Velikov
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Currently drm_sysfs_connector_add() attempts to register
> the "ddc" symlink (based one connector->ddc) before the
> driver's .early_register() hook has been called. That is
> too early for i915 which only fully registers the aux ch
> and associated i2c bus from said hook (to prevent half
> initialized stuff getting exposed to userspace). This
> causes my attempt at using drm_connector_init_with_ddc()
> to fail, and the entire connector disappears from sysfs
> on account of sysfs_create_link() failing.
>
> To fix that split the sysfs symlink stuff into separate
> functions (drm_sysfs_connector_add_late() and
> drm_sysfs_connector_remove_early()) which are called
> on the opposite side of the .later_register() and
> .early_unregister() hooks.
>
> Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Emil Velikov <emil.velikov@collabora.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_connector.c | 9 +++++++++
> drivers/gpu/drm/drm_internal.h | 2 ++
> drivers/gpu/drm/drm_sysfs.c | 22 +++++++++++++++-------
> 3 files changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 988996cf6da5..9d4c7b0c5c05 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -631,6 +631,10 @@ int drm_connector_register(struct drm_connector *connector)
> goto err_debugfs;
> }
>
> + ret = drm_sysfs_connector_add_late(connector);
> + if (ret)
> + goto err_late_register;
> +
> drm_mode_object_register(connector->dev, &connector->base);
>
> connector->registration_state = DRM_CONNECTOR_REGISTERED;
> @@ -647,6 +651,9 @@ int drm_connector_register(struct drm_connector *connector)
> mutex_unlock(&connector_list_lock);
> goto unlock;
>
> +err_late_register:
> + if (connector->funcs->early_unregister)
> + connector->funcs->early_unregister(connector);
> err_debugfs:
> drm_debugfs_connector_remove(connector);
> drm_sysfs_connector_remove(connector);
> @@ -681,6 +688,8 @@ void drm_connector_unregister(struct drm_connector *connector)
> connector->privacy_screen,
> &connector->privacy_screen_notifier);
>
> + drm_sysfs_connector_remove_early(connector);
> +
> if (connector->funcs->early_unregister)
> connector->funcs->early_unregister(connector);
>
> diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
> index ba12acd55139..4053cf8105ce 100644
> --- a/drivers/gpu/drm/drm_internal.h
> +++ b/drivers/gpu/drm/drm_internal.h
> @@ -153,6 +153,8 @@ int drm_sysfs_init(void);
> void drm_sysfs_destroy(void);
> struct device *drm_sysfs_minor_alloc(struct drm_minor *minor);
> int drm_sysfs_connector_add(struct drm_connector *connector);
> +int drm_sysfs_connector_add_late(struct drm_connector *connector);
> +void drm_sysfs_connector_remove_early(struct drm_connector *connector);
> void drm_sysfs_connector_remove(struct drm_connector *connector);
>
> void drm_sysfs_lease_event(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
> index b169b3e44a92..a953f69a34b6 100644
> --- a/drivers/gpu/drm/drm_sysfs.c
> +++ b/drivers/gpu/drm/drm_sysfs.c
> @@ -400,10 +400,6 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
> drm_err(dev, "failed to add component to create link to typec connector\n");
> }
>
> - if (connector->ddc)
> - return sysfs_create_link(&connector->kdev->kobj,
> - &connector->ddc->dev.kobj, "ddc");
> -
> return 0;
>
> err_free:
> @@ -411,14 +407,26 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
> return r;
> }
>
> +int drm_sysfs_connector_add_late(struct drm_connector *connector)
> +{
> + if (connector->ddc)
> + return sysfs_create_link(&connector->kdev->kobj,
> + &connector->ddc->dev.kobj, "ddc");
> +
> + return 0;
> +}
> +
> +void drm_sysfs_connector_remove_early(struct drm_connector *connector)
> +{
> + if (connector->ddc)
> + sysfs_remove_link(&connector->kdev->kobj, "ddc");
> +}
> +
> void drm_sysfs_connector_remove(struct drm_connector *connector)
> {
> if (!connector->kdev)
> return;
>
> - if (connector->ddc)
> - sysfs_remove_link(&connector->kdev->kobj, "ddc");
> -
> if (dev_fwnode(connector->kdev))
> component_del(connector->kdev, &typec_connector_ops);
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc"
2023-08-30 11:19 ` Jani Nikula
@ 2023-08-30 12:04 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:04 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Wed, 30 Aug 2023, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> @@ -2452,24 +2447,24 @@ intel_hdmi_set_edid(struct drm_connector *connector)
>> {
>> struct drm_i915_private *dev_priv = to_i915(connector->dev);
>> struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
>> + struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>> intel_wakeref_t wakeref;
>> const struct drm_edid *drm_edid;
>> const struct edid *edid;
>> bool connected = false;
>> - struct i2c_adapter *i2c;
>>
>> wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
>>
>> - i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
>> + edid = drm_get_edid(connector, ddc);
>
> Must be a rebase fail.
With this + line dropped, everything else is
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
> BR,
> Jani.
>
>>
>> - drm_edid = drm_edid_read_ddc(connector, i2c);
>> + drm_edid = drm_edid_read_ddc(connector, ddc);
>>
>> - if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
>> + if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
>> drm_dbg_kms(&dev_priv->drm,
>> "HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
>> - intel_gmbus_force_bit(i2c, true);
>> - drm_edid = drm_edid_read_ddc(connector, i2c);
>> - intel_gmbus_force_bit(i2c, false);
>> + intel_gmbus_force_bit(ddc, true);
>> + drm_edid = drm_edid_read_ddc(connector, ddc);
>> + intel_gmbus_force_bit(ddc, false);
>> }
>>
>> /* Below we depend on display info having been updated */
>> @@ -2561,8 +2556,8 @@ intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
>> static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
>> {
>> struct drm_i915_private *i915 = to_i915(connector->dev);
>> - struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
>> - struct kobject *i2c_kobj = &adapter->dev.kobj;
>> + struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
>> + struct kobject *i2c_kobj = &ddc->dev.kobj;
>> struct kobject *connector_kobj = &connector->kdev->kobj;
>> int ret;
>>
>> @@ -2573,8 +2568,8 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
>>
>> static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
>> {
>> - struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
>> - struct kobject *i2c_kobj = &adapter->dev.kobj;
>> + struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
>> + struct kobject *i2c_kobj = &ddc->dev.kobj;
>> struct kobject *connector_kobj = &connector->kdev->kobj;
>>
>> sysfs_remove_link(connector_kobj, i2c_kobj->name);
>> diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
>> index bb3b5355a0d9..152a22a8ffd2 100644
>> --- a/drivers/gpu/drm/i915/display/intel_lspcon.c
>> +++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
>> @@ -144,9 +144,9 @@ static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
>> struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
>> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>> enum drm_lspcon_mode current_mode;
>> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
>> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
>>
>> - if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode)) {
>> + if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode)) {
>> drm_dbg_kms(&i915->drm, "Error reading LSPCON mode\n");
>> return DRM_LSPCON_MODE_INVALID;
>> }
>> @@ -185,9 +185,9 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
>> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>> int err;
>> enum drm_lspcon_mode current_mode;
>> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
>> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
>>
>> - err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode);
>> + err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode);
>> if (err) {
>> drm_err(&i915->drm, "Error reading LSPCON mode\n");
>> return err;
>> @@ -198,7 +198,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
>> return 0;
>> }
>>
>> - err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, adapter, mode);
>> + err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode);
>> if (err < 0) {
>> drm_err(&i915->drm, "LSPCON mode change failed\n");
>> return err;
>> @@ -233,7 +233,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
>> enum drm_dp_dual_mode_type adaptor_type;
>> struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
>> struct drm_i915_private *i915 = dp_to_i915(intel_dp);
>> - struct i2c_adapter *adapter = &intel_dp->aux.ddc;
>> + struct i2c_adapter *ddc = &intel_dp->aux.ddc;
>> enum drm_lspcon_mode expected_mode;
>>
>> expected_mode = lspcon_wake_native_aux_ch(lspcon) ?
>> @@ -244,7 +244,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
>> if (retry)
>> usleep_range(500, 1000);
>>
>> - adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, adapter);
>> + adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc);
>> if (adaptor_type == DRM_DP_DUAL_MODE_LSPCON)
>> break;
>> }
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 04/12] drm/i915/lvds: Populate connector->ddc
2023-08-29 11:39 ` [PATCH 04/12] drm/i915/lvds: Populate connector->ddc Ville Syrjala
@ 2023-08-30 12:05 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:05 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc, and thus create the "ddc" symlink
> in sysfs for the LVDS port.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lvds.c | 23 +++++++++++------------
> 1 file changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 3ace56979b70..2306e133e3f6 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -837,7 +837,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
> struct intel_encoder *encoder;
> i915_reg_t lvds_reg;
> u32 lvds;
> - u8 pin;
> + u8 ddc_pin;
>
> /* Skip init on machines we know falsely report LVDS */
> if (dmi_check_system(intel_no_lvds)) {
> @@ -864,8 +864,8 @@ void intel_lvds_init(struct drm_i915_private *i915)
> return;
> }
>
> - pin = GMBUS_PIN_PANEL;
> - if (!intel_bios_is_lvds_present(i915, &pin)) {
> + ddc_pin = GMBUS_PIN_PANEL;
> + if (!intel_bios_is_lvds_present(i915, &ddc_pin)) {
> if ((lvds & LVDS_PORT_EN) == 0) {
> drm_dbg_kms(&i915->drm,
> "LVDS is not present in VBT\n");
> @@ -888,8 +888,10 @@ void intel_lvds_init(struct drm_i915_private *i915)
> lvds_encoder->attached_connector = connector;
> encoder = &lvds_encoder->base;
>
> - drm_connector_init(&i915->drm, &connector->base, &intel_lvds_connector_funcs,
> - DRM_MODE_CONNECTOR_LVDS);
> + drm_connector_init_with_ddc(&i915->drm, &connector->base,
> + &intel_lvds_connector_funcs,
> + DRM_MODE_CONNECTOR_LVDS,
> + intel_gmbus_get_adapter(i915, ddc_pin));
>
> drm_encoder_init(&i915->drm, &encoder->base, &intel_lvds_enc_funcs,
> DRM_MODE_ENCODER_LVDS, "LVDS");
> @@ -943,13 +945,10 @@ void intel_lvds_init(struct drm_i915_private *i915)
> * preferred mode is the right one.
> */
> mutex_lock(&i915->drm.mode_config.mutex);
> - if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC) {
> - drm_edid = drm_edid_read_switcheroo(&connector->base,
> - intel_gmbus_get_adapter(i915, pin));
> - } else {
> - drm_edid = drm_edid_read_ddc(&connector->base,
> - intel_gmbus_get_adapter(i915, pin));
> - }
> + if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC)
> + drm_edid = drm_edid_read_switcheroo(&connector->base, connector->base.ddc);
> + else
> + drm_edid = drm_edid_read_ddc(&connector->base, connector->base.ddc);
> if (drm_edid) {
> if (drm_edid_connector_update(&connector->base, drm_edid) ||
> !drm_edid_connector_add_modes(&connector->base)) {
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 05/12] drm/i915/crt: Populate connector->ddc
2023-08-29 11:39 ` [PATCH 05/12] drm/i915/crt: " Ville Syrjala
@ 2023-08-30 12:06 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:06 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc, and thus create the "ddc" symlink
> in sysfs for analog VGA connectors.
>
> As a bonus we can replace a bunch of intel_gmbus_get_adapter()
> lookups with just the connector->ddc pointer. Sadly one extra
> lookup still remains due to the g4x DVI-I shenanigans. We could
> perhaps consider borrowing the ddc proxy idea from SDVO to deal
> with that in a perhaps nicer way, but can't really be bothered
> right now at least. Also not sure exposing such a dual ddc bus
> to userspace would be quite wise.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_crt.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
> index 8145511bd5c3..ea3908fd2505 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -650,11 +650,9 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
> struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
> struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
> const struct drm_edid *drm_edid;
> - struct i2c_adapter *ddc;
> bool ret = false;
>
> - ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> - drm_edid = intel_crt_get_edid(connector, ddc);
> + drm_edid = intel_crt_get_edid(connector, connector->ddc);
>
> if (drm_edid) {
> const struct edid *edid = drm_edid_raw(drm_edid);
> @@ -923,8 +921,7 @@ static int intel_crt_get_modes(struct drm_connector *connector)
> wakeref = intel_display_power_get(dev_priv,
> intel_encoder->power_domain);
>
> - ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
> - ret = intel_crt_ddc_get_modes(connector, ddc);
> + ret = intel_crt_ddc_get_modes(connector, connector->ddc);
> if (ret || !IS_G4X(dev_priv))
> goto out;
>
> @@ -988,6 +985,7 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
> struct intel_crt *crt;
> struct intel_connector *intel_connector;
> i915_reg_t adpa_reg;
> + u8 ddc_pin;
> u32 adpa;
>
> if (HAS_PCH_SPLIT(dev_priv))
> @@ -1024,10 +1022,14 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
> return;
> }
>
> + ddc_pin = dev_priv->display.vbt.crt_ddc_pin;
> +
> connector = &intel_connector->base;
> crt->connector = intel_connector;
> - drm_connector_init(&dev_priv->drm, &intel_connector->base,
> - &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
> + drm_connector_init_with_ddc(&dev_priv->drm, connector,
> + &intel_crt_connector_funcs,
> + DRM_MODE_CONNECTOR_VGA,
> + intel_gmbus_get_adapter(dev_priv, ddc_pin));
>
> drm_encoder_init(&dev_priv->drm, &crt->base.base, &intel_crt_enc_funcs,
> DRM_MODE_ENCODER_DAC, "CRT");
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 06/12] drm/i915/dvo: Populate connector->ddc
2023-08-29 11:39 ` [PATCH 06/12] drm/i915/dvo: " Ville Syrjala
@ 2023-08-30 12:06 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:06 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc, and thus create the "ddc" symlink
> in sysfs for DVO connectors.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dvo.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
> index b386894c3a6d..d9f427856fb8 100644
> --- a/drivers/gpu/drm/i915/display/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_dvo.c
> @@ -328,7 +328,6 @@ intel_dvo_detect(struct drm_connector *_connector, bool force)
> static int intel_dvo_get_modes(struct drm_connector *_connector)
> {
> struct intel_connector *connector = to_intel_connector(_connector);
> - struct drm_i915_private *i915 = to_i915(connector->base.dev);
> int num_modes;
>
> /*
> @@ -337,8 +336,7 @@ static int intel_dvo_get_modes(struct drm_connector *_connector)
> * (TV-out, for example), but for now with just TMDS and LVDS,
> * that's not the case.
> */
> - num_modes = intel_ddc_get_modes(&connector->base,
> - intel_gmbus_get_adapter(i915, GMBUS_PIN_DPC));
> + num_modes = intel_ddc_get_modes(&connector->base, connector->base.ddc);
> if (num_modes)
> return num_modes;
>
> @@ -533,9 +531,10 @@ void intel_dvo_init(struct drm_i915_private *i915)
> connector->polled = DRM_CONNECTOR_POLL_CONNECT |
> DRM_CONNECTOR_POLL_DISCONNECT;
>
> - drm_connector_init(&i915->drm, &connector->base,
> - &intel_dvo_connector_funcs,
> - intel_dvo_connector_type(&intel_dvo->dev));
> + drm_connector_init_with_ddc(&i915->drm, &connector->base,
> + &intel_dvo_connector_funcs,
> + intel_dvo_connector_type(&intel_dvo->dev),
> + intel_gmbus_get_adapter(i915, GMBUS_PIN_DPC));
>
> drm_connector_helper_add(&connector->base,
> &intel_dvo_connector_helper_funcs);
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 07/12] drm/i915/dp: Populate connector->ddc
2023-08-29 11:39 ` [PATCH 07/12] drm/i915/dp: " Ville Syrjala
@ 2023-08-30 12:06 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:06 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc, and thus create the "ddc" symlink
> in sysfs for analog DP SST connectors.
>
> Let's also reorder intel_dp_aux_init() vs. drm_connector_init_with_ddc()
> a bit to make sure the i2c aux ch is at least somewhat populated
> before we pass it on, though drm_connector_init_with_ddc() does
> not actually do anything with it.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 05694e0b6143..9b35b1d6adbb 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5914,7 +5914,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
> }
>
> mutex_lock(&dev_priv->drm.mode_config.mutex);
> - drm_edid = drm_edid_read_ddc(connector, &intel_dp->aux.ddc);
> + drm_edid = drm_edid_read_ddc(connector, connector->ddc);
> if (!drm_edid) {
> /* Fallback to EDID from ACPI OpRegion, if any */
> drm_edid = intel_opregion_get_edid(intel_connector);
> @@ -6053,12 +6053,15 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
> if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> intel_dp->pps.active_pipe = vlv_active_pipe(intel_dp);
>
> + intel_dp_aux_init(intel_dp);
> +
> drm_dbg_kms(&dev_priv->drm,
> "Adding %s connector on [ENCODER:%d:%s]\n",
> type == DRM_MODE_CONNECTOR_eDP ? "eDP" : "DP",
> intel_encoder->base.base.id, intel_encoder->base.name);
>
> - drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
> + drm_connector_init_with_ddc(dev, connector, &intel_dp_connector_funcs,
> + type, &intel_dp->aux.ddc);
> drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
>
> if (!HAS_GMCH(dev_priv) && DISPLAY_VER(dev_priv) < 12)
> @@ -6066,8 +6069,6 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
>
> intel_connector->polled = DRM_CONNECTOR_POLL_HPD;
>
> - intel_dp_aux_init(intel_dp);
> -
> intel_connector_attach_encoder(intel_connector, intel_encoder);
>
> if (HAS_DDI(dev_priv))
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 08/12] drm/i915/mst: Populate connector->ddc
2023-08-29 11:39 ` [PATCH 08/12] drm/i915/mst: " Ville Syrjala
@ 2023-08-30 12:08 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:08 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc, and thus create the "ddc" symlink
> in sysfs for DP MST connectors.
>
> TODO: test that this actually works
:)
Seems legit,
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
> References: https://gitlab.freedesktop.org/drm/intel/-/issues/3605
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_mst.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 2d1c42a5e684..0bf02a29e371 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1104,8 +1104,10 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
> drm_dp_mst_get_port_malloc(port);
>
> connector = &intel_connector->base;
> - ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs,
> - DRM_MODE_CONNECTOR_DisplayPort);
> + ret = drm_connector_init_with_ddc(dev, connector,
> + &intel_dp_mst_connector_funcs,
> + DRM_MODE_CONNECTOR_DisplayPort,
> + &port->aux.ddc);
> if (ret) {
> drm_dp_mst_put_port_malloc(port);
> intel_connector_free(intel_connector);
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere
2023-08-29 11:39 ` [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere Ville Syrjala
@ 2023-08-30 12:08 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:08 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We already populate connector->ddc for HDMI ports, but
> so far we've not taken full advantage of it. Do that by
> eliminating a bunch of intel_gmbus_get_adapter() lookups.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 3 +-
> drivers/gpu/drm/i915/display/intel_hdmi.c | 37 ++++++++---------------
> 2 files changed, 14 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index e6cc4dab3201..d86ce93fb57f 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4323,8 +4323,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> struct intel_hdmi *hdmi = enc_to_intel_hdmi(encoder);
> struct intel_connector *connector = hdmi->attached_connector;
> - struct i2c_adapter *ddc =
> - intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> + struct i2c_adapter *ddc = connector->base.ddc;
> struct drm_connector_state *conn_state;
> struct intel_crtc_state *crtc_state;
> struct intel_crtc *crtc;
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 82f9a40b34e3..efa9bb93cfb1 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -1240,7 +1240,7 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
> void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
> {
> struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> + struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
>
> if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
> return;
> @@ -1255,9 +1255,8 @@ void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
> static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
> unsigned int offset, void *buffer, size_t size)
> {
> - struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> + struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
> int ret;
> u8 start = offset & 0xff;
> struct i2c_msg msgs[] = {
> @@ -1283,9 +1282,8 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
> static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
> unsigned int offset, void *buffer, size_t size)
> {
> - struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> + struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
> int ret;
> u8 *write_buf;
> struct i2c_msg msg;
> @@ -1318,7 +1316,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
> {
> struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
> struct intel_hdmi *hdmi = &dig_port->hdmi;
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
> + struct i2c_adapter *ddc = hdmi->attached_connector->base.ddc;
> int ret;
>
> ret = intel_hdmi_hdcp_write(dig_port, DRM_HDCP_DDC_AN, an,
> @@ -2398,8 +2396,10 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
> struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base;
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
> - enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
> + struct i2c_adapter *ddc = connector->ddc;
> + enum drm_dp_dual_mode_type type;
> +
> + type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
>
> /*
> * Type 1 DVI adaptors are not required to implement any
> @@ -2447,7 +2447,7 @@ intel_hdmi_set_edid(struct drm_connector *connector)
> {
> struct drm_i915_private *dev_priv = to_i915(connector->dev);
> struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
> - struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
> + struct i2c_adapter *ddc = connector->ddc;
> intel_wakeref_t wakeref;
> const struct drm_edid *drm_edid;
> const struct edid *edid;
> @@ -2544,19 +2544,10 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
> return drm_edid_connector_add_modes(connector);
> }
>
> -static struct i2c_adapter *
> -intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
> -{
> - struct drm_i915_private *dev_priv = to_i915(connector->dev);
> - struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
> -
> - return intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
> -}
> -
> static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
> {
> struct drm_i915_private *i915 = to_i915(connector->dev);
> - struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
> + struct i2c_adapter *ddc = connector->ddc;
> struct kobject *i2c_kobj = &ddc->dev.kobj;
> struct kobject *connector_kobj = &connector->kdev->kobj;
> int ret;
> @@ -2568,7 +2559,7 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
>
> static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
> {
> - struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
> + struct i2c_adapter *ddc = connector->ddc;
> struct kobject *i2c_kobj = &ddc->dev.kobj;
> struct kobject *connector_kobj = &connector->kdev->kobj;
>
> @@ -3007,7 +2998,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
> struct intel_encoder *intel_encoder = &dig_port->base;
> struct drm_device *dev = intel_encoder->base.dev;
> struct drm_i915_private *dev_priv = to_i915(dev);
> - struct i2c_adapter *ddc;
> enum port port = intel_encoder->port;
> struct cec_connector_info conn_info;
>
> @@ -3028,12 +3018,11 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
> if (!intel_hdmi->ddc_bus)
> return;
>
> - ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
> -
> drm_connector_init_with_ddc(dev, connector,
> &intel_hdmi_connector_funcs,
> DRM_MODE_CONNECTOR_HDMIA,
> - ddc);
> + intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus));
> +
> drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
>
> if (DISPLAY_VER(dev_priv) < 12)
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 12/12] drm/i915/sdvo: Constify mapping structs
2023-08-29 11:39 ` [PATCH 12/12] drm/i915/sdvo: Constify mapping structs Ville Syrjala
@ 2023-08-30 12:09 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-30 12:09 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> We aren't intending to mutate the SDVO device mapping structs,
> so make them const.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_sdvo.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index b988e05274c1..0bd815bf2e69 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2579,7 +2579,7 @@ intel_sdvo_select_ddc_bus(struct intel_sdvo *sdvo,
> struct intel_sdvo_connector *connector)
> {
> struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
> - struct sdvo_device_mapping *mapping;
> + const struct sdvo_device_mapping *mapping;
> int ddc_bus;
>
> if (sdvo->base.port == PORT_B)
> @@ -2602,7 +2602,7 @@ static void
> intel_sdvo_select_i2c_bus(struct intel_sdvo *sdvo)
> {
> struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
> - struct sdvo_device_mapping *mapping;
> + const struct sdvo_device_mapping *mapping;
> u8 pin;
>
> if (sdvo->base.port == PORT_B)
> @@ -2647,7 +2647,7 @@ static u8
> intel_sdvo_get_slave_addr(struct intel_sdvo *sdvo)
> {
> struct drm_i915_private *dev_priv = to_i915(sdvo->base.base.dev);
> - struct sdvo_device_mapping *my_mapping, *other_mapping;
> + const struct sdvo_device_mapping *my_mapping, *other_mapping;
>
> if (sdvo->base.port == PORT_B) {
> my_mapping = &dev_priv->display.vbt.sdvo_mappings[0];
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus
2023-08-29 11:39 ` [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus Ville Syrjala
@ 2023-08-31 10:34 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-31 10:34 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Remove the mostly redundant hdmi->ddc_bus. The only thing that needs
> it anymore is get_encoder_by_ddc_bus(), but that can be replaced with
> a slight detour through attached_connector+intel_gmbus_get_adapter().
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display_types.h | 1 -
> drivers/gpu/drm/i915/display/intel_hdmi.c | 13 +++++++++----
> 2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index c62f4ec315e8..363b6573a5f9 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1581,7 +1581,6 @@ struct intel_watermark_params {
>
> struct intel_hdmi {
> i915_reg_t hdmi_reg;
> - int ddc_bus;
> struct {
> enum drm_dp_dual_mode_type type;
> int max_tmds_clock;
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index efa9bb93cfb1..6b8754290304 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2900,13 +2900,17 @@ get_encoder_by_ddc_pin(struct intel_encoder *encoder, u8 ddc_pin)
> struct intel_encoder *other;
>
> for_each_intel_encoder(&i915->drm, other) {
> + struct intel_connector *connector;
> +
> if (other == encoder)
> continue;
>
> if (!intel_encoder_is_dig_port(other))
> continue;
>
> - if (enc_to_dig_port(other)->hdmi.ddc_bus == ddc_pin)
> + connector = enc_to_dig_port(other)->hdmi.attached_connector;
> +
> + if (connector && connector->base.ddc == intel_gmbus_get_adapter(i915, ddc_pin))
> return other;
> }
>
> @@ -3000,6 +3004,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
> struct drm_i915_private *dev_priv = to_i915(dev);
> enum port port = intel_encoder->port;
> struct cec_connector_info conn_info;
> + u8 ddc_pin;
>
> drm_dbg_kms(&dev_priv->drm,
> "Adding HDMI connector on [ENCODER:%d:%s]\n",
> @@ -3014,14 +3019,14 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,
> intel_encoder->base.name))
> return;
>
> - intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(intel_encoder);
> - if (!intel_hdmi->ddc_bus)
> + ddc_pin = intel_hdmi_ddc_pin(intel_encoder);
> + if (!ddc_pin)
> return;
>
> drm_connector_init_with_ddc(dev, connector,
> &intel_hdmi_connector_funcs,
> DRM_MODE_CONNECTOR_HDMIA,
> - intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus));
> + intel_gmbus_get_adapter(dev_priv, ddc_pin));
>
> drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Intel-gfx] [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink
2023-08-29 11:39 ` [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink Ville Syrjala
@ 2023-08-31 10:40 ` Jani Nikula
0 siblings, 0 replies; 28+ messages in thread
From: Jani Nikula @ 2023-08-31 10:40 UTC (permalink / raw)
To: Ville Syrjala, intel-gfx; +Cc: dri-devel
On Tue, 29 Aug 2023, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Remove the i915 specific i2c-N symlink from HDMI connectors.
> This was added to sort of mirror the DP connectors that alreayd
> had their aux ch based i2c adapter sitting beneath them in the
> sysfs hierarchy. But now that we have the standard "ddc" symlink
> approach provided by the core let's switch to that fully.
> I don't think anything beyond igt depends on this.
I hope nobody notices or cares. I see that you've already fixed igt to
prefer ddc.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_hdmi.c | 25 -----------------------
> 1 file changed, 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 6b8754290304..e9dcd3d5f6e4 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -2544,28 +2544,6 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
> return drm_edid_connector_add_modes(connector);
> }
>
> -static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
> -{
> - struct drm_i915_private *i915 = to_i915(connector->dev);
> - struct i2c_adapter *ddc = connector->ddc;
> - struct kobject *i2c_kobj = &ddc->dev.kobj;
> - struct kobject *connector_kobj = &connector->kdev->kobj;
> - int ret;
> -
> - ret = sysfs_create_link(connector_kobj, i2c_kobj, i2c_kobj->name);
> - if (ret)
> - drm_err(&i915->drm, "Failed to create i2c symlink (%d)\n", ret);
> -}
> -
> -static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
> -{
> - struct i2c_adapter *ddc = connector->ddc;
> - struct kobject *i2c_kobj = &ddc->dev.kobj;
> - struct kobject *connector_kobj = &connector->kdev->kobj;
> -
> - sysfs_remove_link(connector_kobj, i2c_kobj->name);
> -}
> -
> static int
> intel_hdmi_connector_register(struct drm_connector *connector)
> {
> @@ -2575,8 +2553,6 @@ intel_hdmi_connector_register(struct drm_connector *connector)
> if (ret)
> return ret;
>
> - intel_hdmi_create_i2c_symlink(connector);
> -
> return ret;
> }
>
> @@ -2586,7 +2562,6 @@ static void intel_hdmi_connector_unregister(struct drm_connector *connector)
>
> cec_notifier_conn_unregister(n);
>
> - intel_hdmi_remove_i2c_symlink(connector);
> intel_connector_unregister(connector);
> }
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH v2 03/12] drm/i915: Call the DDC bus i2c adapter "ddc"
2023-08-29 11:39 ` [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc" Ville Syrjala
2023-08-30 11:19 ` Jani Nikula
@ 2023-08-31 10:43 ` Ville Syrjala
1 sibling, 0 replies; 28+ messages in thread
From: Ville Syrjala @ 2023-08-31 10:43 UTC (permalink / raw)
To: intel-gfx; +Cc: Jani Nikula, dri-devel
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Rename the various names we've used for the DDC bus
i2c adapter ("i2c", "adapter", etc.) to just "ddc".
This differentiates it from the various other i2c
busses we might have (DSI panel stuff, DVO control bus, etc.).
v2: Don't add a bogus drm_get_edid() call (Jani)
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
.../gpu/drm/i915/display/intel_connector.c | 6 +--
.../gpu/drm/i915/display/intel_connector.h | 2 +-
drivers/gpu/drm/i915/display/intel_crt.c | 32 ++++++------
drivers/gpu/drm/i915/display/intel_ddi.c | 4 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 51 ++++++++-----------
drivers/gpu/drm/i915/display/intel_lspcon.c | 14 ++---
6 files changed, 51 insertions(+), 58 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index ff3bcadebe59..c65887870ddc 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -192,17 +192,17 @@ int intel_connector_update_modes(struct drm_connector *connector,
/**
* intel_ddc_get_modes - get modelist from monitor
* @connector: DRM connector device to use
- * @adapter: i2c adapter
+ * @ddc: DDC bus i2c adapter
*
* Fetch the EDID information from @connector using the DDC bus.
*/
int intel_ddc_get_modes(struct drm_connector *connector,
- struct i2c_adapter *adapter)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
int ret;
- drm_edid = drm_edid_read_ddc(connector, adapter);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
if (!drm_edid)
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/drm/i915/display/intel_connector.h
index aaf7281462dc..bafde3f11ff4 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.h
+++ b/drivers/gpu/drm/i915/display/intel_connector.h
@@ -26,7 +26,7 @@ bool intel_connector_get_hw_state(struct intel_connector *connector);
enum pipe intel_connector_get_pipe(struct intel_connector *connector);
int intel_connector_update_modes(struct drm_connector *connector,
const struct drm_edid *drm_edid);
-int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter);
+int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *ddc);
void intel_attach_force_audio_property(struct drm_connector *connector);
void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
void intel_attach_aspect_ratio_property(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index f66340b4caf0..8145511bd5c3 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -610,18 +610,18 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
}
static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector,
- struct i2c_adapter *i2c)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
- drm_edid = drm_edid_read_ddc(connector, i2c);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
- if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
drm_dbg_kms(connector->dev,
"CRT GMBUS EDID read failed, retry using GPIO bit-banging\n");
- intel_gmbus_force_bit(i2c, true);
- drm_edid = drm_edid_read_ddc(connector, i2c);
- intel_gmbus_force_bit(i2c, false);
+ intel_gmbus_force_bit(ddc, true);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
+ intel_gmbus_force_bit(ddc, false);
}
return drm_edid;
@@ -629,12 +629,12 @@ static const struct drm_edid *intel_crt_get_edid(struct drm_connector *connector
/* local version of intel_ddc_get_modes() to use intel_crt_get_edid() */
static int intel_crt_ddc_get_modes(struct drm_connector *connector,
- struct i2c_adapter *adapter)
+ struct i2c_adapter *ddc)
{
const struct drm_edid *drm_edid;
int ret;
- drm_edid = intel_crt_get_edid(connector, adapter);
+ drm_edid = intel_crt_get_edid(connector, ddc);
if (!drm_edid)
return 0;
@@ -650,11 +650,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct drm_i915_private *dev_priv = to_i915(crt->base.base.dev);
const struct drm_edid *drm_edid;
- struct i2c_adapter *i2c;
+ struct i2c_adapter *ddc;
bool ret = false;
- i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- drm_edid = intel_crt_get_edid(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
+ drm_edid = intel_crt_get_edid(connector, ddc);
if (drm_edid) {
const struct edid *edid = drm_edid_raw(drm_edid);
@@ -917,20 +917,20 @@ static int intel_crt_get_modes(struct drm_connector *connector)
struct intel_crt *crt = intel_attached_crt(to_intel_connector(connector));
struct intel_encoder *intel_encoder = &crt->base;
intel_wakeref_t wakeref;
- struct i2c_adapter *i2c;
+ struct i2c_adapter *ddc;
int ret;
wakeref = intel_display_power_get(dev_priv,
intel_encoder->power_domain);
- i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
- ret = intel_crt_ddc_get_modes(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, dev_priv->display.vbt.crt_ddc_pin);
+ ret = intel_crt_ddc_get_modes(connector, ddc);
if (ret || !IS_G4X(dev_priv))
goto out;
/* Try to probe digital port for output in DVI-I -> VGA mode. */
- i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
- ret = intel_crt_ddc_get_modes(connector, i2c);
+ ddc = intel_gmbus_get_adapter(dev_priv, GMBUS_PIN_DPB);
+ ret = intel_crt_ddc_get_modes(connector, ddc);
out:
intel_display_power_put(dev_priv, intel_encoder->power_domain, wakeref);
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index b7f4281b8658..e6cc4dab3201 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4323,7 +4323,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
struct intel_hdmi *hdmi = enc_to_intel_hdmi(encoder);
struct intel_connector *connector = hdmi->attached_connector;
- struct i2c_adapter *adapter =
+ struct i2c_adapter *ddc =
intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
struct drm_connector_state *conn_state;
struct intel_crtc_state *crtc_state;
@@ -4365,7 +4365,7 @@ static int intel_hdmi_reset_link(struct intel_encoder *encoder,
!try_wait_for_completion(&conn_state->commit->hw_done))
return 0;
- ret = drm_scdc_readb(adapter, SCDC_TMDS_CONFIG, &config);
+ ret = drm_scdc_readb(ddc, SCDC_TMDS_CONFIG, &config);
if (ret < 0) {
drm_err(&dev_priv->drm, "[CONNECTOR:%d:%s] Failed to read TMDS config: %d\n",
connector->base.base.id, connector->base.name, ret);
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 116556d6352a..32e0fe8dcd8a 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1240,17 +1240,16 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,
void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable)
{
struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);
- struct i2c_adapter *adapter;
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
if (hdmi->dp_dual_mode.type < DRM_DP_DUAL_MODE_TYPE2_DVI)
return;
- adapter = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
-
drm_dbg_kms(&dev_priv->drm, "%s DP dual mode adaptor TMDS output\n",
enable ? "Enabling" : "Disabling");
- drm_dp_dual_mode_set_tmds_output(&dev_priv->drm, hdmi->dp_dual_mode.type, adapter, enable);
+ drm_dp_dual_mode_set_tmds_output(&dev_priv->drm,
+ hdmi->dp_dual_mode.type, ddc, enable);
}
static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
@@ -1258,8 +1257,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
u8 start = offset & 0xff;
struct i2c_msg msgs[] = {
@@ -1276,7 +1274,7 @@ static int intel_hdmi_hdcp_read(struct intel_digital_port *dig_port,
.buf = buffer
}
};
- ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs));
+ ret = i2c_transfer(ddc, msgs, ARRAY_SIZE(msgs));
if (ret == ARRAY_SIZE(msgs))
return 0;
return ret >= 0 ? -EIO : ret;
@@ -1287,8 +1285,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
u8 *write_buf;
struct i2c_msg msg;
@@ -1305,7 +1302,7 @@ static int intel_hdmi_hdcp_write(struct intel_digital_port *dig_port,
msg.len = size + 1,
msg.buf = write_buf;
- ret = i2c_transfer(adapter, &msg, 1);
+ ret = i2c_transfer(ddc, &msg, 1);
if (ret == 1)
ret = 0;
else if (ret >= 0)
@@ -1321,8 +1318,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
{
struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
struct intel_hdmi *hdmi = &dig_port->hdmi;
- struct i2c_adapter *adapter = intel_gmbus_get_adapter(i915,
- hdmi->ddc_bus);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(i915, hdmi->ddc_bus);
int ret;
ret = intel_hdmi_hdcp_write(dig_port, DRM_HDCP_DDC_AN, an,
@@ -1333,7 +1329,7 @@ int intel_hdmi_hdcp_write_an_aksv(struct intel_digital_port *dig_port,
return ret;
}
- ret = intel_gmbus_output_aksv(adapter);
+ ret = intel_gmbus_output_aksv(ddc);
if (ret < 0) {
drm_dbg_kms(&i915->drm, "Failed to output aksv (%d)\n", ret);
return ret;
@@ -2402,9 +2398,8 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));
struct intel_encoder *encoder = &hdmi_to_dig_port(hdmi)->base;
- struct i2c_adapter *adapter =
- intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
- enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, adapter);
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus);
+ enum drm_dp_dual_mode_type type = drm_dp_dual_mode_detect(&dev_priv->drm, ddc);
/*
* Type 1 DVI adaptors are not required to implement any
@@ -2431,7 +2426,7 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector)
hdmi->dp_dual_mode.type = type;
hdmi->dp_dual_mode.max_tmds_clock =
- drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, adapter);
+ drm_dp_dual_mode_max_tmds_clock(&dev_priv->drm, type, ddc);
drm_dbg_kms(&dev_priv->drm,
"DP dual mode adaptor (%s) detected (max TMDS clock: %d kHz)\n",
@@ -2452,24 +2447,22 @@ intel_hdmi_set_edid(struct drm_connector *connector)
{
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));
+ struct i2c_adapter *ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
intel_wakeref_t wakeref;
const struct drm_edid *drm_edid;
const struct edid *edid;
bool connected = false;
- struct i2c_adapter *i2c;
wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
- i2c = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
- drm_edid = drm_edid_read_ddc(connector, i2c);
-
- if (!drm_edid && !intel_gmbus_is_forced_bit(i2c)) {
+ if (!drm_edid && !intel_gmbus_is_forced_bit(ddc)) {
drm_dbg_kms(&dev_priv->drm,
"HDMI GMBUS EDID read failed, retry using GPIO bit-banging\n");
- intel_gmbus_force_bit(i2c, true);
- drm_edid = drm_edid_read_ddc(connector, i2c);
- intel_gmbus_force_bit(i2c, false);
+ intel_gmbus_force_bit(ddc, true);
+ drm_edid = drm_edid_read_ddc(connector, ddc);
+ intel_gmbus_force_bit(ddc, false);
}
/* Below we depend on display info having been updated */
@@ -2561,8 +2554,8 @@ intel_hdmi_get_i2c_adapter(struct drm_connector *connector)
static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
{
struct drm_i915_private *i915 = to_i915(connector->dev);
- struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
- struct kobject *i2c_kobj = &adapter->dev.kobj;
+ struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
int ret;
@@ -2573,8 +2566,8 @@ static void intel_hdmi_create_i2c_symlink(struct drm_connector *connector)
static void intel_hdmi_remove_i2c_symlink(struct drm_connector *connector)
{
- struct i2c_adapter *adapter = intel_hdmi_get_i2c_adapter(connector);
- struct kobject *i2c_kobj = &adapter->dev.kobj;
+ struct i2c_adapter *ddc = intel_hdmi_get_i2c_adapter(connector);
+ struct kobject *i2c_kobj = &ddc->dev.kobj;
struct kobject *connector_kobj = &connector->kdev->kobj;
sysfs_remove_link(connector_kobj, i2c_kobj->name);
diff --git a/drivers/gpu/drm/i915/display/intel_lspcon.c b/drivers/gpu/drm/i915/display/intel_lspcon.c
index bb3b5355a0d9..152a22a8ffd2 100644
--- a/drivers/gpu/drm/i915/display/intel_lspcon.c
+++ b/drivers/gpu/drm/i915/display/intel_lspcon.c
@@ -144,9 +144,9 @@ static enum drm_lspcon_mode lspcon_get_current_mode(struct intel_lspcon *lspcon)
struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
enum drm_lspcon_mode current_mode;
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
- if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode)) {
+ if (drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode)) {
drm_dbg_kms(&i915->drm, "Error reading LSPCON mode\n");
return DRM_LSPCON_MODE_INVALID;
}
@@ -185,9 +185,9 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
int err;
enum drm_lspcon_mode current_mode;
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
- err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, adapter, ¤t_mode);
+ err = drm_lspcon_get_mode(intel_dp->aux.drm_dev, ddc, ¤t_mode);
if (err) {
drm_err(&i915->drm, "Error reading LSPCON mode\n");
return err;
@@ -198,7 +198,7 @@ static int lspcon_change_mode(struct intel_lspcon *lspcon,
return 0;
}
- err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, adapter, mode);
+ err = drm_lspcon_set_mode(intel_dp->aux.drm_dev, ddc, mode);
if (err < 0) {
drm_err(&i915->drm, "LSPCON mode change failed\n");
return err;
@@ -233,7 +233,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
enum drm_dp_dual_mode_type adaptor_type;
struct intel_dp *intel_dp = lspcon_to_intel_dp(lspcon);
struct drm_i915_private *i915 = dp_to_i915(intel_dp);
- struct i2c_adapter *adapter = &intel_dp->aux.ddc;
+ struct i2c_adapter *ddc = &intel_dp->aux.ddc;
enum drm_lspcon_mode expected_mode;
expected_mode = lspcon_wake_native_aux_ch(lspcon) ?
@@ -244,7 +244,7 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
if (retry)
usleep_range(500, 1000);
- adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, adapter);
+ adaptor_type = drm_dp_dual_mode_detect(intel_dp->aux.drm_dev, ddc);
if (adaptor_type == DRM_DP_DUAL_MODE_LSPCON)
break;
}
--
2.41.0
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH 00/12] drm/i915: Populate connector->ddc always
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
` (11 preceding siblings ...)
2023-08-29 11:39 ` [PATCH 12/12] drm/i915/sdvo: Constify mapping structs Ville Syrjala
@ 2023-09-13 12:28 ` Ville Syrjälä
12 siblings, 0 replies; 28+ messages in thread
From: Ville Syrjälä @ 2023-09-13 12:28 UTC (permalink / raw)
To: intel-gfx; +Cc: Thomas Zimmermann, Maxime Ripard, dri-devel
On Tue, Aug 29, 2023 at 02:39:08PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Populate connector->ddc for all output types that don't already
> do so, and clean up a bunch of code as a result of having the
> ddc i2c adapter in easy reach. And this also provides the sysfs
> "ddc" symlink.
>
> There are potentially a few oddball (mostly DVI-I) cases where
> the connector detection/EDID read uses an alternate DDC bus
> internally, and so for those the symlink might not point at the
> correct i2c adapter. I'm not interested in spending extra brain
> cells on those, so we'll leave them as is for now.
>
> Ville Syrjälä (12):
> drm: Reorder drm_sysfs_connector_remove() vs.
> drm_debugfs_connector_remove()
> drm/sysfs: Register "ddc" symlink later
Maarten/Maxime/Thomas can I get an ack for merging these two
via drm-intel-next? Would avoid having to wait for a backmerge...
> drm/i915: Call the DDC bus i2c adapter "ddc"
> drm/i915/lvds: Populate connector->ddc
> drm/i915/crt: Populate connector->ddc
> drm/i915/dvo: Populate connector->ddc
> drm/i915/dp: Populate connector->ddc
> drm/i915/mst: Populate connector->ddc
> drm/i915/hdmi: Use connector->ddc everwhere
> drm/i915/hdmi: Nuke hdmi->ddc_bus
> drm/i915/hdmi: Remove old i2c symlink
> drm/i915/sdvo: Constify mapping structs
>
> drivers/gpu/drm/drm_connector.c | 11 ++-
> drivers/gpu/drm/drm_internal.h | 2 +
> drivers/gpu/drm/drm_sysfs.c | 22 +++--
> .../gpu/drm/i915/display/intel_connector.c | 6 +-
> .../gpu/drm/i915/display/intel_connector.h | 2 +-
> drivers/gpu/drm/i915/display/intel_crt.c | 38 +++----
> drivers/gpu/drm/i915/display/intel_ddi.c | 5 +-
> .../drm/i915/display/intel_display_types.h | 1 -
> drivers/gpu/drm/i915/display/intel_dp.c | 9 +-
> drivers/gpu/drm/i915/display/intel_dp_mst.c | 6 +-
> drivers/gpu/drm/i915/display/intel_dvo.c | 11 +--
> drivers/gpu/drm/i915/display/intel_hdmi.c | 98 ++++++-------------
> drivers/gpu/drm/i915/display/intel_lspcon.c | 14 +--
> drivers/gpu/drm/i915/display/intel_lvds.c | 23 +++--
> drivers/gpu/drm/i915/display/intel_sdvo.c | 6 +-
> 15 files changed, 119 insertions(+), 135 deletions(-)
>
> --
> 2.41.0
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2023-09-13 12:29 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-29 11:39 [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjala
2023-08-29 11:39 ` [PATCH 01/12] drm: Reorder drm_sysfs_connector_remove() vs. drm_debugfs_connector_remove() Ville Syrjala
2023-08-30 11:52 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 02/12] drm/sysfs: Register "ddc" symlink later Ville Syrjala
2023-08-30 11:59 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 03/12] drm/i915: Call the DDC bus i2c adapter "ddc" Ville Syrjala
2023-08-30 11:19 ` Jani Nikula
2023-08-30 12:04 ` [Intel-gfx] " Jani Nikula
2023-08-31 10:43 ` [PATCH v2 " Ville Syrjala
2023-08-29 11:39 ` [PATCH 04/12] drm/i915/lvds: Populate connector->ddc Ville Syrjala
2023-08-30 12:05 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 05/12] drm/i915/crt: " Ville Syrjala
2023-08-30 12:06 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 06/12] drm/i915/dvo: " Ville Syrjala
2023-08-30 12:06 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 07/12] drm/i915/dp: " Ville Syrjala
2023-08-30 12:06 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 08/12] drm/i915/mst: " Ville Syrjala
2023-08-30 12:08 ` Jani Nikula
2023-08-29 11:39 ` [PATCH 09/12] drm/i915/hdmi: Use connector->ddc everwhere Ville Syrjala
2023-08-30 12:08 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 10/12] drm/i915/hdmi: Nuke hdmi->ddc_bus Ville Syrjala
2023-08-31 10:34 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 11/12] drm/i915/hdmi: Remove old i2c symlink Ville Syrjala
2023-08-31 10:40 ` [Intel-gfx] " Jani Nikula
2023-08-29 11:39 ` [PATCH 12/12] drm/i915/sdvo: Constify mapping structs Ville Syrjala
2023-08-30 12:09 ` [Intel-gfx] " Jani Nikula
2023-09-13 12:28 ` [PATCH 00/12] drm/i915: Populate connector->ddc always Ville Syrjälä
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).