summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/pinctrl-sx150x.c
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2016-11-07 17:53:22 +0100
committerLinus Walleij <linus.walleij@linaro.org>2016-11-08 09:48:06 +0100
commitfd931f2373662a7de8c255e7a86c1e79e8e0baa0 (patch)
tree828dbbc1e5b38c8b1a23fc2ac8b5de4866d16521 /drivers/pinctrl/pinctrl-sx150x.c
parentpinctrl-sx150x: Use handle_bad_irq instead of handle_edge_irq (diff)
downloadlinux-fd931f2373662a7de8c255e7a86c1e79e8e0baa0.tar.xz
linux-fd931f2373662a7de8c255e7a86c1e79e8e0baa0.zip
pinctrl-sx150x: Remove magic numbers from sx150x_irq_set_type
Tested-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/pinctrl-sx150x.c')
-rw-r--r--drivers/pinctrl/pinctrl-sx150x.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c
index 798a8bb143c1..56abe36071ed 100644
--- a/drivers/pinctrl/pinctrl-sx150x.c
+++ b/drivers/pinctrl/pinctrl-sx150x.c
@@ -47,6 +47,8 @@ enum {
enum {
SX150X_789_REG_MISC_AUTOCLEAR_OFF = 1 << 0,
SX150X_MAX_REGISTER = 0xad,
+ SX150X_IRQ_TYPE_EDGE_RISING = 0x1,
+ SX150X_IRQ_TYPE_EDGE_FALLING = 0x2,
};
struct sx150x_123_pri {
@@ -441,6 +443,21 @@ static void sx150x_irq_unmask(struct irq_data *d)
pctl->irq.masked &= ~BIT(n);
}
+static void sx150x_irq_set_sense(struct sx150x_pinctrl *pctl,
+ unsigned int line, unsigned int sense)
+{
+ /*
+ * Every interrupt line is represented by two bits shifted
+ * proportionally to the line number
+ */
+ const unsigned int n = line * 2;
+ const unsigned int mask = ~((SX150X_IRQ_TYPE_EDGE_RISING |
+ SX150X_IRQ_TYPE_EDGE_FALLING) << n);
+
+ pctl->irq.sense &= mask;
+ pctl->irq.sense |= sense << n;
+}
+
static int sx150x_irq_set_type(struct irq_data *d, unsigned int flow_type)
{
struct sx150x_pinctrl *pctl =
@@ -453,12 +470,11 @@ static int sx150x_irq_set_type(struct irq_data *d, unsigned int flow_type)
n = d->hwirq;
if (flow_type & IRQ_TYPE_EDGE_RISING)
- val |= 0x1;
+ val |= SX150X_IRQ_TYPE_EDGE_RISING;
if (flow_type & IRQ_TYPE_EDGE_FALLING)
- val |= 0x2;
+ val |= SX150X_IRQ_TYPE_EDGE_FALLING;
- pctl->irq.sense &= ~(3UL << (n * 2));
- pctl->irq.sense |= val << (n * 2);
+ sx150x_irq_set_sense(pctl, n, val);
return 0;
}