This should fix the white space issue. I don't understand why it looks like a forwarding, if you can provide details I'll be glad to fix it.
Thanks for your patience, this is my first attempt at an openwrt patch. Noble Existing pinctrl-rt2880.c code only kept track of one pin group that functions other than gpio may use. Functions in rt305x.c had differing numbers of pins which caused rt2880_get_group_pins() to sometimes return incorrect pins. Example: when trying to use "gpio uartf" function pins 7-14 instead of 7-10 may be claimed for uartf preventing using gpio on pins 11-14. Usage of groups and functions added to rt305x.c is shown in VOCORE.dtsi. Signed-off-by: Noble Pepper <[email protected]> --- target/linux/ramips/dts/VOCORE.dtsi | 40 +++---- ...ralink-allow-functions-on-multiple-groups.patch | 117 +++++++++++++++++++++ 2 files changed, 138 insertions(+), 19 deletions(-) create mode 100644 target/linux/ramips/patches-3.18/0031-pinctrl-ralink-allow-functions-on-multiple-groups.patch diff --git a/target/linux/ramips/dts/VOCORE.dtsi b/target/linux/ramips/dts/VOCORE.dtsi index ff031fa..a5a213f 100644 --- a/target/linux/ramips/dts/VOCORE.dtsi +++ b/target/linux/ramips/dts/VOCORE.dtsi @@ -1,3 +1,10 @@ +/ { + palmbus@10000000 { + uartlite@c00 { + status = "okay"; + }; + }; +}; /include/ "rt5350.dtsi" / { @@ -5,6 +12,9 @@ model = "VoCore"; palmbus@10000000 { + uart@500 { + status = "okay"; + }; gpio1: gpio@660 { status = "okay"; }; @@ -25,9 +35,15 @@ }; pinctrl { + uartf_pins: uartf { + uartf { + ralink,group = "uartf_low"; + ralink,function = "gpio uartf"; + }; + }; state_default: pinctrl0 { gpio { - ralink,group = "jtag", "uartf", "led"; + ralink,group = "jtag", "led", "uartf_high"; ralink,function = "gpio"; }; }; @@ -64,25 +80,11 @@ }; /* UARTF */ - gpio7 { - /* UARTF_RTS_N */ - gpio-export,name = "gpio7"; + gpio11 { + /* uartf_dtr_n */ + gpio-export,name = "gpio11"; gpio-export,direction_may_change = <1>; - gpios = <&gpio0 7 0>; - }; - - gpio8 { - /* UARTF_TXD */ - gpio-export,name = "gpio8"; - gpio-export,direction_may_change = <1>; - gpios = <&gpio0 8 0>; - }; - - gpio9 { - /* UARTF_CTS_N */ - gpio-export,name = "gpio9"; - gpio-export,direction_may_change = <1>; - gpios = <&gpio0 9 0>; + gpios = <&gpio0 11 0>; }; gpio12 { diff --git a/target/linux/ramips/patches-3.18/0031-pinctrl-ralink-allow-functions-on-multiple-groups.patch b/target/linux/ramips/patches-3.18/0031-pinctrl-ralink-allow-functions-on-multiple-groups.patch new file mode 100644 index 0000000..752aa5d --- /dev/null +++ b/target/linux/ramips/patches-3.18/0031-pinctrl-ralink-allow-functions-on-multiple-groups.patch @@ -0,0 +1,116 @@ +diff -Naur a/arch/mips/include/asm/mach-ralink/pinmux.h b/arch/mips/include/asm/mach-ralink/pinmux.h +--- a/arch/mips/include/asm/mach-ralink/pinmux.h 2015-11-02 05:32:57.227437903 -0600 ++++ b/arch/mips/include/asm/mach-ralink/pinmux.h 2015-11-03 07:20:57.241011716 -0600 +@@ -25,25 +25,21 @@ + struct rt2880_pmx_func { + const char *name; + const char value; +- + int pin_first; + int pin_count; + int *pins; +- + int *groups; ++ int **group_names; + int group_count; +- + int enabled; + }; + + struct rt2880_pmx_group { + const char *name; + int enabled; +- + const u32 shift; + const char mask; + const char gpio; +- + struct rt2880_pmx_func *func; + int func_count; + }; +diff -Naur a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c +--- a/arch/mips/ralink/rt305x.c 2015-11-02 05:33:44.932237317 -0600 ++++ b/arch/mips/ralink/rt305x.c 2015-11-03 02:49:49.255271419 -0600 +@@ -23,6 +23,22 @@ + + static struct rt2880_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) }; + static struct rt2880_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) }; ++static struct rt2880_pmx_func uartf_low_func[] = { ++ FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 4), ++ FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 4), ++ FUNC("uartf i2s", RT305X_GPIO_MODE_I2S_UARTF, 7, 4), ++ FUNC("pcm gpio", RT305X_GPIO_MODE_PCM_GPIO, 7, 4), ++ FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4), ++ FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4), ++}; ++static struct rt2880_pmx_func uartf_high_func[] = { ++ FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 11, 4), ++ FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 11, 4), ++ FUNC("uartf i2s", RT305X_GPIO_MODE_I2S_UARTF, 11, 4), ++ FUNC("pcm gpio", RT305X_GPIO_MODE_PCM_GPIO, 11, 4), ++ FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 11, 4), ++ FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 11, 4), ++}; + static struct rt2880_pmx_func uartf_func[] = { + FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8), + FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8), +@@ -80,6 +96,10 @@ + GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI), + GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK, + RT305X_GPIO_MODE_UART0_SHIFT), ++ GRP("uartf_low", uartf_low_func, RT305X_GPIO_MODE_GPIO_UARTF, ++ RT305X_GPIO_MODE_UART0_SHIFT), ++ GRP("uartf_high", uartf_high_func, RT305X_GPIO_MODE_GPIO_UARTF, ++ RT305X_GPIO_MODE_UART0_SHIFT), + GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1), + GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG), + GRP("led", rt5350_led_func, 1, RT5350_GPIO_MODE_PHY_LED), +diff -Naur a/drivers/pinctrl/pinctrl-rt2880.c b/drivers/pinctrl/pinctrl-rt2880.c +--- a/drivers/pinctrl/pinctrl-rt2880.c 2015-11-02 05:34:31.585019384 -0600 ++++ b/drivers/pinctrl/pinctrl-rt2880.c 2015-11-03 02:51:30.981079814 -0600 +@@ -188,12 +188,8 @@ + unsigned * const num_groups) + { + struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev); +- +- if (p->func[func]->group_count == 1) +- *groups = &p->group_names[p->func[func]->groups[0]]; +- else +- *groups = p->group_names; +- ++ if (p->func[func]->group_count != 0) ++ *groups = p->func[func]->group_names; + *num_groups = p->func[func]->group_count; + + return 0; +@@ -319,12 +315,30 @@ + for (i = 0; i < p->group_count; i++) { + for (j = 0; j < p->groups[i].func_count; j++) { + f[c] = &p->groups[i].func[j]; +- f[c]->groups = devm_kzalloc(p->dev, sizeof(int), GFP_KERNEL); ++ f[c]->groups = devm_kzalloc(p->dev, sizeof(int) * p->group_count, GFP_KERNEL); ++ if (!f[c]->groups) ++ return -1; ++ f[c]->group_names = devm_kzalloc(p->dev, sizeof(char *) * p->group_count, GFP_KERNEL); ++ if (!f[c]->group_names) ++ return -1; + f[c]->groups[0] = i; + f[c]->group_count = 1; + c++; + } + } ++ f[0]->group_names = p->group_names; ++ for (c = 1; c < p->func_count; c++) { ++ f[c]->group_count = 0; ++ for (i = 0; i < p->group_count; i++) { ++ for (j = 0; j < p->groups[i].func_count; j++) { ++ if (strcmp(f[c]->name, p->groups[i].func[j].name) == 0) { ++ f[c]->groups[f[c]->group_count] = i; ++ f[c]->group_names[f[c]->group_count] = p->groups[i].name; ++ f[c]->group_count++; ++ } ++ } ++ } ++ } + return 0; + } -- 2.1.4 On Tue, 2015-11-03 at 13:34 +0100, John Crispin wrote: > Hi, > > the patch is white space broken and for some reason this seems to be a > forwarding. could you fix and resend please > > John > _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
