forked from mirrors/linux
		
	gpio: Move irqdomain into struct gpio_irq_chip
In order to consolidate the multiple ways to associate an IRQ chip with a GPIO chip, move more fields into the new struct gpio_irq_chip. Signed-off-by: Thierry Reding <treding@nvidia.com> Acked-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
		
							parent
							
								
									da80ff81a8
								
							
						
					
					
						commit
						f0fbe7bce7
					
				
					 56 changed files with 78 additions and 71 deletions
				
			
		|  | @ -254,7 +254,7 @@ GPIO irqchips usually fall in one of two categories: | |||
| 	static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank) | ||||
| 		unsigned long wa_lock_flags; | ||||
| 		raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags); | ||||
| 		generic_handle_irq(irq_find_mapping(bank->chip.irqdomain, bit)); | ||||
| 		generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, bit)); | ||||
| 		raw_spin_unlock_irqrestore(&bank->wa_lock, wa_lock_flags); | ||||
| 
 | ||||
| * GENERIC CHAINED GPIO irqchips: these are the same as "CHAINED GPIO irqchips", | ||||
|  |  | |||
|  | @ -113,7 +113,7 @@ static irqreturn_t bcma_gpio_irq_handler(int irq, void *dev_id) | |||
| 		return IRQ_NONE; | ||||
| 
 | ||||
| 	for_each_set_bit(gpio, &irqs, gc->ngpio) | ||||
| 		generic_handle_irq(irq_find_mapping(gc->irqdomain, gpio)); | ||||
| 		generic_handle_irq(irq_find_mapping(gc->irq.domain, gpio)); | ||||
| 	bcma_chipco_gpio_polarity(cc, irqs, val & irqs); | ||||
| 
 | ||||
| 	return IRQ_HANDLED; | ||||
|  |  | |||
|  | @ -326,7 +326,7 @@ static irqreturn_t dio48e_irq_handler(int irq, void *dev_id) | |||
| 	unsigned long gpio; | ||||
| 
 | ||||
| 	for_each_set_bit(gpio, &irq_mask, 2) | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irqdomain, | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irq.domain, | ||||
| 			19 + gpio*24)); | ||||
| 
 | ||||
| 	raw_spin_lock(&dio48egpio->lock); | ||||
|  |  | |||
|  | @ -209,7 +209,7 @@ static irqreturn_t idi_48_irq_handler(int irq, void *dev_id) | |||
| 		for_each_set_bit(bit_num, &irq_mask, 8) { | ||||
| 			gpio = bit_num + boundary * 8; | ||||
| 
 | ||||
| 			generic_handle_irq(irq_find_mapping(chip->irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(chip->irq.domain, | ||||
| 				gpio)); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -199,7 +199,7 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id) | |||
| 	int gpio; | ||||
| 
 | ||||
| 	for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio) | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irqdomain, gpio)); | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irq.domain, gpio)); | ||||
| 
 | ||||
| 	raw_spin_lock(&idio16gpio->lock); | ||||
| 
 | ||||
|  |  | |||
|  | @ -320,7 +320,7 @@ static irqreturn_t adnp_irq(int irq, void *data) | |||
| 
 | ||||
| 		for_each_set_bit(bit, &pending, 8) { | ||||
| 			unsigned int child_irq; | ||||
| 			child_irq = irq_find_mapping(adnp->gpio.irqdomain, | ||||
| 			child_irq = irq_find_mapping(adnp->gpio.irq.domain, | ||||
| 						     base + bit); | ||||
| 			handle_nested_irq(child_irq); | ||||
| 		} | ||||
|  |  | |||
|  | @ -211,7 +211,7 @@ static void altera_gpio_irq_edge_handler(struct irq_desc *desc) | |||
| 	altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc)); | ||||
| 	chip = irq_desc_get_chip(desc); | ||||
| 	mm_gc = &altera_gc->mmchip; | ||||
| 	irqdomain = altera_gc->mmchip.gc.irqdomain; | ||||
| 	irqdomain = altera_gc->mmchip.gc.irq.domain; | ||||
| 
 | ||||
| 	chained_irq_enter(chip, desc); | ||||
| 
 | ||||
|  | @ -239,7 +239,7 @@ static void altera_gpio_irq_leveL_high_handler(struct irq_desc *desc) | |||
| 	altera_gc = gpiochip_get_data(irq_desc_get_handler_data(desc)); | ||||
| 	chip = irq_desc_get_chip(desc); | ||||
| 	mm_gc = &altera_gc->mmchip; | ||||
| 	irqdomain = altera_gc->mmchip.gc.irqdomain; | ||||
| 	irqdomain = altera_gc->mmchip.gc.irq.domain; | ||||
| 
 | ||||
| 	chained_irq_enter(chip, desc); | ||||
| 
 | ||||
|  |  | |||
|  | @ -469,7 +469,7 @@ static void aspeed_gpio_irq_handler(struct irq_desc *desc) | |||
| 		reg = ioread32(bank_irq_reg(data, bank, GPIO_IRQ_STATUS)); | ||||
| 
 | ||||
| 		for_each_set_bit(p, ®, 32) { | ||||
| 			girq = irq_find_mapping(gc->irqdomain, i * 32 + p); | ||||
| 			girq = irq_find_mapping(gc->irq.domain, i * 32 + p); | ||||
| 			generic_handle_irq(girq); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -209,7 +209,7 @@ static void ath79_gpio_irq_handler(struct irq_desc *desc) | |||
| 	if (pending) { | ||||
| 		for_each_set_bit(irq, &pending, gc->ngpio) | ||||
| 			generic_handle_irq( | ||||
| 				irq_linear_revmap(gc->irqdomain, irq)); | ||||
| 				irq_linear_revmap(gc->irq.domain, irq)); | ||||
| 	} | ||||
| 
 | ||||
| 	chained_irq_exit(irqchip, desc); | ||||
|  |  | |||
|  | @ -295,7 +295,7 @@ static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data) | |||
| 
 | ||||
| 	for (gpio = 0; gpio < CRYSTALCOVE_GPIO_NUM; gpio++) { | ||||
| 		if (pending & BIT(gpio)) { | ||||
| 			virq = irq_find_mapping(cg->chip.irqdomain, gpio); | ||||
| 			virq = irq_find_mapping(cg->chip.irq.domain, gpio); | ||||
| 			handle_nested_irq(virq); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -420,7 +420,7 @@ static void dln2_gpio_event(struct platform_device *pdev, u16 echo, | |||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	irq = irq_find_mapping(dln2->gpio.irqdomain, pin); | ||||
| 	irq = irq_find_mapping(dln2->gpio.irq.domain, pin); | ||||
| 	if (!irq) { | ||||
| 		dev_err(dln2->gpio.parent, "pin %d not mapped to IRQ\n", pin); | ||||
| 		return; | ||||
|  |  | |||
|  | @ -149,7 +149,7 @@ static void ftgpio_gpio_irq_handler(struct irq_desc *desc) | |||
| 	stat = readl(g->base + GPIO_INT_STAT); | ||||
| 	if (stat) | ||||
| 		for_each_set_bit(offset, &stat, gc->ngpio) | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irq.domain, | ||||
| 							    offset)); | ||||
| 
 | ||||
| 	chained_irq_exit(irqchip, desc); | ||||
|  |  | |||
|  | @ -242,7 +242,7 @@ static void ingenic_gpio_irq_handler(struct irq_desc *desc) | |||
| 		flag = gpio_ingenic_read_reg(jzgc, JZ4740_GPIO_FLAG); | ||||
| 
 | ||||
| 	for_each_set_bit(i, &flag, 32) | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irqdomain, i)); | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irq.domain, i)); | ||||
| 	chained_irq_exit(irq_chip, desc); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -295,7 +295,7 @@ static void intel_mid_irq_handler(struct irq_desc *desc) | |||
| 			mask = BIT(gpio); | ||||
| 			/* Clear before handling so we can't lose an edge */ | ||||
| 			writel(mask, gedr); | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irq.domain, | ||||
| 							    base + gpio)); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -255,7 +255,7 @@ static void lp_gpio_irq_handler(struct irq_desc *desc) | |||
| 			mask = BIT(pin); | ||||
| 			/* Clear before handling so we don't lose an edge */ | ||||
| 			outl(mask, reg); | ||||
| 			irq = irq_find_mapping(lg->chip.irqdomain, base + pin); | ||||
| 			irq = irq_find_mapping(lg->chip.irq.domain, base + pin); | ||||
| 			generic_handle_irq(irq); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -486,7 +486,7 @@ static irqreturn_t max732x_irq_handler(int irq, void *devid) | |||
| 
 | ||||
| 	do { | ||||
| 		level = __ffs(pending); | ||||
| 		handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain, | ||||
| 		handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain, | ||||
| 						   level)); | ||||
| 
 | ||||
| 		pending &= ~(1 << level); | ||||
|  |  | |||
|  | @ -357,7 +357,7 @@ static void mrfld_irq_handler(struct irq_desc *desc) | |||
| 		for_each_set_bit(gpio, &pending, 32) { | ||||
| 			unsigned int irq; | ||||
| 
 | ||||
| 			irq = irq_find_mapping(gc->irqdomain, base + gpio); | ||||
| 			irq = irq_find_mapping(gc->irq.domain, base + gpio); | ||||
| 			generic_handle_irq(irq); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -733,7 +733,7 @@ static irqreturn_t omap_gpio_irq_handler(int irq, void *gpiobank) | |||
| 
 | ||||
| 			raw_spin_lock_irqsave(&bank->wa_lock, wa_lock_flags); | ||||
| 
 | ||||
| 			generic_handle_irq(irq_find_mapping(bank->chip.irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(bank->chip.irq.domain, | ||||
| 							    bit)); | ||||
| 
 | ||||
| 			raw_spin_unlock_irqrestore(&bank->wa_lock, | ||||
|  |  | |||
|  | @ -608,7 +608,7 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid) | |||
| 	for (i = 0; i < NBANK(chip); i++) { | ||||
| 		while (pending[i]) { | ||||
| 			level = __ffs(pending[i]); | ||||
| 			handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain, | ||||
| 			handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain, | ||||
| 							level + (BANK_SZ * i))); | ||||
| 			pending[i] &= ~(1 << level); | ||||
| 			nhandled++; | ||||
|  |  | |||
|  | @ -196,7 +196,7 @@ static irqreturn_t pcf857x_irq(int irq, void *data) | |||
| 	mutex_unlock(&gpio->lock); | ||||
| 
 | ||||
| 	for_each_set_bit(i, &change, gpio->chip.ngpio) | ||||
| 		handle_nested_irq(irq_find_mapping(gpio->chip.irqdomain, i)); | ||||
| 		handle_nested_irq(irq_find_mapping(gpio->chip.irq.domain, i)); | ||||
| 
 | ||||
| 	return IRQ_HANDLED; | ||||
| } | ||||
|  |  | |||
|  | @ -240,7 +240,7 @@ static irqreturn_t idio_16_irq_handler(int irq, void *dev_id) | |||
| 		return IRQ_NONE; | ||||
| 
 | ||||
| 	for_each_set_bit(gpio, &idio16gpio->irq_mask, chip->ngpio) | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irqdomain, gpio)); | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irq.domain, gpio)); | ||||
| 
 | ||||
| 	raw_spin_lock(&idio16gpio->lock); | ||||
| 
 | ||||
|  |  | |||
|  | @ -221,7 +221,7 @@ static void pl061_irq_handler(struct irq_desc *desc) | |||
| 	pending = readb(pl061->base + GPIOMIS); | ||||
| 	if (pending) { | ||||
| 		for_each_set_bit(offset, &pending, PL061_GPIO_NR) | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irq.domain, | ||||
| 							    offset)); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -207,7 +207,7 @@ static irqreturn_t gpio_rcar_irq_handler(int irq, void *dev_id) | |||
| 			  gpio_rcar_read(p, INTMSK))) { | ||||
| 		offset = __ffs(pending); | ||||
| 		gpio_rcar_write(p, INTCLR, BIT(offset)); | ||||
| 		generic_handle_irq(irq_find_mapping(p->gpio_chip.irqdomain, | ||||
| 		generic_handle_irq(irq_find_mapping(p->gpio_chip.irq.domain, | ||||
| 						    offset)); | ||||
| 		irqs_handled++; | ||||
| 	} | ||||
|  |  | |||
|  | @ -103,8 +103,8 @@ static int gpio_reg_to_irq(struct gpio_chip *gc, unsigned offset) | |||
| 	struct gpio_reg *r = to_gpio_reg(gc); | ||||
| 	int irq = r->irqs[offset]; | ||||
| 
 | ||||
| 	if (irq >= 0 && r->irqdomain) | ||||
| 		irq = irq_find_mapping(r->irqdomain, irq); | ||||
| 	if (irq >= 0 && r->irq.domain) | ||||
| 		irq = irq_find_mapping(r->irq.domain, irq); | ||||
| 
 | ||||
| 	return irq; | ||||
| } | ||||
|  |  | |||
|  | @ -397,7 +397,7 @@ static irqreturn_t stmpe_gpio_irq(int irq, void *dev) | |||
| 		while (stat) { | ||||
| 			int bit = __ffs(stat); | ||||
| 			int line = bank * 8 + bit; | ||||
| 			int child_irq = irq_find_mapping(stmpe_gpio->chip.irqdomain, | ||||
| 			int child_irq = irq_find_mapping(stmpe_gpio->chip.irq.domain, | ||||
| 							 line); | ||||
| 
 | ||||
| 			handle_nested_irq(child_irq); | ||||
|  |  | |||
|  | @ -268,7 +268,7 @@ static irqreturn_t tc3589x_gpio_irq(int irq, void *dev) | |||
| 		while (stat) { | ||||
| 			int bit = __ffs(stat); | ||||
| 			int line = i * 8 + bit; | ||||
| 			int irq = irq_find_mapping(tc3589x_gpio->chip.irqdomain, | ||||
| 			int irq = irq_find_mapping(tc3589x_gpio->chip.irq.domain, | ||||
| 						   line); | ||||
| 
 | ||||
| 			handle_nested_irq(irq); | ||||
|  |  | |||
|  | @ -160,7 +160,7 @@ static void vf610_gpio_irq_handler(struct irq_desc *desc) | |||
| 	for_each_set_bit(pin, &irq_isfr, VF610_GPIO_PER_PORT) { | ||||
| 		vf610_gpio_writel(BIT(pin), port->base + PORT_ISFR); | ||||
| 
 | ||||
| 		generic_handle_irq(irq_find_mapping(port->gc.irqdomain, pin)); | ||||
| 		generic_handle_irq(irq_find_mapping(port->gc.irq.domain, pin)); | ||||
| 	} | ||||
| 
 | ||||
| 	chained_irq_exit(chip, desc); | ||||
|  |  | |||
|  | @ -350,7 +350,7 @@ static irqreturn_t wcove_gpio_irq_handler(int irq, void *data) | |||
| 			offset = (gpio > GROUP0_NR_IRQS) ? 1 : 0; | ||||
| 			mask = (offset == 1) ? BIT(gpio - GROUP0_NR_IRQS) : | ||||
| 								BIT(gpio); | ||||
| 			virq = irq_find_mapping(wg->chip.irqdomain, gpio); | ||||
| 			virq = irq_find_mapping(wg->chip.irq.domain, gpio); | ||||
| 			handle_nested_irq(virq); | ||||
| 			regmap_update_bits(wg->regmap, IRQ_STATUS_BASE + offset, | ||||
| 								mask, mask); | ||||
|  |  | |||
|  | @ -332,7 +332,7 @@ static irqreturn_t ws16c48_irq_handler(int irq, void *dev_id) | |||
| 			int_id = inb(ws16c48gpio->base + 8 + port); | ||||
| 			for_each_set_bit(gpio, &int_id, 8) | ||||
| 				generic_handle_irq(irq_find_mapping( | ||||
| 					chip->irqdomain, gpio + 8*port)); | ||||
| 					chip->irq.domain, gpio + 8*port)); | ||||
| 		} | ||||
| 
 | ||||
| 		int_pending = inb(ws16c48gpio->base + 6) & 0x7; | ||||
|  |  | |||
|  | @ -287,7 +287,7 @@ static int xgene_gpio_sb_probe(struct platform_device *pdev) | |||
| 	if (!priv->irq_domain) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	priv->gc.irqdomain = priv->irq_domain; | ||||
| 	priv->gc.irq.domain = priv->irq_domain; | ||||
| 
 | ||||
| 	ret = devm_gpiochip_add_data(&pdev->dev, &priv->gc, priv); | ||||
| 	if (ret) { | ||||
|  |  | |||
|  | @ -225,7 +225,7 @@ static void xlp_gpio_generic_handler(struct irq_desc *desc) | |||
| 
 | ||||
| 		if (gpio_stat & BIT(gpio % XLP_GPIO_REGSZ)) | ||||
| 			generic_handle_irq(irq_find_mapping( | ||||
| 						priv->chip.irqdomain, gpio)); | ||||
| 						priv->chip.irq.domain, gpio)); | ||||
| 	} | ||||
| 	chained_irq_exit(irqchip, desc); | ||||
| } | ||||
|  |  | |||
|  | @ -170,7 +170,7 @@ static void zx_irq_handler(struct irq_desc *desc) | |||
| 	writew_relaxed(pending, chip->base + ZX_GPIO_IC); | ||||
| 	if (pending) { | ||||
| 		for_each_set_bit(offset, &pending, ZX_GPIO_NR) | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irqdomain, | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irq.domain, | ||||
| 							    offset)); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -562,7 +562,7 @@ static void zynq_gpio_handle_bank_irq(struct zynq_gpio *gpio, | |||
| 				      unsigned long pending) | ||||
| { | ||||
| 	unsigned int bank_offset = gpio->p_data->bank_min[bank_num]; | ||||
| 	struct irq_domain *irqdomain = gpio->chip.irqdomain; | ||||
| 	struct irq_domain *irqdomain = gpio->chip.irq.domain; | ||||
| 	int offset; | ||||
| 
 | ||||
| 	if (!pending) | ||||
|  |  | |||
|  | @ -1550,7 +1550,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip, | |||
| { | ||||
| 	unsigned int offset; | ||||
| 
 | ||||
| 	if (!gpiochip->irqdomain) { | ||||
| 	if (!gpiochip->irq.domain) { | ||||
| 		chip_err(gpiochip, "called %s before setting up irqchip\n", | ||||
| 			 __func__); | ||||
| 		return; | ||||
|  | @ -1577,7 +1577,7 @@ static void gpiochip_set_cascaded_irqchip(struct gpio_chip *gpiochip, | |||
| 	for (offset = 0; offset < gpiochip->ngpio; offset++) { | ||||
| 		if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) | ||||
| 			continue; | ||||
| 		irq_set_parent(irq_find_mapping(gpiochip->irqdomain, offset), | ||||
| 		irq_set_parent(irq_find_mapping(gpiochip->irq.domain, offset), | ||||
| 			       parent_irq); | ||||
| 	} | ||||
| } | ||||
|  | @ -1708,7 +1708,7 @@ static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset) | |||
| { | ||||
| 	if (!gpiochip_irqchip_irq_valid(chip, offset)) | ||||
| 		return -ENXIO; | ||||
| 	return irq_create_mapping(chip->irqdomain, offset); | ||||
| 	return irq_create_mapping(chip->irq.domain, offset); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -1719,7 +1719,7 @@ static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset) | |||
|  */ | ||||
| static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) | ||||
| { | ||||
| 	unsigned int offset; | ||||
| 	unsigned int offset, irq; | ||||
| 
 | ||||
| 	acpi_gpiochip_free_interrupts(gpiochip); | ||||
| 
 | ||||
|  | @ -1729,14 +1729,16 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) | |||
| 	} | ||||
| 
 | ||||
| 	/* Remove all IRQ mappings and delete the domain */ | ||||
| 	if (gpiochip->irqdomain) { | ||||
| 	if (gpiochip->irq.domain) { | ||||
| 		for (offset = 0; offset < gpiochip->ngpio; offset++) { | ||||
| 			if (!gpiochip_irqchip_irq_valid(gpiochip, offset)) | ||||
| 				continue; | ||||
| 			irq_dispose_mapping( | ||||
| 				irq_find_mapping(gpiochip->irqdomain, offset)); | ||||
| 
 | ||||
| 			irq = irq_find_mapping(gpiochip->irq.domain, offset); | ||||
| 			irq_dispose_mapping(irq); | ||||
| 		} | ||||
| 		irq_domain_remove(gpiochip->irqdomain); | ||||
| 
 | ||||
| 		irq_domain_remove(gpiochip->irq.domain); | ||||
| 	} | ||||
| 
 | ||||
| 	if (gpiochip->irq.chip) { | ||||
|  | @ -1822,10 +1824,10 @@ int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip, | |||
| 	gpiochip->irq_default_type = type; | ||||
| 	gpiochip->to_irq = gpiochip_to_irq; | ||||
| 	gpiochip->lock_key = lock_key; | ||||
| 	gpiochip->irqdomain = irq_domain_add_simple(of_node, | ||||
| 	gpiochip->irq.domain = irq_domain_add_simple(of_node, | ||||
| 					gpiochip->ngpio, first_irq, | ||||
| 					&gpiochip_domain_ops, gpiochip); | ||||
| 	if (!gpiochip->irqdomain) { | ||||
| 	if (!gpiochip->irq.domain) { | ||||
| 		gpiochip->irq.chip = NULL; | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
|  |  | |||
|  | @ -383,7 +383,7 @@ static void bcm2835_gpio_irq_handle_bank(struct bcm2835_pinctrl *pc, | |||
| 		/* FIXME: no clue why the code looks up the type here */ | ||||
| 		type = pc->irq_type[gpio]; | ||||
| 
 | ||||
| 		generic_handle_irq(irq_linear_revmap(pc->gpio_chip.irqdomain, | ||||
| 		generic_handle_irq(irq_linear_revmap(pc->gpio_chip.irq.irqdomain, | ||||
| 						     gpio)); | ||||
| 	} | ||||
| } | ||||
|  | @ -665,7 +665,7 @@ static void bcm2835_pctl_pin_dbg_show(struct pinctrl_dev *pctldev, | |||
| 	enum bcm2835_fsel fsel = bcm2835_pinctrl_fsel_get(pc, offset); | ||||
| 	const char *fname = bcm2835_functions[fsel]; | ||||
| 	int value = bcm2835_gpio_get_bit(pc, GPLEV0, offset); | ||||
| 	int irq = irq_find_mapping(chip->irqdomain, offset); | ||||
| 	int irq = irq_find_mapping(chip->irq.domain, offset); | ||||
| 
 | ||||
| 	seq_printf(s, "function %s in %s; irq %d (%s)", | ||||
| 		fname, value ? "hi" : "lo", | ||||
|  |  | |||
|  | @ -172,7 +172,7 @@ static void iproc_gpio_irq_handler(struct irq_desc *desc) | |||
| 
 | ||||
| 		for_each_set_bit(bit, &val, NGPIOS_PER_BANK) { | ||||
| 			unsigned pin = NGPIOS_PER_BANK * i + bit; | ||||
| 			int child_irq = irq_find_mapping(gc->irqdomain, pin); | ||||
| 			int child_irq = irq_find_mapping(gc->irq.domain, pin); | ||||
| 
 | ||||
| 			/*
 | ||||
| 			 * Clear the interrupt before invoking the | ||||
|  |  | |||
|  | @ -1627,7 +1627,7 @@ static void byt_gpio_irq_handler(struct irq_desc *desc) | |||
| 		pending = readl(reg); | ||||
| 		raw_spin_unlock(&vg->lock); | ||||
| 		for_each_set_bit(pin, &pending, 32) { | ||||
| 			virq = irq_find_mapping(vg->chip.irqdomain, base + pin); | ||||
| 			virq = irq_find_mapping(vg->chip.irq.domain, base + pin); | ||||
| 			generic_handle_irq(virq); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -1523,7 +1523,7 @@ static void chv_gpio_irq_handler(struct irq_desc *desc) | |||
| 		unsigned irq, offset; | ||||
| 
 | ||||
| 		offset = pctrl->intr_lines[intr_line]; | ||||
| 		irq = irq_find_mapping(gc->irqdomain, offset); | ||||
| 		irq = irq_find_mapping(gc->irq.domain, offset); | ||||
| 		generic_handle_irq(irq); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1005,7 +1005,7 @@ static irqreturn_t intel_gpio_community_irq_handler(struct intel_pinctrl *pctrl, | |||
| 			if (padno >= community->npins) | ||||
| 				break; | ||||
| 
 | ||||
| 			irq = irq_find_mapping(gc->irqdomain, | ||||
| 			irq = irq_find_mapping(gc->irq.domain, | ||||
| 					       community->pin_base + padno); | ||||
| 			generic_handle_irq(irq); | ||||
| 
 | ||||
|  |  | |||
|  | @ -592,7 +592,7 @@ static void armada_37xx_irq_handler(struct irq_desc *desc) | |||
| 	struct gpio_chip *gc = irq_desc_get_handler_data(desc); | ||||
| 	struct irq_chip *chip = irq_desc_get_chip(desc); | ||||
| 	struct armada_37xx_pinctrl *info = gpiochip_get_data(gc); | ||||
| 	struct irq_domain *d = gc->irqdomain; | ||||
| 	struct irq_domain *d = gc->irq.domain; | ||||
| 	int i; | ||||
| 
 | ||||
| 	chained_irq_enter(chip, desc); | ||||
|  |  | |||
|  | @ -413,7 +413,7 @@ nmk_gpio_disable_lazy_irq(struct nmk_gpio_chip *nmk_chip, unsigned offset) | |||
| 	u32 falling = nmk_chip->fimsc & BIT(offset); | ||||
| 	u32 rising = nmk_chip->rimsc & BIT(offset); | ||||
| 	int gpio = nmk_chip->chip.base + offset; | ||||
| 	int irq = irq_find_mapping(nmk_chip->chip.irqdomain, offset); | ||||
| 	int irq = irq_find_mapping(nmk_chip->chip.irq.domain, offset); | ||||
| 	struct irq_data *d = irq_get_irq_data(irq); | ||||
| 
 | ||||
| 	if (!rising && !falling) | ||||
|  | @ -815,7 +815,7 @@ static void __nmk_gpio_irq_handler(struct irq_desc *desc, u32 status) | |||
| 	while (status) { | ||||
| 		int bit = __ffs(status); | ||||
| 
 | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irqdomain, bit)); | ||||
| 		generic_handle_irq(irq_find_mapping(chip->irq.domain, bit)); | ||||
| 		status &= ~BIT(bit); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -532,7 +532,7 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id) | |||
| 			regval = readl(regs + i); | ||||
| 			if (!(regval & PIN_IRQ_PENDING)) | ||||
| 				continue; | ||||
| 			irq = irq_find_mapping(gc->irqdomain, irqnr + i); | ||||
| 			irq = irq_find_mapping(gc->irq.domain, irqnr + i); | ||||
| 			generic_handle_irq(irq); | ||||
| 			/* Clear interrupt */ | ||||
| 			writel(regval, regs + i); | ||||
|  |  | |||
|  | @ -1603,7 +1603,7 @@ static void gpio_irq_handler(struct irq_desc *desc) | |||
| 
 | ||||
| 		for_each_set_bit(n, &isr, BITS_PER_LONG) { | ||||
| 			generic_handle_irq(irq_find_mapping( | ||||
| 					   gpio_chip->irqdomain, n)); | ||||
| 					   gpio_chip->irq.domain, n)); | ||||
| 		} | ||||
| 	} | ||||
| 	chained_irq_exit(chip, desc); | ||||
|  |  | |||
|  | @ -517,7 +517,7 @@ static void u300_gpio_irq_handler(struct irq_desc *desc) | |||
| 
 | ||||
| 		for_each_set_bit(irqoffset, &val, U300_GPIO_PINS_PER_PORT) { | ||||
| 			int offset = pinoffset + irqoffset; | ||||
| 			int pin_irq = irq_find_mapping(chip->irqdomain, offset); | ||||
| 			int pin_irq = irq_find_mapping(chip->irq.domain, offset); | ||||
| 
 | ||||
| 			dev_dbg(gpio->dev, "GPIO IRQ %d on pin %d\n", | ||||
| 				pin_irq, offset); | ||||
|  |  | |||
|  | @ -537,7 +537,7 @@ static irqreturn_t mcp23s08_irq(int irq, void *data) | |||
| 		    ((gpio_bit_changed || intcap_changed) && | ||||
| 			(BIT(i) & mcp->irq_fall) && !gpio_set) || | ||||
| 		    defval_changed) { | ||||
| 			child_irq = irq_find_mapping(mcp->chip.irqdomain, i); | ||||
| 			child_irq = irq_find_mapping(mcp->chip.irq.domain, i); | ||||
| 			handle_nested_irq(child_irq); | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -1064,7 +1064,7 @@ static void oxnas_gpio_irq_handler(struct irq_desc *desc) | |||
| 	stat = readl(bank->reg_base + IRQ_PENDING); | ||||
| 
 | ||||
| 	for_each_set_bit(pin, &stat, BITS_PER_LONG) | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin)); | ||||
| 
 | ||||
| 	chained_irq_exit(chip, desc); | ||||
| } | ||||
|  |  | |||
|  | @ -2106,7 +2106,7 @@ static void pic32_gpio_irq_handler(struct irq_desc *desc) | |||
| 	pending = pic32_gpio_get_pending(gc, stat); | ||||
| 
 | ||||
| 	for_each_set_bit(pin, &pending, BITS_PER_LONG) | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin)); | ||||
| 
 | ||||
| 	chained_irq_exit(chip, desc); | ||||
| } | ||||
|  |  | |||
|  | @ -1307,7 +1307,7 @@ static void pistachio_gpio_irq_handler(struct irq_desc *desc) | |||
| 	pending = gpio_readl(bank, GPIO_INTERRUPT_STATUS) & | ||||
| 		gpio_readl(bank, GPIO_INTERRUPT_EN); | ||||
| 	for_each_set_bit(pin, &pending, 16) | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin)); | ||||
| 		generic_handle_irq(irq_linear_revmap(gc->irq.domain, pin)); | ||||
| 	chained_irq_exit(chip, desc); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1408,7 +1408,7 @@ static void __gpio_irq_handler(struct st_gpio_bank *bank) | |||
| 					continue; | ||||
| 			} | ||||
| 
 | ||||
| 			generic_handle_irq(irq_find_mapping(bank->gpio_chip.irqdomain, n)); | ||||
| 			generic_handle_irq(irq_find_mapping(bank->gpio_chip.irq.domain, n)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -561,7 +561,7 @@ static irqreturn_t sx150x_irq_thread_fn(int irq, void *dev_id) | |||
| 
 | ||||
| 	status = val; | ||||
| 	for_each_set_bit(n, &status, pctl->data->ngpios) | ||||
| 		handle_nested_irq(irq_find_mapping(pctl->gpio.irqdomain, n)); | ||||
| 		handle_nested_irq(irq_find_mapping(pctl->gpio.irq.domain, n)); | ||||
| 
 | ||||
| 	return IRQ_HANDLED; | ||||
| } | ||||
|  |  | |||
|  | @ -795,7 +795,7 @@ static void msm_gpio_irq_handler(struct irq_desc *desc) | |||
| 		g = &pctrl->soc->groups[i]; | ||||
| 		val = readl(pctrl->regs + g->intr_status_reg); | ||||
| 		if (val & BIT(g->intr_status_bit)) { | ||||
| 			irq_pin = irq_find_mapping(gc->irqdomain, i); | ||||
| 			irq_pin = irq_find_mapping(gc->irq.domain, i); | ||||
| 			generic_handle_irq(irq_pin); | ||||
| 			handled++; | ||||
| 		} | ||||
|  |  | |||
|  | @ -5820,7 +5820,7 @@ static void atlas7_gpio_handle_irq(struct irq_desc *desc) | |||
| 				__func__, gc->label, | ||||
| 				bank->gpio_offset + pin_in_bank); | ||||
| 			generic_handle_irq( | ||||
| 				irq_find_mapping(gc->irqdomain, | ||||
| 				irq_find_mapping(gc->irq.domain, | ||||
| 					bank->gpio_offset + pin_in_bank)); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -587,7 +587,7 @@ static void sirfsoc_gpio_handle_irq(struct irq_desc *desc) | |||
| 		if ((status & 0x1) && (ctrl & SIRFSOC_GPIO_CTL_INTR_EN_MASK)) { | ||||
| 			pr_debug("%s: gpio id %d idx %d happens\n", | ||||
| 				__func__, bank->id, idx); | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irqdomain, idx + | ||||
| 			generic_handle_irq(irq_find_mapping(gc->irq.domain, idx + | ||||
| 					bank->id * SIRFSOC_GPIO_BANK_SIZE)); | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -401,7 +401,7 @@ static void plgpio_irq_handler(struct irq_desc *desc) | |||
| 			/* get correct irq line number */ | ||||
| 			pin = i * MAX_GPIO_PER_REG + pin; | ||||
| 			generic_handle_irq( | ||||
| 				irq_find_mapping(gc->irqdomain, pin)); | ||||
| 				irq_find_mapping(gc->irq.domain, pin)); | ||||
| 		} | ||||
| 	} | ||||
| 	chained_irq_exit(irqchip, desc); | ||||
|  |  | |||
|  | @ -119,7 +119,7 @@ static irqreturn_t int0002_irq(int irq, void *data) | |||
| 	if (!(gpe_sts_reg & GPE0A_PME_B0_STS_BIT)) | ||||
| 		return IRQ_NONE; | ||||
| 
 | ||||
| 	generic_handle_irq(irq_find_mapping(chip->irqdomain, | ||||
| 	generic_handle_irq(irq_find_mapping(chip->irq.domain, | ||||
| 					    GPE0A_PME_B0_VIRT_GPIO_PIN)); | ||||
| 
 | ||||
| 	pm_system_wakeup(); | ||||
|  |  | |||
|  | @ -31,6 +31,14 @@ struct gpio_irq_chip { | |||
| 	 */ | ||||
| 	struct irq_chip *chip; | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * @domain: | ||||
| 	 * | ||||
| 	 * Interrupt translation domain; responsible for mapping between GPIO | ||||
| 	 * hwirq number and Linux IRQ number. | ||||
| 	 */ | ||||
| 	struct irq_domain *domain; | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * @domain_ops: | ||||
| 	 * | ||||
|  | @ -124,8 +132,6 @@ static inline struct gpio_irq_chip *to_gpio_irq_chip(struct irq_chip *chip) | |||
|  *	safely. | ||||
|  * @bgpio_dir: shadowed direction register for generic GPIO to clear/set | ||||
|  *	direction safely. | ||||
|  * @irqdomain: Interrupt translation domain; responsible for mapping | ||||
|  *	between GPIO hwirq number and linux irq number | ||||
|  * @irq_handler: the irq handler to use (often a predefined irq core function) | ||||
|  *	for GPIO IRQs, provided by GPIO driver | ||||
|  * @irq_default_type: default IRQ triggering type applied during GPIO driver | ||||
|  | @ -208,7 +214,6 @@ struct gpio_chip { | |||
| 	 * With CONFIG_GPIOLIB_IRQCHIP we get an irqchip inside the gpiolib | ||||
| 	 * to handle IRQs for most practical cases. | ||||
| 	 */ | ||||
| 	struct irq_domain	*irqdomain; | ||||
| 	irq_flow_handler_t	irq_handler; | ||||
| 	unsigned int		irq_default_type; | ||||
| 	unsigned int		irq_chained_parent; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Thierry Reding
						Thierry Reding