Skip to content

Commit 11db6a5

Browse files
prabhakarladAndi Shyti
authored andcommitted
i2c: riic: Pass IRQ desc array as part of OF data
In preparation for adding support for Renesas RZ/T2H and RZ/N2H SoCs, which feature a combined error interrupt instead of individual error interrupts per condition, update the driver to support configurable IRQ layouts via OF data. Introduce a new `irqs` field and `num_irqs` count in `riic_of_data` to allow future SoCs to provide a custom IRQ layout. This patch is a non-functional change for existing SoCs and maintains compatibility with the current `riic_irqs` array. Signed-off-by: Lad Prabhakar <[email protected]> Reviewed-by: Wolfram Sang <[email protected]> Tested-by: Wolfram Sang <[email protected]> # on RZ/A1 Reviewed-by: Geert Uytterhoeven <[email protected]> Tested-by: Geert Uytterhoeven <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Signed-off-by: Andi Shyti <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 13aa792 commit 11db6a5

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

drivers/i2c/busses/i2c-riic.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ enum riic_reg_list {
102102

103103
struct riic_of_data {
104104
const u8 *regs;
105+
const struct riic_irq_desc *irqs;
106+
u8 num_irqs;
105107
bool fast_mode_plus;
106108
};
107109

@@ -520,21 +522,23 @@ static int riic_i2c_probe(struct platform_device *pdev)
520522
return dev_err_probe(dev, PTR_ERR(riic->rstc),
521523
"failed to acquire deasserted reset\n");
522524

523-
for (i = 0; i < ARRAY_SIZE(riic_irqs); i++) {
525+
riic->info = of_device_get_match_data(dev);
526+
527+
for (i = 0; i < riic->info->num_irqs; i++) {
528+
const struct riic_irq_desc *irq_desc;
524529
int irq;
525530

526-
irq = platform_get_irq(pdev, riic_irqs[i].res_num);
531+
irq_desc = &riic->info->irqs[i];
532+
irq = platform_get_irq(pdev, irq_desc->res_num);
527533
if (irq < 0)
528534
return irq;
529535

530-
ret = devm_request_irq(dev, irq, riic_irqs[i].isr,
531-
0, riic_irqs[i].name, riic);
536+
ret = devm_request_irq(dev, irq, irq_desc->isr, 0, irq_desc->name, riic);
532537
if (ret)
533538
return dev_err_probe(dev, ret, "failed to request irq %s\n",
534-
riic_irqs[i].name);
539+
irq_desc->name);
535540
}
536541

537-
riic->info = of_device_get_match_data(dev);
538542

539543
adap = &riic->adapter;
540544
i2c_set_adapdata(adap, riic);
@@ -606,11 +610,15 @@ static const u8 riic_rz_a_regs[RIIC_REG_END] = {
606610

607611
static const struct riic_of_data riic_rz_a_info = {
608612
.regs = riic_rz_a_regs,
613+
.irqs = riic_irqs,
614+
.num_irqs = ARRAY_SIZE(riic_irqs),
609615
.fast_mode_plus = true,
610616
};
611617

612618
static const struct riic_of_data riic_rz_a1h_info = {
613619
.regs = riic_rz_a_regs,
620+
.irqs = riic_irqs,
621+
.num_irqs = ARRAY_SIZE(riic_irqs),
614622
};
615623

616624
static const u8 riic_rz_v2h_regs[RIIC_REG_END] = {
@@ -630,6 +638,8 @@ static const u8 riic_rz_v2h_regs[RIIC_REG_END] = {
630638

631639
static const struct riic_of_data riic_rz_v2h_info = {
632640
.regs = riic_rz_v2h_regs,
641+
.irqs = riic_irqs,
642+
.num_irqs = ARRAY_SIZE(riic_irqs),
633643
.fast_mode_plus = true,
634644
};
635645

0 commit comments

Comments
 (0)