pinctrl: bcm-iproc: Pass irqchip when adding gpiochip
We need to convert all old gpio irqchips to pass the irqchip setup along when adding the gpio_chip. For more info see drivers/gpio/TODO. For chained irqchips this is a pretty straight-forward conversion. Cc: Pramod Kumar <pramodku@broadcom.com> Cc: Ray Jui <rjui@broadcom.com> Cc: Scott Branden <sbranden@broadcom.com> Cc: Thierry Reding <treding@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20190812132554.18313-1-linus.walleij@linaro.org Acked-by: Scott Branden <scott.branden@broadcom.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
		
							parent
							
								
									76837e02a2
								
							
						
					
					
						commit
						6f265e5d4d
					
				| @ -790,6 +790,25 @@ static int iproc_gpio_probe(struct platform_device *pdev) | |||||||
| 	chip->pinmux_is_supported = of_property_read_bool(dev->of_node, | 	chip->pinmux_is_supported = of_property_read_bool(dev->of_node, | ||||||
| 							"gpio-ranges"); | 							"gpio-ranges"); | ||||||
| 
 | 
 | ||||||
|  | 	/* optional GPIO interrupt support */ | ||||||
|  | 	irq = platform_get_irq(pdev, 0); | ||||||
|  | 	if (irq) { | ||||||
|  | 		struct gpio_irq_chip *girq; | ||||||
|  | 
 | ||||||
|  | 		girq = &gc->irq; | ||||||
|  | 		girq->chip = &iproc_gpio_irq_chip; | ||||||
|  | 		girq->parent_handler = iproc_gpio_irq_handler; | ||||||
|  | 		girq->num_parents = 1; | ||||||
|  | 		girq->parents = devm_kcalloc(dev, 1, | ||||||
|  | 					     sizeof(*girq->parents), | ||||||
|  | 					     GFP_KERNEL); | ||||||
|  | 		if (!girq->parents) | ||||||
|  | 			return -ENOMEM; | ||||||
|  | 		girq->parents[0] = irq; | ||||||
|  | 		girq->default_type = IRQ_TYPE_NONE; | ||||||
|  | 		girq->handler = handle_simple_irq; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	ret = gpiochip_add_data(gc, chip); | 	ret = gpiochip_add_data(gc, chip); | ||||||
| 	if (ret < 0) { | 	if (ret < 0) { | ||||||
| 		dev_err(dev, "unable to add GPIO chip\n"); | 		dev_err(dev, "unable to add GPIO chip\n"); | ||||||
| @ -814,20 +833,6 @@ static int iproc_gpio_probe(struct platform_device *pdev) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	/* optional GPIO interrupt support */ |  | ||||||
| 	irq = platform_get_irq(pdev, 0); |  | ||||||
| 	if (irq) { |  | ||||||
| 		ret = gpiochip_irqchip_add(gc, &iproc_gpio_irq_chip, 0, |  | ||||||
| 					   handle_simple_irq, IRQ_TYPE_NONE); |  | ||||||
| 		if (ret) { |  | ||||||
| 			dev_err(dev, "no GPIO irqchip\n"); |  | ||||||
| 			goto err_rm_gpiochip; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		gpiochip_set_chained_irqchip(gc, &iproc_gpio_irq_chip, irq, |  | ||||||
| 					     iproc_gpio_irq_handler); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
| err_rm_gpiochip: | err_rm_gpiochip: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user