The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH 0/3] Handle optional IRQs correctly
@ 2026-08-13  8:52 phucduc.bui
  2026-08-13  8:52 ` [PATCH 1/3] i2c: pca-platform: Handle errors from optional IRQ lookup phucduc.bui
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: phucduc.bui @ 2026-08-13  8:52 UTC (permalink / raw)
  To: Kamal Dasu, Broadcom internal kernel review list, Andi Shyti,
	Florian Fainelli, linux-i2c, linux-arm-kernel, linux-kernel
  Cc: Wolfram Sang, bui duc phuc

From: bui duc phuc <phucduc.bui@gmail.com>

Hi all,

The changes were found through code inspection while reviewing optional
IRQ handling in I2C drivers.

I noticed that some drivers already handle the return value of
platform_get_irq_optional() explicitly, including i2c-designware-platdrv,
i2c-ocores, and i2c-sh_mobile.

This series updates the affected drivers to properly handle errors from
platform_get_irq_optional() and distinguish a missing optional IRQ from
other errors.

The series also fixes the handling of IRQ 0 in the brcmstb driver, since
0 is not a valid IRQ number returned by platform_get_irq_optional().

The series was only compile-tested.

Best regards,
Phuc

bui duc phuc (3):
  i2c: pca-platform: Handle errors from optional IRQ lookup
  i2c: brcmstb: Handle errors from optional IRQ lookup
  i2c: brcmstb: Correct optional IRQ handling

 drivers/i2c/busses/i2c-brcmstb.c      | 6 ++++--
 drivers/i2c/busses/i2c-pca-platform.c | 5 ++++-
 2 files changed, 8 insertions(+), 3 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] i2c: pca-platform: Handle errors from optional IRQ lookup
  2026-08-13  8:52 [PATCH 0/3] Handle optional IRQs correctly phucduc.bui
@ 2026-08-13  8:52 ` phucduc.bui
  2026-08-13  8:52 ` [PATCH 2/3] i2c: brcmstb: " phucduc.bui
  2026-08-13  8:52 ` [PATCH 3/3] i2c: brcmstb: Correct optional IRQ handling phucduc.bui
  2 siblings, 0 replies; 4+ messages in thread
From: phucduc.bui @ 2026-08-13  8:52 UTC (permalink / raw)
  To: Kamal Dasu, Broadcom internal kernel review list, Andi Shyti,
	Florian Fainelli, linux-i2c, linux-arm-kernel, linux-kernel
  Cc: Wolfram Sang, bui duc phuc

From: bui duc phuc <phucduc.bui@gmail.com>

platform_get_irq_optional() returns a positive IRQ number on success or
a negative error code on failure. For an optional IRQ, -ENXIO indicates
that no optional IRQ is available. Other errors, such as -EPROBE_DEFER
and -EINVAL, should be propagated so that the caller can handle them
appropriately.

Propagate negative errors other than -ENXIO.

Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
---
 drivers/i2c/busses/i2c-pca-platform.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-pca-platform.c b/drivers/i2c/busses/i2c-pca-platform.c
index c0f35ebbe37d..63c8ca1f1870 100644
--- a/drivers/i2c/busses/i2c-pca-platform.c
+++ b/drivers/i2c/busses/i2c-pca-platform.c
@@ -139,8 +139,11 @@ static int i2c_pca_pf_probe(struct platform_device *pdev)
 
 	irq = platform_get_irq_optional(pdev, 0);
 	/* If irq is 0, we do polling. */
-	if (irq < 0)
+	if (irq < 0) {
+		if (irq != -ENXIO)
+			return irq;
 		irq = 0;
+	}
 
 	i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL);
 	if (!i2c)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] i2c: brcmstb: Handle errors from optional IRQ lookup
  2026-08-13  8:52 [PATCH 0/3] Handle optional IRQs correctly phucduc.bui
  2026-08-13  8:52 ` [PATCH 1/3] i2c: pca-platform: Handle errors from optional IRQ lookup phucduc.bui
@ 2026-08-13  8:52 ` phucduc.bui
  2026-08-13  8:52 ` [PATCH 3/3] i2c: brcmstb: Correct optional IRQ handling phucduc.bui
  2 siblings, 0 replies; 4+ messages in thread
From: phucduc.bui @ 2026-08-13  8:52 UTC (permalink / raw)
  To: Kamal Dasu, Broadcom internal kernel review list, Andi Shyti,
	Florian Fainelli, linux-i2c, linux-arm-kernel, linux-kernel
  Cc: Wolfram Sang, bui duc phuc

From: bui duc phuc <phucduc.bui@gmail.com>

platform_get_irq_optional() returns a positive IRQ number on success or
a negative error code on failure. For an optional IRQ, -ENXIO indicates
that no optional IRQ is available. Other errors, such as -EPROBE_DEFER
and -EINVAL, should be propagated so that the caller can handle them
appropriately.

Propagate negative errors other than -ENXIO.

Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
---
 drivers/i2c/busses/i2c-brcmstb.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/i2c/busses/i2c-brcmstb.c b/drivers/i2c/busses/i2c-brcmstb.c
index 5fa30e8926c5..91525a36e575 100644
--- a/drivers/i2c/busses/i2c-brcmstb.c
+++ b/drivers/i2c/busses/i2c-brcmstb.c
@@ -648,6 +648,8 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)
 
 	/* Get the interrupt number */
 	dev->irq = platform_get_irq_optional(pdev, 0);
+	if (dev->irq < 0 && dev->irq != -ENXIO)
+		return dev->irq;
 
 	/* disable the bsc interrupt line */
 	brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] i2c: brcmstb: Correct optional IRQ handling
  2026-08-13  8:52 [PATCH 0/3] Handle optional IRQs correctly phucduc.bui
  2026-08-13  8:52 ` [PATCH 1/3] i2c: pca-platform: Handle errors from optional IRQ lookup phucduc.bui
  2026-08-13  8:52 ` [PATCH 2/3] i2c: brcmstb: " phucduc.bui
@ 2026-08-13  8:52 ` phucduc.bui
  2 siblings, 0 replies; 4+ messages in thread
From: phucduc.bui @ 2026-08-13  8:52 UTC (permalink / raw)
  To: Kamal Dasu, Broadcom internal kernel review list, Andi Shyti,
	Florian Fainelli, linux-i2c, linux-arm-kernel, linux-kernel
  Cc: Wolfram Sang, bui duc phuc

From: bui duc phuc <phucduc.bui@gmail.com>

dev->irq is assigned from platform_get_irq_optional(), which returns a
non-zero interrupt number on success or a negative error number on
failure. Therefore, 0 is not a valid IRQ number.

Check for a positive IRQ number before requesting the IRQ instead of
treating 0 as a valid IRQ.

Also use a positive IRQ number when reporting the operating mode. The
driver sets dev->irq to -1 when devm_request_irq() fails, so the mode
check should only consider positive IRQ numbers as interrupt mode.

Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
---
 drivers/i2c/busses/i2c-brcmstb.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-brcmstb.c b/drivers/i2c/busses/i2c-brcmstb.c
index 91525a36e575..3adc73f3d608 100644
--- a/drivers/i2c/busses/i2c-brcmstb.c
+++ b/drivers/i2c/busses/i2c-brcmstb.c
@@ -655,7 +655,7 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)
 	brcmstb_i2c_enable_disable_irq(dev, INT_DISABLE);
 
 	/* register the ISR handler */
-	if (dev->irq >= 0) {
+	if (dev->irq > 0) {
 		rc = devm_request_irq(&pdev->dev, dev->irq, brcmstb_i2c_isr,
 				      IRQF_SHARED,
 				      int_name ? int_name : pdev->name,
@@ -697,7 +697,7 @@ static int brcmstb_i2c_probe(struct platform_device *pdev)
 
 	dev_info(dev->device, "%s@%dhz registered in %s mode\n",
 		 int_name ? int_name : " ", dev->clk_freq_hz,
-		 (dev->irq >= 0) ? "interrupt" : "polling");
+		 (dev->irq > 0) ? "interrupt" : "polling");
 
 	return 0;
 }
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-08-13  8:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13  8:52 [PATCH 0/3] Handle optional IRQs correctly phucduc.bui
2026-08-13  8:52 ` [PATCH 1/3] i2c: pca-platform: Handle errors from optional IRQ lookup phucduc.bui
2026-08-13  8:52 ` [PATCH 2/3] i2c: brcmstb: " phucduc.bui
2026-08-13  8:52 ` [PATCH 3/3] i2c: brcmstb: Correct optional IRQ handling phucduc.bui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox