Skip to content

Commit f831f93

Browse files
pcercueilinusw
authored andcommitted
pinctrl: ingenic: Factorize irq_set_type function
Simplify the code of the driver's irq_set_type() function by doing some factorization. The behaviour is unchanged. Signed-off-by: Paul Cercueil <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent 5ffdbb7 commit f831f93

File tree

1 file changed

+24
-40
lines changed

1 file changed

+24
-40
lines changed

drivers/pinctrl/pinctrl-ingenic.c

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,58 +1676,42 @@ static void irq_set_type(struct ingenic_gpio_chip *jzgc,
16761676
u8 offset, unsigned int type)
16771677
{
16781678
u8 reg1, reg2;
1679-
1680-
if (jzgc->jzpc->info->version >= ID_JZ4760) {
1681-
reg1 = JZ4760_GPIO_PAT1;
1682-
reg2 = JZ4760_GPIO_PAT0;
1683-
} else {
1684-
reg1 = JZ4740_GPIO_TRIG;
1685-
reg2 = JZ4740_GPIO_DIR;
1686-
}
1679+
bool val1, val2;
16871680

16881681
switch (type) {
16891682
case IRQ_TYPE_EDGE_RISING:
1690-
if (jzgc->jzpc->info->version >= ID_X1000) {
1691-
ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, true);
1692-
ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, true);
1693-
ingenic_gpio_shadow_set_bit_load(jzgc);
1694-
} else {
1695-
ingenic_gpio_set_bit(jzgc, reg2, offset, true);
1696-
ingenic_gpio_set_bit(jzgc, reg1, offset, true);
1697-
}
1683+
val1 = val2 = true;
16981684
break;
16991685
case IRQ_TYPE_EDGE_FALLING:
1700-
if (jzgc->jzpc->info->version >= ID_X1000) {
1701-
ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, false);
1702-
ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, true);
1703-
ingenic_gpio_shadow_set_bit_load(jzgc);
1704-
} else {
1705-
ingenic_gpio_set_bit(jzgc, reg2, offset, false);
1706-
ingenic_gpio_set_bit(jzgc, reg1, offset, true);
1707-
}
1686+
val1 = false;
1687+
val2 = true;
17081688
break;
17091689
case IRQ_TYPE_LEVEL_HIGH:
1710-
if (jzgc->jzpc->info->version >= ID_X1000) {
1711-
ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, true);
1712-
ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, false);
1713-
ingenic_gpio_shadow_set_bit_load(jzgc);
1714-
} else {
1715-
ingenic_gpio_set_bit(jzgc, reg2, offset, true);
1716-
ingenic_gpio_set_bit(jzgc, reg1, offset, false);
1717-
}
1690+
val1 = true;
1691+
val2 = false;
17181692
break;
17191693
case IRQ_TYPE_LEVEL_LOW:
17201694
default:
1721-
if (jzgc->jzpc->info->version >= ID_X1000) {
1722-
ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, false);
1723-
ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, false);
1724-
ingenic_gpio_shadow_set_bit_load(jzgc);
1725-
} else {
1726-
ingenic_gpio_set_bit(jzgc, reg2, offset, false);
1727-
ingenic_gpio_set_bit(jzgc, reg1, offset, false);
1728-
}
1695+
val1 = val2 = false;
17291696
break;
17301697
}
1698+
1699+
if (jzgc->jzpc->info->version >= ID_JZ4760) {
1700+
reg1 = JZ4760_GPIO_PAT1;
1701+
reg2 = JZ4760_GPIO_PAT0;
1702+
} else {
1703+
reg1 = JZ4740_GPIO_TRIG;
1704+
reg2 = JZ4740_GPIO_DIR;
1705+
}
1706+
1707+
if (jzgc->jzpc->info->version >= ID_X1000) {
1708+
ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1);
1709+
ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2);
1710+
ingenic_gpio_shadow_set_bit_load(jzgc);
1711+
} else {
1712+
ingenic_gpio_set_bit(jzgc, reg2, offset, val1);
1713+
ingenic_gpio_set_bit(jzgc, reg1, offset, val2);
1714+
}
17311715
}
17321716

17331717
static void ingenic_gpio_irq_mask(struct irq_data *irqd)

0 commit comments

Comments
 (0)