pinctrl: berlin: add the core pinctrl driver for Marvell Berlin SoCs
authorAntoine Tenart <antoine.tenart@free-electrons.com>
Mon, 19 May 2014 17:36:29 +0000 (19:36 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 22 May 2014 22:05:00 +0000 (00:05 +0200)
commit3de68d331c24e8136da147801c2d090c3038eb32
treec12a4211b62a6db0dbd8a87b602451317fd40762
parent3ff95885ed7c974ecf308c1d4d27baaa218e32dc
pinctrl: berlin: add the core pinctrl driver for Marvell Berlin SoCs

The Marvell Berlin boards have a group based pinmuxing mechanism. This
adds the core driver support. We actually do not need any information
about the pins here and only have the definition of the groups.

Let's take the example of the uart0 pinmuxing on the BG2Q. Balls BK4 and
BH6 are muxed to respectively UART0 RX and TX if the group GSM12 is set
to mode 0:

Group Modes Offset Base Offset LSB Bit Width
GSM12 3 sm_base 0x40 0x10 0x2

Ball Group Mode 0 Mode 1 Mode 2
BK4 GSM12 UART0_RX IrDA0_RX GPIO9
BH6 GSM12 UART0_TX IrDA0_TX GPIO10

So in order to configure BK4 -> UART0_TX and BH6 -> UART0_RX, we need
to set (sm_base + 0x40 + 0x10) &= ff3fffff.

As pin control registers are part of either chip control or system
control registers, that deal with a bunch of other functions we rely
on a regmap instead of exclusively remapping any resources.

Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/Kconfig
drivers/pinctrl/Makefile
drivers/pinctrl/berlin/Kconfig [new file with mode: 0644]
drivers/pinctrl/berlin/Makefile [new file with mode: 0644]
drivers/pinctrl/berlin/berlin.c [new file with mode: 0644]
drivers/pinctrl/berlin/berlin.h [new file with mode: 0644]