[Xenomai-git] Philippe Gerum : drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

2017-03-05 Thread git repository hosting
Module: xenomai-3
Branch: master
Commit: c3de626c97fd5422ee56a6c23ff9d0a0adb227a2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c3de626c97fd5422ee56a6c23ff9d0a0adb227a2

Author: Philippe Gerum 
Date:   Sat Feb 11 12:36:12 2017 +0100

drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

At this chance, fix a misconfiguration with GPIO_TRIGGER_EDGE_BOTH.

---

 kernel/drivers/gpio/gpio-core.c |   29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/kernel/drivers/gpio/gpio-core.c b/kernel/drivers/gpio/gpio-core.c
index 3acc555..b8cb044 100644
--- a/kernel/drivers/gpio/gpio-core.c
+++ b/kernel/drivers/gpio/gpio-core.c
@@ -54,13 +54,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
struct rtdm_gpio_chan *chan,
int trigger)
 {
-   static const int trigger_flags[] = {
-   IRQ_TYPE_EDGE_RISING,
-   IRQ_TYPE_EDGE_FALLING,
-   IRQ_TYPE_LEVEL_HIGH,
-   IRQ_TYPE_LEVEL_LOW,
-   };
-   int irq_trigger, ret;
+   int ret, irq_trigger;
unsigned int irq;
 
if (trigger & ~GPIO_TRIGGER_MASK)
@@ -84,14 +78,19 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
 
rtdm_event_clear(>event);
irq = gpio_to_irq(gpio);
-   /*
-* Assumes GPIO_TRIGGER_xx values are forming a continuous
-* sequence of bits starting at bit #0.
-*/
-   if (trigger) {
-   irq_trigger = trigger_flags[ffs(trigger) - 1];
+
+   irq_trigger = 0;
+   if (trigger & GPIO_TRIGGER_EDGE_RISING)
+   irq_trigger |= IRQ_TYPE_EDGE_RISING;
+   if (trigger & GPIO_TRIGGER_EDGE_FALLING)
+   irq_trigger |= IRQ_TYPE_EDGE_FALLING;
+   if (trigger & GPIO_TRIGGER_LEVEL_HIGH)
+   irq_trigger |= IRQ_TYPE_LEVEL_HIGH;
+   if (trigger & GPIO_TRIGGER_LEVEL_LOW)
+   irq_trigger |= IRQ_TYPE_LEVEL_LOW;
+
+   if (irq_trigger)
irq_set_irq_type(irq, irq_trigger);
-   }

ret = rtdm_irq_request(>irqh, irq, gpio_pin_interrupt,
   0, pin->name, pin);
@@ -101,7 +100,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
}
 
chan->requested = true;
-   
+
rtdm_irq_enable(>irqh);
 
return 0;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

2017-02-15 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: c3de626c97fd5422ee56a6c23ff9d0a0adb227a2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c3de626c97fd5422ee56a6c23ff9d0a0adb227a2

Author: Philippe Gerum 
Date:   Sat Feb 11 12:36:12 2017 +0100

drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

At this chance, fix a misconfiguration with GPIO_TRIGGER_EDGE_BOTH.

---

 kernel/drivers/gpio/gpio-core.c |   29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/kernel/drivers/gpio/gpio-core.c b/kernel/drivers/gpio/gpio-core.c
index 3acc555..b8cb044 100644
--- a/kernel/drivers/gpio/gpio-core.c
+++ b/kernel/drivers/gpio/gpio-core.c
@@ -54,13 +54,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
struct rtdm_gpio_chan *chan,
int trigger)
 {
-   static const int trigger_flags[] = {
-   IRQ_TYPE_EDGE_RISING,
-   IRQ_TYPE_EDGE_FALLING,
-   IRQ_TYPE_LEVEL_HIGH,
-   IRQ_TYPE_LEVEL_LOW,
-   };
-   int irq_trigger, ret;
+   int ret, irq_trigger;
unsigned int irq;
 
if (trigger & ~GPIO_TRIGGER_MASK)
@@ -84,14 +78,19 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
 
rtdm_event_clear(>event);
irq = gpio_to_irq(gpio);
-   /*
-* Assumes GPIO_TRIGGER_xx values are forming a continuous
-* sequence of bits starting at bit #0.
-*/
-   if (trigger) {
-   irq_trigger = trigger_flags[ffs(trigger) - 1];
+
+   irq_trigger = 0;
+   if (trigger & GPIO_TRIGGER_EDGE_RISING)
+   irq_trigger |= IRQ_TYPE_EDGE_RISING;
+   if (trigger & GPIO_TRIGGER_EDGE_FALLING)
+   irq_trigger |= IRQ_TYPE_EDGE_FALLING;
+   if (trigger & GPIO_TRIGGER_LEVEL_HIGH)
+   irq_trigger |= IRQ_TYPE_LEVEL_HIGH;
+   if (trigger & GPIO_TRIGGER_LEVEL_LOW)
+   irq_trigger |= IRQ_TYPE_LEVEL_LOW;
+
+   if (irq_trigger)
irq_set_irq_type(irq, irq_trigger);
-   }

ret = rtdm_irq_request(>irqh, irq, gpio_pin_interrupt,
   0, pin->name, pin);
@@ -101,7 +100,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
}
 
chan->requested = true;
-   
+
rtdm_irq_enable(>irqh);
 
return 0;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

2017-02-11 Thread git repository hosting
Module: xenomai-3
Branch: stable-3.0.x
Commit: c3de626c97fd5422ee56a6c23ff9d0a0adb227a2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c3de626c97fd5422ee56a6c23ff9d0a0adb227a2

Author: Philippe Gerum 
Date:   Sat Feb 11 12:36:12 2017 +0100

drivers/gpio: decouple GPIO_TRIGGER enumeration from IRQ_TYPEs

At this chance, fix a misconfiguration with GPIO_TRIGGER_EDGE_BOTH.

---

 kernel/drivers/gpio/gpio-core.c |   29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/kernel/drivers/gpio/gpio-core.c b/kernel/drivers/gpio/gpio-core.c
index 3acc555..b8cb044 100644
--- a/kernel/drivers/gpio/gpio-core.c
+++ b/kernel/drivers/gpio/gpio-core.c
@@ -54,13 +54,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
struct rtdm_gpio_chan *chan,
int trigger)
 {
-   static const int trigger_flags[] = {
-   IRQ_TYPE_EDGE_RISING,
-   IRQ_TYPE_EDGE_FALLING,
-   IRQ_TYPE_LEVEL_HIGH,
-   IRQ_TYPE_LEVEL_LOW,
-   };
-   int irq_trigger, ret;
+   int ret, irq_trigger;
unsigned int irq;
 
if (trigger & ~GPIO_TRIGGER_MASK)
@@ -84,14 +78,19 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
 
rtdm_event_clear(>event);
irq = gpio_to_irq(gpio);
-   /*
-* Assumes GPIO_TRIGGER_xx values are forming a continuous
-* sequence of bits starting at bit #0.
-*/
-   if (trigger) {
-   irq_trigger = trigger_flags[ffs(trigger) - 1];
+
+   irq_trigger = 0;
+   if (trigger & GPIO_TRIGGER_EDGE_RISING)
+   irq_trigger |= IRQ_TYPE_EDGE_RISING;
+   if (trigger & GPIO_TRIGGER_EDGE_FALLING)
+   irq_trigger |= IRQ_TYPE_EDGE_FALLING;
+   if (trigger & GPIO_TRIGGER_LEVEL_HIGH)
+   irq_trigger |= IRQ_TYPE_LEVEL_HIGH;
+   if (trigger & GPIO_TRIGGER_LEVEL_LOW)
+   irq_trigger |= IRQ_TYPE_LEVEL_LOW;
+
+   if (irq_trigger)
irq_set_irq_type(irq, irq_trigger);
-   }

ret = rtdm_irq_request(>irqh, irq, gpio_pin_interrupt,
   0, pin->name, pin);
@@ -101,7 +100,7 @@ static int request_gpio_irq(unsigned int gpio, struct 
rtdm_gpio_pin *pin,
}
 
chan->requested = true;
-   
+
rtdm_irq_enable(>irqh);
 
return 0;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai-git