* [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; 4+ 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] 4+ 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; 4+ 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 [flat|nested] 4+ 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; 4+ 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] 4+ 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 1 sibling, 0 replies; 4+ 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 [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-15 9:32 UTC | newest] Thread overview: 4+ 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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®