Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c07f54f6 authored by Laurent Pinchart's avatar Laurent Pinchart
Browse files

sh-pfc: Look up IRQ table entries by GPIO number



Instead of converting the GPIO number to an enum_id and looking up IRQ
table entries by enum_id, replace the pinmux_irq enum_ids field with a
gpios field and lookup entries using the GPIO number.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent a3db40a6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -350,7 +350,7 @@ static int sh_pfc_get_config_reg(struct sh_pfc *pfc, pinmux_enum_t enum_id,
	return -1;
}

int sh_pfc_gpio_to_enum(struct sh_pfc *pfc, unsigned gpio, int pos,
static int sh_pfc_gpio_to_enum(struct sh_pfc *pfc, unsigned gpio, int pos,
			       pinmux_enum_t *enum_idp)
{
	pinmux_enum_t *data = pfc->info->gpio_data;
+0 −2
Original line number Diff line number Diff line
@@ -49,8 +49,6 @@ void sh_pfc_write_bit(struct pinmux_data_reg *dr, unsigned long in_pos,
		      unsigned long value);
int sh_pfc_get_data_reg(struct sh_pfc *pfc, unsigned gpio,
			struct pinmux_data_reg **drp, int *bitp);
int sh_pfc_gpio_to_enum(struct sh_pfc *pfc, unsigned gpio, int pos,
			pinmux_enum_t *enum_idp);
int sh_pfc_config_gpio(struct sh_pfc *pfc, unsigned gpio, int pinmux_type,
		       int cfg_mode);

+8 −17
Original line number Diff line number Diff line
@@ -94,25 +94,16 @@ static void gpio_pin_set(struct gpio_chip *gc, unsigned offset, int value)
static int gpio_pin_to_irq(struct gpio_chip *gc, unsigned offset)
{
	struct sh_pfc *pfc = gpio_to_pfc(gc);
	pinmux_enum_t enum_id;
	pinmux_enum_t *enum_ids;
	int i, k, pos;

	pos = 0;
	enum_id = 0;
	while (1) {
		pos = sh_pfc_gpio_to_enum(pfc, offset, pos, &enum_id);
		if (pos <= 0 || !enum_id)
			break;
	int i, k;

	for (i = 0; i < pfc->info->gpio_irq_size; i++) {
			enum_ids = pfc->info->gpio_irq[i].enum_ids;
			for (k = 0; enum_ids[k]; k++) {
				if (enum_ids[k] == enum_id)
		unsigned short *gpios = pfc->info->gpio_irq[i].gpios;

		for (k = 0; gpios[k]; k++) {
			if (gpios[k] == offset)
				return pfc->info->gpio_irq[i].irq;
		}
	}
	}

	return -ENOSYS;
}
+32 −32
Original line number Diff line number Diff line
@@ -2547,38 +2547,38 @@ static struct pinmux_data_reg pinmux_data_regs[] = {
};

static struct pinmux_irq pinmux_irqs[] = {
	PINMUX_IRQ(evt2irq(0x0200), PORT2_FN0,	 PORT13_FN0),	/* IRQ0A */
	PINMUX_IRQ(evt2irq(0x0220), PORT20_FN0),		/* IRQ1A */
	PINMUX_IRQ(evt2irq(0x0240), PORT11_FN0,	 PORT12_FN0),	/* IRQ2A */
	PINMUX_IRQ(evt2irq(0x0260), PORT10_FN0,	 PORT14_FN0),	/* IRQ3A */
	PINMUX_IRQ(evt2irq(0x0280), PORT15_FN0,	 PORT172_FN0),	/* IRQ4A */
	PINMUX_IRQ(evt2irq(0x02A0), PORT0_FN0,	 PORT1_FN0),	/* IRQ5A */
	PINMUX_IRQ(evt2irq(0x02C0), PORT121_FN0, PORT173_FN0),	/* IRQ6A */
	PINMUX_IRQ(evt2irq(0x02E0), PORT120_FN0, PORT209_FN0),	/* IRQ7A */
	PINMUX_IRQ(evt2irq(0x0300), PORT119_FN0),		/* IRQ8A */
	PINMUX_IRQ(evt2irq(0x0320), PORT118_FN0, PORT210_FN0),	/* IRQ9A */
	PINMUX_IRQ(evt2irq(0x0340), PORT19_FN0),		/* IRQ10A */
	PINMUX_IRQ(evt2irq(0x0360), PORT104_FN0),		/* IRQ11A */
	PINMUX_IRQ(evt2irq(0x0380), PORT42_FN0,	 PORT97_FN0),	/* IRQ12A */
	PINMUX_IRQ(evt2irq(0x03A0), PORT64_FN0,	 PORT98_FN0),	/* IRQ13A */
	PINMUX_IRQ(evt2irq(0x03C0), PORT63_FN0,	 PORT99_FN0),	/* IRQ14A */
	PINMUX_IRQ(evt2irq(0x03E0), PORT62_FN0,	 PORT100_FN0),	/* IRQ15A */
	PINMUX_IRQ(evt2irq(0x3200), PORT68_FN0,	 PORT211_FN0),	/* IRQ16A */
	PINMUX_IRQ(evt2irq(0x3220), PORT69_FN0),		/* IRQ17A */
	PINMUX_IRQ(evt2irq(0x3240), PORT70_FN0),		/* IRQ18A */
	PINMUX_IRQ(evt2irq(0x3260), PORT71_FN0),		/* IRQ19A */
	PINMUX_IRQ(evt2irq(0x3280), PORT67_FN0),		/* IRQ20A */
	PINMUX_IRQ(evt2irq(0x32A0), PORT202_FN0),		/* IRQ21A */
	PINMUX_IRQ(evt2irq(0x32C0), PORT95_FN0),		/* IRQ22A */
	PINMUX_IRQ(evt2irq(0x32E0), PORT96_FN0),		/* IRQ23A */
	PINMUX_IRQ(evt2irq(0x3300), PORT180_FN0),		/* IRQ24A */
	PINMUX_IRQ(evt2irq(0x3320), PORT38_FN0),		/* IRQ25A */
	PINMUX_IRQ(evt2irq(0x3340), PORT58_FN0,	 PORT81_FN0),	/* IRQ26A */
	PINMUX_IRQ(evt2irq(0x3360), PORT57_FN0,	 PORT168_FN0),	/* IRQ27A */
	PINMUX_IRQ(evt2irq(0x3380), PORT56_FN0,	 PORT169_FN0),	/* IRQ28A */
	PINMUX_IRQ(evt2irq(0x33A0), PORT50_FN0,	 PORT170_FN0),	/* IRQ29A */
	PINMUX_IRQ(evt2irq(0x33C0), PORT49_FN0,	 PORT171_FN0),	/* IRQ30A */
	PINMUX_IRQ(evt2irq(0x33E0), PORT41_FN0,	 PORT167_FN0),	/* IRQ31A */
	PINMUX_IRQ(evt2irq(0x0200), GPIO_PORT2,   GPIO_PORT13),	/* IRQ0A */
	PINMUX_IRQ(evt2irq(0x0220), GPIO_PORT20),		/* IRQ1A */
	PINMUX_IRQ(evt2irq(0x0240), GPIO_PORT11,  GPIO_PORT12),	/* IRQ2A */
	PINMUX_IRQ(evt2irq(0x0260), GPIO_PORT10,  GPIO_PORT14),	/* IRQ3A */
	PINMUX_IRQ(evt2irq(0x0280), GPIO_PORT15,  GPIO_PORT172),/* IRQ4A */
	PINMUX_IRQ(evt2irq(0x02A0), GPIO_PORT0,   GPIO_PORT1),	/* IRQ5A */
	PINMUX_IRQ(evt2irq(0x02C0), GPIO_PORT121, GPIO_PORT173),/* IRQ6A */
	PINMUX_IRQ(evt2irq(0x02E0), GPIO_PORT120, GPIO_PORT209),/* IRQ7A */
	PINMUX_IRQ(evt2irq(0x0300), GPIO_PORT119),		/* IRQ8A */
	PINMUX_IRQ(evt2irq(0x0320), GPIO_PORT118, GPIO_PORT210),/* IRQ9A */
	PINMUX_IRQ(evt2irq(0x0340), GPIO_PORT19),		/* IRQ10A */
	PINMUX_IRQ(evt2irq(0x0360), GPIO_PORT104),		/* IRQ11A */
	PINMUX_IRQ(evt2irq(0x0380), GPIO_PORT42,  GPIO_PORT97),	/* IRQ12A */
	PINMUX_IRQ(evt2irq(0x03A0), GPIO_PORT64,  GPIO_PORT98),	/* IRQ13A */
	PINMUX_IRQ(evt2irq(0x03C0), GPIO_PORT63,  GPIO_PORT99),	/* IRQ14A */
	PINMUX_IRQ(evt2irq(0x03E0), GPIO_PORT62,  GPIO_PORT100),/* IRQ15A */
	PINMUX_IRQ(evt2irq(0x3200), GPIO_PORT68,  GPIO_PORT211),/* IRQ16A */
	PINMUX_IRQ(evt2irq(0x3220), GPIO_PORT69),		/* IRQ17A */
	PINMUX_IRQ(evt2irq(0x3240), GPIO_PORT70),		/* IRQ18A */
	PINMUX_IRQ(evt2irq(0x3260), GPIO_PORT71),		/* IRQ19A */
	PINMUX_IRQ(evt2irq(0x3280), GPIO_PORT67),		/* IRQ20A */
	PINMUX_IRQ(evt2irq(0x32A0), GPIO_PORT202),		/* IRQ21A */
	PINMUX_IRQ(evt2irq(0x32C0), GPIO_PORT95),		/* IRQ22A */
	PINMUX_IRQ(evt2irq(0x32E0), GPIO_PORT96),		/* IRQ23A */
	PINMUX_IRQ(evt2irq(0x3300), GPIO_PORT180),		/* IRQ24A */
	PINMUX_IRQ(evt2irq(0x3320), GPIO_PORT38),		/* IRQ25A */
	PINMUX_IRQ(evt2irq(0x3340), GPIO_PORT58,  GPIO_PORT81),	/* IRQ26A */
	PINMUX_IRQ(evt2irq(0x3360), GPIO_PORT57,  GPIO_PORT168),/* IRQ27A */
	PINMUX_IRQ(evt2irq(0x3380), GPIO_PORT56,  GPIO_PORT169),/* IRQ28A */
	PINMUX_IRQ(evt2irq(0x33A0), GPIO_PORT50,  GPIO_PORT170),/* IRQ29A */
	PINMUX_IRQ(evt2irq(0x33C0), GPIO_PORT49,  GPIO_PORT171),/* IRQ30A */
	PINMUX_IRQ(evt2irq(0x33E0), GPIO_PORT41,  GPIO_PORT167),/* IRQ31A */
};

struct sh_pfc_soc_info r8a7740_pinmux_info = {
+32 −32
Original line number Diff line number Diff line
@@ -1600,38 +1600,38 @@ static struct pinmux_data_reg pinmux_data_regs[] = {
#define EXT_IRQ16L(n) evt2irq(0x200 + ((n) << 5))
#define EXT_IRQ16H(n) evt2irq(0x3200 + (((n) - 16) << 5))
static struct pinmux_irq pinmux_irqs[] = {
	PINMUX_IRQ(EXT_IRQ16L(0), PORT6_FN0, PORT162_FN0),
	PINMUX_IRQ(EXT_IRQ16L(1), PORT12_FN0),
	PINMUX_IRQ(EXT_IRQ16L(2), PORT4_FN0, PORT5_FN0),
	PINMUX_IRQ(EXT_IRQ16L(3), PORT8_FN0, PORT16_FN0),
	PINMUX_IRQ(EXT_IRQ16L(4), PORT17_FN0, PORT163_FN0),
	PINMUX_IRQ(EXT_IRQ16L(5), PORT18_FN0),
	PINMUX_IRQ(EXT_IRQ16L(6), PORT39_FN0, PORT164_FN0),
	PINMUX_IRQ(EXT_IRQ16L(7), PORT40_FN0, PORT167_FN0),
	PINMUX_IRQ(EXT_IRQ16L(8), PORT41_FN0, PORT168_FN0),
	PINMUX_IRQ(EXT_IRQ16L(9), PORT42_FN0, PORT169_FN0),
	PINMUX_IRQ(EXT_IRQ16L(10), PORT65_FN0),
	PINMUX_IRQ(EXT_IRQ16L(11), PORT67_FN0),
	PINMUX_IRQ(EXT_IRQ16L(12), PORT80_FN0, PORT137_FN0),
	PINMUX_IRQ(EXT_IRQ16L(13), PORT81_FN0, PORT145_FN0),
	PINMUX_IRQ(EXT_IRQ16L(14), PORT82_FN0, PORT146_FN0),
	PINMUX_IRQ(EXT_IRQ16L(15), PORT83_FN0, PORT147_FN0),
	PINMUX_IRQ(EXT_IRQ16H(16), PORT84_FN0, PORT170_FN0),
	PINMUX_IRQ(EXT_IRQ16H(17), PORT85_FN0),
	PINMUX_IRQ(EXT_IRQ16H(18), PORT86_FN0),
	PINMUX_IRQ(EXT_IRQ16H(19), PORT87_FN0),
	PINMUX_IRQ(EXT_IRQ16H(20), PORT92_FN0),
	PINMUX_IRQ(EXT_IRQ16H(21), PORT93_FN0),
	PINMUX_IRQ(EXT_IRQ16H(22), PORT94_FN0),
	PINMUX_IRQ(EXT_IRQ16H(23), PORT95_FN0),
	PINMUX_IRQ(EXT_IRQ16H(24), PORT112_FN0),
	PINMUX_IRQ(EXT_IRQ16H(25), PORT119_FN0),
	PINMUX_IRQ(EXT_IRQ16H(26), PORT121_FN0, PORT172_FN0),
	PINMUX_IRQ(EXT_IRQ16H(27), PORT122_FN0, PORT180_FN0),
	PINMUX_IRQ(EXT_IRQ16H(28), PORT123_FN0, PORT181_FN0),
	PINMUX_IRQ(EXT_IRQ16H(29), PORT129_FN0, PORT182_FN0),
	PINMUX_IRQ(EXT_IRQ16H(30), PORT130_FN0, PORT183_FN0),
	PINMUX_IRQ(EXT_IRQ16H(31), PORT138_FN0, PORT184_FN0),
	PINMUX_IRQ(EXT_IRQ16L(0), GPIO_PORT6, GPIO_PORT162),
	PINMUX_IRQ(EXT_IRQ16L(1), GPIO_PORT12),
	PINMUX_IRQ(EXT_IRQ16L(2), GPIO_PORT4, GPIO_PORT5),
	PINMUX_IRQ(EXT_IRQ16L(3), GPIO_PORT8, GPIO_PORT16),
	PINMUX_IRQ(EXT_IRQ16L(4), GPIO_PORT17, GPIO_PORT163),
	PINMUX_IRQ(EXT_IRQ16L(5), GPIO_PORT18),
	PINMUX_IRQ(EXT_IRQ16L(6), GPIO_PORT39, GPIO_PORT164),
	PINMUX_IRQ(EXT_IRQ16L(7), GPIO_PORT40, GPIO_PORT167),
	PINMUX_IRQ(EXT_IRQ16L(8), GPIO_PORT41, GPIO_PORT168),
	PINMUX_IRQ(EXT_IRQ16L(9), GPIO_PORT42, GPIO_PORT169),
	PINMUX_IRQ(EXT_IRQ16L(10), GPIO_PORT65),
	PINMUX_IRQ(EXT_IRQ16L(11), GPIO_PORT67),
	PINMUX_IRQ(EXT_IRQ16L(12), GPIO_PORT80, GPIO_PORT137),
	PINMUX_IRQ(EXT_IRQ16L(13), GPIO_PORT81, GPIO_PORT145),
	PINMUX_IRQ(EXT_IRQ16L(14), GPIO_PORT82, GPIO_PORT146),
	PINMUX_IRQ(EXT_IRQ16L(15), GPIO_PORT83, GPIO_PORT147),
	PINMUX_IRQ(EXT_IRQ16H(16), GPIO_PORT84, GPIO_PORT170),
	PINMUX_IRQ(EXT_IRQ16H(17), GPIO_PORT85),
	PINMUX_IRQ(EXT_IRQ16H(18), GPIO_PORT86),
	PINMUX_IRQ(EXT_IRQ16H(19), GPIO_PORT87),
	PINMUX_IRQ(EXT_IRQ16H(20), GPIO_PORT92),
	PINMUX_IRQ(EXT_IRQ16H(21), GPIO_PORT93),
	PINMUX_IRQ(EXT_IRQ16H(22), GPIO_PORT94),
	PINMUX_IRQ(EXT_IRQ16H(23), GPIO_PORT95),
	PINMUX_IRQ(EXT_IRQ16H(24), GPIO_PORT112),
	PINMUX_IRQ(EXT_IRQ16H(25), GPIO_PORT119),
	PINMUX_IRQ(EXT_IRQ16H(26), GPIO_PORT121, GPIO_PORT172),
	PINMUX_IRQ(EXT_IRQ16H(27), GPIO_PORT122, GPIO_PORT180),
	PINMUX_IRQ(EXT_IRQ16H(28), GPIO_PORT123, GPIO_PORT181),
	PINMUX_IRQ(EXT_IRQ16H(29), GPIO_PORT129, GPIO_PORT182),
	PINMUX_IRQ(EXT_IRQ16H(30), GPIO_PORT130, GPIO_PORT183),
	PINMUX_IRQ(EXT_IRQ16H(31), GPIO_PORT138, GPIO_PORT184),
};

struct sh_pfc_soc_info sh7372_pinmux_info = {
Loading