mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-07 03:18:31 +00:00
Renesas ARM based SoC GPIO R-Car updates for v3.11
DT support to GPIO R-Car driver by Laurent Pinchart. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRuWcSAAoJENfPZGlqN0++zVAP/i+sSeyv8MYVov8AVhZcPmIf B+u+EPMn//e7ILsRquMw8TIf4NnJDDbafs6oCSSL6/0+dAHQX/6BbnlyX2O/7YFa vd24gn/NzPNVz6+N8q5EqUT1OKIQMdusU0oK/w2Bg2D/U1OsfjCalcbISjoIJqfw jqCRliC7n8Qt1OhMCVvUY8wmxcZYbwTsh3zRpVac7RjaWEt3+Qf8Ms1fUbV8A2ZG ZI+JahxbjuAsQe7Ygp/yZYhdVN7PRatszESEXbx0236hLYUSMqT9TPYUIBOlCmaN nP3qwpnEJJPsnFd3knnyle5rBrDUMwqBxUNEkBCRcDfvmM3FMgTnnqWGq5yBFj6W Y4ZxADLcuntpFbiHDIy0a0yFAzNnvFJoYniDx5mvTOcmC1kK/dDHA3fNcni60fiK KCuvCdwsB+1ZNqsQYMVWingj2DGm0KBZHpy9doPXRCS6H9aclk6DfCFAFpIs+9It NMt8Bqz5nqAWYFFm/TF0UomFAvLCRaRnzeSGWEcdffkHC9/3qatdrbnLhvafI1fo SMpAqDGwr1oC15lvbts1jzSs92uSYdh8NXvdsbsjCk3dOdLiOvdlcfo14bsgXCBa Ia3Uq5sCDXMT9kVV/ILTjellJecMAhwCDv1bZF93aOCfNZo6Rb1frYHXf8+7+s7A +lGNHdFtclCtAB6Nf+Xq =NgKm -----END PGP SIGNATURE----- Merge tag 'renesas-gpio-rcar-for-v3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/drivers From Simon Horman: Renesas ARM based SoC GPIO R-Car updates for v3.11 DT support to GPIO R-Car driver by Laurent Pinchart. * tag 'renesas-gpio-rcar-for-v3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: (131 commits) gpio-rcar: Add DT support
This commit is contained in:
commit
38d77ff90a
33 changed files with 10412 additions and 2737 deletions
52
Documentation/devicetree/bindings/gpio/renesas,gpio-rcar.txt
Normal file
52
Documentation/devicetree/bindings/gpio/renesas,gpio-rcar.txt
Normal file
|
@ -0,0 +1,52 @@
|
|||
* Renesas R-Car GPIO Controller
|
||||
|
||||
Required Properties:
|
||||
|
||||
- compatible: should be one of the following.
|
||||
- "renesas,gpio-r8a7778": for R8A7778 (R-Mobile M1) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a7779": for R8A7779 (R-Car H1) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a7790": for R8A7790 (R-Car H2) compatible GPIO controller.
|
||||
- "renesas,gpio-rcar": for generic R-Car GPIO controller.
|
||||
|
||||
- reg: Base address and length of each memory resource used by the GPIO
|
||||
controller hardware module.
|
||||
|
||||
- interrupt-parent: phandle of the parent interrupt controller.
|
||||
- interrupts: Interrupt specifier for the controllers interrupt.
|
||||
|
||||
- gpio-controller: Marks the device node as a gpio controller.
|
||||
- #gpio-cells: Should be 2. The first cell is the GPIO number and the second
|
||||
cell is used to specify optional parameters as bit flags. Only the GPIO
|
||||
active low flag (bit 0) is currently supported.
|
||||
- gpio-ranges: Range of pins managed by the GPIO controller as a 4-cells
|
||||
tuple using the following syntax.
|
||||
|
||||
<[phandle of the pin controller node]
|
||||
0
|
||||
[index of the first pin]
|
||||
[number of pins]>
|
||||
|
||||
Please refer to gpio.txt in this directory for details of the common GPIO
|
||||
bindings used by client devices.
|
||||
|
||||
Example: R8A7779 (R-Car H1) GPIO controller nodes
|
||||
|
||||
gpio0: gpio@ffc40000 {
|
||||
compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
|
||||
reg = <0xffc40000 0x2c>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 141 0x4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 0 32>;
|
||||
};
|
||||
...
|
||||
gpio6: gpio@ffc46000 {
|
||||
compatible = "renesas,gpio-r8a7779", "renesas,gpio-rcar";
|
||||
reg = <0xffc46000 0x2c>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupts = <0 147 0x4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
gpio-ranges = <&pfc 0 192 9>;
|
||||
};
|
|
@ -645,7 +645,7 @@ config ARCH_SHMOBILE
|
|||
select MULTI_IRQ_HANDLER
|
||||
select NEED_MACH_MEMORY_H
|
||||
select NO_IOPORT
|
||||
select PINCTRL if ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select PINCTRL
|
||||
select PM_GENERIC_DOMAINS if PM
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
|
|
|
@ -37,6 +37,7 @@ config ARCH_R8A7740
|
|||
|
||||
config ARCH_R8A7778
|
||||
bool "R-Car M1 (R8A77780)"
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select CPU_V7
|
||||
select SH_CLK_CPG
|
||||
select ARM_GIC
|
||||
|
|
|
@ -1026,10 +1026,8 @@ static void __init hdmi_init_pm_clock(void)
|
|||
|
||||
/* TouchScreen */
|
||||
#ifdef CONFIG_AP4EVB_QHD
|
||||
# define GPIO_TSC_IRQ GPIO_FN_IRQ28_123
|
||||
# define GPIO_TSC_PORT 123
|
||||
#else /* WVGA */
|
||||
# define GPIO_TSC_IRQ GPIO_FN_IRQ7_40
|
||||
# define GPIO_TSC_PORT 40
|
||||
#endif
|
||||
|
||||
|
@ -1037,22 +1035,12 @@ static void __init hdmi_init_pm_clock(void)
|
|||
#define IRQ7 evt2irq(0x02e0) /* IRQ7A */
|
||||
static int ts_get_pendown_state(void)
|
||||
{
|
||||
int val;
|
||||
|
||||
gpio_free(GPIO_TSC_IRQ);
|
||||
|
||||
gpio_request_one(GPIO_TSC_PORT, GPIOF_IN, NULL);
|
||||
|
||||
val = gpio_get_value(GPIO_TSC_PORT);
|
||||
|
||||
gpio_request(GPIO_TSC_IRQ, NULL);
|
||||
|
||||
return !val;
|
||||
return !gpio_get_value(GPIO_TSC_PORT);
|
||||
}
|
||||
|
||||
static int ts_init(void)
|
||||
{
|
||||
gpio_request(GPIO_TSC_IRQ, NULL);
|
||||
gpio_request_one(GPIO_TSC_PORT, GPIOF_IN, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1086,11 +1074,42 @@ static struct i2c_board_info i2c1_devices[] = {
|
|||
|
||||
|
||||
static const struct pinctrl_map ap4evb_pinctrl_map[] = {
|
||||
/* CEU */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
|
||||
"ceu_clk_0", "ceu"),
|
||||
/* FSIA (AK4643) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_sclk_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_data_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_data_out", "fsia"),
|
||||
/* FSIB (HDMI) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372",
|
||||
"fsib_mclk_in", "fsib"),
|
||||
/* HDMI */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372",
|
||||
"hdmi", "hdmi"),
|
||||
/* KEYSC */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc", "pfc-sh7372",
|
||||
"keysc_in04_0", "keysc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_keysc", "pfc-sh7372",
|
||||
"keysc_out5", "keysc"),
|
||||
#ifndef CONFIG_AP4EVB_QHD
|
||||
/* LCDC */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
|
||||
"lcd_data18", "lcd"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
|
||||
"lcd_sync", "lcd"),
|
||||
#endif
|
||||
/* MMCIF */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
|
||||
"mmc0_data8_0", "mmc0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
|
||||
"mmc0_ctrl_0", "mmc0"),
|
||||
/* SCIFA0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372",
|
||||
"scifa0_data", "scifa0"),
|
||||
/* SDHI0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
|
||||
"sdhi0_data4", "sdhi0"),
|
||||
|
@ -1105,6 +1124,26 @@ static const struct pinctrl_map ap4evb_pinctrl_map[] = {
|
|||
"sdhi1_data4", "sdhi1"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
|
||||
"sdhi1_ctrl", "sdhi1"),
|
||||
/* SMSC911X */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
|
||||
"bsc_cs5a", "bsc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
|
||||
"intc_irq6_0", "intc"),
|
||||
/* TSC2007 */
|
||||
#ifdef CONFIG_AP4EVB_QHD
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("1-0048", "pfc-sh7372",
|
||||
"intc_irq28_0", "intc"),
|
||||
#else /* WVGA */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("1-0048", "pfc-sh7372",
|
||||
"intc_irq7_0", "intc"),
|
||||
#endif
|
||||
/* USBHS1 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372",
|
||||
"usb1_vbus", "usb1"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372",
|
||||
"usb1_otg_id_0", "usb1"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("r8a66597_hcd.1", "pfc-sh7372",
|
||||
"usb1_otg_ctrl_0", "usb1"),
|
||||
};
|
||||
|
||||
#define GPIO_PORT9CR IOMEM(0xE6051009)
|
||||
|
@ -1137,36 +1176,16 @@ static void __init ap4evb_init(void)
|
|||
ARRAY_SIZE(ap4evb_pinctrl_map));
|
||||
sh7372_pinmux_init();
|
||||
|
||||
/* enable SCIFA0 */
|
||||
gpio_request(GPIO_FN_SCIFA0_TXD, NULL);
|
||||
gpio_request(GPIO_FN_SCIFA0_RXD, NULL);
|
||||
|
||||
/* enable SMSC911X */
|
||||
gpio_request(GPIO_FN_CS5A, NULL);
|
||||
gpio_request(GPIO_FN_IRQ6_39, NULL);
|
||||
|
||||
/* enable Debug switch (S6) */
|
||||
gpio_request_one(32, GPIOF_IN | GPIOF_EXPORT, NULL);
|
||||
gpio_request_one(33, GPIOF_IN | GPIOF_EXPORT, NULL);
|
||||
gpio_request_one(34, GPIOF_IN | GPIOF_EXPORT, NULL);
|
||||
gpio_request_one(35, GPIOF_IN | GPIOF_EXPORT, NULL);
|
||||
|
||||
/* USB enable */
|
||||
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
||||
gpio_request(GPIO_FN_IDIN_1_18, NULL);
|
||||
gpio_request(GPIO_FN_PWEN_1_115, NULL);
|
||||
gpio_request(GPIO_FN_OVCN_1_114, NULL);
|
||||
gpio_request(GPIO_FN_EXTLP_1, NULL);
|
||||
gpio_request(GPIO_FN_OVCN2_1, NULL);
|
||||
|
||||
/* setup USB phy */
|
||||
__raw_writew(0x8a0a, IOMEM(0xE6058130)); /* USBCR4 */
|
||||
|
||||
/* enable FSI2 port A (ak4643) */
|
||||
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||
gpio_request(GPIO_FN_FSIAISLD, NULL);
|
||||
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||
/* FSI2 port A (ak4643) */
|
||||
gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */
|
||||
|
||||
gpio_request(9, NULL);
|
||||
|
@ -1177,8 +1196,7 @@ static void __init ap4evb_init(void)
|
|||
/* card detect pin for MMC slot (CN7) */
|
||||
gpio_request_one(41, GPIOF_IN, NULL);
|
||||
|
||||
/* setup FSI2 port B (HDMI) */
|
||||
gpio_request(GPIO_FN_FSIBCK, NULL);
|
||||
/* FSI2 port B (HDMI) */
|
||||
__raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
|
||||
|
||||
/* set SPU2 clock to 119.6 MHz */
|
||||
|
@ -1208,18 +1226,6 @@ static void __init ap4evb_init(void)
|
|||
* IRQ28 for Touch Panel, set dip switches S3, S43 as OFF, ON.
|
||||
*/
|
||||
|
||||
/* enable KEYSC */
|
||||
gpio_request(GPIO_FN_KEYOUT0, NULL);
|
||||
gpio_request(GPIO_FN_KEYOUT1, NULL);
|
||||
gpio_request(GPIO_FN_KEYOUT2, NULL);
|
||||
gpio_request(GPIO_FN_KEYOUT3, NULL);
|
||||
gpio_request(GPIO_FN_KEYOUT4, NULL);
|
||||
gpio_request(GPIO_FN_KEYIN0_136, NULL);
|
||||
gpio_request(GPIO_FN_KEYIN1_135, NULL);
|
||||
gpio_request(GPIO_FN_KEYIN2_134, NULL);
|
||||
gpio_request(GPIO_FN_KEYIN3_133, NULL);
|
||||
gpio_request(GPIO_FN_KEYIN4, NULL);
|
||||
|
||||
/* enable TouchScreen */
|
||||
irq_set_irq_type(IRQ28, IRQ_TYPE_LEVEL_LOW);
|
||||
|
||||
|
@ -1241,28 +1247,6 @@ static void __init ap4evb_init(void)
|
|||
* For WVGA Panel (18-bit RGB, CONFIG_AP4EVB_WVGA=y) and
|
||||
* IRQ7 for Touch Panel, set dip switches S3, S43 to ON, OFF.
|
||||
*/
|
||||
|
||||
gpio_request(GPIO_FN_LCDD17, NULL);
|
||||
gpio_request(GPIO_FN_LCDD16, NULL);
|
||||
gpio_request(GPIO_FN_LCDD15, NULL);
|
||||
gpio_request(GPIO_FN_LCDD14, NULL);
|
||||
gpio_request(GPIO_FN_LCDD13, NULL);
|
||||
gpio_request(GPIO_FN_LCDD12, NULL);
|
||||
gpio_request(GPIO_FN_LCDD11, NULL);
|
||||
gpio_request(GPIO_FN_LCDD10, NULL);
|
||||
gpio_request(GPIO_FN_LCDD9, NULL);
|
||||
gpio_request(GPIO_FN_LCDD8, NULL);
|
||||
gpio_request(GPIO_FN_LCDD7, NULL);
|
||||
gpio_request(GPIO_FN_LCDD6, NULL);
|
||||
gpio_request(GPIO_FN_LCDD5, NULL);
|
||||
gpio_request(GPIO_FN_LCDD4, NULL);
|
||||
gpio_request(GPIO_FN_LCDD3, NULL);
|
||||
gpio_request(GPIO_FN_LCDD2, NULL);
|
||||
gpio_request(GPIO_FN_LCDD1, NULL);
|
||||
gpio_request(GPIO_FN_LCDD0, NULL);
|
||||
gpio_request(GPIO_FN_LCDDISP, NULL);
|
||||
gpio_request(GPIO_FN_LCDDCK, NULL);
|
||||
|
||||
gpio_request_one(189, GPIOF_OUT_INIT_HIGH, NULL); /* backlight */
|
||||
gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
|
||||
|
||||
|
@ -1288,8 +1272,6 @@ static void __init ap4evb_init(void)
|
|||
*/
|
||||
|
||||
/* MIPI-CSI stuff */
|
||||
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||
|
||||
clk = clk_get(NULL, "vck1_clk");
|
||||
if (!IS_ERR(clk)) {
|
||||
clk_set_rate(clk, clk_round_rate(clk, 13000000));
|
||||
|
@ -1299,10 +1281,6 @@ static void __init ap4evb_init(void)
|
|||
|
||||
sh7372_add_standard_devices();
|
||||
|
||||
/* HDMI */
|
||||
gpio_request(GPIO_FN_HDMI_HPD, NULL);
|
||||
gpio_request(GPIO_FN_HDMI_CEC, NULL);
|
||||
|
||||
/* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
|
||||
#define SRCR4 IOMEM(0xe61580bc)
|
||||
srcr4 = __raw_readl(SRCR4);
|
||||
|
|
|
@ -584,7 +584,7 @@ static struct regulator_init_data vcc_sdhi0_init_data = {
|
|||
static struct fixed_voltage_config vcc_sdhi0_info = {
|
||||
.supply_name = "SDHI0 Vcc",
|
||||
.microvolts = 3300000,
|
||||
.gpio = GPIO_PORT75,
|
||||
.gpio = 75,
|
||||
.enable_high = 1,
|
||||
.init_data = &vcc_sdhi0_init_data,
|
||||
};
|
||||
|
@ -615,7 +615,7 @@ static struct regulator_init_data vccq_sdhi0_init_data = {
|
|||
};
|
||||
|
||||
static struct gpio vccq_sdhi0_gpios[] = {
|
||||
{GPIO_PORT17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" },
|
||||
{17, GPIOF_OUT_INIT_LOW, "vccq-sdhi0" },
|
||||
};
|
||||
|
||||
static struct gpio_regulator_state vccq_sdhi0_states[] = {
|
||||
|
@ -626,7 +626,7 @@ static struct gpio_regulator_state vccq_sdhi0_states[] = {
|
|||
static struct gpio_regulator_config vccq_sdhi0_info = {
|
||||
.supply_name = "vqmmc",
|
||||
|
||||
.enable_gpio = GPIO_PORT74,
|
||||
.enable_gpio = 74,
|
||||
.enable_high = 1,
|
||||
.enabled_at_boot = 0,
|
||||
|
||||
|
@ -664,7 +664,7 @@ static struct regulator_init_data vcc_sdhi1_init_data = {
|
|||
static struct fixed_voltage_config vcc_sdhi1_info = {
|
||||
.supply_name = "SDHI1 Vcc",
|
||||
.microvolts = 3300000,
|
||||
.gpio = GPIO_PORT16,
|
||||
.gpio = 16,
|
||||
.enable_high = 1,
|
||||
.init_data = &vcc_sdhi1_init_data,
|
||||
};
|
||||
|
@ -693,7 +693,7 @@ static struct sh_mobile_sdhi_info sdhi0_info = {
|
|||
.tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
|
||||
MMC_CAP_POWER_OFF_CARD,
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
|
||||
.cd_gpio = GPIO_PORT167,
|
||||
.cd_gpio = 167,
|
||||
};
|
||||
|
||||
static struct resource sdhi0_resources[] = {
|
||||
|
@ -736,7 +736,7 @@ static struct sh_mobile_sdhi_info sdhi1_info = {
|
|||
MMC_CAP_POWER_OFF_CARD,
|
||||
.tmio_flags = TMIO_MMC_HAS_IDLE_WAIT | TMIO_MMC_USE_GPIO_CD,
|
||||
/* Port72 cannot generate IRQs, will be used in polling mode. */
|
||||
.cd_gpio = GPIO_PORT72,
|
||||
.cd_gpio = 72,
|
||||
};
|
||||
|
||||
static struct resource sdhi1_resources[] = {
|
||||
|
@ -1046,6 +1046,35 @@ static struct platform_device *eva_devices[] __initdata = {
|
|||
};
|
||||
|
||||
static const struct pinctrl_map eva_pinctrl_map[] = {
|
||||
/* CEU0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
|
||||
"ceu0_data_0_7", "ceu0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
|
||||
"ceu0_clk_0", "ceu0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
|
||||
"ceu0_sync", "ceu0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-r8a7740",
|
||||
"ceu0_field", "ceu0"),
|
||||
/* FSIA */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
|
||||
"fsia_sclk_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
|
||||
"fsia_mclk_out", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
|
||||
"fsia_data_in_1", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-r8a7740",
|
||||
"fsia_data_out_0", "fsia"),
|
||||
/* FSIB */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
|
||||
"fsib_mclk_in", "fsib"),
|
||||
/* GETHER */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
|
||||
"gether_mii", "gether"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
|
||||
"gether_int", "gether"),
|
||||
/* HDMI */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
|
||||
"hdmi", "hdmi"),
|
||||
/* LCD0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-r8a7740",
|
||||
"lcd0_data24_0", "lcd0"),
|
||||
|
@ -1058,6 +1087,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
|
|||
"mmc0_data8_1", "mmc0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-r8a7740",
|
||||
"mmc0_ctrl_1", "mmc0"),
|
||||
/* SCIFA1 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.1", "pfc-r8a7740",
|
||||
"scifa1_data", "scifa1"),
|
||||
/* SDHI0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740",
|
||||
"sdhi0_data4", "sdhi0"),
|
||||
|
@ -1065,6 +1097,12 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
|
|||
"sdhi0_ctrl", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7740",
|
||||
"sdhi0_wp", "sdhi0"),
|
||||
/* ST1232 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-r8a7740",
|
||||
"intc_irq10", "intc"),
|
||||
/* USBHS */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs", "pfc-r8a7740",
|
||||
"intc_irq7_1", "intc"),
|
||||
};
|
||||
|
||||
static void __init eva_clock_init(void)
|
||||
|
@ -1119,40 +1157,14 @@ static void __init eva_init(void)
|
|||
r8a7740_pinmux_init();
|
||||
r8a7740_meram_workaround();
|
||||
|
||||
/* SCIFA1 */
|
||||
gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
|
||||
gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
|
||||
|
||||
/* LCDC0 */
|
||||
gpio_request(GPIO_FN_LCDC0_SELECT, NULL);
|
||||
|
||||
gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
|
||||
gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */
|
||||
|
||||
/* Touchscreen */
|
||||
gpio_request(GPIO_FN_IRQ10, NULL); /* TP_INT */
|
||||
gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
|
||||
|
||||
/* GETHER */
|
||||
gpio_request(GPIO_FN_ET_CRS, NULL);
|
||||
gpio_request(GPIO_FN_ET_MDC, NULL);
|
||||
gpio_request(GPIO_FN_ET_MDIO, NULL);
|
||||
gpio_request(GPIO_FN_ET_TX_ER, NULL);
|
||||
gpio_request(GPIO_FN_ET_RX_ER, NULL);
|
||||
gpio_request(GPIO_FN_ET_ERXD0, NULL);
|
||||
gpio_request(GPIO_FN_ET_ERXD1, NULL);
|
||||
gpio_request(GPIO_FN_ET_ERXD2, NULL);
|
||||
gpio_request(GPIO_FN_ET_ERXD3, NULL);
|
||||
gpio_request(GPIO_FN_ET_TX_CLK, NULL);
|
||||
gpio_request(GPIO_FN_ET_TX_EN, NULL);
|
||||
gpio_request(GPIO_FN_ET_ETXD0, NULL);
|
||||
gpio_request(GPIO_FN_ET_ETXD1, NULL);
|
||||
gpio_request(GPIO_FN_ET_ETXD2, NULL);
|
||||
gpio_request(GPIO_FN_ET_ETXD3, NULL);
|
||||
gpio_request(GPIO_FN_ET_PHY_INT, NULL);
|
||||
gpio_request(GPIO_FN_ET_COL, NULL);
|
||||
gpio_request(GPIO_FN_ET_RX_DV, NULL);
|
||||
gpio_request(GPIO_FN_ET_RX_CLK, NULL);
|
||||
|
||||
gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */
|
||||
|
||||
/* USB */
|
||||
|
@ -1163,34 +1175,17 @@ static void __init eva_init(void)
|
|||
} else {
|
||||
/* USB Func */
|
||||
/*
|
||||
* A1 chip has 2 IRQ7 pin and it was controled by MSEL register.
|
||||
* OTOH, usbhs interrupt needs its value (HI/LOW) to decide
|
||||
* USB connection/disconnection (usbhsf_get_vbus()).
|
||||
* This means we needs to select GPIO_FN_IRQ7_PORT209 first,
|
||||
* and select GPIO 209 here
|
||||
* The USBHS interrupt handlers needs to read the IRQ pin value
|
||||
* (HI/LOW) to diffentiate USB connection and disconnection
|
||||
* events (usbhsf_get_vbus()). We thus need to select both the
|
||||
* intc_irq7_1 pin group and GPIO 209 here.
|
||||
*/
|
||||
gpio_request(GPIO_FN_IRQ7_PORT209, NULL);
|
||||
gpio_request_one(209, GPIOF_IN, NULL);
|
||||
|
||||
platform_device_register(&usbhsf_device);
|
||||
usb = &usbhsf_device;
|
||||
}
|
||||
|
||||
/* CEU0 */
|
||||
gpio_request(GPIO_FN_VIO0_D7, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D6, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D5, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D4, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D3, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D2, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D1, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_D0, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_CLK, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_HD, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_VD, NULL);
|
||||
gpio_request(GPIO_FN_VIO0_FIELD, NULL);
|
||||
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||
|
||||
/* CON1/CON15 Camera */
|
||||
gpio_request_one(173, GPIOF_OUT_INIT_LOW, NULL); /* STANDBY */
|
||||
gpio_request_one(172, GPIOF_OUT_INIT_HIGH, NULL); /* RST */
|
||||
|
@ -1198,24 +1193,11 @@ static void __init eva_init(void)
|
|||
gpio_request_one(158, GPIOF_OUT_INIT_LOW, NULL); /* CAM_PON */
|
||||
|
||||
/* FSI-WM8978 */
|
||||
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||
gpio_request(GPIO_FN_FSIAOMC, NULL);
|
||||
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||
gpio_request(GPIO_FN_FSIAISLD_PORT5, NULL);
|
||||
|
||||
gpio_request(7, NULL);
|
||||
gpio_request(8, NULL);
|
||||
gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */
|
||||
gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */
|
||||
|
||||
/* FSI-HDMI */
|
||||
gpio_request(GPIO_FN_FSIBCK, NULL);
|
||||
|
||||
/* HDMI */
|
||||
gpio_request(GPIO_FN_HDMI_HPD, NULL);
|
||||
gpio_request(GPIO_FN_HDMI_CEC, NULL);
|
||||
|
||||
/*
|
||||
* CAUTION
|
||||
*
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <mach/common.h>
|
||||
|
@ -37,6 +38,14 @@ static struct resource smsc911x_resources[] = {
|
|||
DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */
|
||||
};
|
||||
|
||||
static const struct pinctrl_map bockw_pinctrl_map[] = {
|
||||
/* SCIF0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778",
|
||||
"scif0_data_a", "scif0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-r8a7778",
|
||||
"scif0_ctrl", "scif0"),
|
||||
};
|
||||
|
||||
#define IRQ0MR 0x30
|
||||
static void __init bockw_init(void)
|
||||
{
|
||||
|
@ -46,6 +55,10 @@ static void __init bockw_init(void)
|
|||
r8a7778_init_irq_extpin(1);
|
||||
r8a7778_add_standard_devices();
|
||||
|
||||
pinctrl_register_mappings(bockw_pinctrl_map,
|
||||
ARRAY_SIZE(bockw_pinctrl_map));
|
||||
r8a7778_pinmux_init();
|
||||
|
||||
fpga = ioremap_nocache(0x18200000, SZ_1M);
|
||||
if (fpga) {
|
||||
/*
|
||||
|
|
|
@ -330,12 +330,6 @@ static struct platform_device smsc_device = {
|
|||
.num_resources = ARRAY_SIZE(smsc_resources),
|
||||
};
|
||||
|
||||
/*
|
||||
* core board devices
|
||||
*/
|
||||
static struct platform_device *bonito_core_devices[] __initdata = {
|
||||
};
|
||||
|
||||
/*
|
||||
* base board devices
|
||||
*/
|
||||
|
@ -375,12 +369,37 @@ static void __init bonito_map_io(void)
|
|||
#define VCCQ1CR IOMEM(0xE6058140)
|
||||
#define VCCQ1LCDCR IOMEM(0xE6058186)
|
||||
|
||||
/*
|
||||
* HACK: The FPGA mappings should be associated with the FPGA device, but we
|
||||
* don't have one at the moment. Associate them with the PFC device to make
|
||||
* sure they will be applied.
|
||||
*/
|
||||
static const struct pinctrl_map fpga_pinctrl_map[] = {
|
||||
/* FPGA */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740",
|
||||
"bsc_cs5a_0", "bsc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740",
|
||||
"bsc_cs5b", "bsc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740",
|
||||
"bsc_cs6a", "bsc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("pfc-r8a7740", "pfc-r8a7740",
|
||||
"intc_irq10", "intc"),
|
||||
};
|
||||
|
||||
static const struct pinctrl_map scifa5_pinctrl_map[] = {
|
||||
/* SCIFA5 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.5", "pfc-r8a7740",
|
||||
"scifa5_data_2", "scifa5"),
|
||||
};
|
||||
|
||||
static void __init bonito_init(void)
|
||||
{
|
||||
u16 val;
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
pinctrl_register_mappings(fpga_pinctrl_map,
|
||||
ARRAY_SIZE(fpga_pinctrl_map));
|
||||
r8a7740_pinmux_init();
|
||||
bonito_fpga_init();
|
||||
|
||||
|
@ -397,9 +416,6 @@ static void __init bonito_init(void)
|
|||
|
||||
r8a7740_add_standard_devices();
|
||||
|
||||
platform_add_devices(bonito_core_devices,
|
||||
ARRAY_SIZE(bonito_core_devices));
|
||||
|
||||
/*
|
||||
* base board settings
|
||||
*/
|
||||
|
@ -409,14 +425,6 @@ static void __init bonito_init(void)
|
|||
u16 bsw3;
|
||||
u16 bsw4;
|
||||
|
||||
/*
|
||||
* FPGA
|
||||
*/
|
||||
gpio_request(GPIO_FN_CS5B, NULL);
|
||||
gpio_request(GPIO_FN_CS6A, NULL);
|
||||
gpio_request(GPIO_FN_CS5A_PORT105, NULL);
|
||||
gpio_request(GPIO_FN_IRQ10, NULL);
|
||||
|
||||
val = bonito_fpga_read(BVERR);
|
||||
pr_info("bonito version: cpu %02x, base %02x\n",
|
||||
((val >> 8) & 0xFF),
|
||||
|
@ -432,8 +440,8 @@ static void __init bonito_init(void)
|
|||
if (BIT_OFF(bsw2, 1) && /* S38.3 = ON */
|
||||
BIT_OFF(bsw3, 9) && /* S39.6 = ON */
|
||||
BIT_OFF(bsw4, 4)) { /* S43.1 = ON */
|
||||
gpio_request(GPIO_FN_SCIFA5_TXD_PORT91, NULL);
|
||||
gpio_request(GPIO_FN_SCIFA5_RXD_PORT92, NULL);
|
||||
pinctrl_register_mappings(scifa5_pinctrl_map,
|
||||
ARRAY_SIZE(scifa5_pinctrl_map));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -443,7 +451,6 @@ static void __init bonito_init(void)
|
|||
BIT_ON(bsw2, 2)) { /* S38.2 = OFF */
|
||||
pinctrl_register_mappings(lcdc0_pinctrl_map,
|
||||
ARRAY_SIZE(lcdc0_pinctrl_map));
|
||||
gpio_request(GPIO_FN_LCDC0_SELECT, NULL);
|
||||
|
||||
gpio_request_one(61, GPIOF_OUT_INIT_HIGH,
|
||||
NULL); /* LCDDON */
|
||||
|
|
|
@ -79,7 +79,6 @@ static void __init kzm_init(void)
|
|||
sh73a0_pinmux_init();
|
||||
|
||||
/* enable SD */
|
||||
gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
|
||||
gpio_request_one(15, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
||||
gpio_request_one(14, GPIOF_OUT_INIT_HIGH, NULL); /* power */
|
||||
|
|
|
@ -663,13 +663,13 @@ static unsigned long pin_pullup_conf[] = {
|
|||
|
||||
static const struct pinctrl_map kzm_pinctrl_map[] = {
|
||||
/* FSIA (AK4648) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
|
||||
"fsia_mclk_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
|
||||
"fsia_sclk_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
|
||||
"fsia_data_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2.0", "pfc-sh73a0",
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_fsi2", "pfc-sh73a0",
|
||||
"fsia_data_out", "fsia"),
|
||||
/* I2C3 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("i2c-sh_mobile.3", "pfc-sh73a0",
|
||||
|
@ -788,9 +788,6 @@ static void __init kzm_init(void)
|
|||
/* Touchscreen */
|
||||
gpio_request_one(223, GPIOF_IN, NULL); /* IRQ8 */
|
||||
|
||||
/* enable SD */
|
||||
gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
/* Early BRESP enable, Shared attribute override enable, 64K*8way */
|
||||
l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
|
||||
|
|
|
@ -21,15 +21,30 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/r8a7790.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
static const struct pinctrl_map lager_pinctrl_map[] = {
|
||||
/* SCIF0 (CN19: DEBUG SERIAL0) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790",
|
||||
"scif0_data", "scif0"),
|
||||
/* SCIF1 (CN20: DEBUG SERIAL1) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.7", "pfc-r8a7790",
|
||||
"scif1_data", "scif1"),
|
||||
};
|
||||
|
||||
static void __init lager_add_standard_devices(void)
|
||||
{
|
||||
r8a7790_clock_init();
|
||||
|
||||
pinctrl_register_mappings(lager_pinctrl_map,
|
||||
ARRAY_SIZE(lager_pinctrl_map));
|
||||
r8a7790_pinmux_init();
|
||||
|
||||
r8a7790_add_standard_devices();
|
||||
}
|
||||
|
||||
|
|
|
@ -1309,6 +1309,49 @@ static struct i2c_board_info i2c1_devices[] = {
|
|||
};
|
||||
|
||||
static const struct pinctrl_map mackerel_pinctrl_map[] = {
|
||||
/* ADXL34X */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("1-0053", "pfc-sh7372",
|
||||
"intc_irq21", "intc"),
|
||||
/* CEU */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
|
||||
"ceu_data_0_7", "ceu"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
|
||||
"ceu_clk_0", "ceu"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
|
||||
"ceu_sync", "ceu"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
|
||||
"ceu_field", "ceu"),
|
||||
/* FLCTL */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
|
||||
"flctl_data", "flctl"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
|
||||
"flctl_ce0", "flctl"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
|
||||
"flctl_ctrl", "flctl"),
|
||||
/* FSIA (AK4643) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_sclk_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_data_in", "fsia"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
|
||||
"fsia_data_out", "fsia"),
|
||||
/* FSIB (HDMI) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372",
|
||||
"fsib_mclk_in", "fsib"),
|
||||
/* HDMI */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372",
|
||||
"hdmi", "hdmi"),
|
||||
/* LCDC */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
|
||||
"lcd_data24", "lcd"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
|
||||
"lcd_sync", "lcd"),
|
||||
/* SCIFA0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372",
|
||||
"scifa0_data", "scifa0"),
|
||||
/* SCIFA2 (GT-720F GPS module) */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh7372",
|
||||
"scifa2_data", "scifa2"),
|
||||
/* SDHI0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
|
||||
"sdhi0_data4", "sdhi0"),
|
||||
|
@ -1316,6 +1359,8 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = {
|
|||
"sdhi0_ctrl", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
|
||||
"sdhi0_wp", "sdhi0"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
|
||||
"intc_irq26_1", "intc"),
|
||||
/* SDHI1 */
|
||||
#if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
|
||||
|
@ -1334,6 +1379,25 @@ static const struct pinctrl_map mackerel_pinctrl_map[] = {
|
|||
"sdhi2_data4", "sdhi2"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372",
|
||||
"sdhi2_ctrl", "sdhi2"),
|
||||
/* SMSC911X */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
|
||||
"bsc_cs5a", "bsc"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
|
||||
"intc_irq6_0", "intc"),
|
||||
/* ST1232 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-sh7372",
|
||||
"intc_irq7_0", "intc"),
|
||||
/* TCA6416 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("0-0020", "pfc-sh7372",
|
||||
"intc_irq9_0", "intc"),
|
||||
/* USBHS0 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.0", "pfc-sh7372",
|
||||
"usb0_vbus", "usb0"),
|
||||
/* USBHS1 */
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
|
||||
"usb1_vbus", "usb1"),
|
||||
PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
|
||||
"usb1_otg_id_0", "usb1"),
|
||||
};
|
||||
|
||||
#define GPIO_PORT9CR IOMEM(0xE6051009)
|
||||
|
@ -1377,61 +1441,18 @@ static void __init mackerel_init(void)
|
|||
ARRAY_SIZE(mackerel_pinctrl_map));
|
||||
sh7372_pinmux_init();
|
||||
|
||||
/* enable SCIFA0 */
|
||||
gpio_request(GPIO_FN_SCIFA0_TXD, NULL);
|
||||
gpio_request(GPIO_FN_SCIFA0_RXD, NULL);
|
||||
|
||||
/* enable SMSC911X */
|
||||
gpio_request(GPIO_FN_CS5A, NULL);
|
||||
gpio_request(GPIO_FN_IRQ6_39, NULL);
|
||||
|
||||
/* LCDC */
|
||||
gpio_request(GPIO_FN_LCDD23, NULL);
|
||||
gpio_request(GPIO_FN_LCDD22, NULL);
|
||||
gpio_request(GPIO_FN_LCDD21, NULL);
|
||||
gpio_request(GPIO_FN_LCDD20, NULL);
|
||||
gpio_request(GPIO_FN_LCDD19, NULL);
|
||||
gpio_request(GPIO_FN_LCDD18, NULL);
|
||||
gpio_request(GPIO_FN_LCDD17, NULL);
|
||||
gpio_request(GPIO_FN_LCDD16, NULL);
|
||||
gpio_request(GPIO_FN_LCDD15, NULL);
|
||||
gpio_request(GPIO_FN_LCDD14, NULL);
|
||||
gpio_request(GPIO_FN_LCDD13, NULL);
|
||||
gpio_request(GPIO_FN_LCDD12, NULL);
|
||||
gpio_request(GPIO_FN_LCDD11, NULL);
|
||||
gpio_request(GPIO_FN_LCDD10, NULL);
|
||||
gpio_request(GPIO_FN_LCDD9, NULL);
|
||||
gpio_request(GPIO_FN_LCDD8, NULL);
|
||||
gpio_request(GPIO_FN_LCDD7, NULL);
|
||||
gpio_request(GPIO_FN_LCDD6, NULL);
|
||||
gpio_request(GPIO_FN_LCDD5, NULL);
|
||||
gpio_request(GPIO_FN_LCDD4, NULL);
|
||||
gpio_request(GPIO_FN_LCDD3, NULL);
|
||||
gpio_request(GPIO_FN_LCDD2, NULL);
|
||||
gpio_request(GPIO_FN_LCDD1, NULL);
|
||||
gpio_request(GPIO_FN_LCDD0, NULL);
|
||||
gpio_request(GPIO_FN_LCDDISP, NULL);
|
||||
gpio_request(GPIO_FN_LCDDCK, NULL);
|
||||
|
||||
/* backlight, off by default */
|
||||
gpio_request_one(31, GPIOF_OUT_INIT_LOW, NULL);
|
||||
|
||||
gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
|
||||
|
||||
/* USBHS0 */
|
||||
gpio_request(GPIO_FN_VBUS0_0, NULL);
|
||||
gpio_request_pulldown(GPIO_PORT168CR); /* VBUS0_0 pull down */
|
||||
|
||||
/* USBHS1 */
|
||||
gpio_request(GPIO_FN_VBUS0_1, NULL);
|
||||
gpio_request_pulldown(GPIO_PORT167CR); /* VBUS0_1 pull down */
|
||||
gpio_request(GPIO_FN_IDIN_1_113, NULL);
|
||||
|
||||
/* enable FSI2 port A (ak4643) */
|
||||
gpio_request(GPIO_FN_FSIAIBT, NULL);
|
||||
gpio_request(GPIO_FN_FSIAILR, NULL);
|
||||
gpio_request(GPIO_FN_FSIAISLD, NULL);
|
||||
gpio_request(GPIO_FN_FSIAOSLD, NULL);
|
||||
/* FSI2 port A (ak4643) */
|
||||
gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */
|
||||
|
||||
gpio_request(9, NULL);
|
||||
|
@ -1441,8 +1462,7 @@ static void __init mackerel_init(void)
|
|||
|
||||
intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
|
||||
|
||||
/* setup FSI2 port B (HDMI) */
|
||||
gpio_request(GPIO_FN_FSIBCK, NULL);
|
||||
/* FSI2 port B (HDMI) */
|
||||
__raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
|
||||
|
||||
/* set SPU2 clock to 119.6 MHz */
|
||||
|
@ -1452,68 +1472,15 @@ static void __init mackerel_init(void)
|
|||
clk_put(clk);
|
||||
}
|
||||
|
||||
/* enable Keypad */
|
||||
gpio_request(GPIO_FN_IRQ9_42, NULL);
|
||||
/* Keypad */
|
||||
irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH);
|
||||
|
||||
/* enable Touchscreen */
|
||||
gpio_request(GPIO_FN_IRQ7_40, NULL);
|
||||
/* Touchscreen */
|
||||
irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW);
|
||||
|
||||
/* enable Accelerometer */
|
||||
gpio_request(GPIO_FN_IRQ21, NULL);
|
||||
/* Accelerometer */
|
||||
irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH);
|
||||
|
||||
/* SDHI0 PORT172 card-detect IRQ26 */
|
||||
gpio_request(GPIO_FN_IRQ26_172, NULL);
|
||||
|
||||
/* FLCTL */
|
||||
gpio_request(GPIO_FN_D0_NAF0, NULL);
|
||||
gpio_request(GPIO_FN_D1_NAF1, NULL);
|
||||
gpio_request(GPIO_FN_D2_NAF2, NULL);
|
||||
gpio_request(GPIO_FN_D3_NAF3, NULL);
|
||||
gpio_request(GPIO_FN_D4_NAF4, NULL);
|
||||
gpio_request(GPIO_FN_D5_NAF5, NULL);
|
||||
gpio_request(GPIO_FN_D6_NAF6, NULL);
|
||||
gpio_request(GPIO_FN_D7_NAF7, NULL);
|
||||
gpio_request(GPIO_FN_D8_NAF8, NULL);
|
||||
gpio_request(GPIO_FN_D9_NAF9, NULL);
|
||||
gpio_request(GPIO_FN_D10_NAF10, NULL);
|
||||
gpio_request(GPIO_FN_D11_NAF11, NULL);
|
||||
gpio_request(GPIO_FN_D12_NAF12, NULL);
|
||||
gpio_request(GPIO_FN_D13_NAF13, NULL);
|
||||
gpio_request(GPIO_FN_D14_NAF14, NULL);
|
||||
gpio_request(GPIO_FN_D15_NAF15, NULL);
|
||||
gpio_request(GPIO_FN_FCE0, NULL);
|
||||
gpio_request(GPIO_FN_WE0_FWE, NULL);
|
||||
gpio_request(GPIO_FN_FRB, NULL);
|
||||
gpio_request(GPIO_FN_A4_FOE, NULL);
|
||||
gpio_request(GPIO_FN_A5_FCDE, NULL);
|
||||
gpio_request(GPIO_FN_RD_FSC, NULL);
|
||||
|
||||
/* enable GPS module (GT-720F) */
|
||||
gpio_request(GPIO_FN_SCIFA2_TXD1, NULL);
|
||||
gpio_request(GPIO_FN_SCIFA2_RXD1, NULL);
|
||||
|
||||
/* CEU */
|
||||
gpio_request(GPIO_FN_VIO_CLK, NULL);
|
||||
gpio_request(GPIO_FN_VIO_VD, NULL);
|
||||
gpio_request(GPIO_FN_VIO_HD, NULL);
|
||||
gpio_request(GPIO_FN_VIO_FIELD, NULL);
|
||||
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D7, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D6, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D5, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D4, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D3, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D2, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D1, NULL);
|
||||
gpio_request(GPIO_FN_VIO_D0, NULL);
|
||||
|
||||
/* HDMI */
|
||||
gpio_request(GPIO_FN_HDMI_HPD, NULL);
|
||||
gpio_request(GPIO_FN_HDMI_CEC, NULL);
|
||||
|
||||
/* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
|
||||
srcr4 = __raw_readl(SRCR4);
|
||||
__raw_writel(srcr4 | (1 << 13), SRCR4);
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <linux/leds.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/platform_data/gpio-rcar.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/smsc911x.h>
|
||||
|
@ -173,15 +174,15 @@ static struct platform_device usb_phy_device = {
|
|||
static struct gpio_led marzen_leds[] = {
|
||||
{
|
||||
.name = "led2",
|
||||
.gpio = 157,
|
||||
.gpio = RCAR_GP_PIN(4, 29),
|
||||
.default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
}, {
|
||||
.name = "led3",
|
||||
.gpio = 158,
|
||||
.gpio = RCAR_GP_PIN(4, 30),
|
||||
.default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
}, {
|
||||
.name = "led4",
|
||||
.gpio = 159,
|
||||
.gpio = RCAR_GP_PIN(4, 31),
|
||||
.default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -16,4 +16,9 @@
|
|||
#define IRQPIN_BASE 2000
|
||||
#define irq_pin(nr) ((nr) + IRQPIN_BASE)
|
||||
|
||||
/* GPIO IRQ */
|
||||
#define _GPIO_IRQ_BASE 2500
|
||||
#define GPIO_IRQ_BASE(x) (_GPIO_IRQ_BASE + (32 * x))
|
||||
#define GPIO_IRQ(x, y) (_GPIO_IRQ_BASE + (32 * x) + y)
|
||||
|
||||
#endif /* __ASM_MACH_IRQS_H */
|
||||
|
|
|
@ -28,494 +28,6 @@
|
|||
#define MD_CK1 (1 << 1)
|
||||
#define MD_CK0 (1 << 0)
|
||||
|
||||
/*
|
||||
* Pin Function Controller:
|
||||
* GPIO_FN_xx - GPIO used to select pin function
|
||||
* GPIO_PORTxx - GPIO mapped to real I/O pin on CPU
|
||||
*/
|
||||
enum {
|
||||
/* PORT */
|
||||
GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4,
|
||||
GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9,
|
||||
|
||||
GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14,
|
||||
GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19,
|
||||
|
||||
GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24,
|
||||
GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29,
|
||||
|
||||
GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34,
|
||||
GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39,
|
||||
|
||||
GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44,
|
||||
GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49,
|
||||
|
||||
GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54,
|
||||
GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59,
|
||||
|
||||
GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64,
|
||||
GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69,
|
||||
|
||||
GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74,
|
||||
GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79,
|
||||
|
||||
GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84,
|
||||
GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89,
|
||||
|
||||
GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94,
|
||||
GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99,
|
||||
|
||||
GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104,
|
||||
GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109,
|
||||
|
||||
GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114,
|
||||
GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119,
|
||||
|
||||
GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124,
|
||||
GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129,
|
||||
|
||||
GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134,
|
||||
GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139,
|
||||
|
||||
GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144,
|
||||
GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149,
|
||||
|
||||
GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154,
|
||||
GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159,
|
||||
|
||||
GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164,
|
||||
GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169,
|
||||
|
||||
GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174,
|
||||
GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179,
|
||||
|
||||
GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184,
|
||||
GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189,
|
||||
|
||||
GPIO_PORT190, GPIO_PORT191, GPIO_PORT192, GPIO_PORT193, GPIO_PORT194,
|
||||
GPIO_PORT195, GPIO_PORT196, GPIO_PORT197, GPIO_PORT198, GPIO_PORT199,
|
||||
|
||||
GPIO_PORT200, GPIO_PORT201, GPIO_PORT202, GPIO_PORT203, GPIO_PORT204,
|
||||
GPIO_PORT205, GPIO_PORT206, GPIO_PORT207, GPIO_PORT208, GPIO_PORT209,
|
||||
|
||||
GPIO_PORT210, GPIO_PORT211,
|
||||
|
||||
/* IRQ */
|
||||
GPIO_FN_IRQ0_PORT2, GPIO_FN_IRQ0_PORT13,
|
||||
GPIO_FN_IRQ1,
|
||||
GPIO_FN_IRQ2_PORT11, GPIO_FN_IRQ2_PORT12,
|
||||
GPIO_FN_IRQ3_PORT10, GPIO_FN_IRQ3_PORT14,
|
||||
GPIO_FN_IRQ4_PORT15, GPIO_FN_IRQ4_PORT172,
|
||||
GPIO_FN_IRQ5_PORT0, GPIO_FN_IRQ5_PORT1,
|
||||
GPIO_FN_IRQ6_PORT121, GPIO_FN_IRQ6_PORT173,
|
||||
GPIO_FN_IRQ7_PORT120, GPIO_FN_IRQ7_PORT209,
|
||||
GPIO_FN_IRQ8,
|
||||
GPIO_FN_IRQ9_PORT118, GPIO_FN_IRQ9_PORT210,
|
||||
GPIO_FN_IRQ10,
|
||||
GPIO_FN_IRQ11,
|
||||
GPIO_FN_IRQ12_PORT42, GPIO_FN_IRQ12_PORT97,
|
||||
GPIO_FN_IRQ13_PORT64, GPIO_FN_IRQ13_PORT98,
|
||||
GPIO_FN_IRQ14_PORT63, GPIO_FN_IRQ14_PORT99,
|
||||
GPIO_FN_IRQ15_PORT62, GPIO_FN_IRQ15_PORT100,
|
||||
GPIO_FN_IRQ16_PORT68, GPIO_FN_IRQ16_PORT211,
|
||||
GPIO_FN_IRQ17,
|
||||
GPIO_FN_IRQ18,
|
||||
GPIO_FN_IRQ19,
|
||||
GPIO_FN_IRQ20,
|
||||
GPIO_FN_IRQ21,
|
||||
GPIO_FN_IRQ22,
|
||||
GPIO_FN_IRQ23,
|
||||
GPIO_FN_IRQ24,
|
||||
GPIO_FN_IRQ25,
|
||||
GPIO_FN_IRQ26_PORT58, GPIO_FN_IRQ26_PORT81,
|
||||
GPIO_FN_IRQ27_PORT57, GPIO_FN_IRQ27_PORT168,
|
||||
GPIO_FN_IRQ28_PORT56, GPIO_FN_IRQ28_PORT169,
|
||||
GPIO_FN_IRQ29_PORT50, GPIO_FN_IRQ29_PORT170,
|
||||
GPIO_FN_IRQ30_PORT49, GPIO_FN_IRQ30_PORT171,
|
||||
GPIO_FN_IRQ31_PORT41, GPIO_FN_IRQ31_PORT167,
|
||||
|
||||
/* Function */
|
||||
|
||||
/* DBGT */
|
||||
GPIO_FN_DBGMDT2, GPIO_FN_DBGMDT1, GPIO_FN_DBGMDT0,
|
||||
GPIO_FN_DBGMD10, GPIO_FN_DBGMD11, GPIO_FN_DBGMD20,
|
||||
GPIO_FN_DBGMD21,
|
||||
|
||||
/* FSI-A */
|
||||
GPIO_FN_FSIAISLD_PORT0, /* FSIAISLD Port 0/5 */
|
||||
GPIO_FN_FSIAISLD_PORT5,
|
||||
GPIO_FN_FSIASPDIF_PORT9, /* FSIASPDIF Port 9/18 */
|
||||
GPIO_FN_FSIASPDIF_PORT18,
|
||||
GPIO_FN_FSIAOSLD1, GPIO_FN_FSIAOSLD2,
|
||||
GPIO_FN_FSIAOLR, GPIO_FN_FSIAOBT,
|
||||
GPIO_FN_FSIAOSLD, GPIO_FN_FSIAOMC,
|
||||
GPIO_FN_FSIACK, GPIO_FN_FSIAILR,
|
||||
GPIO_FN_FSIAIBT,
|
||||
|
||||
/* FSI-B */
|
||||
GPIO_FN_FSIBCK,
|
||||
|
||||
/* FMSI */
|
||||
GPIO_FN_FMSISLD_PORT1, /* FMSISLD Port 1/6 */
|
||||
GPIO_FN_FMSISLD_PORT6,
|
||||
GPIO_FN_FMSIILR, GPIO_FN_FMSIIBT,
|
||||
GPIO_FN_FMSIOLR, GPIO_FN_FMSIOBT,
|
||||
GPIO_FN_FMSICK, GPIO_FN_FMSOILR,
|
||||
GPIO_FN_FMSOIBT, GPIO_FN_FMSOOLR,
|
||||
GPIO_FN_FMSOOBT, GPIO_FN_FMSOSLD,
|
||||
GPIO_FN_FMSOCK,
|
||||
|
||||
/* SCIFA0 */
|
||||
GPIO_FN_SCIFA0_SCK, GPIO_FN_SCIFA0_CTS,
|
||||
GPIO_FN_SCIFA0_RTS, GPIO_FN_SCIFA0_RXD,
|
||||
GPIO_FN_SCIFA0_TXD,
|
||||
|
||||
/* SCIFA1 */
|
||||
GPIO_FN_SCIFA1_CTS, GPIO_FN_SCIFA1_SCK,
|
||||
GPIO_FN_SCIFA1_RXD, GPIO_FN_SCIFA1_TXD,
|
||||
GPIO_FN_SCIFA1_RTS,
|
||||
|
||||
/* SCIFA2 */
|
||||
GPIO_FN_SCIFA2_SCK_PORT22, /* SCIFA2_SCK Port 22/199 */
|
||||
GPIO_FN_SCIFA2_SCK_PORT199,
|
||||
GPIO_FN_SCIFA2_RXD, GPIO_FN_SCIFA2_TXD,
|
||||
GPIO_FN_SCIFA2_CTS, GPIO_FN_SCIFA2_RTS,
|
||||
|
||||
/* SCIFA3 */
|
||||
GPIO_FN_SCIFA3_RTS_PORT105, /* MSEL5CR_8_0 */
|
||||
GPIO_FN_SCIFA3_SCK_PORT116,
|
||||
GPIO_FN_SCIFA3_CTS_PORT117,
|
||||
GPIO_FN_SCIFA3_RXD_PORT174,
|
||||
GPIO_FN_SCIFA3_TXD_PORT175,
|
||||
|
||||
GPIO_FN_SCIFA3_RTS_PORT161, /* MSEL5CR_8_1 */
|
||||
GPIO_FN_SCIFA3_SCK_PORT158,
|
||||
GPIO_FN_SCIFA3_CTS_PORT162,
|
||||
GPIO_FN_SCIFA3_RXD_PORT159,
|
||||
GPIO_FN_SCIFA3_TXD_PORT160,
|
||||
|
||||
/* SCIFA4 */
|
||||
GPIO_FN_SCIFA4_RXD_PORT12, /* MSEL5CR[12:11] = 00 */
|
||||
GPIO_FN_SCIFA4_TXD_PORT13,
|
||||
|
||||
GPIO_FN_SCIFA4_RXD_PORT204, /* MSEL5CR[12:11] = 01 */
|
||||
GPIO_FN_SCIFA4_TXD_PORT203,
|
||||
|
||||
GPIO_FN_SCIFA4_RXD_PORT94, /* MSEL5CR[12:11] = 10 */
|
||||
GPIO_FN_SCIFA4_TXD_PORT93,
|
||||
|
||||
GPIO_FN_SCIFA4_SCK_PORT21, /* SCIFA4_SCK Port 21/205 */
|
||||
GPIO_FN_SCIFA4_SCK_PORT205,
|
||||
|
||||
/* SCIFA5 */
|
||||
GPIO_FN_SCIFA5_TXD_PORT20, /* MSEL5CR[15:14] = 00 */
|
||||
GPIO_FN_SCIFA5_RXD_PORT10,
|
||||
|
||||
GPIO_FN_SCIFA5_RXD_PORT207, /* MSEL5CR[15:14] = 01 */
|
||||
GPIO_FN_SCIFA5_TXD_PORT208,
|
||||
|
||||
GPIO_FN_SCIFA5_TXD_PORT91, /* MSEL5CR[15:14] = 10 */
|
||||
GPIO_FN_SCIFA5_RXD_PORT92,
|
||||
|
||||
GPIO_FN_SCIFA5_SCK_PORT23, /* SCIFA5_SCK Port 23/206 */
|
||||
GPIO_FN_SCIFA5_SCK_PORT206,
|
||||
|
||||
/* SCIFA6 */
|
||||
GPIO_FN_SCIFA6_SCK, GPIO_FN_SCIFA6_RXD, GPIO_FN_SCIFA6_TXD,
|
||||
|
||||
/* SCIFA7 */
|
||||
GPIO_FN_SCIFA7_TXD, GPIO_FN_SCIFA7_RXD,
|
||||
|
||||
/* SCIFAB */
|
||||
GPIO_FN_SCIFB_SCK_PORT190, /* MSEL5CR_17_0 */
|
||||
GPIO_FN_SCIFB_RXD_PORT191,
|
||||
GPIO_FN_SCIFB_TXD_PORT192,
|
||||
GPIO_FN_SCIFB_RTS_PORT186,
|
||||
GPIO_FN_SCIFB_CTS_PORT187,
|
||||
|
||||
GPIO_FN_SCIFB_SCK_PORT2, /* MSEL5CR_17_1 */
|
||||
GPIO_FN_SCIFB_RXD_PORT3,
|
||||
GPIO_FN_SCIFB_TXD_PORT4,
|
||||
GPIO_FN_SCIFB_RTS_PORT172,
|
||||
GPIO_FN_SCIFB_CTS_PORT173,
|
||||
|
||||
/* LCD0 */
|
||||
GPIO_FN_LCDC0_SELECT,
|
||||
|
||||
/* LCD1 */
|
||||
GPIO_FN_LCDC1_SELECT,
|
||||
|
||||
/* RSPI */
|
||||
GPIO_FN_RSPI_SSL0_A, GPIO_FN_RSPI_SSL1_A,
|
||||
GPIO_FN_RSPI_SSL2_A, GPIO_FN_RSPI_SSL3_A,
|
||||
GPIO_FN_RSPI_MOSI_A, GPIO_FN_RSPI_MISO_A,
|
||||
GPIO_FN_RSPI_CK_A,
|
||||
|
||||
/* VIO CKO */
|
||||
GPIO_FN_VIO_CKO1,
|
||||
GPIO_FN_VIO_CKO2,
|
||||
GPIO_FN_VIO_CKO_1,
|
||||
GPIO_FN_VIO_CKO,
|
||||
|
||||
/* VIO0 */
|
||||
GPIO_FN_VIO0_D0, GPIO_FN_VIO0_D1, GPIO_FN_VIO0_D2,
|
||||
GPIO_FN_VIO0_D3, GPIO_FN_VIO0_D4, GPIO_FN_VIO0_D5,
|
||||
GPIO_FN_VIO0_D6, GPIO_FN_VIO0_D7, GPIO_FN_VIO0_D8,
|
||||
GPIO_FN_VIO0_D9, GPIO_FN_VIO0_D10, GPIO_FN_VIO0_D11,
|
||||
GPIO_FN_VIO0_D12, GPIO_FN_VIO0_VD, GPIO_FN_VIO0_HD,
|
||||
GPIO_FN_VIO0_CLK, GPIO_FN_VIO0_FIELD,
|
||||
|
||||
GPIO_FN_VIO0_D13_PORT26, /* MSEL5CR_27_0 */
|
||||
GPIO_FN_VIO0_D14_PORT25,
|
||||
GPIO_FN_VIO0_D15_PORT24,
|
||||
|
||||
GPIO_FN_VIO0_D13_PORT22, /* MSEL5CR_27_1 */
|
||||
GPIO_FN_VIO0_D14_PORT95,
|
||||
GPIO_FN_VIO0_D15_PORT96,
|
||||
|
||||
/* VIO1 */
|
||||
GPIO_FN_VIO1_D0, GPIO_FN_VIO1_D1, GPIO_FN_VIO1_D2,
|
||||
GPIO_FN_VIO1_D3, GPIO_FN_VIO1_D4, GPIO_FN_VIO1_D5,
|
||||
GPIO_FN_VIO1_D6, GPIO_FN_VIO1_D7, GPIO_FN_VIO1_VD,
|
||||
GPIO_FN_VIO1_HD, GPIO_FN_VIO1_CLK, GPIO_FN_VIO1_FIELD,
|
||||
|
||||
/* TPU0 */
|
||||
GPIO_FN_TPU0TO0, GPIO_FN_TPU0TO1,
|
||||
GPIO_FN_TPU0TO3,
|
||||
GPIO_FN_TPU0TO2_PORT66, /* TPU0TO2 Port 66/202 */
|
||||
GPIO_FN_TPU0TO2_PORT202,
|
||||
|
||||
/* SSP1 0 */
|
||||
GPIO_FN_STP0_IPD0, GPIO_FN_STP0_IPD1, GPIO_FN_STP0_IPD2,
|
||||
GPIO_FN_STP0_IPD3, GPIO_FN_STP0_IPD4, GPIO_FN_STP0_IPD5,
|
||||
GPIO_FN_STP0_IPD6, GPIO_FN_STP0_IPD7, GPIO_FN_STP0_IPEN,
|
||||
GPIO_FN_STP0_IPCLK, GPIO_FN_STP0_IPSYNC,
|
||||
|
||||
/* SSP1 1 */
|
||||
GPIO_FN_STP1_IPD1, GPIO_FN_STP1_IPD2, GPIO_FN_STP1_IPD3,
|
||||
GPIO_FN_STP1_IPD4, GPIO_FN_STP1_IPD5, GPIO_FN_STP1_IPD6,
|
||||
GPIO_FN_STP1_IPD7, GPIO_FN_STP1_IPCLK, GPIO_FN_STP1_IPSYNC,
|
||||
|
||||
GPIO_FN_STP1_IPD0_PORT186, /* MSEL5CR_23_0 */
|
||||
GPIO_FN_STP1_IPEN_PORT187,
|
||||
|
||||
GPIO_FN_STP1_IPD0_PORT194, /* MSEL5CR_23_1 */
|
||||
GPIO_FN_STP1_IPEN_PORT193,
|
||||
|
||||
/* SIM */
|
||||
GPIO_FN_SIM_RST, GPIO_FN_SIM_CLK,
|
||||
GPIO_FN_SIM_D_PORT22, /* SIM_D Port 22/199 */
|
||||
GPIO_FN_SIM_D_PORT199,
|
||||
|
||||
/* MSIOF2 */
|
||||
GPIO_FN_MSIOF2_TXD, GPIO_FN_MSIOF2_RXD, GPIO_FN_MSIOF2_TSCK,
|
||||
GPIO_FN_MSIOF2_SS2, GPIO_FN_MSIOF2_TSYNC, GPIO_FN_MSIOF2_SS1,
|
||||
GPIO_FN_MSIOF2_MCK1, GPIO_FN_MSIOF2_MCK0, GPIO_FN_MSIOF2_RSYNC,
|
||||
GPIO_FN_MSIOF2_RSCK,
|
||||
|
||||
/* KEYSC */
|
||||
GPIO_FN_KEYIN4, GPIO_FN_KEYIN5,
|
||||
GPIO_FN_KEYIN6, GPIO_FN_KEYIN7,
|
||||
GPIO_FN_KEYOUT0, GPIO_FN_KEYOUT1, GPIO_FN_KEYOUT2,
|
||||
GPIO_FN_KEYOUT3, GPIO_FN_KEYOUT4, GPIO_FN_KEYOUT5,
|
||||
GPIO_FN_KEYOUT6, GPIO_FN_KEYOUT7,
|
||||
|
||||
GPIO_FN_KEYIN0_PORT43, /* MSEL4CR_18_0 */
|
||||
GPIO_FN_KEYIN1_PORT44,
|
||||
GPIO_FN_KEYIN2_PORT45,
|
||||
GPIO_FN_KEYIN3_PORT46,
|
||||
|
||||
GPIO_FN_KEYIN0_PORT58, /* MSEL4CR_18_1 */
|
||||
GPIO_FN_KEYIN1_PORT57,
|
||||
GPIO_FN_KEYIN2_PORT56,
|
||||
GPIO_FN_KEYIN3_PORT55,
|
||||
|
||||
/* VOU */
|
||||
GPIO_FN_DV_D0, GPIO_FN_DV_D1, GPIO_FN_DV_D2, GPIO_FN_DV_D3,
|
||||
GPIO_FN_DV_D4, GPIO_FN_DV_D5, GPIO_FN_DV_D6, GPIO_FN_DV_D7,
|
||||
GPIO_FN_DV_D8, GPIO_FN_DV_D9, GPIO_FN_DV_D10, GPIO_FN_DV_D11,
|
||||
GPIO_FN_DV_D12, GPIO_FN_DV_D13, GPIO_FN_DV_D14, GPIO_FN_DV_D15,
|
||||
GPIO_FN_DV_CLK,
|
||||
GPIO_FN_DV_VSYNC,
|
||||
GPIO_FN_DV_HSYNC,
|
||||
|
||||
/* MEMC */
|
||||
GPIO_FN_MEMC_AD0, GPIO_FN_MEMC_AD1, GPIO_FN_MEMC_AD2,
|
||||
GPIO_FN_MEMC_AD3, GPIO_FN_MEMC_AD4, GPIO_FN_MEMC_AD5,
|
||||
GPIO_FN_MEMC_AD6, GPIO_FN_MEMC_AD7, GPIO_FN_MEMC_AD8,
|
||||
GPIO_FN_MEMC_AD9, GPIO_FN_MEMC_AD10, GPIO_FN_MEMC_AD11,
|
||||
GPIO_FN_MEMC_AD12, GPIO_FN_MEMC_AD13, GPIO_FN_MEMC_AD14,
|
||||
GPIO_FN_MEMC_AD15, GPIO_FN_MEMC_CS0, GPIO_FN_MEMC_INT,
|
||||
GPIO_FN_MEMC_NWE, GPIO_FN_MEMC_NOE,
|
||||
|
||||
GPIO_FN_MEMC_CS1, /* MSEL4CR_6_0 */
|
||||
GPIO_FN_MEMC_ADV,
|
||||
GPIO_FN_MEMC_WAIT,
|
||||
GPIO_FN_MEMC_BUSCLK,
|
||||
|
||||
GPIO_FN_MEMC_A1, /* MSEL4CR_6_1 */
|
||||
GPIO_FN_MEMC_DREQ0,
|
||||
GPIO_FN_MEMC_DREQ1,
|
||||
GPIO_FN_MEMC_A0,
|
||||
|
||||
/* MSIOF0 */
|
||||
GPIO_FN_MSIOF0_SS1, GPIO_FN_MSIOF0_SS2,
|
||||
GPIO_FN_MSIOF0_RXD, GPIO_FN_MSIOF0_TXD,
|
||||
GPIO_FN_MSIOF0_MCK0, GPIO_FN_MSIOF0_MCK1,
|
||||
GPIO_FN_MSIOF0_RSYNC, GPIO_FN_MSIOF0_RSCK,
|
||||
GPIO_FN_MSIOF0_TSCK, GPIO_FN_MSIOF0_TSYNC,
|
||||
|
||||
/* MSIOF1 */
|
||||
GPIO_FN_MSIOF1_RSCK, GPIO_FN_MSIOF1_RSYNC,
|
||||
GPIO_FN_MSIOF1_MCK0, GPIO_FN_MSIOF1_MCK1,
|
||||
|
||||
GPIO_FN_MSIOF1_SS2_PORT116, GPIO_FN_MSIOF1_SS1_PORT117,
|
||||
GPIO_FN_MSIOF1_RXD_PORT118, GPIO_FN_MSIOF1_TXD_PORT119,
|
||||
GPIO_FN_MSIOF1_TSYNC_PORT120,
|
||||
GPIO_FN_MSIOF1_TSCK_PORT121, /* MSEL4CR_10_0 */
|
||||
|
||||
GPIO_FN_MSIOF1_SS1_PORT67, GPIO_FN_MSIOF1_TSCK_PORT72,
|
||||
GPIO_FN_MSIOF1_TSYNC_PORT73, GPIO_FN_MSIOF1_TXD_PORT74,
|
||||
GPIO_FN_MSIOF1_RXD_PORT75,
|
||||
GPIO_FN_MSIOF1_SS2_PORT202, /* MSEL4CR_10_1 */
|
||||
|
||||
/* GPIO */
|
||||
GPIO_FN_GPO0, GPIO_FN_GPI0,
|
||||
GPIO_FN_GPO1, GPIO_FN_GPI1,
|
||||
|
||||
/* USB0 */
|
||||
GPIO_FN_USB0_OCI, GPIO_FN_USB0_PPON, GPIO_FN_VBUS,
|
||||
|
||||
/* USB1 */
|
||||
GPIO_FN_USB1_OCI, GPIO_FN_USB1_PPON,
|
||||
|
||||
/* BBIF1 */
|
||||
GPIO_FN_BBIF1_RXD, GPIO_FN_BBIF1_TXD, GPIO_FN_BBIF1_TSYNC,
|
||||
GPIO_FN_BBIF1_TSCK, GPIO_FN_BBIF1_RSCK, GPIO_FN_BBIF1_RSYNC,
|
||||
GPIO_FN_BBIF1_FLOW, GPIO_FN_BBIF1_RX_FLOW_N,
|
||||
|
||||
/* BBIF2 */
|
||||
GPIO_FN_BBIF2_TXD2_PORT5, /* MSEL5CR_0_0 */
|
||||
GPIO_FN_BBIF2_RXD2_PORT60,
|
||||
GPIO_FN_BBIF2_TSYNC2_PORT6,
|
||||
GPIO_FN_BBIF2_TSCK2_PORT59,
|
||||
|
||||
GPIO_FN_BBIF2_RXD2_PORT90, /* MSEL5CR_0_1 */
|
||||
GPIO_FN_BBIF2_TXD2_PORT183,
|
||||
GPIO_FN_BBIF2_TSCK2_PORT89,
|
||||
GPIO_FN_BBIF2_TSYNC2_PORT184,
|
||||
|
||||
/* BSC / FLCTL / PCMCIA */
|
||||
GPIO_FN_CS0, GPIO_FN_CS2, GPIO_FN_CS4,
|
||||
GPIO_FN_CS5B, GPIO_FN_CS6A,
|
||||
GPIO_FN_CS5A_PORT105, /* CS5A PORT 19/105 */
|
||||
GPIO_FN_CS5A_PORT19,
|
||||
GPIO_FN_IOIS16, /* ? */
|
||||
|
||||
GPIO_FN_A0, GPIO_FN_A1, GPIO_FN_A2, GPIO_FN_A3,
|
||||
GPIO_FN_A4_FOE, /* share with FLCTL */
|
||||
GPIO_FN_A5_FCDE, /* share with FLCTL */
|
||||
GPIO_FN_A6, GPIO_FN_A7, GPIO_FN_A8, GPIO_FN_A9,
|
||||
GPIO_FN_A10, GPIO_FN_A11, GPIO_FN_A12, GPIO_FN_A13,
|
||||
GPIO_FN_A14, GPIO_FN_A15, GPIO_FN_A16, GPIO_FN_A17,
|
||||
GPIO_FN_A18, GPIO_FN_A19, GPIO_FN_A20, GPIO_FN_A21,
|
||||
GPIO_FN_A22, GPIO_FN_A23, GPIO_FN_A24, GPIO_FN_A25,
|
||||
GPIO_FN_A26,
|
||||
|
||||
GPIO_FN_D0_NAF0, GPIO_FN_D1_NAF1, /* share with FLCTL */
|
||||
GPIO_FN_D2_NAF2, GPIO_FN_D3_NAF3, /* share with FLCTL */
|
||||
GPIO_FN_D4_NAF4, GPIO_FN_D5_NAF5, /* share with FLCTL */
|
||||
GPIO_FN_D6_NAF6, GPIO_FN_D7_NAF7, /* share with FLCTL */
|
||||
GPIO_FN_D8_NAF8, GPIO_FN_D9_NAF9, /* share with FLCTL */
|
||||
GPIO_FN_D10_NAF10, GPIO_FN_D11_NAF11, /* share with FLCTL */
|
||||
GPIO_FN_D12_NAF12, GPIO_FN_D13_NAF13, /* share with FLCTL */
|
||||
GPIO_FN_D14_NAF14, GPIO_FN_D15_NAF15, /* share with FLCTL */
|
||||
|
||||
GPIO_FN_D16, GPIO_FN_D17, GPIO_FN_D18, GPIO_FN_D19,
|
||||
GPIO_FN_D20, GPIO_FN_D21, GPIO_FN_D22, GPIO_FN_D23,
|
||||
GPIO_FN_D24, GPIO_FN_D25, GPIO_FN_D26, GPIO_FN_D27,
|
||||
GPIO_FN_D28, GPIO_FN_D29, GPIO_FN_D30, GPIO_FN_D31,
|
||||
|
||||
GPIO_FN_WE0_FWE, /* share with FLCTL */
|
||||
GPIO_FN_WE1,
|
||||
GPIO_FN_WE2_ICIORD, /* share with PCMCIA */
|
||||
GPIO_FN_WE3_ICIOWR, /* share with PCMCIA */
|
||||
GPIO_FN_CKO, GPIO_FN_BS, GPIO_FN_RDWR,
|
||||
GPIO_FN_RD_FSC, /* share with FLCTL */
|
||||
GPIO_FN_WAIT_PORT177, /* WAIT Port 90/177 */
|
||||
GPIO_FN_WAIT_PORT90,
|
||||
|
||||
GPIO_FN_FCE0, GPIO_FN_FCE1, GPIO_FN_FRB, /* FLCTL */
|
||||
|
||||
/* IRDA */
|
||||
GPIO_FN_IRDA_FIRSEL, GPIO_FN_IRDA_IN, GPIO_FN_IRDA_OUT,
|
||||
|
||||
/* ATAPI */
|
||||
GPIO_FN_IDE_D0, GPIO_FN_IDE_D1, GPIO_FN_IDE_D2,
|
||||
GPIO_FN_IDE_D3, GPIO_FN_IDE_D4, GPIO_FN_IDE_D5,
|
||||
GPIO_FN_IDE_D6, GPIO_FN_IDE_D7, GPIO_FN_IDE_D8,
|
||||
GPIO_FN_IDE_D9, GPIO_FN_IDE_D10, GPIO_FN_IDE_D11,
|
||||
GPIO_FN_IDE_D12, GPIO_FN_IDE_D13, GPIO_FN_IDE_D14,
|
||||
GPIO_FN_IDE_D15, GPIO_FN_IDE_A0, GPIO_FN_IDE_A1,
|
||||
GPIO_FN_IDE_A2, GPIO_FN_IDE_CS0, GPIO_FN_IDE_CS1,
|
||||
GPIO_FN_IDE_IOWR, GPIO_FN_IDE_IORD, GPIO_FN_IDE_IORDY,
|
||||
GPIO_FN_IDE_INT, GPIO_FN_IDE_RST, GPIO_FN_IDE_DIRECTION,
|
||||
GPIO_FN_IDE_EXBUF_ENB, GPIO_FN_IDE_IODACK, GPIO_FN_IDE_IODREQ,
|
||||
|
||||
/* RMII */
|
||||
GPIO_FN_RMII_CRS_DV, GPIO_FN_RMII_RX_ER, GPIO_FN_RMII_RXD0,
|
||||
GPIO_FN_RMII_RXD1, GPIO_FN_RMII_TX_EN, GPIO_FN_RMII_TXD0,
|
||||
GPIO_FN_RMII_MDC, GPIO_FN_RMII_TXD1, GPIO_FN_RMII_MDIO,
|
||||
GPIO_FN_RMII_REF50CK, /* for RMII */
|
||||
GPIO_FN_RMII_REF125CK, /* for GMII */
|
||||
|
||||
/* GEther */
|
||||
GPIO_FN_ET_TX_CLK, GPIO_FN_ET_TX_EN, GPIO_FN_ET_ETXD0,
|
||||
GPIO_FN_ET_ETXD1, GPIO_FN_ET_ETXD2, GPIO_FN_ET_ETXD3,
|
||||
GPIO_FN_ET_ETXD4, GPIO_FN_ET_ETXD5, /* for GEther */
|
||||
GPIO_FN_ET_ETXD6, GPIO_FN_ET_ETXD7, /* for GEther */
|
||||
GPIO_FN_ET_COL, GPIO_FN_ET_TX_ER,
|
||||
GPIO_FN_ET_RX_CLK, GPIO_FN_ET_RX_DV,
|
||||
GPIO_FN_ET_ERXD0, GPIO_FN_ET_ERXD1,
|
||||
GPIO_FN_ET_ERXD2, GPIO_FN_ET_ERXD3,
|
||||
GPIO_FN_ET_ERXD4, GPIO_FN_ET_ERXD5, /* for GEther */
|
||||
GPIO_FN_ET_ERXD6, GPIO_FN_ET_ERXD7, /* for GEther */
|
||||
GPIO_FN_ET_RX_ER, GPIO_FN_ET_CRS,
|
||||
GPIO_FN_ET_MDC, GPIO_FN_ET_MDIO,
|
||||
GPIO_FN_ET_LINK, GPIO_FN_ET_PHY_INT,
|
||||
GPIO_FN_ET_WOL, GPIO_FN_ET_GTX_CLK,
|
||||
|
||||
/* DMA0 */
|
||||
GPIO_FN_DREQ0, GPIO_FN_DACK0,
|
||||
|
||||
/* DMA1 */
|
||||
GPIO_FN_DREQ1, GPIO_FN_DACK1,
|
||||
|
||||
/* SYSC */
|
||||
GPIO_FN_RESETOUTS,
|
||||
GPIO_FN_RESETP_PULLUP,
|
||||
GPIO_FN_RESETP_PLAIN,
|
||||
|
||||
/* HDMI */
|
||||
GPIO_FN_HDMI_HPD,
|
||||
GPIO_FN_HDMI_CEC,
|
||||
|
||||
/* SDENC */
|
||||
GPIO_FN_SDENC_CPG,
|
||||
GPIO_FN_SDENC_DV_CLKI,
|
||||
|
||||
/* IRREM */
|
||||
GPIO_FN_IROUT,
|
||||
|
||||
/* DEBUG */
|
||||
GPIO_FN_EDEBGREQ_PULLDOWN,
|
||||
GPIO_FN_EDEBGREQ_PULLUP,
|
||||
|
||||
GPIO_FN_TRACEAUD_FROM_VIO,
|
||||
GPIO_FN_TRACEAUD_FROM_LCDC0,
|
||||
GPIO_FN_TRACEAUD_FROM_MEMC,
|
||||
};
|
||||
|
||||
/* DMA slave IDs */
|
||||
enum {
|
||||
SHDMA_SLAVE_INVALID,
|
||||
|
|
|
@ -28,5 +28,6 @@ extern void r8a7778_init_irq(void);
|
|||
extern void r8a7778_init_irq_dt(void);
|
||||
extern void r8a7778_clock_init(void);
|
||||
extern void r8a7778_init_irq_extpin(int irlm);
|
||||
extern void r8a7778_pinmux_init(void);
|
||||
|
||||
#endif /* __ASM_R8A7778_H__ */
|
||||
|
|
|
@ -15,397 +15,6 @@
|
|||
#include <linux/pm_domain.h>
|
||||
#include <mach/pm-rmobile.h>
|
||||
|
||||
/*
|
||||
* Pin Function Controller:
|
||||
* GPIO_FN_xx - GPIO used to select pin function
|
||||
* GPIO_PORTxx - GPIO mapped to real I/O pin on CPU
|
||||
*/
|
||||
enum {
|
||||
/* PORT */
|
||||
GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4,
|
||||
GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9,
|
||||
|
||||
GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14,
|
||||
GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19,
|
||||
|
||||
GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24,
|
||||
GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29,
|
||||
|
||||
GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34,
|
||||
GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39,
|
||||
|
||||
GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44,
|
||||
GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49,
|
||||
|
||||
GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54,
|
||||
GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59,
|
||||
|
||||
GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64,
|
||||
GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69,
|
||||
|
||||
GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74,
|
||||
GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79,
|
||||
|
||||
GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84,
|
||||
GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89,
|
||||
|
||||
GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94,
|
||||
GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99,
|
||||
|
||||
GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104,
|
||||
GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109,
|
||||
|
||||
GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114,
|
||||
GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119,
|
||||
|
||||
GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124,
|
||||
GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129,
|
||||
|
||||
GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134,
|
||||
GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139,
|
||||
|
||||
GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144,
|
||||
GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149,
|
||||
|
||||
GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154,
|
||||
GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159,
|
||||
|
||||
GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164,
|
||||
GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169,
|
||||
|
||||
GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174,
|
||||
GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179,
|
||||
|
||||
GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184,
|
||||
GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189,
|
||||
|
||||
GPIO_PORT190,
|
||||
|
||||
/* IRQ */
|
||||
GPIO_FN_IRQ0_6, /* PORT 6 */
|
||||
GPIO_FN_IRQ0_162, /* PORT 162 */
|
||||
GPIO_FN_IRQ1, /* PORT 12 */
|
||||
GPIO_FN_IRQ2_4, /* PORT 4 */
|
||||
GPIO_FN_IRQ2_5, /* PORT 5 */
|
||||
GPIO_FN_IRQ3_8, /* PORT 8 */
|
||||
GPIO_FN_IRQ3_16, /* PORT 16 */
|
||||
GPIO_FN_IRQ4_17, /* PORT 17 */
|
||||
GPIO_FN_IRQ4_163, /* PORT 163 */
|
||||
GPIO_FN_IRQ5, /* PORT 18 */
|
||||
GPIO_FN_IRQ6_39, /* PORT 39 */
|
||||
GPIO_FN_IRQ6_164, /* PORT 164 */
|
||||
GPIO_FN_IRQ7_40, /* PORT 40 */
|
||||
GPIO_FN_IRQ7_167, /* PORT 167 */
|
||||
GPIO_FN_IRQ8_41, /* PORT 41 */
|
||||
GPIO_FN_IRQ8_168, /* PORT 168 */
|
||||
GPIO_FN_IRQ9_42, /* PORT 42 */
|
||||
GPIO_FN_IRQ9_169, /* PORT 169 */
|
||||
GPIO_FN_IRQ10, /* PORT 65 */
|
||||
GPIO_FN_IRQ11, /* PORT 67 */
|
||||
GPIO_FN_IRQ12_80, /* PORT 80 */
|
||||
GPIO_FN_IRQ12_137, /* PORT 137 */
|
||||
GPIO_FN_IRQ13_81, /* PORT 81 */
|
||||
GPIO_FN_IRQ13_145, /* PORT 145 */
|
||||
GPIO_FN_IRQ14_82, /* PORT 82 */
|
||||
GPIO_FN_IRQ14_146, /* PORT 146 */
|
||||
GPIO_FN_IRQ15_83, /* PORT 83 */
|
||||
GPIO_FN_IRQ15_147, /* PORT 147 */
|
||||
GPIO_FN_IRQ16_84, /* PORT 84 */
|
||||
GPIO_FN_IRQ16_170, /* PORT 170 */
|
||||
GPIO_FN_IRQ17, /* PORT 85 */
|
||||
GPIO_FN_IRQ18, /* PORT 86 */
|
||||
GPIO_FN_IRQ19, /* PORT 87 */
|
||||
GPIO_FN_IRQ20, /* PORT 92 */
|
||||
GPIO_FN_IRQ21, /* PORT 93 */
|
||||
GPIO_FN_IRQ22, /* PORT 94 */
|
||||
GPIO_FN_IRQ23, /* PORT 95 */
|
||||
GPIO_FN_IRQ24, /* PORT 112 */
|
||||
GPIO_FN_IRQ25, /* PORT 119 */
|
||||
GPIO_FN_IRQ26_121, /* PORT 121 */
|
||||
GPIO_FN_IRQ26_172, /* PORT 172 */
|
||||
GPIO_FN_IRQ27_122, /* PORT 122 */
|
||||
GPIO_FN_IRQ27_180, /* PORT 180 */
|
||||
GPIO_FN_IRQ28_123, /* PORT 123 */
|
||||
GPIO_FN_IRQ28_181, /* PORT 181 */
|
||||
GPIO_FN_IRQ29_129, /* PORT 129 */
|
||||
GPIO_FN_IRQ29_182, /* PORT 182 */
|
||||
GPIO_FN_IRQ30_130, /* PORT 130 */
|
||||
GPIO_FN_IRQ30_183, /* PORT 183 */
|
||||
GPIO_FN_IRQ31_138, /* PORT 138 */
|
||||
GPIO_FN_IRQ31_184, /* PORT 184 */
|
||||
|
||||
/*
|
||||
* MSIOF0 (PORT 36, 37, 38, 39
|
||||
* 40, 41, 42, 43, 44, 45)
|
||||
*/
|
||||
GPIO_FN_MSIOF0_TSYNC, GPIO_FN_MSIOF0_TSCK,
|
||||
GPIO_FN_MSIOF0_RXD, GPIO_FN_MSIOF0_RSCK,
|
||||
GPIO_FN_MSIOF0_RSYNC, GPIO_FN_MSIOF0_MCK0,
|
||||
GPIO_FN_MSIOF0_MCK1, GPIO_FN_MSIOF0_SS1,
|
||||
GPIO_FN_MSIOF0_SS2, GPIO_FN_MSIOF0_TXD,
|
||||
|
||||
/*
|
||||
* MSIOF1 (PORT 39, 40, 41, 42, 43, 44
|
||||
* 84, 85, 86, 87, 88, 89, 90, 91, 92, 93)
|
||||
*/
|
||||
GPIO_FN_MSIOF1_TSCK_39, GPIO_FN_MSIOF1_TSYNC_40,
|
||||
GPIO_FN_MSIOF1_TSCK_88, GPIO_FN_MSIOF1_TSYNC_89,
|
||||
GPIO_FN_MSIOF1_TXD_41, GPIO_FN_MSIOF1_RXD_42,
|
||||
GPIO_FN_MSIOF1_TXD_90, GPIO_FN_MSIOF1_RXD_91,
|
||||
GPIO_FN_MSIOF1_SS1_43, GPIO_FN_MSIOF1_SS2_44,
|
||||
GPIO_FN_MSIOF1_SS1_92, GPIO_FN_MSIOF1_SS2_93,
|
||||
GPIO_FN_MSIOF1_RSCK, GPIO_FN_MSIOF1_RSYNC,
|
||||
GPIO_FN_MSIOF1_MCK0, GPIO_FN_MSIOF1_MCK1,
|
||||
|
||||
/*
|
||||
* MSIOF2 (PORT 134, 135, 136, 137, 138, 139
|
||||
* 148, 149, 150, 151)
|
||||
*/
|
||||
GPIO_FN_MSIOF2_RSCK, GPIO_FN_MSIOF2_RSYNC,
|
||||
GPIO_FN_MSIOF2_MCK0, GPIO_FN_MSIOF2_MCK1,
|
||||
GPIO_FN_MSIOF2_SS1, GPIO_FN_MSIOF2_SS2,
|
||||
GPIO_FN_MSIOF2_TSYNC, GPIO_FN_MSIOF2_TSCK,
|
||||
GPIO_FN_MSIOF2_RXD, GPIO_FN_MSIOF2_TXD,
|
||||
|
||||
/* MSIOF3 (PORT 76, 77, 78, 79, 80, 81, 82, 83) */
|
||||
GPIO_FN_BBIF1_RXD, GPIO_FN_BBIF1_TSYNC,
|
||||
GPIO_FN_BBIF1_TSCK, GPIO_FN_BBIF1_TXD,
|
||||
GPIO_FN_BBIF1_RSCK, GPIO_FN_BBIF1_RSYNC,
|
||||
GPIO_FN_BBIF1_FLOW, GPIO_FN_BB_RX_FLOW_N,
|
||||
|
||||
/* MSIOF4 (PORT 0, 1, 2, 3) */
|
||||
GPIO_FN_BBIF2_TSCK1, GPIO_FN_BBIF2_TSYNC1,
|
||||
GPIO_FN_BBIF2_TXD1, GPIO_FN_BBIF2_RXD,
|
||||
|
||||
/* FSI (PORT 4, 5, 6, 7, 8, 9, 10, 11, 15) */
|
||||
GPIO_FN_FSIACK, GPIO_FN_FSIBCK,
|
||||
GPIO_FN_FSIAILR, GPIO_FN_FSIAIBT,
|
||||
GPIO_FN_FSIAISLD, GPIO_FN_FSIAOMC,
|
||||
GPIO_FN_FSIAOLR, GPIO_FN_FSIAOBT,
|
||||
GPIO_FN_FSIAOSLD, GPIO_FN_FSIASPDIF_11,
|
||||
GPIO_FN_FSIASPDIF_15,
|
||||
|
||||
/* FMSI (PORT 12, 13, 14, 15, 16, 17, 18, 65) */
|
||||
GPIO_FN_FMSOCK, GPIO_FN_FMSOOLR,
|
||||
GPIO_FN_FMSIOLR, GPIO_FN_FMSOOBT,
|
||||
GPIO_FN_FMSIOBT, GPIO_FN_FMSOSLD,
|
||||
GPIO_FN_FMSOILR, GPIO_FN_FMSIILR,
|
||||
GPIO_FN_FMSOIBT, GPIO_FN_FMSIIBT,
|
||||
GPIO_FN_FMSISLD, GPIO_FN_FMSICK,
|
||||
|
||||
/* SCIFA0 (PORT 152, 153, 156, 157, 158) */
|
||||
GPIO_FN_SCIFA0_TXD, GPIO_FN_SCIFA0_RXD,
|
||||
GPIO_FN_SCIFA0_SCK, GPIO_FN_SCIFA0_RTS,
|
||||
GPIO_FN_SCIFA0_CTS,
|
||||
|
||||
/* SCIFA1 (PORT 154, 155, 159, 160, 161) */
|
||||
GPIO_FN_SCIFA1_TXD, GPIO_FN_SCIFA1_RXD,
|
||||
GPIO_FN_SCIFA1_SCK, GPIO_FN_SCIFA1_RTS,
|
||||
GPIO_FN_SCIFA1_CTS,
|
||||
|
||||
/* SCIFA2 (PORT 94, 95, 96, 97, 98) */
|
||||
GPIO_FN_SCIFA2_CTS1, GPIO_FN_SCIFA2_RTS1,
|
||||
GPIO_FN_SCIFA2_TXD1, GPIO_FN_SCIFA2_RXD1,
|
||||
GPIO_FN_SCIFA2_SCK1,
|
||||
|
||||
/* SCIFA3 (PORT 43, 44,
|
||||
140, 141, 142, 143, 144) */
|
||||
GPIO_FN_SCIFA3_CTS_43, GPIO_FN_SCIFA3_CTS_140,
|
||||
GPIO_FN_SCIFA3_RTS_44, GPIO_FN_SCIFA3_RTS_141,
|
||||
GPIO_FN_SCIFA3_SCK, GPIO_FN_SCIFA3_TXD,
|
||||
GPIO_FN_SCIFA3_RXD,
|
||||
|
||||
/* SCIFA4 (PORT 5, 6) */
|
||||
GPIO_FN_SCIFA4_RXD, GPIO_FN_SCIFA4_TXD,
|
||||
|
||||
/* SCIFA5 (PORT 8, 12) */
|
||||
GPIO_FN_SCIFA5_RXD, GPIO_FN_SCIFA5_TXD,
|
||||
|
||||
/* SCIFB (PORT 162, 163, 164, 165, 166) */
|
||||
GPIO_FN_SCIFB_SCK, GPIO_FN_SCIFB_RTS,
|
||||
GPIO_FN_SCIFB_CTS, GPIO_FN_SCIFB_TXD,
|
||||
GPIO_FN_SCIFB_RXD,
|
||||
|
||||
/*
|
||||
* CEU (PORT 16, 17,
|
||||
* 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
|
||||
* 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
|
||||
* 120)
|
||||
*/
|
||||
GPIO_FN_VIO_HD, GPIO_FN_VIO_CKO1, GPIO_FN_VIO_CKO2,
|
||||
GPIO_FN_VIO_VD, GPIO_FN_VIO_CLK, GPIO_FN_VIO_FIELD,
|
||||
GPIO_FN_VIO_CKO,
|
||||
GPIO_FN_VIO_D0, GPIO_FN_VIO_D1, GPIO_FN_VIO_D2,
|
||||
GPIO_FN_VIO_D3, GPIO_FN_VIO_D4, GPIO_FN_VIO_D5,
|
||||
GPIO_FN_VIO_D6, GPIO_FN_VIO_D7, GPIO_FN_VIO_D8,
|
||||
GPIO_FN_VIO_D9, GPIO_FN_VIO_D10, GPIO_FN_VIO_D11,
|
||||
GPIO_FN_VIO_D12, GPIO_FN_VIO_D13, GPIO_FN_VIO_D14,
|
||||
GPIO_FN_VIO_D15,
|
||||
|
||||
/* USB0 (PORT 113, 114, 115, 116, 117, 167) */
|
||||
GPIO_FN_IDIN_0, GPIO_FN_EXTLP_0,
|
||||
GPIO_FN_OVCN2_0, GPIO_FN_PWEN_0,
|
||||
GPIO_FN_OVCN_0, GPIO_FN_VBUS0_0,
|
||||
|
||||
/* USB1 (PORT 18, 113, 114, 115, 116, 117, 138, 162, 168) */
|
||||
GPIO_FN_IDIN_1_18, GPIO_FN_IDIN_1_113,
|
||||
GPIO_FN_PWEN_1_115, GPIO_FN_PWEN_1_138,
|
||||
GPIO_FN_OVCN_1_114, GPIO_FN_OVCN_1_162,
|
||||
GPIO_FN_EXTLP_1, GPIO_FN_OVCN2_1,
|
||||
GPIO_FN_VBUS0_1,
|
||||
|
||||
/* GPIO (PORT 41, 42, 43, 44) */
|
||||
GPIO_FN_GPI0, GPIO_FN_GPI1, GPIO_FN_GPO0, GPIO_FN_GPO1,
|
||||
|
||||
/*
|
||||
* BSC (PORT 19,
|
||||
* 20, 21, 22, 25, 26, 27, 28, 29,
|
||||
* 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
|
||||
* 40, 41, 42, 43, 44, 45,
|
||||
* 62, 63, 64, 65, 66, 67,
|
||||
* 71, 72, 74, 75)
|
||||
*/
|
||||
GPIO_FN_BS, GPIO_FN_WE1,
|
||||
GPIO_FN_CKO, GPIO_FN_WAIT, GPIO_FN_RDWR,
|
||||
|
||||
GPIO_FN_A0, GPIO_FN_A1, GPIO_FN_A2, GPIO_FN_A3,
|
||||
GPIO_FN_A6, GPIO_FN_A7, GPIO_FN_A8, GPIO_FN_A9,
|
||||
GPIO_FN_A10, GPIO_FN_A11, GPIO_FN_A12, GPIO_FN_A13,
|
||||
GPIO_FN_A14, GPIO_FN_A15, GPIO_FN_A16, GPIO_FN_A17,
|
||||
GPIO_FN_A18, GPIO_FN_A19, GPIO_FN_A20, GPIO_FN_A21,
|
||||
GPIO_FN_A22, GPIO_FN_A23, GPIO_FN_A24, GPIO_FN_A25,
|
||||
GPIO_FN_A26,
|
||||
|
||||
GPIO_FN_CS0, GPIO_FN_CS2, GPIO_FN_CS4,
|
||||
GPIO_FN_CS5A, GPIO_FN_CS5B, GPIO_FN_CS6A,
|
||||
|
||||
/*
|
||||
* BSC/FLCTL (PORT 23, 24,
|
||||
* 46, 47, 48, 49,
|
||||
* 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
||||
* 60, 61, 69, 70)
|
||||
*/
|
||||
GPIO_FN_RD_FSC, GPIO_FN_WE0_FWE,
|
||||
GPIO_FN_A4_FOE, GPIO_FN_A5_FCDE,
|
||||
GPIO_FN_D0_NAF0, GPIO_FN_D1_NAF1, GPIO_FN_D2_NAF2,
|
||||
GPIO_FN_D3_NAF3, GPIO_FN_D4_NAF4, GPIO_FN_D5_NAF5,
|
||||
GPIO_FN_D6_NAF6, GPIO_FN_D7_NAF7, GPIO_FN_D8_NAF8,
|
||||
GPIO_FN_D9_NAF9, GPIO_FN_D10_NAF10, GPIO_FN_D11_NAF11,
|
||||
GPIO_FN_D12_NAF12, GPIO_FN_D13_NAF13, GPIO_FN_D14_NAF14,
|
||||
GPIO_FN_D15_NAF15,
|
||||
|
||||
/* SPU2 (PORT 65) */
|
||||
GPIO_FN_VINT_I,
|
||||
|
||||
/* FLCTL (PORT 66, 68, 73) */
|
||||
GPIO_FN_FCE1, GPIO_FN_FCE0, GPIO_FN_FRB,
|
||||
|
||||
/* HSI (PORT 76, 77, 78, 79, 80, 81, 82, 83) */
|
||||
GPIO_FN_GP_RX_FLAG, GPIO_FN_GP_RX_DATA, GPIO_FN_GP_TX_READY,
|
||||
GPIO_FN_GP_RX_WAKE, GPIO_FN_MP_TX_FLAG, GPIO_FN_MP_TX_DATA,
|
||||
GPIO_FN_MP_RX_READY, GPIO_FN_MP_TX_WAKE,
|
||||
|
||||
/*
|
||||
* MFI (PORT 76, 77, 78, 79,
|
||||
* 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
|
||||
* 90, 91, 92, 93, 94, 95, 96, 97, 98, 99)
|
||||
*/
|
||||
GPIO_FN_MFIv6, /* see MSEL4CR 6 */
|
||||
GPIO_FN_MFIv4, /* see MSEL4CR 6 */
|
||||
|
||||
GPIO_FN_MEMC_CS0, GPIO_FN_MEMC_BUSCLK_MEMC_A0,
|
||||
GPIO_FN_MEMC_CS1_MEMC_A1, GPIO_FN_MEMC_ADV_MEMC_DREQ0,
|
||||
GPIO_FN_MEMC_WAIT_MEMC_DREQ1, GPIO_FN_MEMC_NOE,
|
||||
GPIO_FN_MEMC_NWE, GPIO_FN_MEMC_INT,
|
||||
|
||||
GPIO_FN_MEMC_AD0, GPIO_FN_MEMC_AD1, GPIO_FN_MEMC_AD2,
|
||||
GPIO_FN_MEMC_AD3, GPIO_FN_MEMC_AD4, GPIO_FN_MEMC_AD5,
|
||||
GPIO_FN_MEMC_AD6, GPIO_FN_MEMC_AD7, GPIO_FN_MEMC_AD8,
|
||||
GPIO_FN_MEMC_AD9, GPIO_FN_MEMC_AD10, GPIO_FN_MEMC_AD11,
|
||||
GPIO_FN_MEMC_AD12, GPIO_FN_MEMC_AD13, GPIO_FN_MEMC_AD14,
|
||||
GPIO_FN_MEMC_AD15,
|
||||
|
||||
/* SIM (PORT 94, 95, 98) */
|
||||
GPIO_FN_SIM_RST, GPIO_FN_SIM_CLK, GPIO_FN_SIM_D,
|
||||
|
||||
/* TPU (PORT 93, 99, 112, 160, 161) */
|
||||
GPIO_FN_TPU0TO0, GPIO_FN_TPU0TO1,
|
||||
GPIO_FN_TPU0TO2_93, GPIO_FN_TPU0TO2_99,
|
||||
GPIO_FN_TPU0TO3,
|
||||
|
||||
/* I2C2 (PORT 110, 111) */
|
||||
GPIO_FN_I2C_SCL2, GPIO_FN_I2C_SDA2,
|
||||
|
||||
/* I2C3(1) (PORT 114, 115) */
|
||||
GPIO_FN_I2C_SCL3, GPIO_FN_I2C_SDA3,
|
||||
|
||||
/* I2C3(2) (PORT 137, 145) */
|
||||
GPIO_FN_I2C_SCL3S, GPIO_FN_I2C_SDA3S,
|
||||
|
||||
/* I2C4(2) (PORT 116, 117) */
|
||||
GPIO_FN_I2C_SCL4, GPIO_FN_I2C_SDA4,
|
||||
|
||||
/* I2C4(2) (PORT 146, 147) */
|
||||
GPIO_FN_I2C_SCL4S, GPIO_FN_I2C_SDA4S,
|
||||
|
||||
/*
|
||||
* KEYSC (PORT 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
||||
* 130, 131, 132, 133, 134, 135, 136)
|
||||
*/
|
||||
GPIO_FN_KEYOUT0, GPIO_FN_KEYIN0_121, GPIO_FN_KEYIN0_136,
|
||||
GPIO_FN_KEYOUT1, GPIO_FN_KEYIN1_122, GPIO_FN_KEYIN1_135,
|
||||
GPIO_FN_KEYOUT2, GPIO_FN_KEYIN2_123, GPIO_FN_KEYIN2_134,
|
||||
GPIO_FN_KEYOUT3, GPIO_FN_KEYIN3_124, GPIO_FN_KEYIN3_133,
|
||||
GPIO_FN_KEYOUT4, GPIO_FN_KEYIN4,
|
||||
GPIO_FN_KEYOUT5, GPIO_FN_KEYIN5,
|
||||
GPIO_FN_KEYOUT6, GPIO_FN_KEYIN6,
|
||||
GPIO_FN_KEYOUT7, GPIO_FN_KEYIN7,
|
||||
|
||||
/*
|
||||
* LCDC (PORT 121, 122, 123, 124, 125, 126, 127, 128, 129,
|
||||
* 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
|
||||
* 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
|
||||
* 150, 151)
|
||||
*/
|
||||
GPIO_FN_LCDC0_SELECT, /* LCDC 0 */
|
||||
GPIO_FN_LCDC1_SELECT, /* LCDC 1 */
|
||||
GPIO_FN_LCDHSYN, GPIO_FN_LCDCS, GPIO_FN_LCDVSYN,
|
||||
GPIO_FN_LCDDCK, GPIO_FN_LCDWR, GPIO_FN_LCDRD,
|
||||
GPIO_FN_LCDDISP, GPIO_FN_LCDRS, GPIO_FN_LCDLCLK,
|
||||
GPIO_FN_LCDDON,
|
||||
|
||||
GPIO_FN_LCDD0, GPIO_FN_LCDD1, GPIO_FN_LCDD2, GPIO_FN_LCDD3,
|
||||
GPIO_FN_LCDD4, GPIO_FN_LCDD5, GPIO_FN_LCDD6, GPIO_FN_LCDD7,
|
||||
GPIO_FN_LCDD8, GPIO_FN_LCDD9, GPIO_FN_LCDD10, GPIO_FN_LCDD11,
|
||||
GPIO_FN_LCDD12, GPIO_FN_LCDD13, GPIO_FN_LCDD14, GPIO_FN_LCDD15,
|
||||
GPIO_FN_LCDD16, GPIO_FN_LCDD17, GPIO_FN_LCDD18, GPIO_FN_LCDD19,
|
||||
GPIO_FN_LCDD20, GPIO_FN_LCDD21, GPIO_FN_LCDD22, GPIO_FN_LCDD23,
|
||||
|
||||
/* IRDA (PORT 139, 140, 141, 142) */
|
||||
GPIO_FN_IRDA_OUT, GPIO_FN_IRDA_IN, GPIO_FN_IRDA_FIRSEL,
|
||||
GPIO_FN_IROUT_139, GPIO_FN_IROUT_140,
|
||||
|
||||
/* TSIF1 (PORT 156, 157, 158, 159) */
|
||||
GPIO_FN_TS0_1SELECT, /* TSIF0 - 1 select */
|
||||
GPIO_FN_TS0_2SELECT, /* TSIF0 - 2 select */
|
||||
GPIO_FN_TS1_1SELECT, /* TSIF1 - 1 select */
|
||||
GPIO_FN_TS1_2SELECT, /* TSIF1 - 2 select */
|
||||
|
||||
GPIO_FN_TS_SPSYNC1, GPIO_FN_TS_SDAT1,
|
||||
GPIO_FN_TS_SDEN1, GPIO_FN_TS_SCK1,
|
||||
|
||||
/* TSIF2 (PORT 137, 145, 146, 147) */
|
||||
GPIO_FN_TS_SPSYNC2, GPIO_FN_TS_SDAT2,
|
||||
GPIO_FN_TS_SDEN2, GPIO_FN_TS_SCK2,
|
||||
|
||||
/* HDMI (PORT 169, 170) */
|
||||
GPIO_FN_HDMI_HPD, GPIO_FN_HDMI_CEC,
|
||||
|
||||
/* SDENC see MSEL4CR 19 */
|
||||
GPIO_FN_SDENC_CPG,
|
||||
GPIO_FN_SDENC_DV_CLKI,
|
||||
};
|
||||
|
||||
/* DMA slave IDs */
|
||||
enum {
|
||||
SHDMA_SLAVE_INVALID,
|
||||
|
|
|
@ -70,29 +70,15 @@ void __init r8a7740_map_io(void)
|
|||
}
|
||||
|
||||
/* PFC */
|
||||
static struct resource r8a7740_pfc_resources[] = {
|
||||
[0] = {
|
||||
.start = 0xe6050000,
|
||||
.end = 0xe6057fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0xe605800c,
|
||||
.end = 0xe605802b,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device r8a7740_pfc_device = {
|
||||
.name = "pfc-r8a7740",
|
||||
.id = -1,
|
||||
.resource = r8a7740_pfc_resources,
|
||||
.num_resources = ARRAY_SIZE(r8a7740_pfc_resources),
|
||||
static const struct resource pfc_resources[] = {
|
||||
DEFINE_RES_MEM(0xe6050000, 0x8000),
|
||||
DEFINE_RES_MEM(0xe605800c, 0x0020),
|
||||
};
|
||||
|
||||
void __init r8a7740_pinmux_init(void)
|
||||
{
|
||||
platform_device_register(&r8a7740_pfc_device);
|
||||
platform_device_register_simple("pfc-r8a7740", -1, pfc_resources,
|
||||
ARRAY_SIZE(pfc_resources));
|
||||
}
|
||||
|
||||
static struct renesas_intc_irqpin_config irqpin0_platform_data = {
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/platform_data/gpio-rcar.h>
|
||||
#include <linux/platform_data/irq-renesas-intc-irqpin.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/irqchip.h>
|
||||
|
@ -94,6 +95,52 @@ static struct resource ether_resources[] = {
|
|||
&sh_tmu##idx##_platform_data, \
|
||||
sizeof(sh_tmu##idx##_platform_data))
|
||||
|
||||
/* PFC/GPIO */
|
||||
static struct resource pfc_resources[] = {
|
||||
DEFINE_RES_MEM(0xfffc0000, 0x118),
|
||||
};
|
||||
|
||||
#define R8A7778_GPIO(idx) \
|
||||
static struct resource r8a7778_gpio##idx##_resources[] = { \
|
||||
DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \
|
||||
DEFINE_RES_IRQ(gic_iid(0x87)), \
|
||||
}; \
|
||||
\
|
||||
static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = { \
|
||||
.gpio_base = 32 * (idx), \
|
||||
.irq_base = GPIO_IRQ_BASE(idx), \
|
||||
.number_of_pins = 32, \
|
||||
.pctl_name = "pfc-r8a7778", \
|
||||
}
|
||||
|
||||
R8A7778_GPIO(0);
|
||||
R8A7778_GPIO(1);
|
||||
R8A7778_GPIO(2);
|
||||
R8A7778_GPIO(3);
|
||||
R8A7778_GPIO(4);
|
||||
|
||||
#define r8a7778_register_gpio(idx) \
|
||||
platform_device_register_resndata( \
|
||||
&platform_bus, "gpio_rcar", idx, \
|
||||
r8a7778_gpio##idx##_resources, \
|
||||
ARRAY_SIZE(r8a7778_gpio##idx##_resources), \
|
||||
&r8a7778_gpio##idx##_platform_data, \
|
||||
sizeof(r8a7778_gpio##idx##_platform_data))
|
||||
|
||||
void __init r8a7778_pinmux_init(void)
|
||||
{
|
||||
platform_device_register_simple(
|
||||
"pfc-r8a7778", -1,
|
||||
pfc_resources,
|
||||
ARRAY_SIZE(pfc_resources));
|
||||
|
||||
r8a7778_register_gpio(0);
|
||||
r8a7778_register_gpio(1);
|
||||
r8a7778_register_gpio(2);
|
||||
r8a7778_register_gpio(3);
|
||||
r8a7778_register_gpio(4);
|
||||
}
|
||||
|
||||
void __init r8a7778_add_standard_devices(void)
|
||||
{
|
||||
int i;
|
||||
|
|
|
@ -65,11 +65,7 @@ void __init r8a7779_map_io(void)
|
|||
}
|
||||
|
||||
static struct resource r8a7779_pfc_resources[] = {
|
||||
[0] = {
|
||||
.start = 0xfffc0000,
|
||||
.end = 0xfffc023b,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
DEFINE_RES_MEM(0xfffc0000, 0x023c),
|
||||
};
|
||||
|
||||
static struct platform_device r8a7779_pfc_device = {
|
||||
|
@ -81,15 +77,8 @@ static struct platform_device r8a7779_pfc_device = {
|
|||
|
||||
#define R8A7779_GPIO(idx, npins) \
|
||||
static struct resource r8a7779_gpio##idx##_resources[] = { \
|
||||
[0] = { \
|
||||
.start = 0xffc40000 + 0x1000 * (idx), \
|
||||
.end = 0xffc4002b + 0x1000 * (idx), \
|
||||
.flags = IORESOURCE_MEM, \
|
||||
}, \
|
||||
[1] = { \
|
||||
.start = gic_iid(0xad + (idx)), \
|
||||
.flags = IORESOURCE_IRQ, \
|
||||
} \
|
||||
DEFINE_RES_MEM(0xffc40000 + (0x1000 * (idx)), 0x002c), \
|
||||
DEFINE_RES_IRQ(gic_iid(0xad + (idx))), \
|
||||
}; \
|
||||
\
|
||||
static struct gpio_rcar_config r8a7779_gpio##idx##_platform_data = { \
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <linux/platform_data/gpio-rcar.h>
|
||||
#include <linux/platform_data/irq-renesas-irqc.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
|
@ -31,13 +32,46 @@
|
|||
|
||||
static const struct resource pfc_resources[] = {
|
||||
DEFINE_RES_MEM(0xe6060000, 0x250),
|
||||
DEFINE_RES_MEM(0xe6050000, 0x5050),
|
||||
};
|
||||
|
||||
#define R8A7790_GPIO(idx) \
|
||||
static struct resource r8a7790_gpio##idx##_resources[] = { \
|
||||
DEFINE_RES_MEM(0xe6050000 + 0x1000 * (idx), 0x50), \
|
||||
DEFINE_RES_IRQ(gic_spi(4 + (idx))), \
|
||||
}; \
|
||||
\
|
||||
static struct gpio_rcar_config r8a7790_gpio##idx##_platform_data = { \
|
||||
.gpio_base = 32 * (idx), \
|
||||
.irq_base = 0, \
|
||||
.number_of_pins = 32, \
|
||||
.pctl_name = "pfc-r8a7790", \
|
||||
.has_both_edge_trigger = 1, \
|
||||
}; \
|
||||
|
||||
R8A7790_GPIO(0);
|
||||
R8A7790_GPIO(1);
|
||||
R8A7790_GPIO(2);
|
||||
R8A7790_GPIO(3);
|
||||
R8A7790_GPIO(4);
|
||||
R8A7790_GPIO(5);
|
||||
|
||||
#define r8a7790_register_gpio(idx) \
|
||||
platform_device_register_resndata(&platform_bus, "gpio_rcar", idx, \
|
||||
r8a7790_gpio##idx##_resources, \
|
||||
ARRAY_SIZE(r8a7790_gpio##idx##_resources), \
|
||||
&r8a7790_gpio##idx##_platform_data, \
|
||||
sizeof(r8a7790_gpio##idx##_platform_data))
|
||||
|
||||
void __init r8a7790_pinmux_init(void)
|
||||
{
|
||||
platform_device_register_simple("pfc-r8a7790", -1, pfc_resources,
|
||||
ARRAY_SIZE(pfc_resources));
|
||||
r8a7790_register_gpio(0);
|
||||
r8a7790_register_gpio(1);
|
||||
r8a7790_register_gpio(2);
|
||||
r8a7790_register_gpio(3);
|
||||
r8a7790_register_gpio(4);
|
||||
r8a7790_register_gpio(5);
|
||||
}
|
||||
|
||||
#define SCIF_COMMON(scif_type, baseaddr, irq) \
|
||||
|
|
|
@ -49,6 +49,9 @@ struct gpio_rcar_priv {
|
|||
#define POSNEG 0x20
|
||||
#define EDGLEVEL 0x24
|
||||
#define FILONOFF 0x28
|
||||
#define BOTHEDGE 0x4c
|
||||
|
||||
#define RCAR_MAX_GPIO_PER_BANK 32
|
||||
|
||||
static inline u32 gpio_rcar_read(struct gpio_rcar_priv *p, int offs)
|
||||
{
|
||||
|
@ -91,7 +94,8 @@ static void gpio_rcar_irq_enable(struct irq_data *d)
|
|||
static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,
|
||||
unsigned int hwirq,
|
||||
bool active_high_rising_edge,
|
||||
bool level_trigger)
|
||||
bool level_trigger,
|
||||
bool both)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
@ -108,6 +112,10 @@ static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,
|
|||
/* Configure edge or level trigger in EDGLEVEL */
|
||||
gpio_rcar_modify_bit(p, EDGLEVEL, hwirq, !level_trigger);
|
||||
|
||||
/* Select one edge or both edges in BOTHEDGE */
|
||||
if (p->config.has_both_edge_trigger)
|
||||
gpio_rcar_modify_bit(p, BOTHEDGE, hwirq, both);
|
||||
|
||||
/* Select "Interrupt Input Mode" in IOINTSEL */
|
||||
gpio_rcar_modify_bit(p, IOINTSEL, hwirq, true);
|
||||
|
||||
|
@ -127,16 +135,26 @@ static int gpio_rcar_irq_set_type(struct irq_data *d, unsigned int type)
|
|||
|
||||
switch (type & IRQ_TYPE_SENSE_MASK) {
|
||||
case IRQ_TYPE_LEVEL_HIGH:
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true);
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true,
|
||||
false);
|
||||
break;
|
||||
case IRQ_TYPE_LEVEL_LOW:
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true);
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true,
|
||||
false);
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_RISING:
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false);
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false,
|
||||
false);
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_FALLING:
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false);
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false,
|
||||
false);
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_BOTH:
|
||||
if (!p->config.has_both_edge_trigger)
|
||||
return -EINVAL;
|
||||
gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false,
|
||||
true);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -258,9 +276,39 @@ static struct irq_domain_ops gpio_rcar_irq_domain_ops = {
|
|||
.map = gpio_rcar_irq_domain_map,
|
||||
};
|
||||
|
||||
static void gpio_rcar_parse_pdata(struct gpio_rcar_priv *p)
|
||||
{
|
||||
struct gpio_rcar_config *pdata = p->pdev->dev.platform_data;
|
||||
#ifdef CONFIG_OF
|
||||
struct device_node *np = p->pdev->dev.of_node;
|
||||
struct of_phandle_args args;
|
||||
int ret;
|
||||
#endif
|
||||
|
||||
if (pdata)
|
||||
p->config = *pdata;
|
||||
#ifdef CONFIG_OF
|
||||
else if (np) {
|
||||
ret = of_parse_phandle_with_args(np, "gpio-ranges",
|
||||
"#gpio-range-cells", 0, &args);
|
||||
p->config.number_of_pins = ret == 0 && args.args_count == 3
|
||||
? args.args[2]
|
||||
: RCAR_MAX_GPIO_PER_BANK;
|
||||
p->config.gpio_base = -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (p->config.number_of_pins == 0 ||
|
||||
p->config.number_of_pins > RCAR_MAX_GPIO_PER_BANK) {
|
||||
dev_warn(&p->pdev->dev,
|
||||
"Invalid number of gpio lines %u, using %u\n",
|
||||
p->config.number_of_pins, RCAR_MAX_GPIO_PER_BANK);
|
||||
p->config.number_of_pins = RCAR_MAX_GPIO_PER_BANK;
|
||||
}
|
||||
}
|
||||
|
||||
static int gpio_rcar_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct gpio_rcar_config *pdata = pdev->dev.platform_data;
|
||||
struct gpio_rcar_priv *p;
|
||||
struct resource *io, *irq;
|
||||
struct gpio_chip *gpio_chip;
|
||||
|
@ -275,14 +323,14 @@ static int gpio_rcar_probe(struct platform_device *pdev)
|
|||
goto err0;
|
||||
}
|
||||
|
||||
/* deal with driver instance configuration */
|
||||
if (pdata)
|
||||
p->config = *pdata;
|
||||
|
||||
p->pdev = pdev;
|
||||
platform_set_drvdata(pdev, p);
|
||||
spin_lock_init(&p->lock);
|
||||
|
||||
/* Get device configuration from DT node or platform data. */
|
||||
gpio_rcar_parse_pdata(p);
|
||||
|
||||
platform_set_drvdata(pdev, p);
|
||||
|
||||
io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
|
||||
|
@ -309,6 +357,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
|
|||
gpio_chip->set = gpio_rcar_set;
|
||||
gpio_chip->to_irq = gpio_rcar_to_irq;
|
||||
gpio_chip->label = name;
|
||||
gpio_chip->dev = &pdev->dev;
|
||||
gpio_chip->owner = THIS_MODULE;
|
||||
gpio_chip->base = p->config.gpio_base;
|
||||
gpio_chip->ngpio = p->config.number_of_pins;
|
||||
|
@ -333,7 +382,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
if (devm_request_irq(&pdev->dev, irq->start,
|
||||
gpio_rcar_irq_handler, 0, name, p)) {
|
||||
gpio_rcar_irq_handler, IRQF_SHARED, name, p)) {
|
||||
dev_err(&pdev->dev, "failed to request IRQ\n");
|
||||
ret = -ENOENT;
|
||||
goto err1;
|
||||
|
@ -355,10 +404,12 @@ static int gpio_rcar_probe(struct platform_device *pdev)
|
|||
p->config.irq_base, ret);
|
||||
}
|
||||
|
||||
ret = gpiochip_add_pin_range(gpio_chip, p->config.pctl_name, 0,
|
||||
gpio_chip->base, gpio_chip->ngpio);
|
||||
if (ret < 0)
|
||||
dev_warn(&pdev->dev, "failed to add pin range\n");
|
||||
if (p->config.pctl_name) {
|
||||
ret = gpiochip_add_pin_range(gpio_chip, p->config.pctl_name, 0,
|
||||
gpio_chip->base, gpio_chip->ngpio);
|
||||
if (ret < 0)
|
||||
dev_warn(&pdev->dev, "failed to add pin range\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -381,11 +432,22 @@ static int gpio_rcar_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id gpio_rcar_of_table[] = {
|
||||
{
|
||||
.compatible = "renesas,gpio-rcar",
|
||||
},
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(of, gpio_rcar_of_table);
|
||||
#endif
|
||||
|
||||
static struct platform_driver gpio_rcar_device_driver = {
|
||||
.probe = gpio_rcar_probe,
|
||||
.remove = gpio_rcar_remove,
|
||||
.driver = {
|
||||
.name = "gpio_rcar",
|
||||
.of_match_table = of_match_ptr(gpio_rcar_of_table),
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
if ARCH_SHMOBILE || SUPERH
|
||||
|
||||
config PINCTRL_SH_PFC
|
||||
# XXX move off the gpio dependency
|
||||
depends on GPIOLIB
|
||||
select GPIO_SH_PFC if ARCH_REQUIRE_GPIOLIB
|
||||
select PINMUX
|
||||
select PINCONF
|
||||
|
@ -32,11 +30,21 @@ config PINCTRL_PFC_R8A7740
|
|||
depends on ARCH_R8A7740
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_R8A7778
|
||||
def_bool y
|
||||
depends on ARCH_R8A7778
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_R8A7779
|
||||
def_bool y
|
||||
depends on ARCH_R8A7779
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_R8A7790
|
||||
def_bool y
|
||||
depends on ARCH_R8A7790
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_SH7203
|
||||
def_bool y
|
||||
depends on CPU_SUBTYPE_SH7203
|
||||
|
@ -64,6 +72,7 @@ config PINCTRL_PFC_SH73A0
|
|||
def_bool y
|
||||
depends on ARCH_SH73A0
|
||||
select PINCTRL_SH_PFC
|
||||
select REGULATOR
|
||||
|
||||
config PINCTRL_PFC_SH7720
|
||||
def_bool y
|
||||
|
|
|
@ -5,7 +5,9 @@ endif
|
|||
obj-$(CONFIG_PINCTRL_SH_PFC) += sh-pfc.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A73A4) += pfc-r8a73a4.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A7740) += pfc-r8a7740.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A7778) += pfc-r8a7778.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A7779) += pfc-r8a7779.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A7790) += pfc-r8a7790.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o
|
||||
|
|
|
@ -372,6 +372,12 @@ static int sh_pfc_probe(struct platform_device *pdev)
|
|||
|
||||
spin_lock_init(&pfc->lock);
|
||||
|
||||
if (info->ops && info->ops->init) {
|
||||
ret = info->ops->init(pfc);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
pinctrl_provide_dummies();
|
||||
|
||||
/*
|
||||
|
@ -379,7 +385,7 @@ static int sh_pfc_probe(struct platform_device *pdev)
|
|||
*/
|
||||
ret = sh_pfc_register_pinctrl(pfc);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
goto error;
|
||||
|
||||
#ifdef CONFIG_GPIO_SH_PFC
|
||||
/*
|
||||
|
@ -401,6 +407,11 @@ static int sh_pfc_probe(struct platform_device *pdev)
|
|||
dev_info(pfc->dev, "%s support registered\n", info->name);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
if (info->ops && info->ops->exit)
|
||||
info->ops->exit(pfc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sh_pfc_remove(struct platform_device *pdev)
|
||||
|
@ -412,6 +423,9 @@ static int sh_pfc_remove(struct platform_device *pdev)
|
|||
#endif
|
||||
sh_pfc_unregister_pinctrl(pfc);
|
||||
|
||||
if (pfc->info->ops && pfc->info->ops->exit)
|
||||
pfc->info->ops->exit(pfc);
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
return 0;
|
||||
|
@ -424,9 +438,15 @@ static const struct platform_device_id sh_pfc_id_table[] = {
|
|||
#ifdef CONFIG_PINCTRL_PFC_R8A7740
|
||||
{ "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info },
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A7778
|
||||
{ "pfc-r8a7778", (kernel_ulong_t)&r8a7778_pinmux_info },
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A7779
|
||||
{ "pfc-r8a7779", (kernel_ulong_t)&r8a7779_pinmux_info },
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A7790
|
||||
{ "pfc-r8a7790", (kernel_ulong_t)&r8a7790_pinmux_info },
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_SH7203
|
||||
{ "pfc-sh7203", (kernel_ulong_t)&sh7203_pinmux_info },
|
||||
#endif
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#define __SH_PFC_CORE_H__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "sh_pfc.h"
|
||||
|
@ -27,6 +28,7 @@ struct sh_pfc_pinctrl;
|
|||
struct sh_pfc {
|
||||
struct device *dev;
|
||||
const struct sh_pfc_soc_info *info;
|
||||
void *soc_data;
|
||||
spinlock_t lock;
|
||||
|
||||
unsigned int num_windows;
|
||||
|
@ -56,7 +58,9 @@ int sh_pfc_config_mux(struct sh_pfc *pfc, unsigned mark, int pinmux_type);
|
|||
|
||||
extern const struct sh_pfc_soc_info r8a73a4_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a7740_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a7778_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a7779_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a7790_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7203_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7264_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7269_pinmux_info;
|
||||
|
|
File diff suppressed because it is too large
Load diff
2783
drivers/pinctrl/sh-pfc/pfc-r8a7778.c
Normal file
2783
drivers/pinctrl/sh-pfc/pfc-r8a7778.c
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
3835
drivers/pinctrl/sh-pfc/pfc-r8a7790.c
Normal file
3835
drivers/pinctrl/sh-pfc/pfc-r8a7790.c
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -20,9 +20,12 @@
|
|||
*/
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/regulator/driver.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <mach/sh73a0.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "core.h"
|
||||
|
@ -2538,6 +2541,157 @@ static const unsigned int sdhi2_ctrl_pins[] = {
|
|||
static const unsigned int sdhi2_ctrl_mux[] = {
|
||||
SDHICMD2_MARK, SDHICLK2_MARK,
|
||||
};
|
||||
/* - TPU0 ------------------------------------------------------------------- */
|
||||
static const unsigned int tpu0_to0_pins[] = {
|
||||
/* TO */
|
||||
55,
|
||||
};
|
||||
static const unsigned int tpu0_to0_mux[] = {
|
||||
TPU0TO0_MARK,
|
||||
};
|
||||
static const unsigned int tpu0_to1_pins[] = {
|
||||
/* TO */
|
||||
59,
|
||||
};
|
||||
static const unsigned int tpu0_to1_mux[] = {
|
||||
TPU0TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu0_to2_pins[] = {
|
||||
/* TO */
|
||||
140,
|
||||
};
|
||||
static const unsigned int tpu0_to2_mux[] = {
|
||||
TPU0TO2_MARK,
|
||||
};
|
||||
static const unsigned int tpu0_to3_pins[] = {
|
||||
/* TO */
|
||||
141,
|
||||
};
|
||||
static const unsigned int tpu0_to3_mux[] = {
|
||||
TPU0TO3_MARK,
|
||||
};
|
||||
/* - TPU1 ------------------------------------------------------------------- */
|
||||
static const unsigned int tpu1_to0_pins[] = {
|
||||
/* TO */
|
||||
246,
|
||||
};
|
||||
static const unsigned int tpu1_to0_mux[] = {
|
||||
TPU1TO0_MARK,
|
||||
};
|
||||
static const unsigned int tpu1_to1_0_pins[] = {
|
||||
/* TO */
|
||||
28,
|
||||
};
|
||||
static const unsigned int tpu1_to1_0_mux[] = {
|
||||
PORT28_TPU1TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu1_to1_1_pins[] = {
|
||||
/* TO */
|
||||
29,
|
||||
};
|
||||
static const unsigned int tpu1_to1_1_mux[] = {
|
||||
PORT29_TPU1TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu1_to2_pins[] = {
|
||||
/* TO */
|
||||
153,
|
||||
};
|
||||
static const unsigned int tpu1_to2_mux[] = {
|
||||
TPU1TO2_MARK,
|
||||
};
|
||||
static const unsigned int tpu1_to3_pins[] = {
|
||||
/* TO */
|
||||
145,
|
||||
};
|
||||
static const unsigned int tpu1_to3_mux[] = {
|
||||
TPU1TO3_MARK,
|
||||
};
|
||||
/* - TPU2 ------------------------------------------------------------------- */
|
||||
static const unsigned int tpu2_to0_pins[] = {
|
||||
/* TO */
|
||||
248,
|
||||
};
|
||||
static const unsigned int tpu2_to0_mux[] = {
|
||||
TPU2TO0_MARK,
|
||||
};
|
||||
static const unsigned int tpu2_to1_pins[] = {
|
||||
/* TO */
|
||||
197,
|
||||
};
|
||||
static const unsigned int tpu2_to1_mux[] = {
|
||||
TPU2TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu2_to2_pins[] = {
|
||||
/* TO */
|
||||
50,
|
||||
};
|
||||
static const unsigned int tpu2_to2_mux[] = {
|
||||
TPU2TO2_MARK,
|
||||
};
|
||||
static const unsigned int tpu2_to3_pins[] = {
|
||||
/* TO */
|
||||
51,
|
||||
};
|
||||
static const unsigned int tpu2_to3_mux[] = {
|
||||
TPU2TO3_MARK,
|
||||
};
|
||||
/* - TPU3 ------------------------------------------------------------------- */
|
||||
static const unsigned int tpu3_to0_pins[] = {
|
||||
/* TO */
|
||||
163,
|
||||
};
|
||||
static const unsigned int tpu3_to0_mux[] = {
|
||||
TPU3TO0_MARK,
|
||||
};
|
||||
static const unsigned int tpu3_to1_pins[] = {
|
||||
/* TO */
|
||||
247,
|
||||
};
|
||||
static const unsigned int tpu3_to1_mux[] = {
|
||||
TPU3TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu3_to2_pins[] = {
|
||||
/* TO */
|
||||
54,
|
||||
};
|
||||
static const unsigned int tpu3_to2_mux[] = {
|
||||
TPU3TO2_MARK,
|
||||
};
|
||||
static const unsigned int tpu3_to3_pins[] = {
|
||||
/* TO */
|
||||
53,
|
||||
};
|
||||
static const unsigned int tpu3_to3_mux[] = {
|
||||
TPU3TO3_MARK,
|
||||
};
|
||||
/* - TPU4 ------------------------------------------------------------------- */
|
||||
static const unsigned int tpu4_to0_pins[] = {
|
||||
/* TO */
|
||||
241,
|
||||
};
|
||||
static const unsigned int tpu4_to0_mux[] = {
|
||||
TPU4TO0_MARK,
|
||||
};
|
||||
static const unsigned int tpu4_to1_pins[] = {
|
||||
/* TO */
|
||||
199,
|
||||
};
|
||||
static const unsigned int tpu4_to1_mux[] = {
|
||||
TPU4TO1_MARK,
|
||||
};
|
||||
static const unsigned int tpu4_to2_pins[] = {
|
||||
/* TO */
|
||||
58,
|
||||
};
|
||||
static const unsigned int tpu4_to2_mux[] = {
|
||||
TPU4TO2_MARK,
|
||||
};
|
||||
static const unsigned int tpu4_to3_pins[] = {
|
||||
/* TO */
|
||||
};
|
||||
static const unsigned int tpu4_to3_mux[] = {
|
||||
TPU4TO3_MARK,
|
||||
};
|
||||
/* - USB -------------------------------------------------------------------- */
|
||||
static const unsigned int usb_vbus_pins[] = {
|
||||
/* VBUS */
|
||||
|
@ -2689,6 +2843,27 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
|
|||
SH_PFC_PIN_GROUP(sdhi2_data1),
|
||||
SH_PFC_PIN_GROUP(sdhi2_data4),
|
||||
SH_PFC_PIN_GROUP(sdhi2_ctrl),
|
||||
SH_PFC_PIN_GROUP(tpu0_to0),
|
||||
SH_PFC_PIN_GROUP(tpu0_to1),
|
||||
SH_PFC_PIN_GROUP(tpu0_to2),
|
||||
SH_PFC_PIN_GROUP(tpu0_to3),
|
||||
SH_PFC_PIN_GROUP(tpu1_to0),
|
||||
SH_PFC_PIN_GROUP(tpu1_to1_0),
|
||||
SH_PFC_PIN_GROUP(tpu1_to1_1),
|
||||
SH_PFC_PIN_GROUP(tpu1_to2),
|
||||
SH_PFC_PIN_GROUP(tpu1_to3),
|
||||
SH_PFC_PIN_GROUP(tpu2_to0),
|
||||
SH_PFC_PIN_GROUP(tpu2_to1),
|
||||
SH_PFC_PIN_GROUP(tpu2_to2),
|
||||
SH_PFC_PIN_GROUP(tpu2_to3),
|
||||
SH_PFC_PIN_GROUP(tpu3_to0),
|
||||
SH_PFC_PIN_GROUP(tpu3_to1),
|
||||
SH_PFC_PIN_GROUP(tpu3_to2),
|
||||
SH_PFC_PIN_GROUP(tpu3_to3),
|
||||
SH_PFC_PIN_GROUP(tpu4_to0),
|
||||
SH_PFC_PIN_GROUP(tpu4_to1),
|
||||
SH_PFC_PIN_GROUP(tpu4_to2),
|
||||
SH_PFC_PIN_GROUP(tpu4_to3),
|
||||
SH_PFC_PIN_GROUP(usb_vbus),
|
||||
};
|
||||
|
||||
|
@ -2908,6 +3083,42 @@ static const char * const usb_groups[] = {
|
|||
"usb_vbus",
|
||||
};
|
||||
|
||||
static const char * const tpu0_groups[] = {
|
||||
"tpu0_to0",
|
||||
"tpu0_to1",
|
||||
"tpu0_to2",
|
||||
"tpu0_to3",
|
||||
};
|
||||
|
||||
static const char * const tpu1_groups[] = {
|
||||
"tpu1_to0",
|
||||
"tpu1_to1_0",
|
||||
"tpu1_to1_1",
|
||||
"tpu1_to2",
|
||||
"tpu1_to3",
|
||||
};
|
||||
|
||||
static const char * const tpu2_groups[] = {
|
||||
"tpu2_to0",
|
||||
"tpu2_to1",
|
||||
"tpu2_to2",
|
||||
"tpu2_to3",
|
||||
};
|
||||
|
||||
static const char * const tpu3_groups[] = {
|
||||
"tpu3_to0",
|
||||
"tpu3_to1",
|
||||
"tpu3_to2",
|
||||
"tpu3_to3",
|
||||
};
|
||||
|
||||
static const char * const tpu4_groups[] = {
|
||||
"tpu4_to0",
|
||||
"tpu4_to1",
|
||||
"tpu4_to2",
|
||||
"tpu4_to3",
|
||||
};
|
||||
|
||||
static const struct sh_pfc_function pinmux_functions[] = {
|
||||
SH_PFC_FUNCTION(bsc),
|
||||
SH_PFC_FUNCTION(fsia),
|
||||
|
@ -2933,400 +3144,14 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
|||
SH_PFC_FUNCTION(sdhi0),
|
||||
SH_PFC_FUNCTION(sdhi1),
|
||||
SH_PFC_FUNCTION(sdhi2),
|
||||
SH_PFC_FUNCTION(tpu0),
|
||||
SH_PFC_FUNCTION(tpu1),
|
||||
SH_PFC_FUNCTION(tpu2),
|
||||
SH_PFC_FUNCTION(tpu3),
|
||||
SH_PFC_FUNCTION(tpu4),
|
||||
SH_PFC_FUNCTION(usb),
|
||||
};
|
||||
|
||||
#define PINMUX_FN_BASE GPIO_FN_GPI0
|
||||
|
||||
static const struct pinmux_func pinmux_func_gpios[] = {
|
||||
/* Table 25-1 (Functions 0-7) */
|
||||
GPIO_FN(GPI0),
|
||||
GPIO_FN(GPI1),
|
||||
GPIO_FN(GPI2),
|
||||
GPIO_FN(GPI3),
|
||||
GPIO_FN(GPI4),
|
||||
GPIO_FN(GPI5),
|
||||
GPIO_FN(GPI6),
|
||||
GPIO_FN(GPI7),
|
||||
GPIO_FN(GPO7), \
|
||||
GPIO_FN(MFG0_OUT2),
|
||||
GPIO_FN(GPO6), \
|
||||
GPIO_FN(MFG1_OUT2),
|
||||
GPIO_FN(GPO5), \
|
||||
GPIO_FN(PORT16_VIO_CKOR),
|
||||
GPIO_FN(PORT19_VIO_CKO2),
|
||||
GPIO_FN(GPO0),
|
||||
GPIO_FN(GPO1),
|
||||
GPIO_FN(GPO2), \
|
||||
GPIO_FN(STATUS0),
|
||||
GPIO_FN(GPO3), \
|
||||
GPIO_FN(STATUS1),
|
||||
GPIO_FN(GPO4), \
|
||||
GPIO_FN(STATUS2),
|
||||
GPIO_FN(VINT),
|
||||
GPIO_FN(TCKON),
|
||||
GPIO_FN(XDVFS1), \
|
||||
GPIO_FN(MFG0_OUT1), \
|
||||
GPIO_FN(PORT27_IROUT),
|
||||
GPIO_FN(XDVFS2), \
|
||||
GPIO_FN(PORT28_TPU1TO1),
|
||||
GPIO_FN(SIM_RST), \
|
||||
GPIO_FN(PORT29_TPU1TO1),
|
||||
GPIO_FN(SIM_CLK), \
|
||||
GPIO_FN(PORT30_VIO_CKOR),
|
||||
GPIO_FN(SIM_D), \
|
||||
GPIO_FN(PORT31_IROUT),
|
||||
GPIO_FN(XWUP),
|
||||
GPIO_FN(VACK),
|
||||
GPIO_FN(XTAL1L),
|
||||
GPIO_FN(PORT49_IROUT), \
|
||||
GPIO_FN(BBIF2_TSYNC2), \
|
||||
GPIO_FN(TPU2TO2), \
|
||||
|
||||
GPIO_FN(BBIF2_TSCK2), \
|
||||
GPIO_FN(TPU2TO3), \
|
||||
GPIO_FN(BBIF2_TXD2),
|
||||
GPIO_FN(TPU3TO3), \
|
||||
GPIO_FN(TPU3TO2), \
|
||||
GPIO_FN(TPU0TO0),
|
||||
GPIO_FN(A0), \
|
||||
GPIO_FN(BS_),
|
||||
GPIO_FN(A12), \
|
||||
GPIO_FN(TPU4TO2),
|
||||
GPIO_FN(A13), \
|
||||
GPIO_FN(TPU0TO1),
|
||||
GPIO_FN(A14), \
|
||||
GPIO_FN(A15), \
|
||||
GPIO_FN(A16), \
|
||||
GPIO_FN(MSIOF0_SS1),
|
||||
GPIO_FN(A17), \
|
||||
GPIO_FN(MSIOF0_TSYNC),
|
||||
GPIO_FN(A18), \
|
||||
GPIO_FN(MSIOF0_TSCK),
|
||||
GPIO_FN(A19), \
|
||||
GPIO_FN(MSIOF0_TXD),
|
||||
GPIO_FN(A20), \
|
||||
GPIO_FN(MSIOF0_RSCK),
|
||||
GPIO_FN(A21), \
|
||||
GPIO_FN(MSIOF0_RSYNC),
|
||||
GPIO_FN(A22), \
|
||||
GPIO_FN(MSIOF0_MCK0),
|
||||
GPIO_FN(A23), \
|
||||
GPIO_FN(MSIOF0_MCK1),
|
||||
GPIO_FN(A24), \
|
||||
GPIO_FN(MSIOF0_RXD),
|
||||
GPIO_FN(A25), \
|
||||
GPIO_FN(MSIOF0_SS2),
|
||||
GPIO_FN(A26), \
|
||||
GPIO_FN(FCE1_),
|
||||
GPIO_FN(DACK0),
|
||||
GPIO_FN(FCE0_), \
|
||||
GPIO_FN(WAIT_), \
|
||||
GPIO_FN(DREQ0),
|
||||
GPIO_FN(FRB),
|
||||
GPIO_FN(CKO),
|
||||
GPIO_FN(NBRSTOUT_),
|
||||
GPIO_FN(NBRST_),
|
||||
GPIO_FN(BBIF2_TXD),
|
||||
GPIO_FN(BBIF2_RXD),
|
||||
GPIO_FN(BBIF2_SYNC),
|
||||
GPIO_FN(BBIF2_SCK),
|
||||
GPIO_FN(MFG3_IN2),
|
||||
GPIO_FN(MFG3_IN1),
|
||||
GPIO_FN(BBIF1_SS2), \
|
||||
GPIO_FN(MFG3_OUT1),
|
||||
GPIO_FN(HSI_RX_DATA), \
|
||||
GPIO_FN(BBIF1_RXD),
|
||||
GPIO_FN(HSI_TX_WAKE), \
|
||||
GPIO_FN(BBIF1_TSCK),
|
||||
GPIO_FN(HSI_TX_DATA), \
|
||||
GPIO_FN(BBIF1_TSYNC),
|
||||
GPIO_FN(HSI_TX_READY), \
|
||||
GPIO_FN(BBIF1_TXD),
|
||||
GPIO_FN(HSI_RX_READY), \
|
||||
GPIO_FN(BBIF1_RSCK), \
|
||||
GPIO_FN(HSI_RX_WAKE), \
|
||||
GPIO_FN(BBIF1_RSYNC), \
|
||||
GPIO_FN(HSI_RX_FLAG), \
|
||||
GPIO_FN(BBIF1_SS1), \
|
||||
GPIO_FN(BBIF1_FLOW),
|
||||
GPIO_FN(HSI_TX_FLAG),
|
||||
GPIO_FN(VIO_VD), \
|
||||
GPIO_FN(VIO2_VD), \
|
||||
|
||||
GPIO_FN(VIO_HD), \
|
||||
GPIO_FN(VIO2_HD), \
|
||||
GPIO_FN(VIO_D0), \
|
||||
GPIO_FN(PORT130_MSIOF2_RXD), \
|
||||
GPIO_FN(VIO_D1), \
|
||||
GPIO_FN(PORT131_MSIOF2_SS1), \
|
||||
GPIO_FN(VIO_D2), \
|
||||
GPIO_FN(PORT132_MSIOF2_SS2), \
|
||||
GPIO_FN(VIO_D3), \
|
||||
GPIO_FN(MSIOF2_TSYNC), \
|
||||
GPIO_FN(VIO_D4), \
|
||||
GPIO_FN(MSIOF2_TXD), \
|
||||
GPIO_FN(VIO_D5), \
|
||||
GPIO_FN(MSIOF2_TSCK), \
|
||||
GPIO_FN(VIO_D6), \
|
||||
GPIO_FN(VIO_D7), \
|
||||
GPIO_FN(VIO_D8), \
|
||||
GPIO_FN(VIO2_D0), \
|
||||
GPIO_FN(VIO_D9), \
|
||||
GPIO_FN(VIO2_D1), \
|
||||
GPIO_FN(VIO_D10), \
|
||||
GPIO_FN(TPU0TO2), \
|
||||
GPIO_FN(VIO2_D2), \
|
||||
GPIO_FN(VIO_D11), \
|
||||
GPIO_FN(TPU0TO3), \
|
||||
GPIO_FN(VIO2_D3), \
|
||||
GPIO_FN(VIO_D12), \
|
||||
GPIO_FN(VIO2_D4), \
|
||||
GPIO_FN(VIO_D13), \
|
||||
GPIO_FN(VIO2_D5), \
|
||||
GPIO_FN(VIO_D14), \
|
||||
GPIO_FN(VIO2_D6), \
|
||||
GPIO_FN(VIO_D15), \
|
||||
GPIO_FN(TPU1TO3), \
|
||||
GPIO_FN(VIO2_D7), \
|
||||
GPIO_FN(VIO_CLK), \
|
||||
GPIO_FN(VIO2_CLK), \
|
||||
GPIO_FN(VIO_FIELD), \
|
||||
GPIO_FN(VIO2_FIELD), \
|
||||
GPIO_FN(VIO_CKO),
|
||||
GPIO_FN(A27), \
|
||||
GPIO_FN(MFG0_IN1), \
|
||||
GPIO_FN(MFG0_IN2),
|
||||
GPIO_FN(TS_SPSYNC3), \
|
||||
GPIO_FN(MSIOF2_RSCK),
|
||||
GPIO_FN(TS_SDAT3), \
|
||||
GPIO_FN(MSIOF2_RSYNC),
|
||||
GPIO_FN(TPU1TO2), \
|
||||
GPIO_FN(TS_SDEN3), \
|
||||
GPIO_FN(PORT153_MSIOF2_SS1),
|
||||
GPIO_FN(MSIOF2_MCK0),
|
||||
GPIO_FN(MSIOF2_MCK1),
|
||||
GPIO_FN(PORT156_MSIOF2_SS2),
|
||||
GPIO_FN(PORT157_MSIOF2_RXD),
|
||||
GPIO_FN(DINT_), \
|
||||
GPIO_FN(TS_SCK3),
|
||||
GPIO_FN(NMI),
|
||||
GPIO_FN(TPU3TO0),
|
||||
GPIO_FN(BBIF2_TSYNC1),
|
||||
GPIO_FN(BBIF2_TSCK1),
|
||||
GPIO_FN(BBIF2_TXD1),
|
||||
GPIO_FN(MFG2_OUT2), \
|
||||
GPIO_FN(TPU2TO1),
|
||||
GPIO_FN(TPU4TO1), \
|
||||
GPIO_FN(MFG4_OUT2),
|
||||
GPIO_FN(D16),
|
||||
GPIO_FN(D17),
|
||||
GPIO_FN(D18),
|
||||
GPIO_FN(D19),
|
||||
GPIO_FN(D20),
|
||||
GPIO_FN(D21),
|
||||
GPIO_FN(D22),
|
||||
GPIO_FN(PORT207_MSIOF0L_SS1), \
|
||||
GPIO_FN(D23),
|
||||
GPIO_FN(PORT208_MSIOF0L_SS2), \
|
||||
GPIO_FN(D24),
|
||||
GPIO_FN(D25),
|
||||
GPIO_FN(DREQ2), \
|
||||
GPIO_FN(PORT210_MSIOF0L_SS1), \
|
||||
GPIO_FN(D26),
|
||||
GPIO_FN(PORT211_MSIOF0L_SS2), \
|
||||
GPIO_FN(D27),
|
||||
GPIO_FN(TS_SPSYNC1), \
|
||||
GPIO_FN(MSIOF0L_MCK0), \
|
||||
GPIO_FN(D28),
|
||||
GPIO_FN(TS_SDAT1), \
|
||||
GPIO_FN(MSIOF0L_MCK1), \
|
||||
GPIO_FN(D29),
|
||||
GPIO_FN(TS_SDEN1), \
|
||||
GPIO_FN(MSIOF0L_RSCK), \
|
||||
GPIO_FN(D30),
|
||||
GPIO_FN(TS_SCK1), \
|
||||
GPIO_FN(MSIOF0L_RSYNC), \
|
||||
GPIO_FN(D31),
|
||||
GPIO_FN(DACK2), \
|
||||
GPIO_FN(MSIOF0L_TSYNC), \
|
||||
GPIO_FN(VIO2_FIELD3), \
|
||||
GPIO_FN(DACK3), \
|
||||
GPIO_FN(PORT218_VIO_CKOR),
|
||||
GPIO_FN(DREQ3), \
|
||||
GPIO_FN(MSIOF0L_TSCK), \
|
||||
GPIO_FN(VIO2_CLK3), \
|
||||
GPIO_FN(DREQ1), \
|
||||
GPIO_FN(PWEN), \
|
||||
GPIO_FN(MSIOF0L_RXD), \
|
||||
GPIO_FN(VIO2_HD3), \
|
||||
GPIO_FN(DACK1), \
|
||||
GPIO_FN(OVCN), \
|
||||
GPIO_FN(MSIOF0L_TXD), \
|
||||
GPIO_FN(VIO2_VD3), \
|
||||
|
||||
GPIO_FN(OVCN2),
|
||||
GPIO_FN(EXTLP), \
|
||||
GPIO_FN(PORT226_VIO_CKO2),
|
||||
GPIO_FN(IDIN),
|
||||
GPIO_FN(MFG1_IN1),
|
||||
GPIO_FN(MSIOF1_TXD), \
|
||||
GPIO_FN(MSIOF1_TSYNC), \
|
||||
GPIO_FN(MSIOF1_TSCK), \
|
||||
GPIO_FN(MSIOF1_RXD), \
|
||||
GPIO_FN(MSIOF1_RSCK), \
|
||||
GPIO_FN(VIO2_CLK2), \
|
||||
GPIO_FN(MSIOF1_RSYNC), \
|
||||
GPIO_FN(MFG1_IN2), \
|
||||
GPIO_FN(VIO2_VD2), \
|
||||
GPIO_FN(MSIOF1_MCK0), \
|
||||
GPIO_FN(MSIOF1_MCK1), \
|
||||
GPIO_FN(MSIOF1_SS1), \
|
||||
GPIO_FN(VIO2_FIELD2), \
|
||||
GPIO_FN(MSIOF1_SS2), \
|
||||
GPIO_FN(VIO2_HD2), \
|
||||
GPIO_FN(PORT241_IROUT), \
|
||||
GPIO_FN(MFG4_OUT1), \
|
||||
GPIO_FN(TPU4TO0),
|
||||
GPIO_FN(MFG4_IN2),
|
||||
GPIO_FN(PORT243_VIO_CKO2),
|
||||
GPIO_FN(MFG2_IN1), \
|
||||
GPIO_FN(MSIOF2R_RXD),
|
||||
GPIO_FN(MFG2_IN2), \
|
||||
GPIO_FN(MSIOF2R_TXD),
|
||||
GPIO_FN(MFG1_OUT1), \
|
||||
GPIO_FN(TPU1TO0),
|
||||
GPIO_FN(MFG3_OUT2), \
|
||||
GPIO_FN(TPU3TO1),
|
||||
GPIO_FN(MFG2_OUT1), \
|
||||
GPIO_FN(TPU2TO0), \
|
||||
GPIO_FN(MSIOF2R_TSCK),
|
||||
GPIO_FN(PORT249_IROUT), \
|
||||
GPIO_FN(MFG4_IN1), \
|
||||
GPIO_FN(MSIOF2R_TSYNC),
|
||||
GPIO_FN(SDHICLK0),
|
||||
GPIO_FN(SDHICD0),
|
||||
GPIO_FN(SDHID0_0),
|
||||
GPIO_FN(SDHID0_1),
|
||||
GPIO_FN(SDHID0_2),
|
||||
GPIO_FN(SDHID0_3),
|
||||
GPIO_FN(SDHICMD0),
|
||||
GPIO_FN(SDHIWP0),
|
||||
GPIO_FN(SDHICLK1),
|
||||
GPIO_FN(SDHID1_0), \
|
||||
GPIO_FN(TS_SPSYNC2),
|
||||
GPIO_FN(SDHID1_1), \
|
||||
GPIO_FN(TS_SDAT2),
|
||||
GPIO_FN(SDHID1_2), \
|
||||
GPIO_FN(TS_SDEN2),
|
||||
GPIO_FN(SDHID1_3), \
|
||||
GPIO_FN(TS_SCK2),
|
||||
GPIO_FN(SDHICMD1),
|
||||
GPIO_FN(SDHICLK2),
|
||||
GPIO_FN(SDHID2_0), \
|
||||
GPIO_FN(TS_SPSYNC4),
|
||||
GPIO_FN(SDHID2_1), \
|
||||
GPIO_FN(TS_SDAT4),
|
||||
GPIO_FN(SDHID2_2), \
|
||||
GPIO_FN(TS_SDEN4),
|
||||
GPIO_FN(SDHID2_3), \
|
||||
GPIO_FN(TS_SCK4),
|
||||
GPIO_FN(SDHICMD2),
|
||||
GPIO_FN(MMCCLK0),
|
||||
GPIO_FN(MMCD0_0),
|
||||
GPIO_FN(MMCD0_1),
|
||||
GPIO_FN(MMCD0_2),
|
||||
GPIO_FN(MMCD0_3),
|
||||
GPIO_FN(MMCD0_4), \
|
||||
GPIO_FN(TS_SPSYNC5),
|
||||
GPIO_FN(MMCD0_5), \
|
||||
GPIO_FN(TS_SDAT5),
|
||||
GPIO_FN(MMCD0_6), \
|
||||
GPIO_FN(TS_SDEN5),
|
||||
GPIO_FN(MMCD0_7), \
|
||||
GPIO_FN(TS_SCK5),
|
||||
GPIO_FN(MMCCMD0),
|
||||
GPIO_FN(RESETOUTS_), \
|
||||
GPIO_FN(EXTAL2OUT),
|
||||
GPIO_FN(MCP_WAIT__MCP_FRB),
|
||||
GPIO_FN(MCP_CKO), \
|
||||
GPIO_FN(MMCCLK1),
|
||||
GPIO_FN(MCP_D15_MCP_NAF15),
|
||||
GPIO_FN(MCP_D14_MCP_NAF14),
|
||||
GPIO_FN(MCP_D13_MCP_NAF13),
|
||||
GPIO_FN(MCP_D12_MCP_NAF12),
|
||||
GPIO_FN(MCP_D11_MCP_NAF11),
|
||||
GPIO_FN(MCP_D10_MCP_NAF10),
|
||||
GPIO_FN(MCP_D9_MCP_NAF9),
|
||||
GPIO_FN(MCP_D8_MCP_NAF8), \
|
||||
GPIO_FN(MMCCMD1),
|
||||
GPIO_FN(MCP_D7_MCP_NAF7), \
|
||||
GPIO_FN(MMCD1_7),
|
||||
|
||||
GPIO_FN(MCP_D6_MCP_NAF6), \
|
||||
GPIO_FN(MMCD1_6),
|
||||
GPIO_FN(MCP_D5_MCP_NAF5), \
|
||||
GPIO_FN(MMCD1_5),
|
||||
GPIO_FN(MCP_D4_MCP_NAF4), \
|
||||
GPIO_FN(MMCD1_4),
|
||||
GPIO_FN(MCP_D3_MCP_NAF3), \
|
||||
GPIO_FN(MMCD1_3),
|
||||
GPIO_FN(MCP_D2_MCP_NAF2), \
|
||||
GPIO_FN(MMCD1_2),
|
||||
GPIO_FN(MCP_D1_MCP_NAF1), \
|
||||
GPIO_FN(MMCD1_1),
|
||||
GPIO_FN(MCP_D0_MCP_NAF0), \
|
||||
GPIO_FN(MMCD1_0),
|
||||
GPIO_FN(MCP_NBRSTOUT_),
|
||||
GPIO_FN(MCP_WE0__MCP_FWE), \
|
||||
GPIO_FN(MCP_RDWR_MCP_FWE),
|
||||
|
||||
/* MSEL2 special cases */
|
||||
GPIO_FN(TSIF2_TS_XX1),
|
||||
GPIO_FN(TSIF2_TS_XX2),
|
||||
GPIO_FN(TSIF2_TS_XX3),
|
||||
GPIO_FN(TSIF2_TS_XX4),
|
||||
GPIO_FN(TSIF2_TS_XX5),
|
||||
GPIO_FN(TSIF1_TS_XX1),
|
||||
GPIO_FN(TSIF1_TS_XX2),
|
||||
GPIO_FN(TSIF1_TS_XX3),
|
||||
GPIO_FN(TSIF1_TS_XX4),
|
||||
GPIO_FN(TSIF1_TS_XX5),
|
||||
GPIO_FN(TSIF0_TS_XX1),
|
||||
GPIO_FN(TSIF0_TS_XX2),
|
||||
GPIO_FN(TSIF0_TS_XX3),
|
||||
GPIO_FN(TSIF0_TS_XX4),
|
||||
GPIO_FN(TSIF0_TS_XX5),
|
||||
GPIO_FN(MST1_TS_XX1),
|
||||
GPIO_FN(MST1_TS_XX2),
|
||||
GPIO_FN(MST1_TS_XX3),
|
||||
GPIO_FN(MST1_TS_XX4),
|
||||
GPIO_FN(MST1_TS_XX5),
|
||||
GPIO_FN(MST0_TS_XX1),
|
||||
GPIO_FN(MST0_TS_XX2),
|
||||
GPIO_FN(MST0_TS_XX3),
|
||||
GPIO_FN(MST0_TS_XX4),
|
||||
GPIO_FN(MST0_TS_XX5),
|
||||
|
||||
/* MSEL3 special cases */
|
||||
GPIO_FN(SDHI0_VCCQ_MC0_ON),
|
||||
GPIO_FN(SDHI0_VCCQ_MC0_OFF),
|
||||
GPIO_FN(DEBUG_MON_VIO),
|
||||
GPIO_FN(DEBUG_MON_LCDD),
|
||||
GPIO_FN(LCDC_LCDC0),
|
||||
GPIO_FN(LCDC_LCDC1),
|
||||
|
||||
/* MSEL4 special cases */
|
||||
GPIO_FN(IRQ9_MEM_INT),
|
||||
GPIO_FN(IRQ9_MCP_INT),
|
||||
GPIO_FN(A11),
|
||||
GPIO_FN(TPU4TO3),
|
||||
GPIO_FN(RESETA_N_PU_ON),
|
||||
GPIO_FN(RESETA_N_PU_OFF),
|
||||
GPIO_FN(EDBGREQ_PD),
|
||||
GPIO_FN(EDBGREQ_PU),
|
||||
};
|
||||
|
||||
#undef PORTCR
|
||||
#define PORTCR(nr, reg) \
|
||||
{ \
|
||||
|
@ -3888,6 +3713,92 @@ static const struct pinmux_irq pinmux_irqs[] = {
|
|||
PINMUX_IRQ(EXT_IRQ16L(9), 308),
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* VCCQ MC0 regulator
|
||||
*/
|
||||
|
||||
static void sh73a0_vccq_mc0_endisable(struct regulator_dev *reg, bool enable)
|
||||
{
|
||||
struct sh_pfc *pfc = reg->reg_data;
|
||||
void __iomem *addr = pfc->window[1].virt + 4;
|
||||
unsigned long flags;
|
||||
u32 value;
|
||||
|
||||
spin_lock_irqsave(&pfc->lock, flags);
|
||||
|
||||
value = ioread32(addr);
|
||||
|
||||
if (enable)
|
||||
value |= BIT(28);
|
||||
else
|
||||
value &= ~BIT(28);
|
||||
|
||||
iowrite32(value, addr);
|
||||
|
||||
spin_unlock_irqrestore(&pfc->lock, flags);
|
||||
}
|
||||
|
||||
static int sh73a0_vccq_mc0_enable(struct regulator_dev *reg)
|
||||
{
|
||||
sh73a0_vccq_mc0_endisable(reg, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh73a0_vccq_mc0_disable(struct regulator_dev *reg)
|
||||
{
|
||||
sh73a0_vccq_mc0_endisable(reg, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh73a0_vccq_mc0_is_enabled(struct regulator_dev *reg)
|
||||
{
|
||||
struct sh_pfc *pfc = reg->reg_data;
|
||||
void __iomem *addr = pfc->window[1].virt + 4;
|
||||
unsigned long flags;
|
||||
u32 value;
|
||||
|
||||
spin_lock_irqsave(&pfc->lock, flags);
|
||||
value = ioread32(addr);
|
||||
spin_unlock_irqrestore(&pfc->lock, flags);
|
||||
|
||||
return !!(value & BIT(28));
|
||||
}
|
||||
|
||||
static int sh73a0_vccq_mc0_get_voltage(struct regulator_dev *reg)
|
||||
{
|
||||
return 3300000;
|
||||
}
|
||||
|
||||
static struct regulator_ops sh73a0_vccq_mc0_ops = {
|
||||
.enable = sh73a0_vccq_mc0_enable,
|
||||
.disable = sh73a0_vccq_mc0_disable,
|
||||
.is_enabled = sh73a0_vccq_mc0_is_enabled,
|
||||
.get_voltage = sh73a0_vccq_mc0_get_voltage,
|
||||
};
|
||||
|
||||
static const struct regulator_desc sh73a0_vccq_mc0_desc = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "vccq_mc0",
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.ops = &sh73a0_vccq_mc0_ops,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply sh73a0_vccq_mc0_consumers[] = {
|
||||
REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
|
||||
};
|
||||
|
||||
static const struct regulator_init_data sh73a0_vccq_mc0_init_data = {
|
||||
.constraints = {
|
||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(sh73a0_vccq_mc0_consumers),
|
||||
.consumer_supplies = sh73a0_vccq_mc0_consumers,
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Pin bias
|
||||
*/
|
||||
|
||||
#define PORTnCR_PULMD_OFF (0 << 6)
|
||||
#define PORTnCR_PULMD_DOWN (2 << 6)
|
||||
#define PORTnCR_PULMD_UP (3 << 6)
|
||||
|
@ -3934,7 +3845,51 @@ static void sh73a0_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
|
|||
iowrite8(value, addr);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* SoC information
|
||||
*/
|
||||
|
||||
struct sh73a0_pinmux_data {
|
||||
struct regulator_dev *vccq_mc0;
|
||||
};
|
||||
|
||||
static int sh73a0_pinmux_soc_init(struct sh_pfc *pfc)
|
||||
{
|
||||
struct sh73a0_pinmux_data *data;
|
||||
struct regulator_config cfg = { };
|
||||
int ret;
|
||||
|
||||
data = devm_kzalloc(pfc->dev, sizeof(*data), GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
cfg.dev = pfc->dev;
|
||||
cfg.init_data = &sh73a0_vccq_mc0_init_data;
|
||||
cfg.driver_data = pfc;
|
||||
|
||||
data->vccq_mc0 = regulator_register(&sh73a0_vccq_mc0_desc, &cfg);
|
||||
if (IS_ERR(data->vccq_mc0)) {
|
||||
ret = PTR_ERR(data->vccq_mc0);
|
||||
dev_err(pfc->dev, "Failed to register VCCQ MC0 regulator: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pfc->soc_data = data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sh73a0_pinmux_soc_exit(struct sh_pfc *pfc)
|
||||
{
|
||||
struct sh73a0_pinmux_data *data = pfc->soc_data;
|
||||
|
||||
regulator_unregister(data->vccq_mc0);
|
||||
}
|
||||
|
||||
static const struct sh_pfc_soc_operations sh73a0_pinmux_ops = {
|
||||
.init = sh73a0_pinmux_soc_init,
|
||||
.exit = sh73a0_pinmux_soc_exit,
|
||||
.get_bias = sh73a0_pinmux_get_bias,
|
||||
.set_bias = sh73a0_pinmux_set_bias,
|
||||
};
|
||||
|
@ -3956,9 +3911,6 @@ const struct sh_pfc_soc_info sh73a0_pinmux_info = {
|
|||
.functions = pinmux_functions,
|
||||
.nr_functions = ARRAY_SIZE(pinmux_functions),
|
||||
|
||||
.func_gpios = pinmux_func_gpios,
|
||||
.nr_func_gpios = ARRAY_SIZE(pinmux_func_gpios),
|
||||
|
||||
.cfg_regs = pinmux_config_regs,
|
||||
.data_regs = pinmux_data_regs,
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#ifndef __SH_PFC_H
|
||||
#define __SH_PFC_H
|
||||
|
||||
#include <linux/bug.h>
|
||||
#include <linux/stringify.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
typedef unsigned short pinmux_enum_t;
|
||||
|
||||
|
@ -129,6 +129,8 @@ struct pinmux_range {
|
|||
struct sh_pfc;
|
||||
|
||||
struct sh_pfc_soc_operations {
|
||||
int (*init)(struct sh_pfc *pfc);
|
||||
void (*exit)(struct sh_pfc *pfc);
|
||||
unsigned int (*get_bias)(struct sh_pfc *pfc, unsigned int pin);
|
||||
void (*set_bias)(struct sh_pfc *pfc, unsigned int pin,
|
||||
unsigned int bias);
|
||||
|
|
|
@ -17,10 +17,13 @@
|
|||
#define __GPIO_RCAR_H__
|
||||
|
||||
struct gpio_rcar_config {
|
||||
unsigned int gpio_base;
|
||||
int gpio_base;
|
||||
unsigned int irq_base;
|
||||
unsigned int number_of_pins;
|
||||
const char *pctl_name;
|
||||
unsigned has_both_edge_trigger:1;
|
||||
};
|
||||
|
||||
#define RCAR_GP_PIN(bank, pin) (((bank) * 32) + (pin))
|
||||
|
||||
#endif /* __GPIO_RCAR_H__ */
|
||||
|
|
Loading…
Reference in a new issue