Changeset 36563


Ignore:
Timestamp:
2013-05-06T18:45:27+02:00 (5 years ago)
Author:
blogic
Message:

ramips: Support setting active_low in devicetree gpio-export

Support setting active_low in devicetree gpio-export.

Signed-off-by: Tobias Diedrich <ranma+openwrt@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/patches-3.8/0209-owrt-GPIO-add-gpio_export_with_name.patch

    r36363 r36563  
    1515 5 files changed, 160 insertions(+), 8 deletions(-) 
    1616 
    17 --- a/Documentation/devicetree/bindings/gpio/gpio.txt 
    18 +++ b/Documentation/devicetree/bindings/gpio/gpio.txt 
    19 @@ -112,3 +112,63 @@ where, 
     17Index: linux-3.8.11/Documentation/devicetree/bindings/gpio/gpio.txt 
     18=================================================================== 
     19--- linux-3.8.11.orig/Documentation/devicetree/bindings/gpio/gpio.txt   2013-05-01 18:56:10.000000000 +0200 
     20+++ linux-3.8.11/Documentation/devicetree/bindings/gpio/gpio.txt        2013-05-06 12:43:38.252652605 +0200 
     21@@ -112,3 +112,63 @@ 
    2022  
    2123 The pinctrl node must have "#gpio-range-cells" property to show number of 
     
    8183+       }; 
    8284+}; 
    83 --- a/drivers/gpio/gpiolib-of.c 
    84 +++ b/drivers/gpio/gpiolib-of.c 
     85Index: linux-3.8.11/drivers/gpio/gpiolib-of.c 
     86=================================================================== 
     87--- linux-3.8.11.orig/drivers/gpio/gpiolib-of.c 2013-05-01 18:56:10.000000000 +0200 
     88+++ linux-3.8.11/drivers/gpio/gpiolib-of.c      2013-05-06 13:35:56.452788709 +0200 
    8589@@ -21,6 +21,8 @@ 
    8690 #include <linux/of_gpio.h> 
     
    9296 /* Private data structure for of_gpiochip_find_and_xlate */ 
    9397 struct gg_data { 
    94 @@ -288,3 +290,62 @@ void of_gpiochip_remove(struct gpio_chip 
     98@@ -288,3 +290,69 @@ 
    9599        if (chip->of_node) 
    96100                of_node_put(chip->of_node); 
     
    122126+ 
    123127+               for (i = 0; i < max_gpio; i++) { 
    124 +                       gpio = of_get_gpio(cnp, i); 
    125 +                       if (devm_gpio_request(&pdev->dev, gpio, name ? name : of_node_full_name(np))) 
     128+                       unsigned flags = 0; 
     129+                       enum of_gpio_flags of_flags; 
     130+ 
     131+                       gpio = of_get_gpio_flags(cnp, i, &of_flags); 
     132+ 
     133+                       if (of_flags == OF_GPIO_ACTIVE_LOW) 
     134+                               flags |= GPIOF_ACTIVE_LOW; 
     135+ 
     136+                       if (!of_property_read_u32(cnp, "gpio-export,output", &val)) 
     137+                               flags |= val ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; 
     138+                       else 
     139+                               flags |= GPIOF_IN; 
     140+ 
     141+                       if (devm_gpio_request_one(&pdev->dev, gpio, flags, name ? name : of_node_full_name(np))) 
    126142+                               continue; 
    127143+ 
    128 +                       if (!of_property_read_u32(cnp, "gpio-export,output", &val)) 
    129 +                               gpio_direction_output(gpio, val); 
    130 +                       else 
    131 +                               gpio_direction_input(gpio); 
    132 + 
    133 +                       dmc = of_property_read_bool(np, "gpio-export,direction_may_change"); 
     144+                       dmc = of_property_read_bool(cnp, "gpio-export,direction_may_change"); 
    134145+                       gpio_export_with_name(gpio, dmc, name); 
    135146+                       nb++; 
     
    155166+} 
    156167+device_initcall(of_gpio_export_init); 
    157 --- a/drivers/gpio/gpiolib.c 
    158 +++ b/drivers/gpio/gpiolib.c 
    159 @@ -714,9 +714,10 @@ static struct class gpio_class = { 
     168Index: linux-3.8.11/drivers/gpio/gpiolib.c 
     169=================================================================== 
     170--- linux-3.8.11.orig/drivers/gpio/gpiolib.c    2013-05-01 18:56:10.000000000 +0200 
     171+++ linux-3.8.11/drivers/gpio/gpiolib.c 2013-05-06 13:31:35.060777376 +0200 
     172@@ -714,9 +714,10 @@ 
    160173  
    161174  
     
    169182  * 
    170183  * When drivers want to make a GPIO accessible to userspace after they 
    171 @@ -728,7 +729,7 @@ static struct class gpio_class = { 
     184@@ -728,7 +729,7 @@ 
    172185  * 
    173186  * Returns zero on success, else an error. 
     
    178191        unsigned long           flags; 
    179192        struct gpio_desc        *desc; 
    180 @@ -762,6 +763,8 @@ int gpio_export(unsigned gpio, bool dire 
     193@@ -762,6 +763,8 @@ 
    181194                goto fail_unlock; 
    182195        } 
     
    187200                direction_may_change = false; 
    188201        spin_unlock_irqrestore(&gpio_lock, flags); 
    189 @@ -804,7 +807,7 @@ fail_unlock: 
     202@@ -804,7 +807,7 @@ 
    190203        pr_debug("%s: gpio%d status %d\n", __func__, gpio, status); 
    191204        return status; 
     
    196209 static int match_export(struct device *dev, void *data) 
    197210 { 
    198 --- a/include/asm-generic/gpio.h 
    199 +++ b/include/asm-generic/gpio.h 
    200 @@ -204,7 +204,8 @@ void devm_gpio_free(struct device *dev, 
     211@@ -1418,6 +1421,9 @@ 
     212        if (flags & GPIOF_OPEN_SOURCE) 
     213                set_bit(FLAG_OPEN_SOURCE, &gpio_desc[gpio].flags); 
     214  
     215+       if (flags & GPIOF_ACTIVE_LOW) 
     216+               set_bit(FLAG_ACTIVE_LOW, &gpio_desc[gpio].flags); 
     217+ 
     218        if (flags & GPIOF_DIR_IN) 
     219                err = gpio_direction_input(gpio); 
     220        else 
     221Index: linux-3.8.11/include/asm-generic/gpio.h 
     222=================================================================== 
     223--- linux-3.8.11.orig/include/asm-generic/gpio.h        2013-05-01 18:56:10.000000000 +0200 
     224+++ linux-3.8.11/include/asm-generic/gpio.h     2013-05-06 12:43:38.252652605 +0200 
     225@@ -204,7 +204,8 @@ 
    201226  * A sysfs interface can be exported by individual drivers if they want, 
    202227  * but more typically is configured entirely from userspace. 
     
    208233                        unsigned gpio); 
    209234 extern int gpio_sysfs_set_active_low(unsigned gpio, int value); 
    210 @@ -249,7 +250,8 @@ struct device; 
     235@@ -249,7 +250,8 @@ 
    211236  
    212237 /* sysfs support is only available with gpiolib, where it's optional */ 
     
    218243        return -ENOSYS; 
    219244 } 
    220 --- a/include/linux/gpio.h 
    221 +++ b/include/linux/gpio.h 
    222 @@ -189,7 +189,8 @@ static inline void gpio_set_value_cansle 
     245Index: linux-3.8.11/include/linux/gpio.h 
     246=================================================================== 
     247--- linux-3.8.11.orig/include/linux/gpio.h      2013-05-01 18:56:10.000000000 +0200 
     248+++ linux-3.8.11/include/linux/gpio.h   2013-05-06 13:32:59.796781050 +0200 
     249@@ -27,6 +27,9 @@ 
     250 #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) 
     251 #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) 
     252  
     253+#define GPIOF_ACTIVE_LOW       (1 << 6) 
     254+ 
     255+ 
     256 /** 
     257  * struct gpio - a structure describing a GPIO with configuration 
     258  * @gpio:      the GPIO number 
     259@@ -189,7 +192,8 @@ 
    223260        WARN_ON(1); 
    224261 } 
     
    230267        /* GPIO can never have been requested or set as {in,out}put */ 
    231268        WARN_ON(1); 
    232 @@ -248,4 +249,24 @@ gpiochip_remove_pin_ranges(struct gpio_c 
     269@@ -248,4 +252,24 @@ 
    233270  
    234271 #endif /* ! CONFIG_GENERIC_GPIO */ 
Note: See TracChangeset for help on using the changeset viewer.