* [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:01 ` Abdurrahman Hussain via B4 Relay
2026-02-04 10:00 ` Jonathan Cameron
2026-02-04 7:01 ` [PATCH v10 2/7] i2c: xiic: remove duplicate error message Abdurrahman Hussain via B4 Relay
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:01 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Simplify the error code paths by switching to devres managed helper
functions.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 29 ++++++++++++-----------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index 28015d77599d..16ff83fe280b 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1423,6 +1423,7 @@ MODULE_DEVICE_TABLE(of, xiic_of_match);
static int xiic_i2c_probe(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
struct xiic_i2c *i2c;
struct xiic_i2c_platform_data *pdata;
const struct of_device_id *match;
@@ -1461,7 +1462,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
snprintf(i2c->adap.name, sizeof(i2c->adap.name),
DRIVER_NAME " %s", pdev->name);
- mutex_init(&i2c->lock);
+ ret = devm_mutex_init(dev, &i2c->lock);
+ if (ret)
+ return ret;
+
spin_lock_init(&i2c->atomic_lock);
i2c->clk = devm_clk_get_enabled(&pdev->dev, NULL);
@@ -1472,8 +1476,9 @@ static int xiic_i2c_probe(struct platform_device *pdev)
i2c->dev = &pdev->dev;
pm_runtime_set_autosuspend_delay(i2c->dev, XIIC_PM_TIMEOUT);
pm_runtime_use_autosuspend(i2c->dev);
- pm_runtime_set_active(i2c->dev);
- pm_runtime_enable(i2c->dev);
+ ret = devm_pm_runtime_set_active_enabled(dev);
+ if (ret)
+ return ret;
/* SCL frequency configuration */
i2c->input_clk = clk_get_rate(i2c->clk);
@@ -1489,7 +1494,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
if (ret < 0) {
dev_err_probe(&pdev->dev, ret, "Cannot claim IRQ\n");
- goto err_pm_disable;
+ return ret;
}
i2c->singlemaster =
@@ -1508,16 +1513,14 @@ static int xiic_i2c_probe(struct platform_device *pdev)
i2c->endianness = BIG;
ret = xiic_reinit(i2c);
- if (ret < 0) {
- dev_err_probe(&pdev->dev, ret, "Cannot xiic_reinit\n");
- goto err_pm_disable;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Cannot xiic_reinit\n");
/* add i2c adapter to i2c tree */
ret = i2c_add_adapter(&i2c->adap);
if (ret) {
xiic_deinit(i2c);
- goto err_pm_disable;
+ return ret;
}
if (pdata) {
@@ -1529,12 +1532,6 @@ static int xiic_i2c_probe(struct platform_device *pdev)
dev_dbg(&pdev->dev, "mmio %08lx irq %d scl clock frequency %d\n",
(unsigned long)res->start, irq, i2c->i2c_clk);
- return 0;
-
-err_pm_disable:
- pm_runtime_disable(&pdev->dev);
- pm_runtime_set_suspended(&pdev->dev);
-
return ret;
}
@@ -1555,8 +1552,6 @@ static void xiic_i2c_remove(struct platform_device *pdev)
xiic_deinit(i2c);
pm_runtime_put_sync(i2c->dev);
- pm_runtime_disable(&pdev->dev);
- pm_runtime_set_suspended(&pdev->dev);
pm_runtime_dont_use_autosuspend(&pdev->dev);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs
2026-02-04 7:01 ` [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs Abdurrahman Hussain via B4 Relay
@ 2026-02-04 10:00 ` Jonathan Cameron
2026-02-04 10:11 ` Andy Shevchenko
2026-02-04 17:58 ` Abdurrahman Hussain
0 siblings, 2 replies; 13+ messages in thread
From: Jonathan Cameron @ 2026-02-04 10:00 UTC (permalink / raw)
To: Abdurrahman Hussain via B4 Relay
Cc: abdurrahman, Michal Simek, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Andy Shevchenko,
linux-arm-kernel, linux-i2c, linux-kernel, devicetree
On Wed, 04 Feb 2026 07:01:58 +0000
Abdurrahman Hussain via B4 Relay <devnull+abdurrahman.nexthop.ai@kernel.org> wrote:
> From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
>
> Simplify the error code paths by switching to devres managed helper
> functions.
>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
A quick drive by review whilst I have a coffee...
1st one is a taste thing. Second one is kind of a bug - be it one that
I think is probably harmless.
> ---
> drivers/i2c/busses/i2c-xiic.c | 29 ++++++++++++-----------------
> 1 file changed, 12 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
> index 28015d77599d..16ff83fe280b 100644
> --- a/drivers/i2c/busses/i2c-xiic.c
> +++ b/drivers/i2c/busses/i2c-xiic.c
> @@ -1423,6 +1423,7 @@ MODULE_DEVICE_TABLE(of, xiic_of_match);
>
> static int xiic_i2c_probe(struct platform_device *pdev)
> {
> + struct device *dev = &pdev->dev;
> struct xiic_i2c *i2c;
> struct xiic_i2c_platform_data *pdata;
> const struct of_device_id *match;
> @@ -1461,7 +1462,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
> snprintf(i2c->adap.name, sizeof(i2c->adap.name),
> DRIVER_NAME " %s", pdev->name);
>
> - mutex_init(&i2c->lock);
> + ret = devm_mutex_init(dev, &i2c->lock);
> + if (ret)
> + return ret;
> +
> spin_lock_init(&i2c->atomic_lock);
>
> i2c->clk = devm_clk_get_enabled(&pdev->dev, NULL);
> @@ -1472,8 +1476,9 @@ static int xiic_i2c_probe(struct platform_device *pdev)
> i2c->dev = &pdev->dev;
> pm_runtime_set_autosuspend_delay(i2c->dev, XIIC_PM_TIMEOUT);
> pm_runtime_use_autosuspend(i2c->dev);
> - pm_runtime_set_active(i2c->dev);
> - pm_runtime_enable(i2c->dev);
> + ret = devm_pm_runtime_set_active_enabled(dev);
> + if (ret)
> + return ret;
>
> /* SCL frequency configuration */
> i2c->input_clk = clk_get_rate(i2c->clk);
> @@ -1489,7 +1494,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>
> if (ret < 0) {
> dev_err_probe(&pdev->dev, ret, "Cannot claim IRQ\n");
> - goto err_pm_disable;
> + return ret;
> }
>
> i2c->singlemaster =
> @@ -1508,16 +1513,14 @@ static int xiic_i2c_probe(struct platform_device *pdev)
> i2c->endianness = BIG;
>
> ret = xiic_reinit(i2c);
> - if (ret < 0) {
> - dev_err_probe(&pdev->dev, ret, "Cannot xiic_reinit\n");
> - goto err_pm_disable;
> - }
> + if (ret)
> + return dev_err_probe(dev, ret, "Cannot xiic_reinit\n");
>
> /* add i2c adapter to i2c tree */
> ret = i2c_add_adapter(&i2c->adap);
> if (ret) {
> xiic_deinit(i2c);
> - goto err_pm_disable;
> + return ret;
> }
>
> if (pdata) {
> @@ -1529,12 +1532,6 @@ static int xiic_i2c_probe(struct platform_device *pdev)
> dev_dbg(&pdev->dev, "mmio %08lx irq %d scl clock frequency %d\n",
> (unsigned long)res->start, irq, i2c->i2c_clk);
>
> - return 0;
> -
> -err_pm_disable:
> - pm_runtime_disable(&pdev->dev);
> - pm_runtime_set_suspended(&pdev->dev);
> -
> return ret;
Trivial but if you are respinning...
If you get here we know ret must be 0, so make that explicit to the reader as it
was before with
return 0;
Otherwise they need to look up a few lines to realize that is true.
> }
>
> @@ -1555,8 +1552,6 @@ static void xiic_i2c_remove(struct platform_device *pdev)
> xiic_deinit(i2c);
>
> pm_runtime_put_sync(i2c->dev);
> - pm_runtime_disable(&pdev->dev);
> - pm_runtime_set_suspended(&pdev->dev);
> pm_runtime_dont_use_autosuspend(&pdev->dev);
Take a look at docs for the devm_runtime_enable() that is called
by the cleanup for devm_pm_runtime_set_active_enabled()
Short story, it will call pm_runtime_dont_use_autosuspend() for you
> }
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs
2026-02-04 10:00 ` Jonathan Cameron
@ 2026-02-04 10:11 ` Andy Shevchenko
2026-02-04 17:59 ` Abdurrahman Hussain
2026-02-04 17:58 ` Abdurrahman Hussain
1 sibling, 1 reply; 13+ messages in thread
From: Andy Shevchenko @ 2026-02-04 10:11 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Abdurrahman Hussain via B4 Relay, abdurrahman, Michal Simek,
Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-kernel, linux-i2c, linux-kernel, devicetree
On Wed, Feb 04, 2026 at 10:00:34AM +0000, Jonathan Cameron wrote:
> On Wed, 04 Feb 2026 07:01:58 +0000
> Abdurrahman Hussain via B4 Relay <devnull+abdurrahman.nexthop.ai@kernel.org> wrote:
...
> > - return 0;
> > -
> > -err_pm_disable:
> > - pm_runtime_disable(&pdev->dev);
> > - pm_runtime_set_suspended(&pdev->dev);
> > -
> > return ret;
> Trivial but if you are respinning...
> If you get here we know ret must be 0, so make that explicit to the reader as it
> was before with
> return 0;
> Otherwise they need to look up a few lines to realize that is true.
Right and this is already the line above, just wrong one was removed.
...
> > - pm_runtime_disable(&pdev->dev);
> > - pm_runtime_set_suspended(&pdev->dev);
> > pm_runtime_dont_use_autosuspend(&pdev->dev);
>
> Take a look at docs for the devm_runtime_enable() that is called
> by the cleanup for devm_pm_runtime_set_active_enabled()
>
> Short story, it will call pm_runtime_dont_use_autosuspend() for you
Good catch! It's not obvious from the devm_pm_*() naming... :-(
...
This definitely means v11 should be send at some point, but,
Abdurrahman, do not hurry with it, this series missed the cycle
anyway, we have a few *weeks* to polish this.
That said, send it after v6.20-rc1 (or v7.0-rc1) is out.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs
2026-02-04 10:11 ` Andy Shevchenko
@ 2026-02-04 17:59 ` Abdurrahman Hussain
0 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain @ 2026-02-04 17:59 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Jonathan Cameron, Abdurrahman Hussain via B4 Relay, Michal Simek,
Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-kernel, linux-i2c, linux-kernel, devicetree
> On Feb 4, 2026, at 2:11 AM, Andy Shevchenko <andriy.shevchenko@intel.com> wrote:
>
> On Wed, Feb 04, 2026 at 10:00:34AM +0000, Jonathan Cameron wrote:
>> On Wed, 04 Feb 2026 07:01:58 +0000
>> Abdurrahman Hussain via B4 Relay <devnull+abdurrahman.nexthop.ai@kernel.org> wrote:
>
> ...
>
>>> - return 0;
>>> -
>>> -err_pm_disable:
>>> - pm_runtime_disable(&pdev->dev);
>>> - pm_runtime_set_suspended(&pdev->dev);
>>> -
>>> return ret;
>> Trivial but if you are respinning...
>> If you get here we know ret must be 0, so make that explicit to the reader as it
>> was before with
>> return 0;
>
>> Otherwise they need to look up a few lines to realize that is true.
>
> Right and this is already the line above, just wrong one was removed.
>
> ...
>
>>> - pm_runtime_disable(&pdev->dev);
>>> - pm_runtime_set_suspended(&pdev->dev);
>>> pm_runtime_dont_use_autosuspend(&pdev->dev);
>>
>> Take a look at docs for the devm_runtime_enable() that is called
>> by the cleanup for devm_pm_runtime_set_active_enabled()
>>
>> Short story, it will call pm_runtime_dont_use_autosuspend() for you
>
> Good catch! It's not obvious from the devm_pm_*() naming... :-(
>
> ...
>
> This definitely means v11 should be send at some point, but,
> Abdurrahman, do not hurry with it, this series missed the cycle
> anyway, we have a few *weeks* to polish this.
>
> That said, send it after v6.20-rc1 (or v7.0-rc1) is out.
>
Sounds good. Thank you for your patience!
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs
2026-02-04 10:00 ` Jonathan Cameron
2026-02-04 10:11 ` Andy Shevchenko
@ 2026-02-04 17:58 ` Abdurrahman Hussain
1 sibling, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain @ 2026-02-04 17:58 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Abdurrahman Hussain via B4 Relay, Michal Simek, Andi Shyti,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Andy Shevchenko,
linux-arm-kernel, linux-i2c, linux-kernel, devicetree
> On Feb 4, 2026, at 2:00 AM, Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
>
> On Wed, 04 Feb 2026 07:01:58 +0000
> Abdurrahman Hussain via B4 Relay <devnull+abdurrahman.nexthop.ai@kernel.org> wrote:
>
>> From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
>>
>> Simplify the error code paths by switching to devres managed helper
>> functions.
>>
>> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
>> Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
>
> A quick drive by review whilst I have a coffee...
>
> 1st one is a taste thing. Second one is kind of a bug - be it one that
> I think is probably harmless.
>
>> ---
>> drivers/i2c/busses/i2c-xiic.c | 29 ++++++++++++-----------------
>> 1 file changed, 12 insertions(+), 17 deletions(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
>> index 28015d77599d..16ff83fe280b 100644
>> --- a/drivers/i2c/busses/i2c-xiic.c
>> +++ b/drivers/i2c/busses/i2c-xiic.c
>> @@ -1423,6 +1423,7 @@ MODULE_DEVICE_TABLE(of, xiic_of_match);
>>
>> static int xiic_i2c_probe(struct platform_device *pdev)
>> {
>> + struct device *dev = &pdev->dev;
>> struct xiic_i2c *i2c;
>> struct xiic_i2c_platform_data *pdata;
>> const struct of_device_id *match;
>> @@ -1461,7 +1462,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>> snprintf(i2c->adap.name, sizeof(i2c->adap.name),
>> DRIVER_NAME " %s", pdev->name);
>>
>> - mutex_init(&i2c->lock);
>> + ret = devm_mutex_init(dev, &i2c->lock);
>> + if (ret)
>> + return ret;
>> +
>> spin_lock_init(&i2c->atomic_lock);
>>
>> i2c->clk = devm_clk_get_enabled(&pdev->dev, NULL);
>> @@ -1472,8 +1476,9 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>> i2c->dev = &pdev->dev;
>> pm_runtime_set_autosuspend_delay(i2c->dev, XIIC_PM_TIMEOUT);
>> pm_runtime_use_autosuspend(i2c->dev);
>> - pm_runtime_set_active(i2c->dev);
>> - pm_runtime_enable(i2c->dev);
>> + ret = devm_pm_runtime_set_active_enabled(dev);
>> + if (ret)
>> + return ret;
>>
>> /* SCL frequency configuration */
>> i2c->input_clk = clk_get_rate(i2c->clk);
>> @@ -1489,7 +1494,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>>
>> if (ret < 0) {
>> dev_err_probe(&pdev->dev, ret, "Cannot claim IRQ\n");
>> - goto err_pm_disable;
>> + return ret;
>> }
>>
>> i2c->singlemaster =
>> @@ -1508,16 +1513,14 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>> i2c->endianness = BIG;
>>
>> ret = xiic_reinit(i2c);
>> - if (ret < 0) {
>> - dev_err_probe(&pdev->dev, ret, "Cannot xiic_reinit\n");
>> - goto err_pm_disable;
>> - }
>> + if (ret)
>> + return dev_err_probe(dev, ret, "Cannot xiic_reinit\n");
>>
>> /* add i2c adapter to i2c tree */
>> ret = i2c_add_adapter(&i2c->adap);
>> if (ret) {
>> xiic_deinit(i2c);
>> - goto err_pm_disable;
>> + return ret;
>> }
>>
>> if (pdata) {
>> @@ -1529,12 +1532,6 @@ static int xiic_i2c_probe(struct platform_device *pdev)
>> dev_dbg(&pdev->dev, "mmio %08lx irq %d scl clock frequency %d\n",
>> (unsigned long)res->start, irq, i2c->i2c_clk);
>>
>> - return 0;
>> -
>> -err_pm_disable:
>> - pm_runtime_disable(&pdev->dev);
>> - pm_runtime_set_suspended(&pdev->dev);
>> -
>> return ret;
> Trivial but if you are respinning...
> If you get here we know ret must be 0, so make that explicit to the reader as it
> was before with
> return 0;
>
> Otherwise they need to look up a few lines to realize that is true.
Thanks! Will fix in v11.
>
>> }
>>
>> @@ -1555,8 +1552,6 @@ static void xiic_i2c_remove(struct platform_device *pdev)
>> xiic_deinit(i2c);
>>
>> pm_runtime_put_sync(i2c->dev);
>> - pm_runtime_disable(&pdev->dev);
>> - pm_runtime_set_suspended(&pdev->dev);
>> pm_runtime_dont_use_autosuspend(&pdev->dev);
>
> Take a look at docs for the devm_runtime_enable() that is called
> by the cleanup for devm_pm_runtime_set_active_enabled()
>
> Short story, it will call pm_runtime_dont_use_autosuspend() for you
Thank you for the feedback Jonathan! Will fix in v11.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v10 2/7] i2c: xiic: remove duplicate error message
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
2026-02-04 7:01 ` [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:01 ` Abdurrahman Hussain via B4 Relay
2026-02-04 10:01 ` Jonathan Cameron
2026-02-04 7:02 ` [PATCH v10 3/7] i2c: xiic: switch to generic device property accessors Abdurrahman Hussain via B4 Relay
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:01 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain, Andrew Lunn
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
The devm_request_threaded_irq() already prints an error message. Remove
the duplicate.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index 16ff83fe280b..4cb7c40fb565 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1491,11 +1491,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
xiic_process, IRQF_ONESHOT,
pdev->name, i2c);
-
- if (ret < 0) {
- dev_err_probe(&pdev->dev, ret, "Cannot claim IRQ\n");
+ if (ret)
return ret;
- }
i2c->singlemaster =
of_property_read_bool(pdev->dev.of_node, "single-master");
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v10 2/7] i2c: xiic: remove duplicate error message
2026-02-04 7:01 ` [PATCH v10 2/7] i2c: xiic: remove duplicate error message Abdurrahman Hussain via B4 Relay
@ 2026-02-04 10:01 ` Jonathan Cameron
0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2026-02-04 10:01 UTC (permalink / raw)
To: Abdurrahman Hussain via B4 Relay
Cc: abdurrahman, Michal Simek, Andi Shyti, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Andy Shevchenko,
linux-arm-kernel, linux-i2c, linux-kernel, devicetree,
Andrew Lunn
On Wed, 04 Feb 2026 07:01:59 +0000
Abdurrahman Hussain via B4 Relay <devnull+abdurrahman.nexthop.ai@kernel.org> wrote:
> From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
>
> The devm_request_threaded_irq() already prints an error message. Remove
> the duplicate.
>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> ---
> drivers/i2c/busses/i2c-xiic.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
> index 16ff83fe280b..4cb7c40fb565 100644
> --- a/drivers/i2c/busses/i2c-xiic.c
> +++ b/drivers/i2c/busses/i2c-xiic.c
> @@ -1491,11 +1491,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
> ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
> xiic_process, IRQF_ONESHOT,
> pdev->name, i2c);
> -
> - if (ret < 0) {
> - dev_err_probe(&pdev->dev, ret, "Cannot claim IRQ\n");
> + if (ret)
> return ret;
> - }
>
> i2c->singlemaster =
> of_property_read_bool(pdev->dev.of_node, "single-master");
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v10 3/7] i2c: xiic: switch to generic device property accessors
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
2026-02-04 7:01 ` [PATCH v10 1/7] i2c: xiic: switch to devres managed APIs Abdurrahman Hussain via B4 Relay
2026-02-04 7:01 ` [PATCH v10 2/7] i2c: xiic: remove duplicate error message Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:02 ` Abdurrahman Hussain via B4 Relay
2026-02-04 7:02 ` [PATCH v10 4/7] i2c: xiic: cosmetic cleanup Abdurrahman Hussain via B4 Relay
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:02 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Use generic device property accessors.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index 4cb7c40fb565..60d417a2266e 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -27,7 +27,6 @@
#include <linux/platform_data/i2c-xiic.h>
#include <linux/io.h>
#include <linux/slab.h>
-#include <linux/of.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>
#include <linux/iopoll.h>
@@ -1408,7 +1407,6 @@ static const struct i2c_adapter xiic_adapter = {
.algo = &xiic_algorithm,
};
-#if defined(CONFIG_OF)
static const struct xiic_version_data xiic_2_00 = {
.quirks = DYNAMIC_MODE_READ_BROKEN_BIT,
};
@@ -1419,14 +1417,13 @@ static const struct of_device_id xiic_of_match[] = {
{},
};
MODULE_DEVICE_TABLE(of, xiic_of_match);
-#endif
static int xiic_i2c_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct xiic_i2c *i2c;
struct xiic_i2c_platform_data *pdata;
- const struct of_device_id *match;
+ const struct xiic_version_data *data;
struct resource *res;
int ret, irq;
u8 i;
@@ -1436,12 +1433,9 @@ static int xiic_i2c_probe(struct platform_device *pdev)
if (!i2c)
return -ENOMEM;
- match = of_match_node(xiic_of_match, pdev->dev.of_node);
- if (match && match->data) {
- const struct xiic_version_data *data = match->data;
-
+ data = device_get_match_data(dev);
+ if (data)
i2c->quirks = data->quirks;
- }
i2c->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
if (IS_ERR(i2c->base))
@@ -1458,7 +1452,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
i2c->adap = xiic_adapter;
i2c_set_adapdata(&i2c->adap, i2c);
i2c->adap.dev.parent = &pdev->dev;
- i2c->adap.dev.of_node = pdev->dev.of_node;
+ device_set_node(&i2c->adap.dev, dev_fwnode(dev));
snprintf(i2c->adap.name, sizeof(i2c->adap.name),
DRIVER_NAME " %s", pdev->name);
@@ -1482,8 +1476,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
/* SCL frequency configuration */
i2c->input_clk = clk_get_rate(i2c->clk);
- ret = of_property_read_u32(pdev->dev.of_node, "clock-frequency",
- &i2c->i2c_clk);
+ ret = device_property_read_u32(dev, "clock-frequency", &i2c->i2c_clk);
/* If clock-frequency not specified in DT, do not configure in SW */
if (ret || i2c->i2c_clk > I2C_MAX_FAST_MODE_PLUS_FREQ)
i2c->i2c_clk = 0;
@@ -1494,8 +1487,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
if (ret)
return ret;
- i2c->singlemaster =
- of_property_read_bool(pdev->dev.of_node, "single-master");
+ i2c->singlemaster = device_property_read_bool(dev, "single-master");
/*
* Detect endianness
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v10 4/7] i2c: xiic: cosmetic cleanup
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
` (2 preceding siblings ...)
2026-02-04 7:02 ` [PATCH v10 3/7] i2c: xiic: switch to generic device property accessors Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:02 ` Abdurrahman Hussain via B4 Relay
2026-02-04 7:02 ` [PATCH v10 5/7] i2c: xiic: cosmetic: use resource format specifier in debug log Abdurrahman Hussain via B4 Relay
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:02 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Re-use dev pointer instead of referencing &pdev->dev everywhere.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index 60d417a2266e..bee663f91f10 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1429,7 +1429,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
u8 i;
u32 sr;
- i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
+ i2c = devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL);
if (!i2c)
return -ENOMEM;
@@ -1445,13 +1445,13 @@ static int xiic_i2c_probe(struct platform_device *pdev)
if (irq < 0)
return irq;
- pdata = dev_get_platdata(&pdev->dev);
+ pdata = dev_get_platdata(dev);
/* hook up driver to tree */
platform_set_drvdata(pdev, i2c);
i2c->adap = xiic_adapter;
i2c_set_adapdata(&i2c->adap, i2c);
- i2c->adap.dev.parent = &pdev->dev;
+ i2c->adap.dev.parent = dev;
device_set_node(&i2c->adap.dev, dev_fwnode(dev));
snprintf(i2c->adap.name, sizeof(i2c->adap.name),
DRIVER_NAME " %s", pdev->name);
@@ -1467,9 +1467,10 @@ static int xiic_i2c_probe(struct platform_device *pdev)
return dev_err_probe(&pdev->dev, PTR_ERR(i2c->clk),
"failed to enable input clock.\n");
- i2c->dev = &pdev->dev;
- pm_runtime_set_autosuspend_delay(i2c->dev, XIIC_PM_TIMEOUT);
- pm_runtime_use_autosuspend(i2c->dev);
+ i2c->dev = dev;
+
+ pm_runtime_set_autosuspend_delay(dev, XIIC_PM_TIMEOUT);
+ pm_runtime_use_autosuspend(dev);
ret = devm_pm_runtime_set_active_enabled(dev);
if (ret)
return ret;
@@ -1481,9 +1482,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
if (ret || i2c->i2c_clk > I2C_MAX_FAST_MODE_PLUS_FREQ)
i2c->i2c_clk = 0;
- ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
- xiic_process, IRQF_ONESHOT,
- pdev->name, i2c);
+ ret = devm_request_threaded_irq(dev, irq, NULL, xiic_process,
+ IRQF_ONESHOT, pdev->name, i2c);
if (ret)
return ret;
@@ -1526,22 +1526,22 @@ static int xiic_i2c_probe(struct platform_device *pdev)
static void xiic_i2c_remove(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
struct xiic_i2c *i2c = platform_get_drvdata(pdev);
int ret;
/* remove adapter & data */
i2c_del_adapter(&i2c->adap);
- ret = pm_runtime_get_sync(i2c->dev);
-
+ ret = pm_runtime_get_sync(dev);
if (ret < 0)
- dev_warn(&pdev->dev, "Failed to activate device for removal (%pe)\n",
+ dev_warn(dev, "Failed to activate device for removal (%pe)\n",
ERR_PTR(ret));
else
xiic_deinit(i2c);
- pm_runtime_put_sync(i2c->dev);
- pm_runtime_dont_use_autosuspend(&pdev->dev);
+ pm_runtime_put_sync(dev);
+ pm_runtime_dont_use_autosuspend(dev);
}
static const struct dev_pm_ops xiic_dev_pm_ops = {
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v10 5/7] i2c: xiic: cosmetic: use resource format specifier in debug log
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
` (3 preceding siblings ...)
2026-02-04 7:02 ` [PATCH v10 4/7] i2c: xiic: cosmetic cleanup Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:02 ` Abdurrahman Hussain via B4 Relay
2026-02-04 7:02 ` [PATCH v10 6/7] i2c: xiic: use numbered adapter registration Abdurrahman Hussain via B4 Relay
2026-02-04 7:02 ` [PATCH v10 7/7] i2c: xiic: skip input clock setup on non-OF systems Abdurrahman Hussain via B4 Relay
6 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:02 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Use standard resource format specifier %pR in debug log.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index bee663f91f10..eeb8ba8e131e 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1518,8 +1518,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
i2c_new_client_device(&i2c->adap, pdata->devices + i);
}
- dev_dbg(&pdev->dev, "mmio %08lx irq %d scl clock frequency %d\n",
- (unsigned long)res->start, irq, i2c->i2c_clk);
+ dev_dbg(dev, "mmio %pR irq %d scl clock frequency %d\n",
+ res, irq, i2c->i2c_clk);
return ret;
}
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v10 6/7] i2c: xiic: use numbered adapter registration
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
` (4 preceding siblings ...)
2026-02-04 7:02 ` [PATCH v10 5/7] i2c: xiic: cosmetic: use resource format specifier in debug log Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:02 ` Abdurrahman Hussain via B4 Relay
2026-02-04 7:02 ` [PATCH v10 7/7] i2c: xiic: skip input clock setup on non-OF systems Abdurrahman Hussain via B4 Relay
6 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:02 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Switch from i2c_add_adapter() to i2c_add_numbered_adapter() to enable
platforms to specify fixed I2C bus numbers via the platform device ID.
This allows systems to maintain consistent bus numbering across reboots.
On platforms where the device ID is PLATFORM_DEVID_NONE (the default),
the adapter falls back to dynamic allocation, preserving backward
compatibility.
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index eeb8ba8e131e..2c0470452221 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1450,6 +1450,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
/* hook up driver to tree */
platform_set_drvdata(pdev, i2c);
i2c->adap = xiic_adapter;
+ i2c->adap.nr = pdev->id;
i2c_set_adapdata(&i2c->adap, i2c);
i2c->adap.dev.parent = dev;
device_set_node(&i2c->adap.dev, dev_fwnode(dev));
@@ -1506,7 +1507,7 @@ static int xiic_i2c_probe(struct platform_device *pdev)
return dev_err_probe(dev, ret, "Cannot xiic_reinit\n");
/* add i2c adapter to i2c tree */
- ret = i2c_add_adapter(&i2c->adap);
+ ret = i2c_add_numbered_adapter(&i2c->adap);
if (ret) {
xiic_deinit(i2c);
return ret;
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v10 7/7] i2c: xiic: skip input clock setup on non-OF systems
2026-02-04 7:01 [PATCH v10 0/7] i2c: xiic: use generic device property accessors Abdurrahman Hussain via B4 Relay
` (5 preceding siblings ...)
2026-02-04 7:02 ` [PATCH v10 6/7] i2c: xiic: use numbered adapter registration Abdurrahman Hussain via B4 Relay
@ 2026-02-04 7:02 ` Abdurrahman Hussain via B4 Relay
6 siblings, 0 replies; 13+ messages in thread
From: Abdurrahman Hussain via B4 Relay @ 2026-02-04 7:02 UTC (permalink / raw)
To: Michal Simek, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: Andy Shevchenko, linux-arm-kernel, linux-i2c, linux-kernel,
devicetree, Abdurrahman Hussain
From: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Currently Linux does not implement ACPI ClockInput() resource to describe
clocks, unlike DT. However the xiic driver is happy if something
magically enables the clock before the driver probes, and does not
turn it off again. The clock should always be considered optional for
ACPI.
Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
---
drivers/i2c/busses/i2c-xiic.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
index 2c0470452221..223074e263ee 100644
--- a/drivers/i2c/busses/i2c-xiic.c
+++ b/drivers/i2c/busses/i2c-xiic.c
@@ -1463,10 +1463,12 @@ static int xiic_i2c_probe(struct platform_device *pdev)
spin_lock_init(&i2c->atomic_lock);
- i2c->clk = devm_clk_get_enabled(&pdev->dev, NULL);
- if (IS_ERR(i2c->clk))
- return dev_err_probe(&pdev->dev, PTR_ERR(i2c->clk),
- "failed to enable input clock.\n");
+ if (is_of_node(dev_fwnode(dev))) {
+ i2c->clk = devm_clk_get_enabled(dev, NULL);
+ if (IS_ERR(i2c->clk))
+ return dev_err_probe(dev, PTR_ERR(i2c->clk),
+ "failed to enable input clock.\n");
+ }
i2c->dev = dev;
--
2.52.0
^ permalink raw reply related [flat|nested] 13+ messages in thread