From: Naladala Ramanaidu <ramanaidu.naladala@intel.com>
To: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: ankit.k.nautiyal@intel.com, jani.nikula@intel.com,
Naladala Ramanaidu <ramanaidu.naladala@intel.com>
Subject: [PATCH v2 1/1] drm/i915/gmbus: Add bit-banging debugfs control
Date: Thu, 24 Sep 2026 20:58:12 +0530 [thread overview]
Message-ID: <20260924152812.439986-2-ramanaidu.naladala@intel.com> (raw)
In-Reply-To: <20260924152812.439986-1-ramanaidu.naladala@intel.com>
Add a connector debugfs interface to enable or disable I2C
bit-banging for Intel GMBUS adapters.
v1: Address below review comments: (Jani Nikula)
- Remove HDMI-specific EDID read path changes.
- Control bit-banging directly from debugfs via intel_gmbus_force_bit()
Assisted-by: OpenAI Codex:GPT-5
Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala@intel.com>
---
.../drm/i915/display/intel_display_debugfs.c | 3 +
.../drm/i915/display/intel_display_types.h | 1 +
drivers/gpu/drm/i915/display/intel_gmbus.c | 61 +++++++++++++++++++
drivers/gpu/drm/i915/display/intel_gmbus.h | 3 +
4 files changed, 68 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 3e302f23f247..74f065175a72 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -40,6 +40,7 @@
#include "intel_fb.h"
#include "intel_fbc.h"
#include "intel_fbdev.h"
+#include "intel_gmbus.h"
#include "intel_hdcp.h"
#include "intel_hdmi.h"
#include "intel_hotplug.h"
@@ -1327,6 +1328,8 @@ void intel_connector_debugfs_add(struct intel_connector *connector)
if (!root)
return;
+ intel_gmbus_connector_debugfs_add(connector);
+
intel_drrs_connector_debugfs_add(connector);
intel_hdcp_connector_debugfs_add(connector);
intel_pps_connector_debugfs_add(connector);
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 79f30660c2b6..5cef2582c361 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -558,6 +558,7 @@ struct intel_connector {
u8 polled;
int force_joined_pipes;
+ bool force_bit_banging;
struct {
struct drm_dp_aux *dsc_decompression_aux;
diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.c b/drivers/gpu/drm/i915/display/intel_gmbus.c
index 60a70dea5d85..38d6d1148399 100644
--- a/drivers/gpu/drm/i915/display/intel_gmbus.c
+++ b/drivers/gpu/drm/i915/display/intel_gmbus.c
@@ -27,6 +27,7 @@
* Chris Wilson <chris@chris-wilson.co.uk>
*/
+#include <linux/debugfs.h>
#include <linux/export.h>
#include <linux/i2c-algo-bit.h>
#include <linux/i2c.h>
@@ -871,6 +872,66 @@ static const struct i2c_algorithm gmbus_algorithm = {
.functionality = gmbus_func
};
+bool intel_gmbus_is_adapter(struct i2c_adapter *adapter)
+{
+ return adapter->algo == &gmbus_algorithm;
+}
+
+static int intel_force_bit_banging_show(struct seq_file *m, void *data)
+{
+ struct intel_connector *connector = m->private;
+
+ seq_printf(m, "%u\n", connector->force_bit_banging);
+
+ return 0;
+}
+
+static ssize_t intel_force_bit_banging_write(struct file *file,
+ const char __user *ubuf,
+ size_t len, loff_t *offp)
+{
+ struct seq_file *m = file->private_data;
+ struct intel_connector *connector = m->private;
+ bool force_bit_banging;
+ int ret;
+
+ ret = kstrtobool_from_user(ubuf, len, &force_bit_banging);
+ if (ret)
+ return ret;
+
+ if (force_bit_banging != connector->force_bit_banging) {
+ intel_gmbus_force_bit(connector->base.ddc, force_bit_banging);
+ connector->force_bit_banging = force_bit_banging;
+ }
+
+ *offp += len;
+
+ return len;
+}
+
+static int intel_force_bit_banging_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, intel_force_bit_banging_show, inode->i_private);
+}
+
+static const struct file_operations intel_force_bit_banging_fops = {
+ .owner = THIS_MODULE,
+ .open = intel_force_bit_banging_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+ .write = intel_force_bit_banging_write,
+};
+
+void intel_gmbus_connector_debugfs_add(struct intel_connector *connector)
+{
+ if (connector->base.ddc &&
+ intel_gmbus_is_adapter(connector->base.ddc))
+ debugfs_create_file("intel_force_bit_banging", 0644,
+ connector->base.debugfs_entry, connector,
+ &intel_force_bit_banging_fops);
+}
+
static void gmbus_lock_bus(struct i2c_adapter *adapter,
unsigned int flags)
{
diff --git a/drivers/gpu/drm/i915/display/intel_gmbus.h b/drivers/gpu/drm/i915/display/intel_gmbus.h
index 5fdeab1aa794..968f8cb42821 100644
--- a/drivers/gpu/drm/i915/display/intel_gmbus.h
+++ b/drivers/gpu/drm/i915/display/intel_gmbus.h
@@ -9,6 +9,7 @@
#include <linux/types.h>
struct i2c_adapter;
+struct intel_connector;
struct intel_display;
#define GMBUS_PIN_DISABLED 0
@@ -41,6 +42,8 @@ int intel_gmbus_output_aksv(struct i2c_adapter *adapter);
struct i2c_adapter *
intel_gmbus_get_adapter(struct intel_display *display, unsigned int pin);
+bool intel_gmbus_is_adapter(struct i2c_adapter *adapter);
+void intel_gmbus_connector_debugfs_add(struct intel_connector *connector);
void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit);
bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter);
void intel_gmbus_reset(struct intel_display *display);
--
2.43.0
next prev parent reply other threads:[~2026-09-24 15:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 15:28 [PATCH v2 0/1] drm/i915/gmbus: Add bit-banging debugfs control Naladala Ramanaidu
2026-09-24 15:28 ` Naladala Ramanaidu [this message]
2026-09-24 15:36 ` [PATCH v2 1/1] " sashiko-bot
2026-09-28 5:10 ` Naladala, Ramanaidu
2026-09-25 10:30 ` Jani Nikula
2026-09-28 5:12 ` Naladala, Ramanaidu
2026-09-24 15:34 ` ✗ CI.checkpatch: warning for " Patchwork
2026-09-24 15:36 ` ✓ CI.KUnit: success " Patchwork
2026-09-24 16:55 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-24 17:33 ` ✓ i915.CI.BAT: " Patchwork
2026-09-25 4:50 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-25 20:21 ` ✗ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260924152812.439986-2-ramanaidu.naladala@intel.com \
--to=ramanaidu.naladala@intel.com \
--cc=ankit.k.nautiyal@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.