* [PATCH v2 0/2] i2c: rtl9300: remove IO_MODE configuration @ 2026-10-10 6:12 Michael Zavertkin 2026-10-10 6:12 ` [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin 2026-10-10 6:12 ` [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin 0 siblings, 2 replies; 5+ messages in thread From: Michael Zavertkin @ 2026-10-10 6:12 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 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.54.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible 2026-10-10 6:12 [PATCH v2 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin @ 2026-10-10 6:12 ` Michael Zavertkin 2026-10-10 6:45 ` sashiko-bot 2026-10-10 6:12 ` [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin 1 sibling, 1 reply; 5+ messages in thread From: Michael Zavertkin @ 2026-10-10 6:12 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 3a8225b0666c..22aa3b38458c 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.54.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible 2026-10-10 6:12 ` [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin @ 2026-10-10 6:45 ` sashiko-bot 0 siblings, 0 replies; 5+ messages in thread From: sashiko-bot @ 2026-10-10 6:45 UTC (permalink / raw) To: Michael Zavertkin; +Cc: robh, devicetree, conor+dt Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] i2c: rtl9300: device_is_compatible check breaks DT fallback patterns -- commit 96f11e2144ef16398bba64fc512f5b346ab89571 Author: Michael Zavertkin <misha.zavertkin@mail.ru> i2c: rtl9300: add realtek,rtl9607c-i2c compatible This commit adds support for the realtek,rtl9607c-i2c compatible string to distinguish it from other RTL9607 variants. It avoids using the IO_MODE_EN register on the new compatible by restricting the select_scl call and emits a deprecation warning for the old compatible string. > diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9300.c > index 3a8225b0666c0..22aa3b38458c0 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; > + } [Severity: Medium] Will this check break device tree fallback patterns? If a new device tree provides a fallback compatible list like compatible = "realtek,rtl9607c-i2c", "realtek,rtl9607-i2c"; device_is_compatible() will return true because the legacy string is still present in the node. If this happens, the driver will incorrectly execute the legacy select_scl hardware configuration (modifying the IO_MODE_EN register) on RTL9607C hardware, instead of delegating it to the pinctrl driver as intended. Would it be safer to differentiate hardware capabilities based on the matched driver data (for instance, pointing the new compatible to a struct without a select_scl function) instead of dynamically searching the OF node for deprecated strings? > 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"); > + [Severity: Medium] Does this also trigger an incorrect deprecation warning when fallback compatibles are used? Because device_is_compatible() matches any string in the list, providing a valid fallback to support older kernels will falsely trigger this warning even if "realtek,rtl9607c-i2c" is properly specified as the primary compatible string. -- Sashiko AI review · https://sashiko.dev/#/patchset/cover.1791611999.git.misha.zavertkin@mail.ru?part=1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' 2026-10-10 6:12 [PATCH v2 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin 2026-10-10 6:12 ` [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin @ 2026-10-10 6:12 ` Michael Zavertkin 2026-10-10 6:37 ` sashiko-bot 1 sibling, 1 reply; 5+ messages in thread From: Michael Zavertkin @ 2026-10-10 6:12 UTC (permalink / raw) To: linux-i2c Cc: Rustam Adilov, Chris Packham, Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley, devicetree, linux-kernel, Michael Zavertkin 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. 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.54.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' 2026-10-10 6:12 ` [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin @ 2026-10-10 6:37 ` sashiko-bot 0 siblings, 0 replies; 5+ messages in thread From: sashiko-bot @ 2026-10-10 6:37 UTC (permalink / raw) To: Michael Zavertkin; +Cc: devicetree, robh, conor+dt Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Low] dt-bindings: i2c: missing patternProperties restriction for rtl9607c-i2c -- commit 9c59eaea467911b21ec4b5c1d3ef7e034bb19883 Author: Michael Zavertkin <misha.zavertkin@mail.ru> dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Add realtek,rtl9607c-i2c compatible for RTL9607C SoC, deprecate the old one, and rely on pinctrl driver for pin assignment. > 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 [ ... ] > @@ -96,6 +104,16 @@ allOf: > required: > - realtek,scl > - clocks > + - if: > + properties: > + compatible: > + contains: > + const: realtek,rtl9607c-i2c > + then: > + required: > + - clocks > + - pinctrl-0 > + - pinctrl-names [Severity: Low] Does this conditional block need to restrict the allowed child nodes? The RTL9607C hardware only supports 1 channel, but the base schema permits any child node matching '^i2c@[0-9ab]$'. Without adding a restriction such as patternProperties: '^i2c@[1-9ab]$': false to this block, dt_binding_check could incorrectly pass single child nodes with invalid reg indices, like i2c@1 or i2c@b. Since the driver ignores the SDA index during configuration, it would accept these invalid reg values without error. Could we restrict the pattern here to prevent invalid channel definitions? -- Sashiko AI review · https://sashiko.dev/#/patchset/cover.1791611999.git.misha.zavertkin@mail.ru?part=2 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-10 6:45 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-10 6:12 [PATCH v2 0/2] i2c: rtl9300: remove IO_MODE configuration Michael Zavertkin 2026-10-10 6:12 ` [PATCH v2 1/2] i2c: rtl9300: add realtek,rtl9607c-i2c compatible Michael Zavertkin 2026-10-10 6:45 ` sashiko-bot 2026-10-10 6:12 ` [PATCH v2 2/2] dt-bindings: i2c: rtl9300: add 'rtl9607c-i2c' Michael Zavertkin 2026-10-10 6:37 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox