diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2016-05-24 09:13:44 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-06-07 03:35:15 -0400 |
commit | ff93ec74966a84538a8129d7d8303a7f841a69c4 (patch) | |
tree | 043bd79150622c89c46c406ffb5c30ece65616c5 /drivers/gpio/gpio-max77620.c | |
parent | 8e293fb057d0f2d353bca11848b6526c56b0af09 (diff) |
gpio: max77620: Configure interrupt trigger level
The GPIO sub modules of MAX77620 offers to configure the GPIO
interrupt trigger level as RISING and FALLING edge.
Pass this information to regmap-irg when registering for GPIO
interrupts.
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-max77620.c')
-rw-r--r-- | drivers/gpio/gpio-max77620.c | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/drivers/gpio/gpio-max77620.c b/drivers/gpio/gpio-max77620.c index d9275623577c..35f365c36df9 100644 --- a/drivers/gpio/gpio-max77620.c +++ b/drivers/gpio/gpio-max77620.c | |||
@@ -27,14 +27,62 @@ struct max77620_gpio { | |||
27 | }; | 27 | }; |
28 | 28 | ||
29 | static const struct regmap_irq max77620_gpio_irqs[] = { | 29 | static const struct regmap_irq max77620_gpio_irqs[] = { |
30 | REGMAP_IRQ_REG(0, 0, MAX77620_IRQ_LVL2_GPIO_EDGE0), | 30 | [0] = { |
31 | REGMAP_IRQ_REG(1, 0, MAX77620_IRQ_LVL2_GPIO_EDGE1), | 31 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE0, |
32 | REGMAP_IRQ_REG(2, 0, MAX77620_IRQ_LVL2_GPIO_EDGE2), | 32 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, |
33 | REGMAP_IRQ_REG(3, 0, MAX77620_IRQ_LVL2_GPIO_EDGE3), | 33 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, |
34 | REGMAP_IRQ_REG(4, 0, MAX77620_IRQ_LVL2_GPIO_EDGE4), | 34 | .reg_offset = 0, |
35 | REGMAP_IRQ_REG(5, 0, MAX77620_IRQ_LVL2_GPIO_EDGE5), | 35 | .type_reg_offset = 0, |
36 | REGMAP_IRQ_REG(6, 0, MAX77620_IRQ_LVL2_GPIO_EDGE6), | 36 | }, |
37 | REGMAP_IRQ_REG(7, 0, MAX77620_IRQ_LVL2_GPIO_EDGE7), | 37 | [1] = { |
38 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE1, | ||
39 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
40 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
41 | .reg_offset = 0, | ||
42 | .type_reg_offset = 1, | ||
43 | }, | ||
44 | [2] = { | ||
45 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE2, | ||
46 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
47 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
48 | .reg_offset = 0, | ||
49 | .type_reg_offset = 2, | ||
50 | }, | ||
51 | [3] = { | ||
52 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE3, | ||
53 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
54 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
55 | .reg_offset = 0, | ||
56 | .type_reg_offset = 3, | ||
57 | }, | ||
58 | [4] = { | ||
59 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE4, | ||
60 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
61 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
62 | .reg_offset = 0, | ||
63 | .type_reg_offset = 4, | ||
64 | }, | ||
65 | [5] = { | ||
66 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE5, | ||
67 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
68 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
69 | .reg_offset = 0, | ||
70 | .type_reg_offset = 5, | ||
71 | }, | ||
72 | [6] = { | ||
73 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE6, | ||
74 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
75 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
76 | .reg_offset = 0, | ||
77 | .type_reg_offset = 6, | ||
78 | }, | ||
79 | [7] = { | ||
80 | .mask = MAX77620_IRQ_LVL2_GPIO_EDGE7, | ||
81 | .type_rising_mask = MAX77620_CNFG_GPIO_INT_RISING, | ||
82 | .type_falling_mask = MAX77620_CNFG_GPIO_INT_FALLING, | ||
83 | .reg_offset = 0, | ||
84 | .type_reg_offset = 7, | ||
85 | }, | ||
38 | }; | 86 | }; |
39 | 87 | ||
40 | static struct regmap_irq_chip max77620_gpio_irq_chip = { | 88 | static struct regmap_irq_chip max77620_gpio_irq_chip = { |
@@ -42,8 +90,11 @@ static struct regmap_irq_chip max77620_gpio_irq_chip = { | |||
42 | .irqs = max77620_gpio_irqs, | 90 | .irqs = max77620_gpio_irqs, |
43 | .num_irqs = ARRAY_SIZE(max77620_gpio_irqs), | 91 | .num_irqs = ARRAY_SIZE(max77620_gpio_irqs), |
44 | .num_regs = 1, | 92 | .num_regs = 1, |
93 | .num_type_reg = 8, | ||
45 | .irq_reg_stride = 1, | 94 | .irq_reg_stride = 1, |
95 | .type_reg_stride = 1, | ||
46 | .status_base = MAX77620_REG_IRQ_LVL2_GPIO, | 96 | .status_base = MAX77620_REG_IRQ_LVL2_GPIO, |
97 | .type_base = MAX77620_REG_GPIO0, | ||
47 | }; | 98 | }; |
48 | 99 | ||
49 | static int max77620_gpio_dir_input(struct gpio_chip *gc, unsigned int offset) | 100 | static int max77620_gpio_dir_input(struct gpio_chip *gc, unsigned int offset) |