forked from mirrors/linux
		
	gpio: ftgpio: 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 chained irqchips this is a pretty straight-forward conversion. Cc: Thierry Reding <treding@nvidia.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
		
							parent
							
								
									a522f1d0c3
								
							
						
					
					
						commit
						42d9fc7176
					
				
					 1 changed files with 19 additions and 16 deletions
				
			
		|  | @ -226,6 +226,7 @@ static int ftgpio_gpio_probe(struct platform_device *pdev) | |||
| { | ||||
| 	struct device *dev = &pdev->dev; | ||||
| 	struct ftgpio_gpio *g; | ||||
| 	struct gpio_irq_chip *girq; | ||||
| 	int irq; | ||||
| 	int ret; | ||||
| 
 | ||||
|  | @ -277,6 +278,24 @@ static int ftgpio_gpio_probe(struct platform_device *pdev) | |||
| 	if (!IS_ERR(g->clk)) | ||||
| 		g->gc.set_config = ftgpio_gpio_set_config; | ||||
| 
 | ||||
| 	g->irq.name = "FTGPIO010"; | ||||
| 	g->irq.irq_ack = ftgpio_gpio_ack_irq; | ||||
| 	g->irq.irq_mask = ftgpio_gpio_mask_irq; | ||||
| 	g->irq.irq_unmask = ftgpio_gpio_unmask_irq; | ||||
| 	g->irq.irq_set_type = ftgpio_gpio_set_irq_type; | ||||
| 
 | ||||
| 	girq = &g->gc.irq; | ||||
| 	girq->chip = &g->irq; | ||||
| 	girq->parent_handler = ftgpio_gpio_irq_handler; | ||||
| 	girq->num_parents = 1; | ||||
| 	girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents), | ||||
| 				     GFP_KERNEL); | ||||
| 	if (!girq->parents) | ||||
| 		return -ENOMEM; | ||||
| 	girq->default_type = IRQ_TYPE_NONE; | ||||
| 	girq->handler = handle_bad_irq; | ||||
| 	girq->parents[0] = irq; | ||||
| 
 | ||||
| 	ret = devm_gpiochip_add_data(dev, &g->gc, g); | ||||
| 	if (ret) | ||||
| 		goto dis_clk; | ||||
|  | @ -289,22 +308,6 @@ static int ftgpio_gpio_probe(struct platform_device *pdev) | |||
| 	/* Clear any use of debounce */ | ||||
| 	writel(0x0, g->base + GPIO_DEBOUNCE_EN); | ||||
| 
 | ||||
| 	g->irq.name = "FTGPIO010"; | ||||
| 	g->irq.irq_ack = ftgpio_gpio_ack_irq; | ||||
| 	g->irq.irq_mask = ftgpio_gpio_mask_irq; | ||||
| 	g->irq.irq_unmask = ftgpio_gpio_unmask_irq; | ||||
| 	g->irq.irq_set_type = ftgpio_gpio_set_irq_type; | ||||
| 
 | ||||
| 	ret = gpiochip_irqchip_add(&g->gc, &g->irq, | ||||
| 				   0, handle_bad_irq, | ||||
| 				   IRQ_TYPE_NONE); | ||||
| 	if (ret) { | ||||
| 		dev_info(dev, "could not add irqchip\n"); | ||||
| 		goto dis_clk; | ||||
| 	} | ||||
| 	gpiochip_set_chained_irqchip(&g->gc, &g->irq, | ||||
| 				     irq, ftgpio_gpio_irq_handler); | ||||
| 
 | ||||
| 	platform_set_drvdata(pdev, g); | ||||
| 	dev_info(dev, "FTGPIO010 @%p registered\n", g->base); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Linus Walleij
						Linus Walleij