@@ -55,7 +55,7 @@ static inline struct davinci_gpio_regs __iomem *irq2regs(struct irq_data *d)
55
55
return g ;
56
56
}
57
57
58
- static int davinci_gpio_irq_setup (struct platform_device * pdev , int bank_irq );
58
+ static int davinci_gpio_irq_setup (struct platform_device * pdev );
59
59
60
60
/*--------------------------------------------------------------------------*/
61
61
@@ -167,8 +167,8 @@ davinci_gpio_get_pdata(struct platform_device *pdev)
167
167
static int davinci_gpio_probe (struct platform_device * pdev )
168
168
{
169
169
static int ctrl_num , bank_base ;
170
- int gpio , bank , bank_irq , ret = 0 ;
171
- unsigned ngpio , nbank ;
170
+ int gpio , bank , i , ret = 0 ;
171
+ unsigned int ngpio , nbank , nirq ;
172
172
struct davinci_gpio_controller * chips ;
173
173
struct davinci_gpio_platform_data * pdata ;
174
174
struct device * dev = & pdev -> dev ;
@@ -197,6 +197,16 @@ static int davinci_gpio_probe(struct platform_device *pdev)
197
197
if (WARN_ON (ARCH_NR_GPIOS < ngpio ))
198
198
ngpio = ARCH_NR_GPIOS ;
199
199
200
+ /*
201
+ * If there are unbanked interrupts then the number of
202
+ * interrupts is equal to number of gpios else all are banked so
203
+ * number of interrupts is equal to number of banks(each with 16 gpios)
204
+ */
205
+ if (pdata -> gpio_unbanked )
206
+ nirq = pdata -> gpio_unbanked ;
207
+ else
208
+ nirq = DIV_ROUND_UP (ngpio , 16 );
209
+
200
210
nbank = DIV_ROUND_UP (ngpio , 32 );
201
211
chips = devm_kcalloc (dev ,
202
212
nbank , sizeof (struct davinci_gpio_controller ),
@@ -209,10 +219,13 @@ static int davinci_gpio_probe(struct platform_device *pdev)
209
219
if (IS_ERR (gpio_base ))
210
220
return PTR_ERR (gpio_base );
211
221
212
- bank_irq = platform_get_irq (pdev , 0 );
213
- if (bank_irq < 0 ) {
214
- dev_dbg (dev , "IRQ not populated\n" );
215
- return bank_irq ;
222
+ for (i = 0 ; i < nirq ; i ++ ) {
223
+ chips -> irqs [i ] = platform_get_irq (pdev , i );
224
+ if (chips -> irqs [i ] < 0 ) {
225
+ dev_info (dev , "IRQ not populated, err = %d\n" ,
226
+ chips -> irqs [i ]);
227
+ return chips -> irqs [i ];
228
+ }
216
229
}
217
230
218
231
snprintf (label , MAX_LABEL_SIZE , "davinci_gpio.%d" , ctrl_num ++ );
@@ -249,7 +262,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
249
262
goto err ;
250
263
251
264
platform_set_drvdata (pdev , chips );
252
- ret = davinci_gpio_irq_setup (pdev , bank_irq );
265
+ ret = davinci_gpio_irq_setup (pdev );
253
266
if (ret )
254
267
goto err ;
255
268
@@ -383,7 +396,7 @@ static int gpio_to_irq_unbanked(struct gpio_chip *chip, unsigned offset)
383
396
* can provide direct-mapped IRQs to AINTC (up to 32 GPIOs).
384
397
*/
385
398
if (offset < d -> gpio_unbanked )
386
- return d -> base_irq + offset ;
399
+ return d -> irqs [ offset ] ;
387
400
else
388
401
return - ENODEV ;
389
402
}
@@ -392,11 +405,18 @@ static int gpio_irq_type_unbanked(struct irq_data *data, unsigned trigger)
392
405
{
393
406
struct davinci_gpio_controller * d ;
394
407
struct davinci_gpio_regs __iomem * g ;
395
- u32 mask ;
408
+ u32 mask , i ;
396
409
397
410
d = (struct davinci_gpio_controller * )irq_data_get_irq_handler_data (data );
398
411
g = (struct davinci_gpio_regs __iomem * )d -> regs [0 ];
399
- mask = __gpio_mask (data -> irq - d -> base_irq );
412
+ for (i = 0 ; i < MAX_INT_PER_BANK ; i ++ )
413
+ if (data -> irq == d -> irqs [i ])
414
+ break ;
415
+
416
+ if (i == MAX_INT_PER_BANK )
417
+ return - EINVAL ;
418
+
419
+ mask = __gpio_mask (i );
400
420
401
421
if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING ))
402
422
return - EINVAL ;
@@ -458,7 +478,7 @@ static const struct of_device_id davinci_gpio_ids[];
458
478
* (dm6446) can be set appropriately for GPIOV33 pins.
459
479
*/
460
480
461
- static int davinci_gpio_irq_setup (struct platform_device * pdev , int bank_irq )
481
+ static int davinci_gpio_irq_setup (struct platform_device * pdev )
462
482
{
463
483
unsigned gpio , bank ;
464
484
int irq ;
@@ -492,6 +512,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
492
512
dev_err (dev , "Error %ld getting gpio clock\n" , PTR_ERR (clk ));
493
513
return PTR_ERR (clk );
494
514
}
515
+
495
516
ret = clk_prepare_enable (clk );
496
517
if (ret )
497
518
return ret ;
@@ -531,12 +552,11 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
531
552
if (pdata -> gpio_unbanked ) {
532
553
/* pass "bank 0" GPIO IRQs to AINTC */
533
554
chips -> chip .to_irq = gpio_to_irq_unbanked ;
534
- chips -> base_irq = bank_irq ;
535
555
chips -> gpio_unbanked = pdata -> gpio_unbanked ;
536
556
binten = GENMASK (pdata -> gpio_unbanked / 16 , 0 );
537
557
538
558
/* AINTC handles mask/unmask; GPIO handles triggering */
539
- irq = bank_irq ;
559
+ irq = chips -> irqs [ 0 ] ;
540
560
irq_chip = gpio_get_irq_chip (irq );
541
561
irq_chip -> name = "GPIO-AINTC" ;
542
562
irq_chip -> irq_set_type = gpio_irq_type_unbanked ;
@@ -547,10 +567,11 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
547
567
writel_relaxed (~0 , & g -> set_rising );
548
568
549
569
/* set the direct IRQs up to use that irqchip */
550
- for (gpio = 0 ; gpio < pdata -> gpio_unbanked ; gpio ++ , irq ++ ) {
551
- irq_set_chip (irq , irq_chip );
552
- irq_set_handler_data (irq , chips );
553
- irq_set_status_flags (irq , IRQ_TYPE_EDGE_BOTH );
570
+ for (gpio = 0 ; gpio < pdata -> gpio_unbanked ; gpio ++ ) {
571
+ irq_set_chip (chips -> irqs [gpio ], irq_chip );
572
+ irq_set_handler_data (chips -> irqs [gpio ], chips );
573
+ irq_set_status_flags (chips -> irqs [gpio ],
574
+ IRQ_TYPE_EDGE_BOTH );
554
575
}
555
576
556
577
goto done ;
@@ -560,7 +581,7 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
560
581
* Or, AINTC can handle IRQs for banks of 16 GPIO IRQs, which we
561
582
* then chain through our own handler.
562
583
*/
563
- for (gpio = 0 , bank = 0 ; gpio < ngpio ; bank ++ , bank_irq ++ , gpio += 16 ) {
584
+ for (gpio = 0 , bank = 0 ; gpio < ngpio ; bank ++ , gpio += 16 ) {
564
585
/* disabled by default, enabled only as needed
565
586
* There are register sets for 32 GPIOs. 2 banks of 16
566
587
* GPIOs are covered by each set of registers hence divide by 2
@@ -587,8 +608,8 @@ static int davinci_gpio_irq_setup(struct platform_device *pdev, int bank_irq)
587
608
irqdata -> bank_num = bank ;
588
609
irqdata -> chip = chips ;
589
610
590
- irq_set_chained_handler_and_data (bank_irq , gpio_irq_handler ,
591
- irqdata );
611
+ irq_set_chained_handler_and_data (chips -> irqs [ bank ] ,
612
+ gpio_irq_handler , irqdata );
592
613
593
614
binten |= BIT (bank );
594
615
}
0 commit comments