@@ -1352,6 +1352,7 @@ static int pistachio_gpio_register(struct pistachio_pinctrl *pctl)
1352
1352
for (i = 0 ; i < pctl -> nbanks ; i ++ ) {
1353
1353
char child_name [sizeof ("gpioXX" )];
1354
1354
struct device_node * child ;
1355
+ struct gpio_irq_chip * girq ;
1355
1356
1356
1357
snprintf (child_name , sizeof (child_name ), "gpio%d" , i );
1357
1358
child = of_get_child_by_name (node , child_name );
@@ -1383,23 +1384,28 @@ static int pistachio_gpio_register(struct pistachio_pinctrl *pctl)
1383
1384
1384
1385
bank -> gpio_chip .parent = pctl -> dev ;
1385
1386
bank -> gpio_chip .of_node = child ;
1386
- ret = gpiochip_add_data (& bank -> gpio_chip , bank );
1387
- if (ret < 0 ) {
1388
- dev_err (pctl -> dev , "Failed to add GPIO chip %u: %d\n" ,
1389
- i , ret );
1387
+
1388
+ girq = & bank -> gpio_chip .irq ;
1389
+ girq -> chip = & bank -> irq_chip ;
1390
+ girq -> parent_handler = pistachio_gpio_irq_handler ;
1391
+ girq -> num_parents = 1 ;
1392
+ girq -> parents = devm_kcalloc (pctl -> dev , 1 ,
1393
+ sizeof (* girq -> parents ),
1394
+ GFP_KERNEL );
1395
+ if (!girq -> parents ) {
1396
+ ret = - ENOMEM ;
1390
1397
goto err ;
1391
1398
}
1399
+ girq -> parents [0 ] = irq ;
1400
+ girq -> default_type = IRQ_TYPE_NONE ;
1401
+ girq -> handler = handle_level_irq ;
1392
1402
1393
- ret = gpiochip_irqchip_add (& bank -> gpio_chip , & bank -> irq_chip ,
1394
- 0 , handle_level_irq , IRQ_TYPE_NONE );
1403
+ ret = gpiochip_add_data (& bank -> gpio_chip , bank );
1395
1404
if (ret < 0 ) {
1396
- dev_err (pctl -> dev , "Failed to add IRQ chip %u: %d\n" ,
1405
+ dev_err (pctl -> dev , "Failed to add GPIO chip %u: %d\n" ,
1397
1406
i , ret );
1398
- gpiochip_remove (& bank -> gpio_chip );
1399
1407
goto err ;
1400
1408
}
1401
- gpiochip_set_chained_irqchip (& bank -> gpio_chip , & bank -> irq_chip ,
1402
- irq , pistachio_gpio_irq_handler );
1403
1409
1404
1410
ret = gpiochip_add_pin_range (& bank -> gpio_chip ,
1405
1411
dev_name (pctl -> dev ), 0 ,
0 commit comments