Backport 2 patches from [1] that cleanup the i2c-rtl9300 upstream driver. They have been long accepted and are already in mainline kernel as of 7.0-rc1. The "100-rtl9300-i2c-add-more-speeds.patch" required refreshing after adding these backport patches. [1] - https://lore.kernel.org/linux-i2c/20251217063027.37987-1-rosenp@gmail.com/ Signed-off-by: Rustam Adilov <adilov@tutamail.com> Link: https://github.com/openwrt/openwrt/pull/22662 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
53 lines
1.7 KiB
Diff
53 lines
1.7 KiB
Diff
From linux-i2c Fri Feb 27 11:11:34 2026
|
|
From: Jan Kantert <jan-kernel () kantert ! net>
|
|
Date: Fri, 27 Feb 2026 11:11:34 +0000
|
|
To: linux-i2c
|
|
Subject: [PATCH] i2c: rtl9300: add support for 50 kHz and 2.5 MHz bus speeds
|
|
Message-Id: <20260227111134.2163701-1-jan-kernel () kantert ! net>
|
|
X-MARC-Message: https://marc.info/?l=linux-i2c&m=177219358420283
|
|
|
|
Some SFP modules on certain switches (for example the ONTi ONT-S508CL-8S and
|
|
XikeStor SKS8300-8X) exhibit unreliable I2C communication at the currently
|
|
supported speeds. Add support for 50 kHz and 2.5 MHz I2C bus modes on the
|
|
RTL9300 to improve compatibility with these devices.
|
|
|
|
Signed-off-by: Jan Kantert <jan-kernel@kantert.net>
|
|
---
|
|
drivers/i2c/busses/i2c-rtl9300.c | 16 ++++++++++++++--
|
|
1 file changed, 14 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/i2c/busses/i2c-rtl9300.c
|
|
+++ b/drivers/i2c/busses/i2c-rtl9300.c
|
|
@@ -11,10 +11,16 @@
|
|
#include <linux/unaligned.h>
|
|
|
|
enum rtl9300_bus_freq {
|
|
- RTL9300_I2C_STD_FREQ,
|
|
- RTL9300_I2C_FAST_FREQ,
|
|
+ RTL9300_I2C_STD_FREQ, // 100kHz
|
|
+ RTL9300_I2C_FAST_FREQ, // 400kHz
|
|
+ RTL9300_I2C_SUPER_FAST_FREQ, // 2.5MHz
|
|
+ RTL9300_I2C_SLOW_FREQ, // 50kHz
|
|
};
|
|
|
|
+#define RTL9300_I2C_MAX_SUPER_FAST_FREQ 2500000
|
|
+#define RTL9300_I2C_MAX_SLOW_FREQ 50000
|
|
+
|
|
+
|
|
struct rtl9300_i2c;
|
|
|
|
struct rtl9300_i2c_chan {
|
|
@@ -433,6 +439,12 @@ static int rtl9300_i2c_probe(struct plat
|
|
case I2C_MAX_FAST_MODE_FREQ:
|
|
chan->bus_freq = RTL9300_I2C_FAST_FREQ;
|
|
break;
|
|
+ case RTL9300_I2C_MAX_SUPER_FAST_FREQ:
|
|
+ chan->bus_freq = RTL9300_I2C_SUPER_FAST_FREQ;
|
|
+ break;
|
|
+ case RTL9300_I2C_MAX_SLOW_FREQ:
|
|
+ chan->bus_freq = RTL9300_I2C_SLOW_FREQ;
|
|
+ break;
|
|
default:
|
|
dev_warn(i2c->dev, "SDA%d clock-frequency %d not supported using default\n",
|
|
sda_num, clock_freq);
|