Changeset 36543


Ignore:
Timestamp:
2013-05-04T13:36:51+02:00 (5 years ago)
Author:
blogic
Message:

ramips: unbreak gpio handling for uart mux group

this should fix the handling of corner cases

Signed-off-by: John Crispin <blogic@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/patches-3.8/0128-MIPS-ralink-add-pinmux-driver.patch

    r36431 r36543  
    1717 create mode 100644 arch/mips/ralink/pinmux.c 
    1818 
    19 --- a/arch/mips/ralink/Makefile 
    20 +++ b/arch/mips/ralink/Makefile 
     19Index: linux-3.8.11/arch/mips/ralink/Makefile 
     20=================================================================== 
     21--- linux-3.8.11.orig/arch/mips/ralink/Makefile 2013-05-03 17:53:16.612004798 +0200 
     22+++ linux-3.8.11/arch/mips/ralink/Makefile      2013-05-04 13:20:48.455042975 +0200 
    2123@@ -6,7 +6,7 @@ 
    2224 # Copyright (C) 2009-2011 Gabor Juhos <juhosg@openwrt.org> 
     
    2830 obj-$(CONFIG_SOC_RT288X) += rt288x.o 
    2931 obj-$(CONFIG_SOC_RT305X) += rt305x.o 
    30 --- a/arch/mips/ralink/common.h 
    31 +++ b/arch/mips/ralink/common.h 
    32 @@ -50,4 +50,6 @@ extern void prom_soc_init(struct ralink_ 
     32Index: linux-3.8.11/arch/mips/ralink/common.h 
     33=================================================================== 
     34--- linux-3.8.11.orig/arch/mips/ralink/common.h 2013-05-03 17:53:16.720004800 +0200 
     35+++ linux-3.8.11/arch/mips/ralink/common.h      2013-05-04 13:20:48.055042959 +0200 
     36@@ -50,4 +50,6 @@ 
    3337  
    3438 __iomem void *plat_of_remap_node(const char *node); 
     
    3741+ 
    3842 #endif /* _RALINK_COMMON_H__ */ 
    39 --- a/arch/mips/ralink/of.c 
    40 +++ b/arch/mips/ralink/of.c 
    41 @@ -110,6 +110,8 @@ static int __init plat_of_setup(void) 
     43Index: linux-3.8.11/arch/mips/ralink/of.c 
     44=================================================================== 
     45--- linux-3.8.11.orig/arch/mips/ralink/of.c     2013-05-03 17:53:16.780004804 +0200 
     46+++ linux-3.8.11/arch/mips/ralink/of.c  2013-05-04 13:20:48.055042959 +0200 
     47@@ -110,6 +110,8 @@ 
    4248        if (of_platform_populate(NULL, of_ids, NULL, NULL)) 
    4349                panic("failed to populate DT\n"); 
     
    4854 } 
    4955  
    50 --- /dev/null 
    51 +++ b/arch/mips/ralink/pinmux.c 
    52 @@ -0,0 +1,76 @@ 
     56Index: linux-3.8.11/arch/mips/ralink/pinmux.c 
     57=================================================================== 
     58--- /dev/null   1970-01-01 00:00:00.000000000 +0000 
     59+++ linux-3.8.11/arch/mips/ralink/pinmux.c      2013-05-04 13:19:22.975039268 +0200 
     60@@ -0,0 +1,77 @@ 
    5361+/* 
    5462+ *  This program is free software; you can redistribute it and/or modify it 
     
    6876+#define SYSC_REG_GPIO_MODE     0x60 
    6977+ 
    70 +static u32 ralink_mux_mask(const char *name, struct ralink_pinmux_grp *grps) 
     78+static int ralink_mux_mask(const char *name, struct ralink_pinmux_grp *grps, u32* mask) 
    7179+{ 
    7280+       for (; grps->name; grps++) 
    73 +               if (!strcmp(grps->name, name)) 
    74 +                       return grps->mask; 
     81+               if (!strcmp(grps->name, name)) { 
     82+                       *mask = grps->mask; 
     83+                       return 0; 
     84+               } 
    7585+ 
    76 +       return 0; 
     86+       return -1; 
    7787+} 
    7888+ 
     
    8494+       const char *uart, *pin; 
    8595+       u32 mode = 0; 
     96+       int m; 
    8697+ 
    8798+       np = of_find_compatible_node(NULL, NULL, "ralink,rt3050-sysc"); 
     
    90101+ 
    91102+       of_property_for_each_string(np, "ralink,gpiomux", prop, pin) { 
    92 +               int m = ralink_mux_mask(pin, rt_gpio_pinmux.mode); 
    93 +               if (m) { 
     103+               if (!ralink_mux_mask(pin, rt_gpio_pinmux.mode, &m)) { 
    94104+                       mode |= m; 
    95105+                       pr_debug("pinmux: registered gpiomux \"%s\"\n", pin); 
     
    100110+ 
    101111+       of_property_for_each_string(np, "ralink,pinmux", prop, pin) { 
    102 +               int m = ralink_mux_mask(pin, rt_gpio_pinmux.mode); 
    103 +               if (m) { 
     112+               if (!ralink_mux_mask(pin, rt_gpio_pinmux.mode, &m)) { 
    104113+                       mode &= ~m; 
    105114+                       pr_debug("pinmux: registered pinmux \"%s\"\n", pin); 
     
    111120+       of_property_read_string(np, "ralink,uartmux", &uart); 
    112121+       if (uart) { 
    113 +               int m = ralink_mux_mask(uart, rt_gpio_pinmux.uart); 
    114122+               mode |= rt_gpio_pinmux.uart_mask << rt_gpio_pinmux.uart_shift; 
    115 +               if (m) { 
    116 +                       mode &= ~(m << rt_gpio_pinmux.uart_shift); 
     123+               if (ralink_mux_mask(uart, rt_gpio_pinmux.uart, &m)) { 
     124+                       pr_err("pinmux: failed to load uartmux \"%s\"\n", uart); 
     125+               } else { 
     126+                       if (m != rt_gpio_pinmux.uart_mask) 
     127+                               mode &= ~(m << rt_gpio_pinmux.uart_shift); 
    117128+                       pr_debug("pinmux: registered uartmux \"%s\"\n", uart); 
    118 +               } else { 
    119 +                       pr_debug("pinmux: registered uartmux \"gpio\"\n"); 
    120129+               } 
    121130+       } 
Note: See TracChangeset for help on using the changeset viewer.