* [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC @ 2013-07-23 22:25 Maxime Ripard 2013-07-23 22:25 ` [PATCH 01/10] irqchip: GIC: Add Cortex-A7 compatible string Maxime Ripard ` (9 more replies) 0 siblings, 10 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel Hi everyone, This patchset add support in Linux for the Allwinner A31 SoC. This SoC is the current high-end Allwinner SoC, and is powered by 4 Cortex-A7. SMP support is not there yet, but should come eventually, so does the clock support. As usual, since we don't have any storage device driver yet, it only boots from an initramfs. Finally, something worth mentionning is that with the current bootloader, you'll encounter 2 ~6s hangs during the boot. This is because the SMP bit of the Cortex-A7 doesn't appear to be set, leading to the CPU caches being disabled. This can partially be addressed by selecting CONFIG_SMP, that will remove the second hang, because the SMP bit is set after kernel decompression. Obviously, this won't remove the first hang that happens during decompression, but it's better than nothing. A proper fix would be to fix the bootloader. Thanks, Maxime Emilio L?pez (1): clk: sunxi: fix initialization of basic clocks Maxime Ripard (9): irqchip: GIC: Add Cortex-A7 compatible string ARM: sunxi: Add the Allwinner A31 compatible to the machine definition ARM: sun6i: Add restart code for the A31 ARM: sunxi: Add Allwinner A31 DTSI ARM: sun6i: Add WITS Colombus A31 evaluation kit support pinctrl: sunxi: Add Allwinner A31 pins set ARM: sunxi: dt: Add PIO controller to A31 DTSI ARM: sun6i: Add UART0 muxing options ARM: sun6i: colombus: Add uart0 muxing arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/sun6i-a31-colombus.dts | 32 ++ arch/arm/boot/dts/sun6i-a31.dtsi | 174 +++++++ arch/arm/mach-sunxi/Kconfig | 2 + arch/arm/mach-sunxi/sunxi.c | 38 ++ drivers/clk/sunxi/clk-sunxi.c | 11 +- drivers/irqchip/irq-gic.c | 1 + drivers/pinctrl/pinctrl-sunxi-pins.h | 820 +++++++++++++++++++++++++++++++ drivers/pinctrl/pinctrl-sunxi.c | 1 + 9 files changed, 1073 insertions(+), 9 deletions(-) create mode 100644 arch/arm/boot/dts/sun6i-a31-colombus.dts create mode 100644 arch/arm/boot/dts/sun6i-a31.dtsi -- 1.8.3.2 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 01/10] irqchip: GIC: Add Cortex-A7 compatible string 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 02/10] clk: sunxi: fix initialization of basic clocks Maxime Ripard ` (8 subsequent siblings) 9 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel The GIC can also be found on Cortex-A7 based SoCs. Register a new compatible string for those cases. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- drivers/irqchip/irq-gic.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 19ceaa6..5b5fe23 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -854,6 +854,7 @@ int __init gic_of_init(struct device_node *node, struct device_node *parent) } IRQCHIP_DECLARE(cortex_a15_gic, "arm,cortex-a15-gic", gic_of_init); IRQCHIP_DECLARE(cortex_a9_gic, "arm,cortex-a9-gic", gic_of_init); +IRQCHIP_DECLARE(cortex_a7_gic, "arm,cortex-a7-gic", gic_of_init); IRQCHIP_DECLARE(msm_8660_qgic, "qcom,msm-8660-qgic", gic_of_init); IRQCHIP_DECLARE(msm_qgic2, "qcom,msm-qgic2", gic_of_init); -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 02/10] clk: sunxi: fix initialization of basic clocks 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard 2013-07-23 22:25 ` [PATCH 01/10] irqchip: GIC: Add Cortex-A7 compatible string Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition Maxime Ripard ` (7 subsequent siblings) 9 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel From: Emilio L?pez <emilio@elopez.com.ar> With the recent move towards CLK_OF_DECLARE(...), the driver stopped initializing osc32k, which is compatible "fixed-clock". This is because we never called of_clk_init(NULL). Fix this by moving the only other simple clock (osc24M) to use CLK_OF_DECLARE(...) and call of_clk_init(NULL) to initialize both of them. Signed-off-by: Emilio L?pez <emilio@elopez.com.ar> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- drivers/clk/sunxi/clk-sunxi.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c index 412912b..fe1528e 100644 --- a/drivers/clk/sunxi/clk-sunxi.c +++ b/drivers/clk/sunxi/clk-sunxi.c @@ -409,12 +409,7 @@ static void __init sunxi_gates_clk_setup(struct device_node *node, of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); } - -/* Matches for of_clk_init */ -static const __initconst struct of_device_id clk_match[] = { - {.compatible = "allwinner,sun4i-osc-clk", .data = sunxi_osc_clk_setup,}, - {} -}; +CLK_OF_DECLARE(sunxi_osc, "allwinner,sun4i-osc-clk", sunxi_osc_clk_setup); /* Matches for factors clocks */ static const __initconst struct of_device_id clk_factors_match[] = { @@ -467,8 +462,8 @@ static void __init of_sunxi_table_clock_setup(const struct of_device_id *clk_mat void __init sunxi_init_clocks(void) { - /* Register all the simple sunxi clocks on DT */ - of_clk_init(clk_match); + /* Register all the simple and basic clocks on DT */ + of_clk_init(NULL); /* Register factor clocks */ of_sunxi_table_clock_setup(clk_factors_match, sunxi_factors_clk_setup); -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard 2013-07-23 22:25 ` [PATCH 01/10] irqchip: GIC: Add Cortex-A7 compatible string Maxime Ripard 2013-07-23 22:25 ` [PATCH 02/10] clk: sunxi: fix initialization of basic clocks Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-23 22:25 ` [PATCH 04/10] ARM: sun6i: Add restart code for the A31 Maxime Ripard ` (6 subsequent siblings) 9 siblings, 1 reply; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel The Allwinner A31 is a quad-Cortex-A7 based SoC, which shares a lot of differences with the previous SoCs from Allwinner, like the PIO, I2C, UARTs, timers, watchdog IPs, but also differs but droping the WEMAC ethernet controller and most notably droping the in-house IRQ controller in favor of a ARM GIC one. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/mach-sunxi/Kconfig | 2 ++ arch/arm/mach-sunxi/sunxi.c | 1 + 2 files changed, 3 insertions(+) diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index 5b045e3..3ab2f65 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -10,3 +10,5 @@ config ARCH_SUNXI select SPARSE_IRQ select SUN4I_TIMER select PINCTRL_SUNXI + select ARM_GIC + select HAVE_SMP diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c index 38a3c55..11326d9 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c @@ -96,6 +96,7 @@ static const char * const sunxi_board_dt_compat[] = { "allwinner,sun4i-a10", "allwinner,sun5i-a10s", "allwinner,sun5i-a13", + "allwinner,sun6i-a31", NULL, }; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition 2013-07-23 22:25 ` [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition Maxime Ripard @ 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-26 12:22 ` Maxime Ripard 0 siblings, 1 reply; 25+ messages in thread From: Thomas Petazzoni @ 2013-07-26 10:35 UTC (permalink / raw) To: linux-arm-kernel Dear Maxime Ripard, On Wed, 24 Jul 2013 00:25:05 +0200, Maxime Ripard wrote: > The Allwinner A31 is a quad-Cortex-A7 based SoC, which shares a lot of > differences with the previous SoCs from Allwinner, like the PIO, I2C, "shares a lot of differences" ? I suppose you meant "has a lot of similarities", or "shares a number of hardware blocks", or something like that? > UARTs, timers, watchdog IPs, but also differs but droping the WEMAC "but also differs but droping" ? > ethernet controller and most notably droping the in-house IRQ > controller in favor of a ARM GIC one. droping -> dropping </nitpick> :) Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition 2013-07-26 10:35 ` Thomas Petazzoni @ 2013-07-26 12:22 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-26 12:22 UTC (permalink / raw) To: linux-arm-kernel Hi Thomas, On Fri, Jul 26, 2013 at 12:35:00PM +0200, Thomas Petazzoni wrote: > Dear Maxime Ripard, > > On Wed, 24 Jul 2013 00:25:05 +0200, Maxime Ripard wrote: > > The Allwinner A31 is a quad-Cortex-A7 based SoC, which shares a lot of > > differences with the previous SoCs from Allwinner, like the PIO, I2C, > > "shares a lot of differences" ? I suppose you meant "has a lot of > similarities", or "shares a number of hardware blocks", or something > like that? Yep > > UARTs, timers, watchdog IPs, but also differs but droping the WEMAC > > "but also differs but droping" ? *by* dropping. > > ethernet controller and most notably droping the in-house IRQ > > controller in favor of a ARM GIC one. > > droping -> dropping > > </nitpick> :) Right. Thanks! -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130726/0c4dcd13/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 04/10] ARM: sun6i: Add restart code for the A31 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (2 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-29 14:04 ` Mark Rutland 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard ` (5 subsequent siblings) 9 siblings, 2 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel The Allwinner A31 has a sligthly different watchdog that requires a different restart code. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/mach-sunxi/sunxi.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c index 11326d9..c18ef3a 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c @@ -32,6 +32,15 @@ #define SUN4I_WATCHDOG_MODE_ENABLE (1 << 0) #define SUN4I_WATCHDOG_MODE_RESET_ENABLE (1 << 1) +#define SUN6I_WATCHDOG1_IRQ_REG 0x00 +#define SUN6I_WATCHDOG1_CTRL_REG 0x10 +#define SUN6I_WATCHDOG1_CTRL_RESTART (1 << 0) +#define SUN6I_WATCHDOG1_CONFIG_REG 0x14 +#define SUN6I_WATCHDOG1_CONFIG_RESTART (1 << 0) +#define SUN6I_WATCHDOG1_CONFIG_IRQ (1 << 1) +#define SUN6I_WATCHDOG1_MODE_REG 0x18 +#define SUN6I_WATCHDOG1_MODE_ENABLE (1 << 0) + static void __iomem *wdt_base; static void sun4i_restart(enum reboot_mode mode, const char *cmd) @@ -56,8 +65,36 @@ static void sun4i_restart(enum reboot_mode mode, const char *cmd) } } +static void sun6i_restart(char mode, const char *cmd) +{ + if (!wdt_base) + return; + + /* Disable interrupts */ + writel(0, wdt_base + SUN6I_WATCHDOG1_IRQ_REG); + + /* We want to disable the IRQ and just reset the whole system */ + writel(SUN6I_WATCHDOG1_CONFIG_RESTART, + wdt_base + SUN6I_WATCHDOG1_CONFIG_REG); + + /* Enable timer. The default and lowest interval value is 0.5s */ + writel(SUN6I_WATCHDOG1_MODE_ENABLE, + wdt_base + SUN6I_WATCHDOG1_MODE_REG); + + /* Restart the watchdog. */ + writel(SUN6I_WATCHDOG1_CTRL_RESTART, + wdt_base + SUN6I_WATCHDOG1_CTRL_REG); + + while (1) { + mdelay(5); + writel(SUN6I_WATCHDOG1_MODE_ENABLE, + wdt_base + SUN6I_WATCHDOG1_MODE_REG); + } +} + static struct of_device_id sunxi_restart_ids[] = { { .compatible = "allwinner,sun4i-wdt", .data = sun4i_restart }, + { .compatible = "allwinner,sun6i-wdt", .data = sun6i_restart }, { /*sentinel*/ } }; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 04/10] ARM: sun6i: Add restart code for the A31 2013-07-23 22:25 ` [PATCH 04/10] ARM: sun6i: Add restart code for the A31 Maxime Ripard @ 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-26 12:23 ` Maxime Ripard 2013-07-29 14:04 ` Mark Rutland 1 sibling, 1 reply; 25+ messages in thread From: Thomas Petazzoni @ 2013-07-26 10:35 UTC (permalink / raw) To: linux-arm-kernel Dear Maxime Ripard, On Wed, 24 Jul 2013 00:25:06 +0200, Maxime Ripard wrote: > The Allwinner A31 has a sligthly different watchdog that requires a > different restart code. > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > --- > arch/arm/mach-sunxi/sunxi.c | 37 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c > index 11326d9..c18ef3a 100644 > --- a/arch/arm/mach-sunxi/sunxi.c > +++ b/arch/arm/mach-sunxi/sunxi.c > @@ -32,6 +32,15 @@ > #define SUN4I_WATCHDOG_MODE_ENABLE (1 << 0) > #define SUN4I_WATCHDOG_MODE_RESET_ENABLE (1 << 1) > > +#define SUN6I_WATCHDOG1_IRQ_REG 0x00 > +#define SUN6I_WATCHDOG1_CTRL_REG 0x10 > +#define SUN6I_WATCHDOG1_CTRL_RESTART (1 << 0) > +#define SUN6I_WATCHDOG1_CONFIG_REG 0x14 > +#define SUN6I_WATCHDOG1_CONFIG_RESTART (1 << 0) > +#define SUN6I_WATCHDOG1_CONFIG_IRQ (1 << 1) > +#define SUN6I_WATCHDOG1_MODE_REG 0x18 > +#define SUN6I_WATCHDOG1_MODE_ENABLE (1 << 0) Alignment is not nice, and the BIT() macro should be used. Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 04/10] ARM: sun6i: Add restart code for the A31 2013-07-26 10:35 ` Thomas Petazzoni @ 2013-07-26 12:23 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-26 12:23 UTC (permalink / raw) To: linux-arm-kernel Hi Thomas, On Fri, Jul 26, 2013 at 12:35:59PM +0200, Thomas Petazzoni wrote: > Dear Maxime Ripard, > > On Wed, 24 Jul 2013 00:25:06 +0200, Maxime Ripard wrote: > > The Allwinner A31 has a sligthly different watchdog that requires a > > different restart code. > > > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > > --- > > arch/arm/mach-sunxi/sunxi.c | 37 +++++++++++++++++++++++++++++++++++++ > > 1 file changed, 37 insertions(+) > > > > diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c > > index 11326d9..c18ef3a 100644 > > --- a/arch/arm/mach-sunxi/sunxi.c > > +++ b/arch/arm/mach-sunxi/sunxi.c > > @@ -32,6 +32,15 @@ > > #define SUN4I_WATCHDOG_MODE_ENABLE (1 << 0) > > #define SUN4I_WATCHDOG_MODE_RESET_ENABLE (1 << 1) > > > > +#define SUN6I_WATCHDOG1_IRQ_REG 0x00 > > +#define SUN6I_WATCHDOG1_CTRL_REG 0x10 > > +#define SUN6I_WATCHDOG1_CTRL_RESTART (1 << 0) > > +#define SUN6I_WATCHDOG1_CONFIG_REG 0x14 > > +#define SUN6I_WATCHDOG1_CONFIG_RESTART (1 << 0) > > +#define SUN6I_WATCHDOG1_CONFIG_IRQ (1 << 1) > > +#define SUN6I_WATCHDOG1_MODE_REG 0x18 > > +#define SUN6I_WATCHDOG1_MODE_ENABLE (1 << 0) > > Alignment is not nice, and the BIT() macro should be used. Actually, the alignment is the one you would expect in the code. Point taken for the BIT macro, I'll update it. Thanks, Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130726/fa138726/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 04/10] ARM: sun6i: Add restart code for the A31 2013-07-23 22:25 ` [PATCH 04/10] ARM: sun6i: Add restart code for the A31 Maxime Ripard 2013-07-26 10:35 ` Thomas Petazzoni @ 2013-07-29 14:04 ` Mark Rutland 2013-07-30 12:44 ` Maxime Ripard 1 sibling, 1 reply; 25+ messages in thread From: Mark Rutland @ 2013-07-29 14:04 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jul 23, 2013 at 11:25:06PM +0100, Maxime Ripard wrote: > The Allwinner A31 has a sligthly different watchdog that requires a > different restart code. > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > --- > arch/arm/mach-sunxi/sunxi.c | 37 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c > index 11326d9..c18ef3a 100644 > --- a/arch/arm/mach-sunxi/sunxi.c > +++ b/arch/arm/mach-sunxi/sunxi.c > @@ -32,6 +32,15 @@ > #define SUN4I_WATCHDOG_MODE_ENABLE (1 << 0) > #define SUN4I_WATCHDOG_MODE_RESET_ENABLE (1 << 1) > > +#define SUN6I_WATCHDOG1_IRQ_REG 0x00 > +#define SUN6I_WATCHDOG1_CTRL_REG 0x10 > +#define SUN6I_WATCHDOG1_CTRL_RESTART (1 << 0) > +#define SUN6I_WATCHDOG1_CONFIG_REG 0x14 > +#define SUN6I_WATCHDOG1_CONFIG_RESTART (1 << 0) > +#define SUN6I_WATCHDOG1_CONFIG_IRQ (1 << 1) > +#define SUN6I_WATCHDOG1_MODE_REG 0x18 > +#define SUN6I_WATCHDOG1_MODE_ENABLE (1 << 0) > + > static void __iomem *wdt_base; > > static void sun4i_restart(enum reboot_mode mode, const char *cmd) > @@ -56,8 +65,36 @@ static void sun4i_restart(enum reboot_mode mode, const char *cmd) > } > } > > +static void sun6i_restart(char mode, const char *cmd) > +{ > + if (!wdt_base) > + return; > + > + /* Disable interrupts */ > + writel(0, wdt_base + SUN6I_WATCHDOG1_IRQ_REG); > + > + /* We want to disable the IRQ and just reset the whole system */ > + writel(SUN6I_WATCHDOG1_CONFIG_RESTART, > + wdt_base + SUN6I_WATCHDOG1_CONFIG_REG); > + > + /* Enable timer. The default and lowest interval value is 0.5s */ > + writel(SUN6I_WATCHDOG1_MODE_ENABLE, > + wdt_base + SUN6I_WATCHDOG1_MODE_REG); > + > + /* Restart the watchdog. */ > + writel(SUN6I_WATCHDOG1_CTRL_RESTART, > + wdt_base + SUN6I_WATCHDOG1_CTRL_REG); > + > + while (1) { > + mdelay(5); > + writel(SUN6I_WATCHDOG1_MODE_ENABLE, > + wdt_base + SUN6I_WATCHDOG1_MODE_REG); > + } > +} > + > static struct of_device_id sunxi_restart_ids[] = { > { .compatible = "allwinner,sun4i-wdt", .data = sun4i_restart }, > + { .compatible = "allwinner,sun6i-wdt", .data = sun6i_restart }, Is there a corresponding binding document addition? sun4i-wdt.txt could be turned into a more general sunxi-wdt.txt. Thanks, Mark. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 04/10] ARM: sun6i: Add restart code for the A31 2013-07-29 14:04 ` Mark Rutland @ 2013-07-30 12:44 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-30 12:44 UTC (permalink / raw) To: linux-arm-kernel Hi Mark, On Mon, Jul 29, 2013 at 03:04:31PM +0100, Mark Rutland wrote: > On Tue, Jul 23, 2013 at 11:25:06PM +0100, Maxime Ripard wrote: > > The Allwinner A31 has a sligthly different watchdog that requires a > > different restart code. > > > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > > --- > > arch/arm/mach-sunxi/sunxi.c | 37 +++++++++++++++++++++++++++++++++++++ > > 1 file changed, 37 insertions(+) > > > > diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c > > index 11326d9..c18ef3a 100644 > > --- a/arch/arm/mach-sunxi/sunxi.c > > +++ b/arch/arm/mach-sunxi/sunxi.c > > @@ -32,6 +32,15 @@ > > #define SUN4I_WATCHDOG_MODE_ENABLE (1 << 0) > > #define SUN4I_WATCHDOG_MODE_RESET_ENABLE (1 << 1) > > > > +#define SUN6I_WATCHDOG1_IRQ_REG 0x00 > > +#define SUN6I_WATCHDOG1_CTRL_REG 0x10 > > +#define SUN6I_WATCHDOG1_CTRL_RESTART (1 << 0) > > +#define SUN6I_WATCHDOG1_CONFIG_REG 0x14 > > +#define SUN6I_WATCHDOG1_CONFIG_RESTART (1 << 0) > > +#define SUN6I_WATCHDOG1_CONFIG_IRQ (1 << 1) > > +#define SUN6I_WATCHDOG1_MODE_REG 0x18 > > +#define SUN6I_WATCHDOG1_MODE_ENABLE (1 << 0) > > + > > static void __iomem *wdt_base; > > > > static void sun4i_restart(enum reboot_mode mode, const char *cmd) > > @@ -56,8 +65,36 @@ static void sun4i_restart(enum reboot_mode mode, const char *cmd) > > } > > } > > > > +static void sun6i_restart(char mode, const char *cmd) > > +{ > > + if (!wdt_base) > > + return; > > + > > + /* Disable interrupts */ > > + writel(0, wdt_base + SUN6I_WATCHDOG1_IRQ_REG); > > + > > + /* We want to disable the IRQ and just reset the whole system */ > > + writel(SUN6I_WATCHDOG1_CONFIG_RESTART, > > + wdt_base + SUN6I_WATCHDOG1_CONFIG_REG); > > + > > + /* Enable timer. The default and lowest interval value is 0.5s */ > > + writel(SUN6I_WATCHDOG1_MODE_ENABLE, > > + wdt_base + SUN6I_WATCHDOG1_MODE_REG); > > + > > + /* Restart the watchdog. */ > > + writel(SUN6I_WATCHDOG1_CTRL_RESTART, > > + wdt_base + SUN6I_WATCHDOG1_CTRL_REG); > > + > > + while (1) { > > + mdelay(5); > > + writel(SUN6I_WATCHDOG1_MODE_ENABLE, > > + wdt_base + SUN6I_WATCHDOG1_MODE_REG); > > + } > > +} > > + > > static struct of_device_id sunxi_restart_ids[] = { > > { .compatible = "allwinner,sun4i-wdt", .data = sun4i_restart }, > > + { .compatible = "allwinner,sun6i-wdt", .data = sun6i_restart }, > > Is there a corresponding binding document addition? > > sun4i-wdt.txt could be turned into a more general sunxi-wdt.txt. Ah, right, thanks! I'll fix it in the v2. Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130730/11fa10a6/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (3 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 04/10] ARM: sun6i: Add restart code for the A31 Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-26 10:37 ` Thomas Petazzoni ` (2 more replies) 2013-07-23 22:25 ` [PATCH 06/10] ARM: sun6i: Add WITS Colombus A31 evaluation kit support Maxime Ripard ` (4 subsequent siblings) 9 siblings, 3 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/Makefile | 3 +- arch/arm/boot/dts/sun6i-a31.dtsi | 155 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/sun6i-a31.dtsi diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 641b3c9..1482533 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -210,7 +210,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ sun4i-a10-mini-xplus.dtb \ sun4i-a10-hackberry.dtb \ sun5i-a10s-olinuxino-micro.dtb \ - sun5i-a13-olinuxino.dtb + sun5i-a13-olinuxino.dtb \ + sun6i-a31-colombus.dtb dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ tegra20-iris-512.dtb \ tegra20-medcom-wide.dtb \ diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi new file mode 100644 index 0000000..c6c19a9 --- /dev/null +++ b/arch/arm/boot/dts/sun6i-a31.dtsi @@ -0,0 +1,155 @@ +/* + * Copyright 2013 Maxime Ripard + * + * Maxime Ripard <maxime.ripard@free-electrons.com> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/include/ "skeleton.dtsi" + +/ { + interrupt-parent = <&gic>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu at 0 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <0>; + }; + + cpu at 1 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <1>; + }; + + cpu at 2 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <2>; + }; + + cpu at 3 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <3>; + }; + }; + + memory { + reg = <0x40000000 0x80000000>; + }; + + clocks { + #address-cells = <1>; + #size-cells = <0>; + + osc: oscillator { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <24000000>; + }; + }; + + soc at 01c20000 { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x01c20000 0x300000>; + ranges; + + timer at 01c20c00 { + compatible = "allwinner,sun4i-timer"; + reg = <0x01c20c00 0xa0>; + interrupts = < + 0 18 1 + 0 19 1 + 0 20 1 + 0 21 1 + 0 22 1 + >; + clocks = <&osc>; + }; + + wdt1: watchdog at 01c20ca0 { + compatible = "allwinner,sun6i-wdt"; + reg = <0x01c20ca0 0x20>; + }; + + uart0: serial at 01c28000 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c28000 0x400>; + interrupts = <0 0 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + uart1: serial at 01c28400 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c28400 0x400>; + interrupts = <0 1 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + uart2: serial at 01c28800 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c28800 0x400>; + interrupts = <0 2 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + uart3: serial at 01c28c00 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c28c00 0x400>; + interrupts = <0 3 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + uart4: serial at 01c29000 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c29000 0x400>; + interrupts = <0 4 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + uart5: serial at 01c29400 { + compatible = "snps,dw-apb-uart"; + reg = <0x01c29400 0x400>; + interrupts = <0 5 1>; + reg-shift = <2>; + reg-io-width = <4>; + clocks = <&osc>; + status = "disabled"; + }; + + gic: interrupt-controller at 01c81000 { + compatible = "arm,cortex-a7-gic"; + reg = <0x01c81000 0x1000>, <0x01c82000 0x100>; + interrupt-controller; + #interrupt-cells = <3>; + }; + }; +}; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard @ 2013-07-26 10:37 ` Thomas Petazzoni 2013-07-26 12:48 ` Maxime Ripard 2013-07-29 14:11 ` Mark Rutland 2013-07-30 8:59 ` Marc Zyngier 2 siblings, 1 reply; 25+ messages in thread From: Thomas Petazzoni @ 2013-07-26 10:37 UTC (permalink / raw) To: linux-arm-kernel Dear Maxime Ripard, On Wed, 24 Jul 2013 00:25:07 +0200, Maxime Ripard wrote: > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index 641b3c9..1482533 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -210,7 +210,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ > sun4i-a10-mini-xplus.dtb \ > sun4i-a10-hackberry.dtb \ > sun5i-a10s-olinuxino-micro.dtb \ > - sun5i-a13-olinuxino.dtb > + sun5i-a13-olinuxino.dtb \ > + sun6i-a31-colombus.dtb Wrong patch for this chunk. The colombus .dts is added in PATCH 06/10. > + soc at 01c20000 { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + reg = <0x01c20000 0x300000>; > + ranges; Just curious, what are these reg and ranges properties for? Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-26 10:37 ` Thomas Petazzoni @ 2013-07-26 12:48 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-26 12:48 UTC (permalink / raw) To: linux-arm-kernel Hi Thomas, On Fri, Jul 26, 2013 at 12:37:47PM +0200, Thomas Petazzoni wrote: > Dear Maxime Ripard, > > On Wed, 24 Jul 2013 00:25:07 +0200, Maxime Ripard wrote: > > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > > index 641b3c9..1482533 100644 > > --- a/arch/arm/boot/dts/Makefile > > +++ b/arch/arm/boot/dts/Makefile > > @@ -210,7 +210,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ > > sun4i-a10-mini-xplus.dtb \ > > sun4i-a10-hackberry.dtb \ > > sun5i-a10s-olinuxino-micro.dtb \ > > - sun5i-a13-olinuxino.dtb > > + sun5i-a13-olinuxino.dtb \ > > + sun6i-a31-colombus.dtb > > Wrong patch for this chunk. The colombus .dts is added in PATCH 06/10. Indeed, it was already pointed out by Emilio. > > + soc at 01c20000 { > > + compatible = "simple-bus"; > > + #address-cells = <1>; > > + #size-cells = <1>; > > + reg = <0x01c20000 0x300000>; > > + ranges; > > Just curious, what are these reg and ranges properties for? The fdt parsing code seem to be needing a ranges property, since it prints a warning if it's not set. For the reg one, honestly, I don't have a strong argument on this. The platforms I'm used to did it that way, so did I. The documentation of simple-bus doesn't seem to mention it, so maybe it's not needed at all. I find it pretty convenient though to have the size and range where the different IPs are located in. -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130726/b80465c2/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard 2013-07-26 10:37 ` Thomas Petazzoni @ 2013-07-29 14:11 ` Mark Rutland 2013-07-30 8:59 ` Marc Zyngier 2 siblings, 0 replies; 25+ messages in thread From: Mark Rutland @ 2013-07-29 14:11 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jul 23, 2013 at 11:25:07PM +0100, Maxime Ripard wrote: > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > --- > arch/arm/boot/dts/Makefile | 3 +- > arch/arm/boot/dts/sun6i-a31.dtsi | 155 +++++++++++++++++++++++++++++++++++++++ > 2 files changed, 157 insertions(+), 1 deletion(-) > create mode 100644 arch/arm/boot/dts/sun6i-a31.dtsi [...] > + soc at 01c20000 { > + compatible = "simple-bus"; > + #address-cells = <1>; > + #size-cells = <1>; > + reg = <0x01c20000 0x300000>; That's unnecessary, nothing should be using this for a simple-bus. > + ranges; > + > + timer at 01c20c00 { > + compatible = "allwinner,sun4i-timer"; > + reg = <0x01c20c00 0xa0>; > + interrupts = < > + 0 18 1 > + 0 19 1 > + 0 20 1 > + 0 21 1 > + 0 22 1 > + >; A cosmetic issue, but this would be nicer with each tuple bracketed: interrupts = <0 18 1>, <0 19 1>, <0 20 1>, <0 21 1>, <0 22 1>; > + clocks = <&osc>; > + }; Thanks, Mark. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard 2013-07-26 10:37 ` Thomas Petazzoni 2013-07-29 14:11 ` Mark Rutland @ 2013-07-30 8:59 ` Marc Zyngier 2013-07-30 13:18 ` Maxime Ripard 2 siblings, 1 reply; 25+ messages in thread From: Marc Zyngier @ 2013-07-30 8:59 UTC (permalink / raw) To: linux-arm-kernel Hi Maxime, On 23/07/13 23:25, Maxime Ripard wrote: > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > --- > arch/arm/boot/dts/Makefile | 3 +- > arch/arm/boot/dts/sun6i-a31.dtsi | 155 +++++++++++++++++++++++++++++++++++++++ > 2 files changed, 157 insertions(+), 1 deletion(-) > create mode 100644 arch/arm/boot/dts/sun6i-a31.dtsi > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index 641b3c9..1482533 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -210,7 +210,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ > sun4i-a10-mini-xplus.dtb \ > sun4i-a10-hackberry.dtb \ > sun5i-a10s-olinuxino-micro.dtb \ > - sun5i-a13-olinuxino.dtb > + sun5i-a13-olinuxino.dtb \ > + sun6i-a31-colombus.dtb > dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ > tegra20-iris-512.dtb \ > tegra20-medcom-wide.dtb \ > diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi > new file mode 100644 > index 0000000..c6c19a9 > --- /dev/null > +++ b/arch/arm/boot/dts/sun6i-a31.dtsi > @@ -0,0 +1,155 @@ > +/* > + * Copyright 2013 Maxime Ripard > + * > + * Maxime Ripard <maxime.ripard@free-electrons.com> > + * > + * The code contained herein is licensed under the GNU General Public > + * License. You may obtain a copy of the GNU General Public License > + * Version 2 or later at the following locations: > + * > + * http://www.opensource.org/licenses/gpl-license.html > + * http://www.gnu.org/copyleft/gpl.html > + */ > + > +/include/ "skeleton.dtsi" > + [...] > + gic: interrupt-controller at 01c81000 { > + compatible = "arm,cortex-a7-gic"; > + reg = <0x01c81000 0x1000>, <0x01c82000 0x100>; Th Cortex A7 TRM indicates that its GIC has the virtualization extensions. You should reflect this in the binding (wider GICC range, GICH and GICV ranges, maintenance interrupt). See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464d/BGBJFJJA.html for details. Thanks, M. -- Jazz is not dead. It just smells funny... ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI 2013-07-30 8:59 ` Marc Zyngier @ 2013-07-30 13:18 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-30 13:18 UTC (permalink / raw) To: linux-arm-kernel Hi Marc, On Tue, Jul 30, 2013 at 09:59:02AM +0100, Marc Zyngier wrote: > Hi Maxime, > > On 23/07/13 23:25, Maxime Ripard wrote: > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > > --- > > arch/arm/boot/dts/Makefile | 3 +- > > arch/arm/boot/dts/sun6i-a31.dtsi | 155 +++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 157 insertions(+), 1 deletion(-) > > create mode 100644 arch/arm/boot/dts/sun6i-a31.dtsi > > > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > > index 641b3c9..1482533 100644 > > --- a/arch/arm/boot/dts/Makefile > > +++ b/arch/arm/boot/dts/Makefile > > @@ -210,7 +210,8 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ > > sun4i-a10-mini-xplus.dtb \ > > sun4i-a10-hackberry.dtb \ > > sun5i-a10s-olinuxino-micro.dtb \ > > - sun5i-a13-olinuxino.dtb > > + sun5i-a13-olinuxino.dtb \ > > + sun6i-a31-colombus.dtb > > dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ > > tegra20-iris-512.dtb \ > > tegra20-medcom-wide.dtb \ > > diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi > > new file mode 100644 > > index 0000000..c6c19a9 > > --- /dev/null > > +++ b/arch/arm/boot/dts/sun6i-a31.dtsi > > @@ -0,0 +1,155 @@ > > +/* > > + * Copyright 2013 Maxime Ripard > > + * > > + * Maxime Ripard <maxime.ripard@free-electrons.com> > > + * > > + * The code contained herein is licensed under the GNU General Public > > + * License. You may obtain a copy of the GNU General Public License > > + * Version 2 or later at the following locations: > > + * > > + * http://www.opensource.org/licenses/gpl-license.html > > + * http://www.gnu.org/copyleft/gpl.html > > + */ > > + > > +/include/ "skeleton.dtsi" > > + > > [...] > > > + gic: interrupt-controller at 01c81000 { > > + compatible = "arm,cortex-a7-gic"; > > + reg = <0x01c81000 0x1000>, <0x01c82000 0x100>; > > Th Cortex A7 TRM indicates that its GIC has the virtualization > extensions. You should reflect this in the binding (wider GICC range, > GICH and GICV ranges, maintenance interrupt). > > See > http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464d/BGBJFJJA.html > for details. Thanks! I'll add those to the v2. Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130730/9870f9ef/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 06/10] ARM: sun6i: Add WITS Colombus A31 evaluation kit support 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (4 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set Maxime Ripard ` (3 subsequent siblings) 9 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel This platform from WITS is the evaluation board for the Allwinner A31. It features a quad-Cortex A7, 2048MB of RAM, NAND, USB, MMC, several UART, HDMI, a 2048 x 1536 10" screen, powered by a PowerVR, etc. Of course, most of these peripherals aren't supported yet, but support for those will come eventually. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun6i-a31-colombus.dts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 arch/arm/boot/dts/sun6i-a31-colombus.dts diff --git a/arch/arm/boot/dts/sun6i-a31-colombus.dts b/arch/arm/boot/dts/sun6i-a31-colombus.dts new file mode 100644 index 0000000..0128754 --- /dev/null +++ b/arch/arm/boot/dts/sun6i-a31-colombus.dts @@ -0,0 +1,30 @@ +/* + * Copyright 2013 Maxime Ripard + * + * Maxime Ripard <maxime.ripard@free-electrons.com> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ "sun6i-a31.dtsi" + +/ { + model = "WITS A31 Colombus Evaluation Board"; + compatible = "wits,colombus", "allwinner,sun6i-a31"; + + chosen { + bootargs = "earlyprintk console=ttyS0,115200"; + }; + + soc at 01c20000 { + uart0: serial at 01c28000 { + status = "okay"; + }; + }; +}; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (5 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 06/10] ARM: sun6i: Add WITS Colombus A31 evaluation kit support Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-29 16:20 ` Linus Walleij 2013-07-23 22:25 ` [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI Maxime Ripard ` (2 subsequent siblings) 9 siblings, 1 reply; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel The Allwinner A31 SoC uses the same IP than the one found in the A10/A13, with only different pins. Add the pins and the associated functions found in the A31. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- drivers/pinctrl/pinctrl-sunxi-pins.h | 820 +++++++++++++++++++++++++++++++++++ drivers/pinctrl/pinctrl-sunxi.c | 1 + 2 files changed, 821 insertions(+) diff --git a/drivers/pinctrl/pinctrl-sunxi-pins.h b/drivers/pinctrl/pinctrl-sunxi-pins.h index 2eeae0c..5b783cb 100644 --- a/drivers/pinctrl/pinctrl-sunxi-pins.h +++ b/drivers/pinctrl/pinctrl-sunxi-pins.h @@ -2005,6 +2005,821 @@ static const struct sunxi_desc_pin sun5i_a13_pins[] = { SUNXI_FUNCTION_IRQ(0x6, 12)), /* EINT12 */ }; +static const struct sunxi_desc_pin sun6i_a31_pins[] = { + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD0 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D0 */ + SUNXI_FUNCTION(0x4, "uart1")), /* DTR */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD1 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D1 */ + SUNXI_FUNCTION(0x4, "uart1")), /* DSR */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD2 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D2 */ + SUNXI_FUNCTION(0x4, "uart1")), /* DCD */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD3 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D3 */ + SUNXI_FUNCTION(0x4, "uart1")), /* RING */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD4 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D4 */ + SUNXI_FUNCTION(0x4, "uart1")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD5 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D5 */ + SUNXI_FUNCTION(0x4, "uart1")), /* RX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD6 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D6 */ + SUNXI_FUNCTION(0x4, "uart1")), /* RTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXD7 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D7 */ + SUNXI_FUNCTION(0x4, "uart1")), /* CTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXCLK */ + SUNXI_FUNCTION(0x3, "lcd1")), /* D8 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXEN */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D9 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* CMD */ + SUNXI_FUNCTION(0x5, "mmc2")), /* CMD */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* GTXCLK */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D10 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* CLK */ + SUNXI_FUNCTION(0x5, "mmc2")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD0 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D11 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* D0 */ + SUNXI_FUNCTION(0x5, "mmc2")), /* D0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD1 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D12 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* D1 */ + SUNXI_FUNCTION(0x5, "mmc2")), /* D1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD2 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D13 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* D2 */ + SUNXI_FUNCTION(0x5, "mmc2")), /* D2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD3 */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D14 */ + SUNXI_FUNCTION(0x4, "mmc3"), /* D3 */ + SUNXI_FUNCTION(0x5, "mmc2")), /* D3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD4 */ + SUNXI_FUNCTION(0x3, "lcd1")), /* D15 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD5 */ + SUNXI_FUNCTION(0x3, "lcd1")), /* D16 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA17, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD6 */ + SUNXI_FUNCTION(0x3, "lcd1")), /* D17 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA18, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXD7 */ + SUNXI_FUNCTION(0x3, "lcd1")), /* D18 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA19, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXDV */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D19 */ + SUNXI_FUNCTION(0x4, "pwm3")), /* Positive */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA20, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXCLK */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D20 */ + SUNXI_FUNCTION(0x4, "pwm3")), /* Negative */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA21, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* TXERR */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D21 */ + SUNXI_FUNCTION(0x4, "spi3")), /* CS0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA22, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* RXERR */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D22 */ + SUNXI_FUNCTION(0x4, "spi3")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA23, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* COL */ + SUNXI_FUNCTION(0x3, "lcd1"), /* D23 */ + SUNXI_FUNCTION(0x4, "spi3")), /* MOSI */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA24, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* CRS */ + SUNXI_FUNCTION(0x3, "lcd1"), /* CLK */ + SUNXI_FUNCTION(0x4, "spi3")), /* MISO */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA25, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* CLKIN */ + SUNXI_FUNCTION(0x3, "lcd1"), /* DE */ + SUNXI_FUNCTION(0x4, "spi3")), /* CS1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA26, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* MDC */ + SUNXI_FUNCTION(0x3, "lcd1")), /* HSYNC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PA27, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "gmac"), /* MDIO */ + SUNXI_FUNCTION(0x3, "lcd1")), /* VSYNC */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0"), /* MCLK */ + SUNXI_FUNCTION(0x3, "uart3"), /* CTS */ + SUNXI_FUNCTION(0x4, "csi")), /* MCLK1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0")), /* BCLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0")), /* LRCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0")), /* DO0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0"), /* DO1 */ + SUNXI_FUNCTION(0x3, "uart3")), /* RTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0"), /* DO2 */ + SUNXI_FUNCTION(0x3, "uart3"), /* TX */ + SUNXI_FUNCTION(0x4, "i2c3")), /* SCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2s0"), /* DO3 */ + SUNXI_FUNCTION(0x3, "uart3"), /* RX */ + SUNXI_FUNCTION(0x4, "i2c3")), /* SDA */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PB7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x3, "i2s0")), /* DI */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* WE */ + SUNXI_FUNCTION(0x3, "spi0")), /* MOSI */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* ALE */ + SUNXI_FUNCTION(0x3, "spi0")), /* MISO */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* CLE */ + SUNXI_FUNCTION(0x3, "spi0")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0")), /* CE1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0")), /* CE0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0")), /* RE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* RB0 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* CMD */ + SUNXI_FUNCTION(0x4, "mmc3")), /* CMD */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* RB1 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* CLK */ + SUNXI_FUNCTION(0x4, "mmc3")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ0 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D0 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ1 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D1 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ2 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D2 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ3 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D3 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ4 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D4 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D4 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ5 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D5 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D5 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ6 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D6 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D6 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */ + SUNXI_FUNCTION(0x3, "mmc2"), /* D7 */ + SUNXI_FUNCTION(0x4, "mmc3")), /* D7 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ8 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC17, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ9 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC18, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ10 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC19, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ11 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC20, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ12 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ4 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC21, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ13 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ5 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC22, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ14 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ6 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC23, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQ15 */ + SUNXI_FUNCTION(0x3, "nand1")), /* DQ7 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC24, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0"), /* DQS */ + SUNXI_FUNCTION(0x3, "mmc2"), /* RST */ + SUNXI_FUNCTION(0x4, "mmc3")), /* RST */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC25, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0")), /* CE2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC26, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand0")), /* CE3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PC27, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x3, "spi0")), /* CS0 */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D0 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VP0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D1 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VN0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VP1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VN1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VP2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VN2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VPC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VNC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D8 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VP3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D9 */ + SUNXI_FUNCTION(0x3, "lvds0")), /* VN3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VP0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VN0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VP1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VN1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VP2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VN2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D16 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VPC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD17, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D17 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VNC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD18, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VP3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD19, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */ + SUNXI_FUNCTION(0x3, "lvds1")), /* VN3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD20, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* D20 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD21, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* D21 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD22, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* D22 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD23, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* D23 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD24, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD25, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* DE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD26, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* HSYNC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PD27, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "lcd0")), /* VSYNC */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* PCLK */ + SUNXI_FUNCTION(0x3, "ts")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* MCLK */ + SUNXI_FUNCTION(0x3, "ts")), /* ERR */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* HSYNC */ + SUNXI_FUNCTION(0x3, "ts")), /* SYNC */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* VSYNC */ + SUNXI_FUNCTION(0x3, "ts")), /* DVLD */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D0 */ + SUNXI_FUNCTION(0x3, "uart5")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D1 */ + SUNXI_FUNCTION(0x3, "uart5")), /* RX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D2 */ + SUNXI_FUNCTION(0x3, "uart5")), /* RTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D3 */ + SUNXI_FUNCTION(0x3, "uart5")), /* CTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D4 */ + SUNXI_FUNCTION(0x3, "ts")), /* D0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D5 */ + SUNXI_FUNCTION(0x3, "ts")), /* D1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D6 */ + SUNXI_FUNCTION(0x3, "ts")), /* D2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D7 */ + SUNXI_FUNCTION(0x3, "ts")), /* D3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D8 */ + SUNXI_FUNCTION(0x3, "ts")), /* D4 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D9 */ + SUNXI_FUNCTION(0x3, "ts")), /* D5 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D10 */ + SUNXI_FUNCTION(0x3, "ts")), /* D6 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi"), /* D11 */ + SUNXI_FUNCTION(0x3, "ts")), /* D7 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PE16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "csi")), /* MIPI CSI MCLK */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */ + SUNXI_FUNCTION(0x4, "jtag")), /* MS1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */ + SUNXI_FUNCTION(0x4, "jtag")), /* DI1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */ + SUNXI_FUNCTION(0x4, "uart0")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */ + SUNXI_FUNCTION(0x4, "jtag")), /* DO1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */ + SUNXI_FUNCTION(0x4, "uart0")), /* RX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PF5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */ + SUNXI_FUNCTION(0x4, "jtag")), /* CK1 */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* CLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* CMD */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* D0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* D1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* D2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "mmc1")), /* D3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart2")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart2")), /* RX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart2")), /* RTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart2")), /* CTS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c3"), /* SCK */ + SUNXI_FUNCTION(0x3, "usb")), /* DP3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c3"), /* SDA */ + SUNXI_FUNCTION(0x3, "usb")), /* DM3 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi1"), /* CS1 */ + SUNXI_FUNCTION(0x3, "i2s1")), /* MCLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi1"), /* CS0 */ + SUNXI_FUNCTION(0x3, "i2s1")), /* BCLK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi1"), /* CLK */ + SUNXI_FUNCTION(0x3, "i2s1")), /* LRCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi1"), /* MOSI */ + SUNXI_FUNCTION(0x3, "i2s1")), /* DIN */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi1"), /* MISO */ + SUNXI_FUNCTION(0x3, "i2s1")), /* DOUT */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG17, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart4")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PG18, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart4")), /* RX */ + /* Hole */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH0, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* WE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH1, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* ALE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH2, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* CLE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH3, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* CE1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH4, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* CE0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH5, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* RE */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH6, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* RB0 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH7, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* RB1 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH8, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* DQS */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH9, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi2"), /* CS0 */ + SUNXI_FUNCTION(0x3, "jtag"), /* MS0 */ + SUNXI_FUNCTION(0x4, "pwm1")), /* Positive */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH10, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi2"), /* CLK */ + SUNXI_FUNCTION(0x3, "jtag"), /* CK0 */ + SUNXI_FUNCTION(0x4, "pwm1")), /* Negative */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH11, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi2"), /* MOSI */ + SUNXI_FUNCTION(0x3, "jtag"), /* DO0 */ + SUNXI_FUNCTION(0x4, "pwm2")), /* Positive */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH12, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "spi2"), /* MISO */ + SUNXI_FUNCTION(0x3, "jtag"), /* DI0 */ + SUNXI_FUNCTION(0x4, "pwm2")), /* Negative */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH13, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "pwm0")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH14, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c0")), /* SCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH15, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c0")), /* SDA */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH16, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c1")), /* SCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH17, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c1")), /* SDA */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH18, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c2")), /* SCK */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH19, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "i2c2")), /* SDA */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH20, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart0")), /* TX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH21, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "uart0")), /* RX */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH22, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH23, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH24, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH25, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH26, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH27, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH28, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out")), + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH29, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* CE2 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN_PH30, + SUNXI_FUNCTION(0x0, "gpio_in"), + SUNXI_FUNCTION(0x1, "gpio_out"), + SUNXI_FUNCTION(0x2, "nand1")), /* CE3 */ +}; + static const struct sunxi_pinctrl_desc sun4i_a10_pinctrl_data = { .pins = sun4i_a10_pins, .npins = ARRAY_SIZE(sun4i_a10_pins), @@ -2020,4 +2835,9 @@ static const struct sunxi_pinctrl_desc sun5i_a13_pinctrl_data = { .npins = ARRAY_SIZE(sun5i_a13_pins), }; +static const struct sunxi_pinctrl_desc sun6i_a31_pinctrl_data = { + .pins = sun6i_a31_pins, + .npins = ARRAY_SIZE(sun6i_a31_pins), +}; + #endif /* __PINCTRL_SUNXI_PINS_H */ diff --git a/drivers/pinctrl/pinctrl-sunxi.c b/drivers/pinctrl/pinctrl-sunxi.c index c47fd1e..5985e60 100644 --- a/drivers/pinctrl/pinctrl-sunxi.c +++ b/drivers/pinctrl/pinctrl-sunxi.c @@ -631,6 +631,7 @@ static struct of_device_id sunxi_pinctrl_match[] = { { .compatible = "allwinner,sun4i-a10-pinctrl", .data = (void *)&sun4i_a10_pinctrl_data }, { .compatible = "allwinner,sun5i-a10s-pinctrl", .data = (void *)&sun5i_a10s_pinctrl_data }, { .compatible = "allwinner,sun5i-a13-pinctrl", .data = (void *)&sun5i_a13_pinctrl_data }, + { .compatible = "allwinner,sun6i-a31-pinctrl", .data = (void *)&sun6i_a31_pinctrl_data }, {} }; MODULE_DEVICE_TABLE(of, sunxi_pinctrl_match); -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set 2013-07-23 22:25 ` [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set Maxime Ripard @ 2013-07-29 16:20 ` Linus Walleij 2013-07-30 9:00 ` Maxime Ripard 0 siblings, 1 reply; 25+ messages in thread From: Linus Walleij @ 2013-07-29 16:20 UTC (permalink / raw) To: linux-arm-kernel On Wed, Jul 24, 2013 at 12:25 AM, Maxime Ripard <maxime.ripard@free-electrons.com> wrote: > The Allwinner A31 SoC uses the same IP than the one found in the > A10/A13, with only different pins. Add the pins and the associated > functions found in the A31. > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Will you carry this through ARM SoC or do you want me to merge this into the pinctrl tree? It seems pretty independent. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set 2013-07-29 16:20 ` Linus Walleij @ 2013-07-30 9:00 ` Maxime Ripard 0 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-30 9:00 UTC (permalink / raw) To: linux-arm-kernel Hi Linus, On Mon, Jul 29, 2013 at 06:20:13PM +0200, Linus Walleij wrote: > On Wed, Jul 24, 2013 at 12:25 AM, Maxime Ripard > <maxime.ripard@free-electrons.com> wrote: > > > The Allwinner A31 SoC uses the same IP than the one found in the > > A10/A13, with only different pins. Add the pins and the associated > > functions found in the A31. > > > > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> > > Acked-by: Linus Walleij <linus.walleij@linaro.org> > > Will you carry this through ARM SoC or do you want me to merge > this into the pinctrl tree? It seems pretty independent. I'd prefer if you could merge it through the pinctrl tree. Thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130730/045c63a8/attachment.sig> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (6 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-26 10:39 ` Thomas Petazzoni 2013-07-23 22:25 ` [PATCH 09/10] ARM: sun6i: Add UART0 muxing options Maxime Ripard 2013-07-23 22:25 ` [PATCH 10/10] ARM: sun6i: colombus: Add uart0 muxing Maxime Ripard 9 siblings, 1 reply; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel The A31 has a different set of pins than the one found on the A10 and A13, so we will need a different compatible string, even though the IP is the same. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun6i-a31.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi index c6c19a9..0443628 100644 --- a/arch/arm/boot/dts/sun6i-a31.dtsi +++ b/arch/arm/boot/dts/sun6i-a31.dtsi @@ -67,6 +67,18 @@ reg = <0x01c20000 0x300000>; ranges; + pio: pinctrl at 01c20800 { + compatible = "allwinner,sun6i-a31-pinctrl"; + reg = <0x01c20800 0x400>; + interrupts = <0 11 1>, <0 15 1>, <0 16 1>, <0 17 1>; + clocks = <&osc>; + gpio-controller; + interrupt-controller; + #address-cells = <1>; + #size-cells = <0>; + #gpio-cells = <3>; + }; + timer at 01c20c00 { compatible = "allwinner,sun4i-timer"; reg = <0x01c20c00 0xa0>; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI 2013-07-23 22:25 ` [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI Maxime Ripard @ 2013-07-26 10:39 ` Thomas Petazzoni 0 siblings, 0 replies; 25+ messages in thread From: Thomas Petazzoni @ 2013-07-26 10:39 UTC (permalink / raw) To: linux-arm-kernel Dear Maxime Ripard, On Wed, 24 Jul 2013 00:25:10 +0200, Maxime Ripard wrote: > The A31 has a different set of pins than the one found on the A10 and > A13, so we will need a different compatible string, even though the IP > is the same. Why "we will" ? Isn't this patch presently using a different compatible string? Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 09/10] ARM: sun6i: Add UART0 muxing options 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (7 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 10/10] ARM: sun6i: colombus: Add uart0 muxing Maxime Ripard 9 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun6i-a31.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi index 0443628..40a7ea6 100644 --- a/arch/arm/boot/dts/sun6i-a31.dtsi +++ b/arch/arm/boot/dts/sun6i-a31.dtsi @@ -77,6 +77,13 @@ #address-cells = <1>; #size-cells = <0>; #gpio-cells = <3>; + + uart0_pins_a: uart0 at 0 { + allwinner,pins = "PH20", "PH21"; + allwinner,function = "uart0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; }; timer at 01c20c00 { -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 10/10] ARM: sun6i: colombus: Add uart0 muxing 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard ` (8 preceding siblings ...) 2013-07-23 22:25 ` [PATCH 09/10] ARM: sun6i: Add UART0 muxing options Maxime Ripard @ 2013-07-23 22:25 ` Maxime Ripard 9 siblings, 0 replies; 25+ messages in thread From: Maxime Ripard @ 2013-07-23 22:25 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> --- arch/arm/boot/dts/sun6i-a31-colombus.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/boot/dts/sun6i-a31-colombus.dts b/arch/arm/boot/dts/sun6i-a31-colombus.dts index 0128754..1f2c0f0 100644 --- a/arch/arm/boot/dts/sun6i-a31-colombus.dts +++ b/arch/arm/boot/dts/sun6i-a31-colombus.dts @@ -24,6 +24,8 @@ soc at 01c20000 { uart0: serial at 01c28000 { + pinctrl-names = "default"; + pinctrl-0 = <&uart0_pins_a>; status = "okay"; }; }; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 25+ messages in thread
end of thread, other threads:[~2013-07-30 13:18 UTC | newest] Thread overview: 25+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-07-23 22:25 [PATCH 00/10] ARM: sunxi: Add support for the Allwinner A31 SoC Maxime Ripard 2013-07-23 22:25 ` [PATCH 01/10] irqchip: GIC: Add Cortex-A7 compatible string Maxime Ripard 2013-07-23 22:25 ` [PATCH 02/10] clk: sunxi: fix initialization of basic clocks Maxime Ripard 2013-07-23 22:25 ` [PATCH 03/10] ARM: sunxi: Add the Allwinner A31 compatible to the machine definition Maxime Ripard 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-26 12:22 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 04/10] ARM: sun6i: Add restart code for the A31 Maxime Ripard 2013-07-26 10:35 ` Thomas Petazzoni 2013-07-26 12:23 ` Maxime Ripard 2013-07-29 14:04 ` Mark Rutland 2013-07-30 12:44 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 05/10] ARM: sunxi: Add Allwinner A31 DTSI Maxime Ripard 2013-07-26 10:37 ` Thomas Petazzoni 2013-07-26 12:48 ` Maxime Ripard 2013-07-29 14:11 ` Mark Rutland 2013-07-30 8:59 ` Marc Zyngier 2013-07-30 13:18 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 06/10] ARM: sun6i: Add WITS Colombus A31 evaluation kit support Maxime Ripard 2013-07-23 22:25 ` [PATCH 07/10] pinctrl: sunxi: Add Allwinner A31 pins set Maxime Ripard 2013-07-29 16:20 ` Linus Walleij 2013-07-30 9:00 ` Maxime Ripard 2013-07-23 22:25 ` [PATCH 08/10] ARM: sunxi: dt: Add PIO controller to A31 DTSI Maxime Ripard 2013-07-26 10:39 ` Thomas Petazzoni 2013-07-23 22:25 ` [PATCH 09/10] ARM: sun6i: Add UART0 muxing options Maxime Ripard 2013-07-23 22:25 ` [PATCH 10/10] ARM: sun6i: colombus: Add uart0 muxing Maxime Ripard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).