* [PATCH v3 0/2] i2c: rtl9300: remove IO_MODE configuration
@ 2026-11-15 8:08 Michael Zavertkin
2026-11-15 8:08 ` [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin
2026-11-15 8:08 ` [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin
0 siblings, 2 replies; 5+ messages in thread
From: Michael Zavertkin @ 2026-11-15 8:08 UTC (permalink / raw)
To: linux-i2c
Cc: Rustam Adilov, Chris Packham, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, devicetree, linux-kernel,
Michael Zavertkin
i2c driver for RTL9607C used to configure IO_MODE register. The register
is global and responsible for configuring SoC pins, therefore it should
belong to pinctrl driver.
SoC-specific pinctrl driver is WIP (waiting for these patches in OpenWRT),
but pinctrl-single could be used instead.
While added compatible realtek,rtl9607c-i2c relies on pinctrl driver,
old realtek,rtl9607-i2c left for backward compatibility.
Signed-off-by: Michael Zavertkin <misha.zavertkin@mail.ru>
---
Changes in v3:
- Added Acked-by
- Link to v2: https://patch.msgid.link/cover.1791611999.git.misha.zavertkin@mail.ru
---
Changes in v2:
- Backward compatibility achieved by adding new compatible value. Old
one is marked as deprecated
- Link to v1: https://patch.msgid.link/cover.1791127538.git.misha.zavertkin@mail.ru
---
Michael Zavertkin (2):
i2c: rtl9300: add realtek,rtl9607c-i2c compatible
dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c'
.../bindings/i2c/realtek,rtl9301-i2c.yaml | 20 ++++++++++++++++++-
drivers/i2c/busses/i2c-rtl9300.c | 15 ++++++++++----
2 files changed, 30 insertions(+), 5 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible
2026-11-15 8:08 [PATCH v3 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin
@ 2026-11-15 8:08 ` Michael Zavertkin
2026-11-15 9:32 ` Rustam Adilov
2026-11-15 8:08 ` [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin
1 sibling, 1 reply; 5+ messages in thread
From: Michael Zavertkin @ 2026-11-15 8:08 UTC (permalink / raw)
To: linux-i2c
Cc: Rustam Adilov, Chris Packham, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, devicetree, linux-kernel,
Michael Zavertkin
RTL9607C was already supported by realtek,rtl9607-i2c, which is
confusing, because there are another SoCs such as RTL9607F, RTL9607
(without letter) and a few more. So more correct compatible was added.
New compatible doesn't use IO_MODE_EN register, leaving it to pinctrl
driver. Old one left for backward compatibility.
Signed-off-by: Michael Zavertkin <misha.zavertkin@mail.ru>
---
drivers/i2c/busses/i2c-rtl9300.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9300.c
index a9dd85a286d4..ae20fbdc307a 100644
--- a/drivers/i2c/busses/i2c-rtl9300.c
+++ b/drivers/i2c/busses/i2c-rtl9300.c
@@ -200,10 +200,12 @@ static int rtl9607_i2c_config_chan(struct rtl9300_i2c *i2c, struct rtl9300_i2c_c
if (ret)
return ret;
- drv_data = device_get_match_data(i2c->dev);
- ret = drv_data->select_scl(i2c, i2c->scl_num);
- if (ret)
- return ret;
+ if (device_is_compatible(i2c->dev, "realtek,rtl9607-i2c")) {
+ drv_data = device_get_match_data(i2c->dev);
+ ret = drv_data->select_scl(i2c, i2c->scl_num);
+ if (ret)
+ return ret;
+ }
i2c->sda_num = chan->sda_num;
return 0;
@@ -494,6 +496,10 @@ static int rtl9300_i2c_probe(struct platform_device *pdev)
scl_num = 0;
i2c->scl_num = (u8)scl_num;
+ if (device_is_compatible(i2c->dev, "realtek,rtl9607-i2c"))
+ dev_warn(dev, "Compatible 'realtek,rtl9607-i2c' is deprecated. "
+ "Use 'realtek,rtl9607c-i2c' instead\n");
+
platform_set_drvdata(pdev, i2c);
drv_data = device_get_match_data(i2c->dev);
@@ -652,6 +658,7 @@ static const struct of_device_id i2c_rtl9300_dt_ids[] = {
{ .compatible = "realtek,rtl9312-i2c", .data = (void *) &rtl9310_i2c_drv_data },
{ .compatible = "realtek,rtl9313-i2c", .data = (void *) &rtl9310_i2c_drv_data },
{ .compatible = "realtek,rtl9607-i2c", .data = (void *) &rtl9607_i2c_drv_data },
+ { .compatible = "realtek,rtl9607c-i2c", .data = (void *) &rtl9607_i2c_drv_data },
{}
};
MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids);
--
2.55.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c'
2026-11-15 8:08 [PATCH v3 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin
2026-11-15 8:08 ` [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin
@ 2026-11-15 8:08 ` Michael Zavertkin
2026-11-15 8:20 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Michael Zavertkin @ 2026-11-15 8:08 UTC (permalink / raw)
To: linux-i2c
Cc: Rustam Adilov, Chris Packham, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, devicetree, linux-kernel,
Michael Zavertkin, Conor Dooley
Add realtek,rtl9607c-i2c compatible for RTL9607C SoC and mark
realtek,rtl9607-i2c as deprecated.
New compatible relies on pinctrl driver for correct pin assignment
instead of directly modifying IO_MODE register.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Michael Zavertkin <misha.zavertkin@mail.ru>
---
.../bindings/i2c/realtek,rtl9301-i2c.yaml | 20 ++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
index 5873cfdc5b3e..7c00918f33c8 100644
--- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
+++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
@@ -36,7 +36,11 @@ properties:
- enum:
- realtek,rtl9301-i2c
- realtek,rtl9310-i2c
- - realtek,rtl9607-i2c
+ - realtek,rtl9607c-i2c
+ - const: realtek,rtl9607-i2c
+ deprecated: true
+ description: >
+ Use 'realtek,rtl9607c-i2c' instead
reg:
items:
@@ -57,6 +61,10 @@ properties:
clocks:
maxItems: 1
+ pinctrl-0: true
+
+ pinctrl-names: true
+
patternProperties:
'^i2c@[0-9ab]$':
$ref: /schemas/i2c/i2c-controller.yaml
@@ -96,6 +104,16 @@ allOf:
required:
- realtek,scl
- clocks
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: realtek,rtl9607c-i2c
+ then:
+ required:
+ - clocks
+ - pinctrl-0
+ - pinctrl-names
required:
- compatible
--
2.55.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c'
2026-11-15 8:08 ` [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin
@ 2026-11-15 8:20 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-15 8:20 UTC (permalink / raw)
To: Michael Zavertkin; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] dt-bindings: i2c: rtl9301: per-compatible conditional pile-up
for rtl9607c
--
commit 43c34d3c3c011204c713fd4d1ed08c55685b830d
Author: Michael Zavertkin <misha.zavertkin@mail.ru>
dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c'
This commit adds the realtek,rtl9607c-i2c compatible string with required
clocks and pinctrl properties, and deprecates realtek,rtl9607-i2c.
> diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
> index 5873cfdc5b3e0..7c00918f33c8d 100644
> --- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
> +++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
[ ... ]
> @@ -57,6 +61,10 @@ properties:
> clocks:
> maxItems: 1
>
> + pinctrl-0: true
> +
> + pinctrl-names: true
> +
> patternProperties:
> '^i2c@[0-9ab]$':
> $ref: /schemas/i2c/i2c-controller.yaml
> @@ -96,6 +104,16 @@ allOf:
> required:
> - realtek,scl
> - clocks
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: realtek,rtl9607c-i2c
> + then:
> + required:
> + - clocks
> + - pinctrl-0
> + - pinctrl-names
>
> required:
> - compatible
[Severity: Low]
Would it be cleaner to split realtek,rtl9607c-i2c into a separate schema
document rather than adding a fourth per-compatible if-then block to
allOf?
Unlike RTL9300 and RTL9310, which multiplex 8 or 12 shared SDA lines across
controllers and select the SCL line via realtek,scl, RTL9607C has a single
SCL/SDA pair per controller and uses pinctrl instead of realtek,scl.
Keeping realtek,rtl9607c-i2c in this shared schema also leaves the unused
realtek,scl property and multi-channel i2c@[0-9ab] child nodes permitted
for it.
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1794728344.git.misha.zavertkin@mail.ru?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible
2026-11-15 8:08 ` [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin
@ 2026-11-15 9:32 ` Rustam Adilov
0 siblings, 0 replies; 5+ messages in thread
From: Rustam Adilov @ 2026-11-15 9:32 UTC (permalink / raw)
To: Michael Zavertkin
Cc: linux-i2c, Chris Packham, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, devicetree, linux-kernel
On 2026-11-15 08:08, Michael Zavertkin wrote:
> RTL9607C was already supported by realtek,rtl9607-i2c, which is
> confusing, because there are another SoCs such as RTL9607F, RTL9607
> (without letter) and a few more. So more correct compatible was added.
Yeah, that makes sense. Yesterday i spent some time documenting the rtl960x
tree [1] and rtl9607 falls into apollomp rather than rtl9607c family.
We should ideally check if RTL9607 and RTL9607C have similar enough i2c
controllers to use same compatible but maybe for another time. Cause if
it turns out they are different then the rtl9607-i2c should not be
deprecated? I don't know what the rules are for this particular case
where due to lack of knowledge at a time we have been using a wrong
compatible all this time.
[1] https://github.com/Anime4000/RTL960x#rtl960x-families-and-their-subtypes
> New compatible doesn't use IO_MODE_EN register, leaving it to pinctrl
> driver. Old one left for backward compatibility.
>
> Signed-off-by: Michael Zavertkin <misha.zavertkin@mail.ru>
> ---
> drivers/i2c/busses/i2c-rtl9300.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9300.c
> index a9dd85a286d4..ae20fbdc307a 100644
> --- a/drivers/i2c/busses/i2c-rtl9300.c
> +++ b/drivers/i2c/busses/i2c-rtl9300.c
> @@ -200,10 +200,12 @@ static int rtl9607_i2c_config_chan(struct rtl9300_i2c *i2c, struct rtl9300_i2c_c
> if (ret)
> return ret;
>
> - drv_data = device_get_match_data(i2c->dev);
> - ret = drv_data->select_scl(i2c, i2c->scl_num);
> - if (ret)
> - return ret;
> + if (device_is_compatible(i2c->dev, "realtek,rtl9607-i2c")) {
> + drv_data = device_get_match_data(i2c->dev);
> + ret = drv_data->select_scl(i2c, i2c->scl_num);
> + if (ret)
> + return ret;
> + }
>
> i2c->sda_num = chan->sda_num;
> return 0;
> @@ -494,6 +496,10 @@ static int rtl9300_i2c_probe(struct platform_device *pdev)
> scl_num = 0;
> i2c->scl_num = (u8)scl_num;
>
> + if (device_is_compatible(i2c->dev, "realtek,rtl9607-i2c"))
> + dev_warn(dev, "Compatible 'realtek,rtl9607-i2c' is deprecated. "
> + "Use 'realtek,rtl9607c-i2c' instead\n");
> +
> platform_set_drvdata(pdev, i2c);
>
> drv_data = device_get_match_data(i2c->dev);
> @@ -652,6 +658,7 @@ static const struct of_device_id i2c_rtl9300_dt_ids[] = {
> { .compatible = "realtek,rtl9312-i2c", .data = (void *) &rtl9310_i2c_drv_data },
> { .compatible = "realtek,rtl9313-i2c", .data = (void *) &rtl9310_i2c_drv_data },
> { .compatible = "realtek,rtl9607-i2c", .data = (void *) &rtl9607_i2c_drv_data },
> + { .compatible = "realtek,rtl9607c-i2c", .data = (void *) &rtl9607_i2c_drv_data },
> {}
> };
> MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids);
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-11-15 9:32 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-15 8:08 [PATCH v3 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin
2026-11-15 8:08 ` [PATCH v3 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin
2026-11-15 9:32 ` Rustam Adilov
2026-11-15 8:08 ` [PATCH v3 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin
2026-11-15 8:20 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox