pinctrl: ingenic: Factorize irq_set_type function
authorPaul Cercueil <paul@crapouillou.net>
Mon, 6 Jan 2020 23:27:10 +0000 (00:27 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 7 Jan 2020 12:57:17 +0000 (13:57 +0100)
Simplify the code of the driver's irq_set_type() function by doing some
factorization. The behaviour is unchanged.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20200106232711.559727-5-paul@crapouillou.net
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-ingenic.c

index 7f73f27cce91066e90c5f034f142cfb0058f1dac..419717fc7793507679925650cc0ee620d22d5373 100644 (file)
@@ -1676,58 +1676,42 @@ static void irq_set_type(struct ingenic_gpio_chip *jzgc,
                u8 offset, unsigned int type)
 {
        u8 reg1, reg2;
-
-       if (jzgc->jzpc->info->version >= ID_JZ4760) {
-               reg1 = JZ4760_GPIO_PAT1;
-               reg2 = JZ4760_GPIO_PAT0;
-       } else {
-               reg1 = JZ4740_GPIO_TRIG;
-               reg2 = JZ4740_GPIO_DIR;
-       }
+       bool val1, val2;
 
        switch (type) {
        case IRQ_TYPE_EDGE_RISING:
-               if (jzgc->jzpc->info->version >= ID_X1000) {
-                       ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, true);
-                       ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, true);
-                       ingenic_gpio_shadow_set_bit_load(jzgc);
-               } else {
-                       ingenic_gpio_set_bit(jzgc, reg2, offset, true);
-                       ingenic_gpio_set_bit(jzgc, reg1, offset, true);
-               }
+               val1 = val2 = true;
                break;
        case IRQ_TYPE_EDGE_FALLING:
-               if (jzgc->jzpc->info->version >= ID_X1000) {
-                       ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, false);
-                       ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, true);
-                       ingenic_gpio_shadow_set_bit_load(jzgc);
-               } else {
-                       ingenic_gpio_set_bit(jzgc, reg2, offset, false);
-                       ingenic_gpio_set_bit(jzgc, reg1, offset, true);
-               }
+               val1 = false;
+               val2 = true;
                break;
        case IRQ_TYPE_LEVEL_HIGH:
-               if (jzgc->jzpc->info->version >= ID_X1000) {
-                       ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, true);
-                       ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, false);
-                       ingenic_gpio_shadow_set_bit_load(jzgc);
-               } else {
-                       ingenic_gpio_set_bit(jzgc, reg2, offset, true);
-                       ingenic_gpio_set_bit(jzgc, reg1, offset, false);
-               }
+               val1 = true;
+               val2 = false;
                break;
        case IRQ_TYPE_LEVEL_LOW:
        default:
-               if (jzgc->jzpc->info->version >= ID_X1000) {
-                       ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, false);
-                       ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, false);
-                       ingenic_gpio_shadow_set_bit_load(jzgc);
-               } else {
-                       ingenic_gpio_set_bit(jzgc, reg2, offset, false);
-                       ingenic_gpio_set_bit(jzgc, reg1, offset, false);
-               }
+               val1 = val2 = false;
                break;
        }
+
+       if (jzgc->jzpc->info->version >= ID_JZ4760) {
+               reg1 = JZ4760_GPIO_PAT1;
+               reg2 = JZ4760_GPIO_PAT0;
+       } else {
+               reg1 = JZ4740_GPIO_TRIG;
+               reg2 = JZ4740_GPIO_DIR;
+       }
+
+       if (jzgc->jzpc->info->version >= ID_X1000) {
+               ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1);
+               ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2);
+               ingenic_gpio_shadow_set_bit_load(jzgc);
+       } else {
+               ingenic_gpio_set_bit(jzgc, reg2, offset, val1);
+               ingenic_gpio_set_bit(jzgc, reg1, offset, val2);
+       }
 }
 
 static void ingenic_gpio_irq_mask(struct irq_data *irqd)