Merge branch 'sh/gpiolib'
This commit is contained in:
commit
79ed2a9216
|
@ -59,6 +59,9 @@ config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||||
config GENERIC_IRQ_PROBE
|
config GENERIC_IRQ_PROBE
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config GENERIC_GPIO
|
||||||
|
def_bool n
|
||||||
|
|
||||||
config GENERIC_CALIBRATE_DELAY
|
config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,7 @@ config SH_RTS7751R2D
|
||||||
|
|
||||||
config SH_RSK7203
|
config SH_RSK7203
|
||||||
bool "RSK7203"
|
bool "RSK7203"
|
||||||
|
select GENERIC_GPIO
|
||||||
depends on CPU_SUBTYPE_SH7203
|
depends on CPU_SUBTYPE_SH7203
|
||||||
|
|
||||||
config SH_SDK7780
|
config SH_SDK7780
|
||||||
|
@ -162,6 +163,7 @@ config SH_SH7785LCR_29BIT_PHYSMAPS
|
||||||
config SH_MIGOR
|
config SH_MIGOR
|
||||||
bool "Migo-R"
|
bool "Migo-R"
|
||||||
depends on CPU_SUBTYPE_SH7722
|
depends on CPU_SUBTYPE_SH7722
|
||||||
|
select GENERIC_GPIO
|
||||||
help
|
help
|
||||||
Select Migo-R if configuring for the SH7722 Migo-R platform
|
Select Migo-R if configuring for the SH7722 Migo-R platform
|
||||||
by Renesas System Solutions Asia Pte. Ltd.
|
by Renesas System Solutions Asia Pte. Ltd.
|
||||||
|
@ -169,6 +171,7 @@ config SH_MIGOR
|
||||||
config SH_AP325RXA
|
config SH_AP325RXA
|
||||||
bool "AP-325RXA"
|
bool "AP-325RXA"
|
||||||
depends on CPU_SUBTYPE_SH7723
|
depends on CPU_SUBTYPE_SH7723
|
||||||
|
select GENERIC_GPIO
|
||||||
help
|
help
|
||||||
Renesas "AP-325RXA" support.
|
Renesas "AP-325RXA" support.
|
||||||
Compatible with ALGO SYSTEM CO.,LTD. "AP-320A"
|
Compatible with ALGO SYSTEM CO.,LTD. "AP-320A"
|
||||||
|
@ -235,6 +238,7 @@ config SH_X3PROTO
|
||||||
config SH_MAGIC_PANEL_R2
|
config SH_MAGIC_PANEL_R2
|
||||||
bool "Magic Panel R2"
|
bool "Magic Panel R2"
|
||||||
depends on CPU_SUBTYPE_SH7720
|
depends on CPU_SUBTYPE_SH7720
|
||||||
|
select GENERIC_GPIO
|
||||||
help
|
help
|
||||||
Select Magic Panel R2 if configuring for Magic Panel R2.
|
Select Magic Panel R2 if configuring for Magic Panel R2.
|
||||||
|
|
||||||
|
|
|
@ -18,11 +18,13 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/smc911x.h>
|
#include <linux/smc911x.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <media/soc_camera_platform.h>
|
#include <media/soc_camera_platform.h>
|
||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/clock.h>
|
#include <asm/clock.h>
|
||||||
|
#include <asm/sh7723.h>
|
||||||
|
|
||||||
static struct smc911x_platdata smc911x_info = {
|
static struct smc911x_platdata smc911x_info = {
|
||||||
.flags = SMC911X_USE_32BIT,
|
.flags = SMC911X_USE_32BIT,
|
||||||
|
@ -109,17 +111,7 @@ static struct platform_device ap325rxa_nor_flash_device = {
|
||||||
#define FPGA_LCDREG 0xB4100180
|
#define FPGA_LCDREG 0xB4100180
|
||||||
#define FPGA_BKLREG 0xB4100212
|
#define FPGA_BKLREG 0xB4100212
|
||||||
#define FPGA_LCDREG_VAL 0x0018
|
#define FPGA_LCDREG_VAL 0x0018
|
||||||
#define PORT_PHCR 0xA405010E
|
|
||||||
#define PORT_PLCR 0xA4050114
|
|
||||||
#define PORT_PMCR 0xA4050116
|
|
||||||
#define PORT_PRCR 0xA405011C
|
|
||||||
#define PORT_PSCR 0xA405011E
|
|
||||||
#define PORT_PZCR 0xA405014C
|
|
||||||
#define PORT_HIZCRA 0xA4050158
|
|
||||||
#define PORT_MSELCRB 0xA4050182
|
#define PORT_MSELCRB 0xA4050182
|
||||||
#define PORT_PSDR 0xA405013E
|
|
||||||
#define PORT_PZDR 0xA405016C
|
|
||||||
#define PORT_PSELD 0xA4050154
|
|
||||||
|
|
||||||
static void ap320_wvga_power_on(void *board_data)
|
static void ap320_wvga_power_on(void *board_data)
|
||||||
{
|
{
|
||||||
|
@ -129,8 +121,7 @@ static void ap320_wvga_power_on(void *board_data)
|
||||||
ctrl_outw(FPGA_LCDREG_VAL, FPGA_LCDREG);
|
ctrl_outw(FPGA_LCDREG_VAL, FPGA_LCDREG);
|
||||||
|
|
||||||
/* backlight */
|
/* backlight */
|
||||||
ctrl_outw((ctrl_inw(PORT_PSCR) & ~0x00C0) | 0x40, PORT_PSCR);
|
gpio_set_value(GPIO_PTS3, 0);
|
||||||
ctrl_outb(ctrl_inb(PORT_PSDR) & ~0x08, PORT_PSDR);
|
|
||||||
ctrl_outw(0x100, FPGA_BKLREG);
|
ctrl_outw(0x100, FPGA_BKLREG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,8 +292,77 @@ static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = {
|
||||||
|
|
||||||
static int __init ap325rxa_devices_setup(void)
|
static int __init ap325rxa_devices_setup(void)
|
||||||
{
|
{
|
||||||
clk_always_enable("mstp200"); /* LCDC */
|
/* LD3 and LD4 LEDs */
|
||||||
clk_always_enable("mstp203"); /* CEU */
|
gpio_request(GPIO_PTX5, NULL); /* RUN */
|
||||||
|
gpio_direction_output(GPIO_PTX5, 1);
|
||||||
|
gpio_export(GPIO_PTX5, 0);
|
||||||
|
|
||||||
|
gpio_request(GPIO_PTX4, NULL); /* INDICATOR */
|
||||||
|
gpio_direction_output(GPIO_PTX4, 0);
|
||||||
|
gpio_export(GPIO_PTX4, 0);
|
||||||
|
|
||||||
|
/* SW1 input */
|
||||||
|
gpio_request(GPIO_PTF7, NULL); /* MODE */
|
||||||
|
gpio_direction_input(GPIO_PTF7);
|
||||||
|
gpio_export(GPIO_PTF7, 0);
|
||||||
|
|
||||||
|
/* LCDC */
|
||||||
|
clk_always_enable("mstp200");
|
||||||
|
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_LCDLCLK_PTR, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDCK, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVEPWC, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVCPWC, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVSYN, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDHSYN, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDISP, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDON, NULL);
|
||||||
|
|
||||||
|
/* LCD backlight */
|
||||||
|
gpio_request(GPIO_PTS3, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTS3, 1);
|
||||||
|
|
||||||
|
/* CEU */
|
||||||
|
clk_always_enable("mstp203");
|
||||||
|
gpio_request(GPIO_FN_VIO_CLK2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_VD2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_HD2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_FLD, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D15, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D14, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D13, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D12, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D11, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D10, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D9, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D8, NULL);
|
||||||
|
|
||||||
|
gpio_request(GPIO_PTZ7, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTZ7, 0); /* OE_CAM */
|
||||||
|
gpio_request(GPIO_PTZ6, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTZ6, 0); /* STBY_CAM */
|
||||||
|
gpio_request(GPIO_PTZ5, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTZ5, 1); /* RST_CAM */
|
||||||
|
gpio_request(GPIO_PTZ4, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */
|
||||||
|
|
||||||
|
ctrl_outw(ctrl_inw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB);
|
||||||
|
|
||||||
platform_resource_setup_memory(&ceu_device, "ceu", 4 << 20);
|
platform_resource_setup_memory(&ceu_device, "ceu", 4 << 20);
|
||||||
|
|
||||||
|
@ -316,18 +376,6 @@ device_initcall(ap325rxa_devices_setup);
|
||||||
|
|
||||||
static void __init ap325rxa_setup(char **cmdline_p)
|
static void __init ap325rxa_setup(char **cmdline_p)
|
||||||
{
|
{
|
||||||
/* LCDC configuration */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PHCR) & ~0xffff, PORT_PHCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PLCR) & ~0xffff, PORT_PLCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PMCR) & ~0xffff, PORT_PMCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PRCR) & ~0x03ff, PORT_PRCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x01C0, PORT_HIZCRA);
|
|
||||||
|
|
||||||
/* CEU */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_MSELCRB) & ~0x0001, PORT_MSELCRB);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PSELD) & ~0x0003, PORT_PSELD);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PZCR) & ~0xff00) | 0x5500, PORT_PZCR);
|
|
||||||
ctrl_outb((ctrl_inb(PORT_PZDR) & ~0xf0) | 0x20, PORT_PZDR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sh_machine_vector mv_ap325rxa __initmv = {
|
static struct sh_machine_vector mv_ap325rxa __initmv = {
|
||||||
|
|
|
@ -13,12 +13,14 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/map.h>
|
#include <linux/mtd/map.h>
|
||||||
#include <asm/magicpanelr2.h>
|
#include <asm/magicpanelr2.h>
|
||||||
#include <asm/heartbeat.h>
|
#include <asm/heartbeat.h>
|
||||||
|
#include <asm/sh7720.h>
|
||||||
|
|
||||||
#define LAN9115_READY (ctrl_inl(0xA8000084UL) & 0x00000001UL)
|
#define LAN9115_READY (ctrl_inl(0xA8000084UL) & 0x00000001UL)
|
||||||
|
|
||||||
|
@ -170,7 +172,14 @@ static void __init setup_port_multiplexing(void)
|
||||||
/* R7 A25; R6 A24; R5 A23; R4 A22;
|
/* R7 A25; R6 A24; R5 A23; R4 A22;
|
||||||
* R3 A21; R2 A20; R1 A19; R0 A0;
|
* R3 A21; R2 A20; R1 A19; R0 A0;
|
||||||
*/
|
*/
|
||||||
ctrl_outw(0x0000, PORT_PRCR); /* 00 00 00 00 00 00 00 00 */
|
gpio_request(GPIO_FN_A25, NULL);
|
||||||
|
gpio_request(GPIO_FN_A24, NULL);
|
||||||
|
gpio_request(GPIO_FN_A23, NULL);
|
||||||
|
gpio_request(GPIO_FN_A22, NULL);
|
||||||
|
gpio_request(GPIO_FN_A21, NULL);
|
||||||
|
gpio_request(GPIO_FN_A20, NULL);
|
||||||
|
gpio_request(GPIO_FN_A19, NULL);
|
||||||
|
gpio_request(GPIO_FN_A0, NULL);
|
||||||
|
|
||||||
/* S7 (x); S6 (x); S5 (x); S4 GPO(EEPROM_CS2);
|
/* S7 (x); S6 (x); S5 (x); S4 GPO(EEPROM_CS2);
|
||||||
* S3 GPO(EEPROM_CS1); S2 SIOF0_TXD; S1 SIOF0_RXD; S0 SIOF0_SCK;
|
* S3 GPO(EEPROM_CS1); S2 SIOF0_TXD; S1 SIOF0_RXD; S0 SIOF0_SCK;
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/map.h>
|
#include <linux/mtd/map.h>
|
||||||
#include <linux/smc911x.h>
|
#include <linux/smc911x.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <asm/sh7203.h>
|
||||||
|
|
||||||
static struct smc911x_platdata smc911x_info = {
|
static struct smc911x_platdata smc911x_info = {
|
||||||
.flags = SMC911X_USE_16BIT,
|
.flags = SMC911X_USE_16BIT,
|
||||||
|
@ -122,6 +124,15 @@ static struct platform_device *rsk7203_devices[] __initdata = {
|
||||||
|
|
||||||
static int __init rsk7203_devices_setup(void)
|
static int __init rsk7203_devices_setup(void)
|
||||||
{
|
{
|
||||||
|
/* Select pins for SCIF0 */
|
||||||
|
gpio_request(GPIO_FN_TXD0, NULL);
|
||||||
|
gpio_request(GPIO_FN_RXD0, NULL);
|
||||||
|
|
||||||
|
/* Lit LED0 */
|
||||||
|
gpio_request(GPIO_PE10, NULL);
|
||||||
|
gpio_direction_output(GPIO_PE10, 0);
|
||||||
|
gpio_export(GPIO_PE10, 0);
|
||||||
|
|
||||||
set_mtd_partitions();
|
set_mtd_partitions();
|
||||||
return platform_add_devices(rsk7203_devices,
|
return platform_add_devices(rsk7203_devices,
|
||||||
ARRAY_SIZE(rsk7203_devices));
|
ARRAY_SIZE(rsk7203_devices));
|
||||||
|
|
|
@ -17,7 +17,9 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
|
#include <asm/sh7722.h>
|
||||||
#include <asm/migor.h>
|
#include <asm/migor.h>
|
||||||
|
|
||||||
/* LCD Module is a PH240320T according to board schematics. This module
|
/* LCD Module is a PH240320T according to board schematics. This module
|
||||||
|
@ -30,9 +32,9 @@
|
||||||
|
|
||||||
static void reset_lcd_module(void)
|
static void reset_lcd_module(void)
|
||||||
{
|
{
|
||||||
ctrl_outb(ctrl_inb(PORT_PHDR) & ~0x04, PORT_PHDR);
|
gpio_set_value(GPIO_PTH2, 0);
|
||||||
mdelay(2);
|
mdelay(2);
|
||||||
ctrl_outb(ctrl_inb(PORT_PHDR) | 0x04, PORT_PHDR);
|
gpio_set_value(GPIO_PTH2, 1);
|
||||||
mdelay(1);
|
mdelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <media/soc_camera_platform.h>
|
#include <media/soc_camera_platform.h>
|
||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/sh_keysc.h>
|
#include <asm/sh_keysc.h>
|
||||||
#include <asm/migor.h>
|
#include <asm/migor.h>
|
||||||
|
#include <asm/sh7722.h>
|
||||||
|
|
||||||
/* Address IRQ Size Bus Description
|
/* Address IRQ Size Bus Description
|
||||||
* 0x00000000 64MB 16 NOR Flash (SP29PL256N)
|
* 0x00000000 64MB 16 NOR Flash (SP29PL256N)
|
||||||
|
@ -169,7 +171,7 @@ static void migor_nand_flash_cmd_ctl(struct mtd_info *mtd, int cmd,
|
||||||
|
|
||||||
static int migor_nand_flash_ready(struct mtd_info *mtd)
|
static int migor_nand_flash_ready(struct mtd_info *mtd)
|
||||||
{
|
{
|
||||||
return ctrl_inb(PORT_PADR) & 0x02; /* PTA1 */
|
return gpio_get_value(GPIO_PTA1); /* NAND_RBn */
|
||||||
}
|
}
|
||||||
|
|
||||||
struct platform_nand_data migor_nand_flash_data = {
|
struct platform_nand_data migor_nand_flash_data = {
|
||||||
|
@ -286,22 +288,15 @@ static struct clk *camera_clk;
|
||||||
|
|
||||||
static void camera_power_on(void)
|
static void camera_power_on(void)
|
||||||
{
|
{
|
||||||
unsigned char value;
|
|
||||||
|
|
||||||
camera_clk = clk_get(NULL, "video_clk");
|
camera_clk = clk_get(NULL, "video_clk");
|
||||||
clk_set_rate(camera_clk, 24000000);
|
clk_set_rate(camera_clk, 24000000);
|
||||||
clk_enable(camera_clk); /* start VIO_CKO */
|
clk_enable(camera_clk); /* start VIO_CKO */
|
||||||
|
|
||||||
|
/* use VIO_RST to take camera out of reset */
|
||||||
mdelay(10);
|
mdelay(10);
|
||||||
value = ctrl_inb(PORT_PTDR);
|
gpio_set_value(GPIO_PTT3, 0);
|
||||||
value &= ~0x09;
|
|
||||||
#ifndef CONFIG_SH_MIGOR_RTA_WVGA
|
|
||||||
value |= 0x01;
|
|
||||||
#endif
|
|
||||||
ctrl_outb(value, PORT_PTDR);
|
|
||||||
mdelay(10);
|
mdelay(10);
|
||||||
|
gpio_set_value(GPIO_PTT3, 1);
|
||||||
ctrl_outb(value | 8, PORT_PTDR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void camera_power_off(void)
|
static void camera_power_off(void)
|
||||||
|
@ -309,7 +304,7 @@ static void camera_power_off(void)
|
||||||
clk_disable(camera_clk); /* stop VIO_CKO */
|
clk_disable(camera_clk); /* stop VIO_CKO */
|
||||||
clk_put(camera_clk);
|
clk_put(camera_clk);
|
||||||
|
|
||||||
ctrl_outb(ctrl_inb(PORT_PTDR) & ~0x08, PORT_PTDR);
|
gpio_set_value(GPIO_PTT3, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_I2C
|
#ifdef CONFIG_I2C
|
||||||
|
@ -458,75 +453,133 @@ static struct i2c_board_info migor_i2c_devices[] = {
|
||||||
|
|
||||||
static int __init migor_devices_setup(void)
|
static int __init migor_devices_setup(void)
|
||||||
{
|
{
|
||||||
|
/* Lit D11 LED */
|
||||||
|
gpio_request(GPIO_PTJ7, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTJ7, 1);
|
||||||
|
gpio_export(GPIO_PTJ7, 0);
|
||||||
|
|
||||||
|
/* Lit D12 LED */
|
||||||
|
gpio_request(GPIO_PTJ5, NULL);
|
||||||
|
gpio_direction_output(GPIO_PTJ5, 1);
|
||||||
|
gpio_export(GPIO_PTJ5, 0);
|
||||||
|
|
||||||
|
/* SMC91C111 */
|
||||||
|
gpio_request(GPIO_FN_IRQ0, NULL);
|
||||||
|
|
||||||
|
/* KEYSC */
|
||||||
clk_always_enable("mstp214"); /* KEYSC */
|
clk_always_enable("mstp214"); /* 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_IN6, NULL);
|
||||||
|
gpio_request(GPIO_FN_KEYIN1, NULL);
|
||||||
|
gpio_request(GPIO_FN_KEYIN2, NULL);
|
||||||
|
gpio_request(GPIO_FN_KEYIN3, NULL);
|
||||||
|
gpio_request(GPIO_FN_KEYIN4, NULL);
|
||||||
|
gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
|
||||||
|
|
||||||
|
/* NAND Flash */
|
||||||
|
gpio_request(GPIO_FN_CS6A_CE2B, NULL);
|
||||||
|
ctrl_outl((ctrl_inl(BSC_CS6ABCR) & ~0x0600) | 0x0200, BSC_CS6ABCR);
|
||||||
|
gpio_request(GPIO_PTA1, NULL);
|
||||||
|
gpio_direction_input(GPIO_PTA1);
|
||||||
|
|
||||||
|
/* Touch Panel */
|
||||||
|
gpio_request(GPIO_FN_IRQ6, NULL);
|
||||||
|
|
||||||
|
/* LCD Panel */
|
||||||
clk_always_enable("mstp200"); /* LCDC */
|
clk_always_enable("mstp200"); /* LCDC */
|
||||||
|
#ifdef CONFIG_SH_MIGOR_QVGA /* LCDC - QVGA - Enable SYS Interface signals */
|
||||||
|
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_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_LCDRS, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDCS, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDRD, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDWR, NULL);
|
||||||
|
gpio_request(GPIO_PTH2, NULL); /* LCD_DON */
|
||||||
|
gpio_direction_output(GPIO_PTH2, 1);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SH_MIGOR_RTA_WVGA /* LCDC - WVGA - Enable RGB Interface signals */
|
||||||
|
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_LCDLCLK, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDCK, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVEPWC, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVCPWC, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDVSYN, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDHSYN, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDISP, NULL);
|
||||||
|
gpio_request(GPIO_FN_LCDDON, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CEU */
|
||||||
clk_always_enable("mstp203"); /* CEU */
|
clk_always_enable("mstp203"); /* CEU */
|
||||||
|
gpio_request(GPIO_FN_VIO_CLK2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_VD2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_HD2, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_FLD, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_CKO, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D15, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D14, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D13, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D12, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D11, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D10, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D9, NULL);
|
||||||
|
gpio_request(GPIO_FN_VIO_D8, NULL);
|
||||||
|
|
||||||
|
gpio_request(GPIO_PTT3, NULL); /* VIO_RST */
|
||||||
|
gpio_direction_output(GPIO_PTT3, 0);
|
||||||
|
gpio_request(GPIO_PTT2, NULL); /* TV_IN_EN */
|
||||||
|
gpio_direction_output(GPIO_PTT2, 1);
|
||||||
|
gpio_request(GPIO_PTT0, NULL); /* CAM_EN */
|
||||||
|
#ifdef CONFIG_SH_MIGOR_RTA_WVGA
|
||||||
|
gpio_direction_output(GPIO_PTT0, 0);
|
||||||
|
#else
|
||||||
|
gpio_direction_output(GPIO_PTT0, 1);
|
||||||
|
#endif
|
||||||
|
ctrl_outw(ctrl_inw(PORT_MSELCRB) | 0x2000, PORT_MSELCRB); /* D15->D8 */
|
||||||
|
|
||||||
platform_resource_setup_memory(&migor_ceu_device, "ceu", 4 << 20);
|
platform_resource_setup_memory(&migor_ceu_device, "ceu", 4 << 20);
|
||||||
|
|
||||||
i2c_register_board_info(0, migor_i2c_devices,
|
i2c_register_board_info(0, migor_i2c_devices,
|
||||||
ARRAY_SIZE(migor_i2c_devices));
|
ARRAY_SIZE(migor_i2c_devices));
|
||||||
|
|
||||||
return platform_add_devices(migor_devices, ARRAY_SIZE(migor_devices));
|
return platform_add_devices(migor_devices, ARRAY_SIZE(migor_devices));
|
||||||
}
|
}
|
||||||
__initcall(migor_devices_setup);
|
__initcall(migor_devices_setup);
|
||||||
|
|
||||||
static void __init migor_setup(char **cmdline_p)
|
static void __init migor_setup(char **cmdline_p)
|
||||||
{
|
{
|
||||||
/* SMC91C111 - Enable IRQ0 */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PJCR) & ~0x0003, PORT_PJCR);
|
|
||||||
|
|
||||||
/* KEYSC */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PYCR) & ~0x0fff, PORT_PYCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PZCR) & ~0x0ff0, PORT_PZCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PSELA) & ~0x4100, PORT_PSELA);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x4000, PORT_HIZCRA);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRC) & ~0xc000, PORT_HIZCRC);
|
|
||||||
|
|
||||||
/* NAND Flash */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PXCR) & 0x0fff, PORT_PXCR);
|
|
||||||
ctrl_outl((ctrl_inl(BSC_CS6ABCR) & ~0x00000600) | 0x00000200,
|
|
||||||
BSC_CS6ABCR);
|
|
||||||
|
|
||||||
/* Touch Panel - Enable IRQ6 */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PZCR) & ~0xc, PORT_PZCR);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PSELA) | 0x8000), PORT_PSELA);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_HIZCRC) & ~0x4000), PORT_HIZCRC);
|
|
||||||
|
|
||||||
#ifdef CONFIG_SH_MIGOR_RTA_WVGA
|
|
||||||
/* LCDC - WVGA - Enable RGB Interface signals */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PACR) & ~0x0003, PORT_PACR);
|
|
||||||
ctrl_outw(0x0000, PORT_PHCR);
|
|
||||||
ctrl_outw(0x0000, PORT_PLCR);
|
|
||||||
ctrl_outw(0x0000, PORT_PMCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PRCR) & ~0x000f, PORT_PRCR);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PSELD) & ~0x000d) | 0x0400, PORT_PSELD);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_MSELCRB) & ~0x0100, PORT_MSELCRB);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x01e0, PORT_HIZCRA);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SH_MIGOR_QVGA
|
|
||||||
/* LCDC - QVGA - Enable SYS Interface signals */
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PACR) & ~0x0003, PORT_PACR);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PHCR) & ~0xcfff) | 0x0010, PORT_PHCR);
|
|
||||||
ctrl_outw(0x0000, PORT_PLCR);
|
|
||||||
ctrl_outw(0x0000, PORT_PMCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PRCR) & ~0x030f, PORT_PRCR);
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PSELD) & ~0x0001) | 0x0420, PORT_PSELD);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_MSELCRB) | 0x0100, PORT_MSELCRB);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x01e0, PORT_HIZCRA);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* CEU */
|
|
||||||
ctrl_outw((ctrl_inw(PORT_PTCR) & ~0x03c3) | 0x0051, PORT_PTCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PUCR) & ~0x03ff, PORT_PUCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PVCR) & ~0x03ff, PORT_PVCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PWCR) & ~0x3c00, PORT_PWCR);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PSELC) | 0x0001, PORT_PSELC);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PSELD) & ~0x2000, PORT_PSELD);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_PSELE) | 0x000f, PORT_PSELE);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_MSELCRB) | 0x2200, PORT_MSELCRB);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRA) & ~0x0a00, PORT_HIZCRA);
|
|
||||||
ctrl_outw(ctrl_inw(PORT_HIZCRB) & ~0x0003, PORT_HIZCRB);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sh_machine_vector mv_migor __initmv = {
|
static struct sh_machine_vector mv_migor __initmv = {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
/*
|
/*
|
||||||
* include/asm-sh/gpio.h
|
* include/asm-sh/gpio.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007 Markus Brunner, Mark Jonas
|
* Generic GPIO API and pinmux table support for SuperH.
|
||||||
*
|
*
|
||||||
* Addresses for the Pin Function Controller
|
* Copyright (c) 2008 Magnus Damm
|
||||||
*
|
*
|
||||||
* This file is subject to the terms and conditions of the GNU General Public
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
@ -16,4 +16,92 @@
|
||||||
#include <cpu/gpio.h>
|
#include <cpu/gpio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef unsigned short pinmux_enum_t;
|
||||||
|
typedef unsigned char pinmux_flag_t;
|
||||||
|
|
||||||
|
#define PINMUX_TYPE_NONE 0
|
||||||
|
#define PINMUX_TYPE_FUNCTION 1
|
||||||
|
#define PINMUX_TYPE_GPIO 2
|
||||||
|
#define PINMUX_TYPE_OUTPUT 3
|
||||||
|
#define PINMUX_TYPE_INPUT 4
|
||||||
|
#define PINMUX_TYPE_INPUT_PULLUP 5
|
||||||
|
#define PINMUX_TYPE_INPUT_PULLDOWN 6
|
||||||
|
|
||||||
|
#define PINMUX_FLAG_TYPE (0x7)
|
||||||
|
#define PINMUX_FLAG_WANT_PULLUP (1 << 3)
|
||||||
|
#define PINMUX_FLAG_WANT_PULLDOWN (1 << 4)
|
||||||
|
|
||||||
|
struct pinmux_gpio {
|
||||||
|
pinmux_enum_t enum_id;
|
||||||
|
pinmux_flag_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PINMUX_GPIO(gpio, data_or_mark) [gpio] = { data_or_mark }
|
||||||
|
#define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0
|
||||||
|
|
||||||
|
struct pinmux_cfg_reg {
|
||||||
|
unsigned long reg, reg_width, field_width;
|
||||||
|
unsigned long *cnt;
|
||||||
|
pinmux_enum_t *enum_ids;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PINMUX_CFG_REG(name, r, r_width, f_width) \
|
||||||
|
.reg = r, .reg_width = r_width, .field_width = f_width, \
|
||||||
|
.cnt = (unsigned long [r_width / f_width]) {}, \
|
||||||
|
.enum_ids = (pinmux_enum_t [(r_width / f_width) * (1 << f_width)]) \
|
||||||
|
|
||||||
|
struct pinmux_data_reg {
|
||||||
|
unsigned long reg, reg_width;
|
||||||
|
pinmux_enum_t *enum_ids;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PINMUX_DATA_REG(name, r, r_width) \
|
||||||
|
.reg = r, .reg_width = r_width, \
|
||||||
|
.enum_ids = (pinmux_enum_t [r_width]) \
|
||||||
|
|
||||||
|
struct pinmux_range {
|
||||||
|
pinmux_enum_t begin;
|
||||||
|
pinmux_enum_t end;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pinmux_info {
|
||||||
|
char *name;
|
||||||
|
pinmux_enum_t reserved_id;
|
||||||
|
struct pinmux_range data;
|
||||||
|
struct pinmux_range input;
|
||||||
|
struct pinmux_range input_pd;
|
||||||
|
struct pinmux_range input_pu;
|
||||||
|
struct pinmux_range output;
|
||||||
|
struct pinmux_range mark;
|
||||||
|
struct pinmux_range function;
|
||||||
|
|
||||||
|
unsigned first_gpio, last_gpio;
|
||||||
|
|
||||||
|
struct pinmux_gpio *gpios;
|
||||||
|
struct pinmux_cfg_reg *cfg_regs;
|
||||||
|
struct pinmux_data_reg *data_regs;
|
||||||
|
|
||||||
|
pinmux_enum_t *gpio_data;
|
||||||
|
unsigned int gpio_data_size;
|
||||||
|
|
||||||
|
unsigned long *gpio_in_use;
|
||||||
|
};
|
||||||
|
|
||||||
|
int register_pinmux(struct pinmux_info *pip);
|
||||||
|
|
||||||
|
int __gpio_request(unsigned gpio);
|
||||||
|
static inline int gpio_request(unsigned gpio, const char *label)
|
||||||
|
{
|
||||||
|
return __gpio_request(gpio);
|
||||||
|
}
|
||||||
|
void gpio_free(unsigned gpio);
|
||||||
|
int gpio_direction_input(unsigned gpio);
|
||||||
|
int gpio_direction_output(unsigned gpio, int value);
|
||||||
|
int gpio_get_value(unsigned gpio);
|
||||||
|
void gpio_set_value(unsigned gpio, int value);
|
||||||
|
static inline int gpio_export(unsigned gpio, bool direction_may_change)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __ASM_SH_GPIO_H */
|
#endif /* __ASM_SH_GPIO_H */
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
#ifndef __ASM_SH7203_H__
|
||||||
|
#define __ASM_SH7203_H__
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/* PA */
|
||||||
|
GPIO_PA7, GPIO_PA6, GPIO_PA5, GPIO_PA4,
|
||||||
|
GPIO_PA3, GPIO_PA2, GPIO_PA1, GPIO_PA0,
|
||||||
|
|
||||||
|
/* PB */
|
||||||
|
GPIO_PB12,
|
||||||
|
GPIO_PB11, GPIO_PB10, GPIO_PB9, GPIO_PB8,
|
||||||
|
GPIO_PB7, GPIO_PB6, GPIO_PB5, GPIO_PB4,
|
||||||
|
GPIO_PB3, GPIO_PB2, GPIO_PB1, GPIO_PB0,
|
||||||
|
|
||||||
|
/* PC */
|
||||||
|
GPIO_PC14, GPIO_PC13, GPIO_PC12,
|
||||||
|
GPIO_PC11, GPIO_PC10, GPIO_PC9, GPIO_PC8,
|
||||||
|
GPIO_PC7, GPIO_PC6, GPIO_PC5, GPIO_PC4,
|
||||||
|
GPIO_PC3, GPIO_PC2, GPIO_PC1, GPIO_PC0,
|
||||||
|
|
||||||
|
/* PD */
|
||||||
|
GPIO_PD15, GPIO_PD14, GPIO_PD13, GPIO_PD12,
|
||||||
|
GPIO_PD11, GPIO_PD10, GPIO_PD9, GPIO_PD8,
|
||||||
|
GPIO_PD7, GPIO_PD6, GPIO_PD5, GPIO_PD4,
|
||||||
|
GPIO_PD3, GPIO_PD2, GPIO_PD1, GPIO_PD0,
|
||||||
|
|
||||||
|
/* PE */
|
||||||
|
GPIO_PE15, GPIO_PE14, GPIO_PE13, GPIO_PE12,
|
||||||
|
GPIO_PE11, GPIO_PE10, GPIO_PE9, GPIO_PE8,
|
||||||
|
GPIO_PE7, GPIO_PE6, GPIO_PE5, GPIO_PE4,
|
||||||
|
GPIO_PE3, GPIO_PE2, GPIO_PE1, GPIO_PE0,
|
||||||
|
|
||||||
|
/* PF */
|
||||||
|
GPIO_PF30, GPIO_PF29, GPIO_PF28,
|
||||||
|
GPIO_PF27, GPIO_PF26, GPIO_PF25, GPIO_PF24,
|
||||||
|
GPIO_PF23, GPIO_PF22, GPIO_PF21, GPIO_PF20,
|
||||||
|
GPIO_PF19, GPIO_PF18, GPIO_PF17, GPIO_PF16,
|
||||||
|
GPIO_PF15, GPIO_PF14, GPIO_PF13, GPIO_PF12,
|
||||||
|
GPIO_PF11, GPIO_PF10, GPIO_PF9, GPIO_PF8,
|
||||||
|
GPIO_PF7, GPIO_PF6, GPIO_PF5, GPIO_PF4,
|
||||||
|
GPIO_PF3, GPIO_PF2, GPIO_PF1, GPIO_PF0,
|
||||||
|
|
||||||
|
/* INTC: IRQ and PINT on PB/PD/PE */
|
||||||
|
GPIO_FN_PINT7_PB, GPIO_FN_PINT6_PB, GPIO_FN_PINT5_PB, GPIO_FN_PINT4_PB,
|
||||||
|
GPIO_FN_PINT3_PB, GPIO_FN_PINT2_PB, GPIO_FN_PINT1_PB, GPIO_FN_PINT0_PB,
|
||||||
|
GPIO_FN_PINT7_PD, GPIO_FN_PINT6_PD, GPIO_FN_PINT5_PD, GPIO_FN_PINT4_PD,
|
||||||
|
GPIO_FN_PINT3_PD, GPIO_FN_PINT2_PD, GPIO_FN_PINT1_PD, GPIO_FN_PINT0_PD,
|
||||||
|
GPIO_FN_IRQ7_PB, GPIO_FN_IRQ6_PB, GPIO_FN_IRQ5_PB, GPIO_FN_IRQ4_PB,
|
||||||
|
GPIO_FN_IRQ3_PB, GPIO_FN_IRQ2_PB, GPIO_FN_IRQ1_PB, GPIO_FN_IRQ0_PB,
|
||||||
|
GPIO_FN_IRQ7_PD, GPIO_FN_IRQ6_PD, GPIO_FN_IRQ5_PD, GPIO_FN_IRQ4_PD,
|
||||||
|
GPIO_FN_IRQ3_PD, GPIO_FN_IRQ2_PD, GPIO_FN_IRQ1_PD, GPIO_FN_IRQ0_PD,
|
||||||
|
GPIO_FN_IRQ7_PE, GPIO_FN_IRQ6_PE, GPIO_FN_IRQ5_PE, GPIO_FN_IRQ4_PE,
|
||||||
|
GPIO_FN_IRQ3_PE, GPIO_FN_IRQ2_PE, GPIO_FN_IRQ1_PE, GPIO_FN_IRQ0_PE,
|
||||||
|
|
||||||
|
GPIO_FN_WDTOVF, GPIO_FN_IRQOUT, GPIO_FN_REFOUT, GPIO_FN_IRQOUT_REFOUT,
|
||||||
|
GPIO_FN_UBCTRG,
|
||||||
|
|
||||||
|
/* CAN */
|
||||||
|
GPIO_FN_CTX1, GPIO_FN_CRX1, GPIO_FN_CTX0, GPIO_FN_CTX0_CTX1,
|
||||||
|
GPIO_FN_CRX0, GPIO_FN_CRX0_CRX1,
|
||||||
|
|
||||||
|
/* IIC3 */
|
||||||
|
GPIO_FN_SDA3, GPIO_FN_SCL3,
|
||||||
|
GPIO_FN_SDA2, GPIO_FN_SCL2,
|
||||||
|
GPIO_FN_SDA1, GPIO_FN_SCL1,
|
||||||
|
GPIO_FN_SDA0, GPIO_FN_SCL0,
|
||||||
|
|
||||||
|
/* DMAC */
|
||||||
|
GPIO_FN_TEND0_PD, GPIO_FN_TEND0_PE, GPIO_FN_DACK0_PD,
|
||||||
|
GPIO_FN_DACK0_PE, GPIO_FN_DREQ0_PD, GPIO_FN_DREQ0_PE,
|
||||||
|
GPIO_FN_TEND1_PD, GPIO_FN_TEND1_PE, GPIO_FN_DACK1_PD,
|
||||||
|
GPIO_FN_DACK1_PE, GPIO_FN_DREQ1_PD, GPIO_FN_DREQ1_PE,
|
||||||
|
GPIO_FN_DACK2, GPIO_FN_DREQ2,
|
||||||
|
GPIO_FN_DACK3, GPIO_FN_DREQ3,
|
||||||
|
|
||||||
|
/* ADC */
|
||||||
|
GPIO_FN_ADTRG_PD, GPIO_FN_ADTRG_PE,
|
||||||
|
|
||||||
|
/* BSC */
|
||||||
|
GPIO_FN_D31, GPIO_FN_D30, GPIO_FN_D29, GPIO_FN_D28,
|
||||||
|
GPIO_FN_D27, GPIO_FN_D26, GPIO_FN_D25, GPIO_FN_D24,
|
||||||
|
GPIO_FN_D23, GPIO_FN_D22, GPIO_FN_D21, GPIO_FN_D20,
|
||||||
|
GPIO_FN_D19, GPIO_FN_D18, GPIO_FN_D17, GPIO_FN_D16,
|
||||||
|
GPIO_FN_A25, GPIO_FN_A24, GPIO_FN_A23, GPIO_FN_A22,
|
||||||
|
GPIO_FN_A21, GPIO_FN_CS4, GPIO_FN_MRES, GPIO_FN_BS,
|
||||||
|
GPIO_FN_IOIS16, GPIO_FN_CS1, GPIO_FN_CS6_CE1B,
|
||||||
|
GPIO_FN_CE2B, GPIO_FN_CS5_CE1A, GPIO_FN_CE2A,
|
||||||
|
GPIO_FN_FRAME, GPIO_FN_WAIT, GPIO_FN_RDWR,
|
||||||
|
GPIO_FN_CKE, GPIO_FN_CASU, GPIO_FN_BREQ, GPIO_FN_RASU,
|
||||||
|
GPIO_FN_BACK, GPIO_FN_CASL, GPIO_FN_RASL,
|
||||||
|
GPIO_FN_WE3_DQMUU_AH_ICIO_WR, GPIO_FN_WE2_DQMUL_ICIORD,
|
||||||
|
GPIO_FN_WE1_DQMLU_WE, GPIO_FN_WE0_DQMLL,
|
||||||
|
GPIO_FN_CS3, GPIO_FN_CS2, GPIO_FN_A1, GPIO_FN_A0, GPIO_FN_CS7,
|
||||||
|
|
||||||
|
/* TMU */
|
||||||
|
GPIO_FN_TIOC4D, GPIO_FN_TIOC4C, GPIO_FN_TIOC4B, GPIO_FN_TIOC4A,
|
||||||
|
GPIO_FN_TIOC3D, GPIO_FN_TIOC3C, GPIO_FN_TIOC3B, GPIO_FN_TIOC3A,
|
||||||
|
GPIO_FN_TIOC2B, GPIO_FN_TIOC1B, GPIO_FN_TIOC2A, GPIO_FN_TIOC1A,
|
||||||
|
GPIO_FN_TIOC0D, GPIO_FN_TIOC0C, GPIO_FN_TIOC0B, GPIO_FN_TIOC0A,
|
||||||
|
GPIO_FN_TCLKD_PD, GPIO_FN_TCLKC_PD, GPIO_FN_TCLKB_PD, GPIO_FN_TCLKA_PD,
|
||||||
|
GPIO_FN_TCLKD_PF, GPIO_FN_TCLKC_PF, GPIO_FN_TCLKB_PF, GPIO_FN_TCLKA_PF,
|
||||||
|
|
||||||
|
/* SSU */
|
||||||
|
GPIO_FN_SCS0_PD, GPIO_FN_SSO0_PD, GPIO_FN_SSI0_PD, GPIO_FN_SSCK0_PD,
|
||||||
|
GPIO_FN_SCS0_PF, GPIO_FN_SSO0_PF, GPIO_FN_SSI0_PF, GPIO_FN_SSCK0_PF,
|
||||||
|
GPIO_FN_SCS1_PD, GPIO_FN_SSO1_PD, GPIO_FN_SSI1_PD, GPIO_FN_SSCK1_PD,
|
||||||
|
GPIO_FN_SCS1_PF, GPIO_FN_SSO1_PF, GPIO_FN_SSI1_PF, GPIO_FN_SSCK1_PF,
|
||||||
|
|
||||||
|
/* SCIF */
|
||||||
|
GPIO_FN_TXD0, GPIO_FN_RXD0, GPIO_FN_SCK0,
|
||||||
|
GPIO_FN_TXD1, GPIO_FN_RXD1, GPIO_FN_SCK1,
|
||||||
|
GPIO_FN_TXD2, GPIO_FN_RXD2, GPIO_FN_SCK2,
|
||||||
|
GPIO_FN_RTS3, GPIO_FN_CTS3, GPIO_FN_TXD3, GPIO_FN_RXD3, GPIO_FN_SCK3,
|
||||||
|
|
||||||
|
/* SSI */
|
||||||
|
GPIO_FN_AUDIO_CLK,
|
||||||
|
GPIO_FN_SSIDATA3, GPIO_FN_SSIWS3, GPIO_FN_SSISCK3,
|
||||||
|
GPIO_FN_SSIDATA2, GPIO_FN_SSIWS2, GPIO_FN_SSISCK2,
|
||||||
|
GPIO_FN_SSIDATA1, GPIO_FN_SSIWS1, GPIO_FN_SSISCK1,
|
||||||
|
GPIO_FN_SSIDATA0, GPIO_FN_SSIWS0, GPIO_FN_SSISCK0,
|
||||||
|
|
||||||
|
/* FLCTL */
|
||||||
|
GPIO_FN_FCE, GPIO_FN_FRB,
|
||||||
|
GPIO_FN_NAF7, GPIO_FN_NAF6, GPIO_FN_NAF5, GPIO_FN_NAF4,
|
||||||
|
GPIO_FN_NAF3, GPIO_FN_NAF2, GPIO_FN_NAF1, GPIO_FN_NAF0,
|
||||||
|
GPIO_FN_FSC, GPIO_FN_FOE, GPIO_FN_FCDE, GPIO_FN_FWE,
|
||||||
|
|
||||||
|
/* LCDC */
|
||||||
|
GPIO_FN_LCD_VEPWC, GPIO_FN_LCD_VCPWC,
|
||||||
|
GPIO_FN_LCD_CLK, GPIO_FN_LCD_FLM,
|
||||||
|
GPIO_FN_LCD_M_DISP, GPIO_FN_LCD_CL2,
|
||||||
|
GPIO_FN_LCD_CL1, GPIO_FN_LCD_DON,
|
||||||
|
GPIO_FN_LCD_DATA15, GPIO_FN_LCD_DATA14,
|
||||||
|
GPIO_FN_LCD_DATA13, GPIO_FN_LCD_DATA12,
|
||||||
|
GPIO_FN_LCD_DATA11, GPIO_FN_LCD_DATA10,
|
||||||
|
GPIO_FN_LCD_DATA9, GPIO_FN_LCD_DATA8,
|
||||||
|
GPIO_FN_LCD_DATA7, GPIO_FN_LCD_DATA6,
|
||||||
|
GPIO_FN_LCD_DATA5, GPIO_FN_LCD_DATA4,
|
||||||
|
GPIO_FN_LCD_DATA3, GPIO_FN_LCD_DATA2,
|
||||||
|
GPIO_FN_LCD_DATA1, GPIO_FN_LCD_DATA0,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_SH7203_H__ */
|
|
@ -0,0 +1,174 @@
|
||||||
|
#ifndef __ASM_SH7720_H__
|
||||||
|
#define __ASM_SH7720_H__
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/* PTA */
|
||||||
|
GPIO_PTA7, GPIO_PTA6, GPIO_PTA5, GPIO_PTA4,
|
||||||
|
GPIO_PTA3, GPIO_PTA2, GPIO_PTA1, GPIO_PTA0,
|
||||||
|
|
||||||
|
/* PTB */
|
||||||
|
GPIO_PTB7, GPIO_PTB6, GPIO_PTB5, GPIO_PTB4,
|
||||||
|
GPIO_PTB3, GPIO_PTB2, GPIO_PTB1, GPIO_PTB0,
|
||||||
|
|
||||||
|
/* PTC */
|
||||||
|
GPIO_PTC7, GPIO_PTC6, GPIO_PTC5, GPIO_PTC4,
|
||||||
|
GPIO_PTC3, GPIO_PTC2, GPIO_PTC1, GPIO_PTC0,
|
||||||
|
|
||||||
|
/* PTD */
|
||||||
|
GPIO_PTD7, GPIO_PTD6, GPIO_PTD5, GPIO_PTD4,
|
||||||
|
GPIO_PTD3, GPIO_PTD2, GPIO_PTD1, GPIO_PTD0,
|
||||||
|
|
||||||
|
/* PTE */
|
||||||
|
GPIO_PTE6, GPIO_PTE5, GPIO_PTE4, GPIO_PTE3,
|
||||||
|
GPIO_PTE2, GPIO_PTE1, GPIO_PTE0,
|
||||||
|
|
||||||
|
/* PTF */
|
||||||
|
GPIO_PTF6, GPIO_PTF5, GPIO_PTF4, GPIO_PTF3,
|
||||||
|
GPIO_PTF2, GPIO_PTF1, GPIO_PTF0, GPIO_PTG6,
|
||||||
|
|
||||||
|
/* PTG */
|
||||||
|
GPIO_PTG5, GPIO_PTG4, GPIO_PTG3, GPIO_PTG2,
|
||||||
|
GPIO_PTG1, GPIO_PTG0,
|
||||||
|
|
||||||
|
/* PTH */
|
||||||
|
GPIO_PTH6, GPIO_PTH5, GPIO_PTH4, GPIO_PTH3,
|
||||||
|
GPIO_PTH2, GPIO_PTH1, GPIO_PTH0,
|
||||||
|
|
||||||
|
/* PTJ */
|
||||||
|
GPIO_PTJ6, GPIO_PTJ5, GPIO_PTJ4, GPIO_PTJ3,
|
||||||
|
GPIO_PTJ2, GPIO_PTJ1, GPIO_PTJ0,
|
||||||
|
|
||||||
|
/* PTK */
|
||||||
|
GPIO_PTK3, GPIO_PTK2, GPIO_PTK1, GPIO_PTK0,
|
||||||
|
|
||||||
|
/* PTL */
|
||||||
|
GPIO_PTL7, GPIO_PTL6, GPIO_PTL5, GPIO_PTL4, GPIO_PTL3,
|
||||||
|
|
||||||
|
/* PTM */
|
||||||
|
GPIO_PTM7, GPIO_PTM6, GPIO_PTM5, GPIO_PTM4,
|
||||||
|
GPIO_PTM3, GPIO_PTM2, GPIO_PTM1, GPIO_PTM0,
|
||||||
|
|
||||||
|
/* PTP */
|
||||||
|
GPIO_PTP4, GPIO_PTP3, GPIO_PTP2, GPIO_PTP1, GPIO_PTP0,
|
||||||
|
|
||||||
|
/* PTR */
|
||||||
|
GPIO_PTR7, GPIO_PTR6, GPIO_PTR5, GPIO_PTR4,
|
||||||
|
GPIO_PTR3, GPIO_PTR2, GPIO_PTR1, GPIO_PTR0,
|
||||||
|
|
||||||
|
/* PTS */
|
||||||
|
GPIO_PTS4, GPIO_PTS3, GPIO_PTS2, GPIO_PTS1, GPIO_PTS0,
|
||||||
|
|
||||||
|
/* PTT */
|
||||||
|
GPIO_PTT4, GPIO_PTT3, GPIO_PTT2, GPIO_PTT1, GPIO_PTT0,
|
||||||
|
|
||||||
|
/* PTU */
|
||||||
|
GPIO_PTU4, GPIO_PTU3, GPIO_PTU2, GPIO_PTU1, GPIO_PTU0,
|
||||||
|
|
||||||
|
/* PTV */
|
||||||
|
GPIO_PTV4, GPIO_PTV3, GPIO_PTV2, GPIO_PTV1, GPIO_PTV0,
|
||||||
|
|
||||||
|
/* BSC */
|
||||||
|
GPIO_FN_D31, GPIO_FN_D30, GPIO_FN_D29, GPIO_FN_D28,
|
||||||
|
GPIO_FN_D27, GPIO_FN_D26, GPIO_FN_D25, GPIO_FN_D24,
|
||||||
|
GPIO_FN_D23, GPIO_FN_D22, GPIO_FN_D21, GPIO_FN_D20,
|
||||||
|
GPIO_FN_D19, GPIO_FN_D18, GPIO_FN_D17, GPIO_FN_D16,
|
||||||
|
GPIO_FN_IOIS16, GPIO_FN_RAS, GPIO_FN_CAS, GPIO_FN_CKE,
|
||||||
|
GPIO_FN_CS5B_CE1A, GPIO_FN_CS6B_CE1B,
|
||||||
|
GPIO_FN_A25, GPIO_FN_A24, GPIO_FN_A23, GPIO_FN_A22,
|
||||||
|
GPIO_FN_A21, GPIO_FN_A20, GPIO_FN_A19, GPIO_FN_A0,
|
||||||
|
GPIO_FN_REFOUT, GPIO_FN_IRQOUT,
|
||||||
|
|
||||||
|
/* LCDC */
|
||||||
|
GPIO_FN_LCD_DATA15, GPIO_FN_LCD_DATA14,
|
||||||
|
GPIO_FN_LCD_DATA13, GPIO_FN_LCD_DATA12,
|
||||||
|
GPIO_FN_LCD_DATA11, GPIO_FN_LCD_DATA10,
|
||||||
|
GPIO_FN_LCD_DATA9, GPIO_FN_LCD_DATA8,
|
||||||
|
GPIO_FN_LCD_DATA7, GPIO_FN_LCD_DATA6,
|
||||||
|
GPIO_FN_LCD_DATA5, GPIO_FN_LCD_DATA4,
|
||||||
|
GPIO_FN_LCD_DATA3, GPIO_FN_LCD_DATA2,
|
||||||
|
GPIO_FN_LCD_DATA1, GPIO_FN_LCD_DATA0,
|
||||||
|
GPIO_FN_LCD_M_DISP,
|
||||||
|
GPIO_FN_LCD_CL1, GPIO_FN_LCD_CL2,
|
||||||
|
GPIO_FN_LCD_DON, GPIO_FN_LCD_FLM,
|
||||||
|
GPIO_FN_LCD_VEPWC, GPIO_FN_LCD_VCPWC,
|
||||||
|
|
||||||
|
/* AFEIF */
|
||||||
|
GPIO_FN_AFE_RXIN, GPIO_FN_AFE_RDET,
|
||||||
|
GPIO_FN_AFE_FS, GPIO_FN_AFE_TXOUT,
|
||||||
|
GPIO_FN_AFE_SCLK, GPIO_FN_AFE_RLYCNT,
|
||||||
|
GPIO_FN_AFE_HC1,
|
||||||
|
|
||||||
|
/* IIC */
|
||||||
|
GPIO_FN_IIC_SCL, GPIO_FN_IIC_SDA,
|
||||||
|
|
||||||
|
/* DAC */
|
||||||
|
GPIO_FN_DA1, GPIO_FN_DA0,
|
||||||
|
|
||||||
|
/* ADC */
|
||||||
|
GPIO_FN_AN3, GPIO_FN_AN2, GPIO_FN_AN1, GPIO_FN_AN0, GPIO_FN_ADTRG,
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
GPIO_FN_USB1D_RCV, GPIO_FN_USB1D_TXSE0,
|
||||||
|
GPIO_FN_USB1D_TXDPLS, GPIO_FN_USB1D_DMNS,
|
||||||
|
GPIO_FN_USB1D_DPLS, GPIO_FN_USB1D_SPEED,
|
||||||
|
GPIO_FN_USB1D_TXENL, GPIO_FN_USB2_PWR_EN,
|
||||||
|
GPIO_FN_USB1_PWR_EN_USBF_UPLUP, GPIO_FN_USB1D_SUSPEND,
|
||||||
|
|
||||||
|
/* INTC */
|
||||||
|
GPIO_FN_IRQ5, GPIO_FN_IRQ4,
|
||||||
|
GPIO_FN_IRQ3_IRL3, GPIO_FN_IRQ2_IRL2,
|
||||||
|
GPIO_FN_IRQ1_IRL1, GPIO_FN_IRQ0_IRL0,
|
||||||
|
|
||||||
|
/* PCC */
|
||||||
|
GPIO_FN_PCC_REG, GPIO_FN_PCC_DRV,
|
||||||
|
GPIO_FN_PCC_BVD2, GPIO_FN_PCC_BVD1,
|
||||||
|
GPIO_FN_PCC_CD2, GPIO_FN_PCC_CD1,
|
||||||
|
GPIO_FN_PCC_RESET, GPIO_FN_PCC_RDY,
|
||||||
|
GPIO_FN_PCC_VS2, GPIO_FN_PCC_VS1,
|
||||||
|
|
||||||
|
/* HUDI */
|
||||||
|
GPIO_FN_AUDATA3, GPIO_FN_AUDATA2, GPIO_FN_AUDATA1, GPIO_FN_AUDATA0,
|
||||||
|
GPIO_FN_AUDCK, GPIO_FN_AUDSYNC, GPIO_FN_ASEBRKAK, GPIO_FN_TRST,
|
||||||
|
GPIO_FN_TMS, GPIO_FN_TDO, GPIO_FN_TDI, GPIO_FN_TCK,
|
||||||
|
|
||||||
|
/* DMAC */
|
||||||
|
GPIO_FN_DACK1, GPIO_FN_DREQ1, GPIO_FN_DACK0, GPIO_FN_DREQ0,
|
||||||
|
GPIO_FN_TEND1, GPIO_FN_TEND0,
|
||||||
|
|
||||||
|
/* SIOF0 */
|
||||||
|
GPIO_FN_SIOF0_SYNC, GPIO_FN_SIOF0_MCLK,
|
||||||
|
GPIO_FN_SIOF0_TXD, GPIO_FN_SIOF0_RXD,
|
||||||
|
GPIO_FN_SIOF0_SCK,
|
||||||
|
|
||||||
|
/* SIOF1 */
|
||||||
|
GPIO_FN_SIOF1_SYNC, GPIO_FN_SIOF1_MCLK,
|
||||||
|
GPIO_FN_SIOF1_TXD, GPIO_FN_SIOF1_RXD,
|
||||||
|
GPIO_FN_SIOF1_SCK,
|
||||||
|
|
||||||
|
/* SCIF0 */
|
||||||
|
GPIO_FN_SCIF0_TXD, GPIO_FN_SCIF0_RXD,
|
||||||
|
GPIO_FN_SCIF0_RTS, GPIO_FN_SCIF0_CTS, GPIO_FN_SCIF0_SCK,
|
||||||
|
|
||||||
|
/* SCIF1 */
|
||||||
|
GPIO_FN_SCIF1_TXD, GPIO_FN_SCIF1_RXD,
|
||||||
|
GPIO_FN_SCIF1_RTS, GPIO_FN_SCIF1_CTS, GPIO_FN_SCIF1_SCK,
|
||||||
|
|
||||||
|
/* TPU */
|
||||||
|
GPIO_FN_TPU_TO1, GPIO_FN_TPU_TO0,
|
||||||
|
GPIO_FN_TPU_TI3B, GPIO_FN_TPU_TI3A,
|
||||||
|
GPIO_FN_TPU_TI2B, GPIO_FN_TPU_TI2A,
|
||||||
|
GPIO_FN_TPU_TO3, GPIO_FN_TPU_TO2,
|
||||||
|
|
||||||
|
/* SIM */
|
||||||
|
GPIO_FN_SIM_D, GPIO_FN_SIM_CLK, GPIO_FN_SIM_RST,
|
||||||
|
|
||||||
|
/* MMC */
|
||||||
|
GPIO_FN_MMC_DAT, GPIO_FN_MMC_CMD,
|
||||||
|
GPIO_FN_MMC_CLK, GPIO_FN_MMC_VDDON,
|
||||||
|
GPIO_FN_MMC_ODMOD,
|
||||||
|
|
||||||
|
/* SYSC */
|
||||||
|
GPIO_FN_STATUS0, GPIO_FN_STATUS1,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_SH7720_H__ */
|
|
@ -0,0 +1,210 @@
|
||||||
|
#ifndef __ASM_SH7722_H__
|
||||||
|
#define __ASM_SH7722_H__
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/* PTA */
|
||||||
|
GPIO_PTA7, GPIO_PTA6, GPIO_PTA5, GPIO_PTA4,
|
||||||
|
GPIO_PTA3, GPIO_PTA2, GPIO_PTA1, GPIO_PTA0,
|
||||||
|
|
||||||
|
/* PTB */
|
||||||
|
GPIO_PTB7, GPIO_PTB6, GPIO_PTB5, GPIO_PTB4,
|
||||||
|
GPIO_PTB3, GPIO_PTB2, GPIO_PTB1, GPIO_PTB0,
|
||||||
|
|
||||||
|
/* PTC */
|
||||||
|
GPIO_PTC7, GPIO_PTC5, GPIO_PTC4, GPIO_PTC3,
|
||||||
|
GPIO_PTC2, GPIO_PTC0,
|
||||||
|
|
||||||
|
/* PTD */
|
||||||
|
GPIO_PTD7, GPIO_PTD6, GPIO_PTD5, GPIO_PTD4,
|
||||||
|
GPIO_PTD3, GPIO_PTD2, GPIO_PTD1, GPIO_PTD0,
|
||||||
|
|
||||||
|
/* PTE */
|
||||||
|
GPIO_PTE7, GPIO_PTE6, GPIO_PTE5, GPIO_PTE4,
|
||||||
|
GPIO_PTE1, GPIO_PTE0,
|
||||||
|
|
||||||
|
/* PTF */
|
||||||
|
GPIO_PTF6, GPIO_PTF5, GPIO_PTF4, GPIO_PTF3,
|
||||||
|
GPIO_PTF2, GPIO_PTF1, GPIO_PTF0,
|
||||||
|
|
||||||
|
/* PTG */
|
||||||
|
GPIO_PTG4, GPIO_PTG3, GPIO_PTG2, GPIO_PTG1, GPIO_PTG0,
|
||||||
|
|
||||||
|
/* PTH */
|
||||||
|
GPIO_PTH7, GPIO_PTH6, GPIO_PTH5, GPIO_PTH4,
|
||||||
|
GPIO_PTH3, GPIO_PTH2, GPIO_PTH1, GPIO_PTH0,
|
||||||
|
|
||||||
|
/* PTJ */
|
||||||
|
GPIO_PTJ7, GPIO_PTJ6, GPIO_PTJ5, GPIO_PTJ1, GPIO_PTJ0,
|
||||||
|
|
||||||
|
/* PTK */
|
||||||
|
GPIO_PTK6, GPIO_PTK5, GPIO_PTK4, GPIO_PTK3,
|
||||||
|
GPIO_PTK2, GPIO_PTK1, GPIO_PTK0,
|
||||||
|
|
||||||
|
/* PTL */
|
||||||
|
GPIO_PTL7, GPIO_PTL6, GPIO_PTL5, GPIO_PTL4,
|
||||||
|
GPIO_PTL3, GPIO_PTL2, GPIO_PTL1, GPIO_PTL0,
|
||||||
|
|
||||||
|
/* PTM */
|
||||||
|
GPIO_PTM7, GPIO_PTM6, GPIO_PTM5, GPIO_PTM4,
|
||||||
|
GPIO_PTM3, GPIO_PTM2, GPIO_PTM1, GPIO_PTM0,
|
||||||
|
|
||||||
|
/* PTN */
|
||||||
|
GPIO_PTN7, GPIO_PTN6, GPIO_PTN5, GPIO_PTN4,
|
||||||
|
GPIO_PTN3, GPIO_PTN2, GPIO_PTN1, GPIO_PTN0,
|
||||||
|
|
||||||
|
/* PTQ */
|
||||||
|
GPIO_PTQ7, GPIO_PTQ6, GPIO_PTQ5, GPIO_PTQ4,
|
||||||
|
GPIO_PTQ3, GPIO_PTQ2, GPIO_PTQ1, GPIO_PTQ0,
|
||||||
|
|
||||||
|
/* PTR */
|
||||||
|
GPIO_PTR4, GPIO_PTR3, GPIO_PTR2, GPIO_PTR1, GPIO_PTR0,
|
||||||
|
|
||||||
|
/* PTS */
|
||||||
|
GPIO_PTS4, GPIO_PTS3, GPIO_PTS2, GPIO_PTS1, GPIO_PTS0,
|
||||||
|
|
||||||
|
/* PTT */
|
||||||
|
GPIO_PTT4, GPIO_PTT3, GPIO_PTT2, GPIO_PTT1, GPIO_PTT0,
|
||||||
|
|
||||||
|
/* PTU */
|
||||||
|
GPIO_PTU4, GPIO_PTU3, GPIO_PTU2, GPIO_PTU1, GPIO_PTU0,
|
||||||
|
|
||||||
|
/* PTV */
|
||||||
|
GPIO_PTV4, GPIO_PTV3, GPIO_PTV2, GPIO_PTV1, GPIO_PTV0,
|
||||||
|
|
||||||
|
/* PTW */
|
||||||
|
GPIO_PTW6, GPIO_PTW5, GPIO_PTW4, GPIO_PTW3,
|
||||||
|
GPIO_PTW2, GPIO_PTW1, GPIO_PTW0,
|
||||||
|
|
||||||
|
/* PTX */
|
||||||
|
GPIO_PTX6, GPIO_PTX5, GPIO_PTX4, GPIO_PTX3,
|
||||||
|
GPIO_PTX2, GPIO_PTX1, GPIO_PTX0,
|
||||||
|
|
||||||
|
/* PTY */
|
||||||
|
GPIO_PTY5, GPIO_PTY4, GPIO_PTY3, GPIO_PTY2,
|
||||||
|
GPIO_PTY1, GPIO_PTY0,
|
||||||
|
|
||||||
|
/* PTZ */
|
||||||
|
GPIO_PTZ5, GPIO_PTZ4, GPIO_PTZ3, GPIO_PTZ2, GPIO_PTZ1,
|
||||||
|
|
||||||
|
/* SCIF0 */
|
||||||
|
GPIO_FN_SCIF0_TXD, GPIO_FN_SCIF0_RXD,
|
||||||
|
GPIO_FN_SCIF0_RTS, GPIO_FN_SCIF0_CTS, GPIO_FN_SCIF0_SCK,
|
||||||
|
|
||||||
|
/* SCIF1 */
|
||||||
|
GPIO_FN_SCIF1_TXD, GPIO_FN_SCIF1_RXD,
|
||||||
|
GPIO_FN_SCIF1_RTS, GPIO_FN_SCIF1_CTS, GPIO_FN_SCIF1_SCK,
|
||||||
|
|
||||||
|
/* SCIF2 */
|
||||||
|
GPIO_FN_SCIF2_TXD, GPIO_FN_SCIF2_RXD,
|
||||||
|
GPIO_FN_SCIF2_RTS, GPIO_FN_SCIF2_CTS, GPIO_FN_SCIF2_SCK,
|
||||||
|
|
||||||
|
/* SIO */
|
||||||
|
GPIO_FN_SIOTXD, GPIO_FN_SIORXD,
|
||||||
|
GPIO_FN_SIOD, GPIO_FN_SIOSTRB0, GPIO_FN_SIOSTRB1,
|
||||||
|
GPIO_FN_SIOSCK, GPIO_FN_SIOMCK,
|
||||||
|
|
||||||
|
/* CEU */
|
||||||
|
GPIO_FN_VIO_D15, GPIO_FN_VIO_D14, GPIO_FN_VIO_D13, GPIO_FN_VIO_D12,
|
||||||
|
GPIO_FN_VIO_D11, GPIO_FN_VIO_D10, GPIO_FN_VIO_D9, GPIO_FN_VIO_D8,
|
||||||
|
GPIO_FN_VIO_D7, GPIO_FN_VIO_D6, GPIO_FN_VIO_D5, GPIO_FN_VIO_D4,
|
||||||
|
GPIO_FN_VIO_D3, GPIO_FN_VIO_D2, GPIO_FN_VIO_D1, GPIO_FN_VIO_D0,
|
||||||
|
GPIO_FN_VIO_FLD, GPIO_FN_VIO_CKO, GPIO_FN_VIO_STEX, GPIO_FN_VIO_STEM,
|
||||||
|
GPIO_FN_VIO_VD, GPIO_FN_VIO_HD, GPIO_FN_VIO_CLK,
|
||||||
|
GPIO_FN_VIO_VD2, GPIO_FN_VIO_HD2, GPIO_FN_VIO_CLK2,
|
||||||
|
|
||||||
|
/* LCDC */
|
||||||
|
GPIO_FN_LCDD23, GPIO_FN_LCDD22, GPIO_FN_LCDD21, GPIO_FN_LCDD20,
|
||||||
|
GPIO_FN_LCDD19, GPIO_FN_LCDD18, GPIO_FN_LCDD17, GPIO_FN_LCDD16,
|
||||||
|
GPIO_FN_LCDD15, GPIO_FN_LCDD14, GPIO_FN_LCDD13, GPIO_FN_LCDD12,
|
||||||
|
GPIO_FN_LCDD11, GPIO_FN_LCDD10, GPIO_FN_LCDD9, GPIO_FN_LCDD8,
|
||||||
|
GPIO_FN_LCDD7, GPIO_FN_LCDD6, GPIO_FN_LCDD5, GPIO_FN_LCDD4,
|
||||||
|
GPIO_FN_LCDD3, GPIO_FN_LCDD2, GPIO_FN_LCDD1, GPIO_FN_LCDD0,
|
||||||
|
GPIO_FN_LCDLCLK,
|
||||||
|
/* Main LCD */
|
||||||
|
GPIO_FN_LCDDON, GPIO_FN_LCDVCPWC, GPIO_FN_LCDVEPWC, GPIO_FN_LCDVSYN,
|
||||||
|
/* Main LCD - RGB Mode */
|
||||||
|
GPIO_FN_LCDDCK, GPIO_FN_LCDHSYN, GPIO_FN_LCDDISP,
|
||||||
|
/* Main LCD - SYS Mode */
|
||||||
|
GPIO_FN_LCDRS, GPIO_FN_LCDCS, GPIO_FN_LCDWR, GPIO_FN_LCDRD,
|
||||||
|
/* Sub LCD - SYS Mode */
|
||||||
|
GPIO_FN_LCDDON2, GPIO_FN_LCDVCPWC2, GPIO_FN_LCDVEPWC2,
|
||||||
|
GPIO_FN_LCDVSYN2, GPIO_FN_LCDCS2,
|
||||||
|
|
||||||
|
/* BSC */
|
||||||
|
GPIO_FN_IOIS16, GPIO_FN_A25, GPIO_FN_A24, GPIO_FN_A23, GPIO_FN_A22,
|
||||||
|
GPIO_FN_BS, GPIO_FN_CS6B_CE1B, GPIO_FN_WAIT, GPIO_FN_CS6A_CE2B,
|
||||||
|
|
||||||
|
/* SBSC */
|
||||||
|
GPIO_FN_HPD63, GPIO_FN_HPD62, GPIO_FN_HPD61, GPIO_FN_HPD60,
|
||||||
|
GPIO_FN_HPD59, GPIO_FN_HPD58, GPIO_FN_HPD57, GPIO_FN_HPD56,
|
||||||
|
GPIO_FN_HPD55, GPIO_FN_HPD54, GPIO_FN_HPD53, GPIO_FN_HPD52,
|
||||||
|
GPIO_FN_HPD51, GPIO_FN_HPD50, GPIO_FN_HPD49, GPIO_FN_HPD48,
|
||||||
|
GPIO_FN_HPDQM7, GPIO_FN_HPDQM6, GPIO_FN_HPDQM5, GPIO_FN_HPDQM4,
|
||||||
|
|
||||||
|
/* IRQ */
|
||||||
|
GPIO_FN_IRQ0, GPIO_FN_IRQ1, GPIO_FN_IRQ2, GPIO_FN_IRQ3,
|
||||||
|
GPIO_FN_IRQ4, GPIO_FN_IRQ5, GPIO_FN_IRQ6, GPIO_FN_IRQ7,
|
||||||
|
|
||||||
|
/* SDHI */
|
||||||
|
GPIO_FN_SDHICD, GPIO_FN_SDHIWP, GPIO_FN_SDHID3, GPIO_FN_SDHID2,
|
||||||
|
GPIO_FN_SDHID1, GPIO_FN_SDHID0, GPIO_FN_SDHICMD, GPIO_FN_SDHICLK,
|
||||||
|
|
||||||
|
/* SIU - Port A */
|
||||||
|
GPIO_FN_SIUAOLR, GPIO_FN_SIUAOBT, GPIO_FN_SIUAISLD, GPIO_FN_SIUAILR,
|
||||||
|
GPIO_FN_SIUAIBT, GPIO_FN_SIUAOSLD, GPIO_FN_SIUMCKA, GPIO_FN_SIUFCKA,
|
||||||
|
|
||||||
|
/* SIU - Port B */
|
||||||
|
GPIO_FN_SIUBOLR, GPIO_FN_SIUBOBT, GPIO_FN_SIUBISLD, GPIO_FN_SIUBILR,
|
||||||
|
GPIO_FN_SIUBIBT, GPIO_FN_SIUBOSLD, GPIO_FN_SIUMCKB, GPIO_FN_SIUFCKB,
|
||||||
|
|
||||||
|
/* AUD */
|
||||||
|
GPIO_FN_AUDSYNC, GPIO_FN_AUDATA3, GPIO_FN_AUDATA2, GPIO_FN_AUDATA1,
|
||||||
|
GPIO_FN_AUDATA0,
|
||||||
|
|
||||||
|
/* DMAC */
|
||||||
|
GPIO_FN_DACK, GPIO_FN_DREQ0,
|
||||||
|
|
||||||
|
/* VOU */
|
||||||
|
GPIO_FN_DV_CLKI, GPIO_FN_DV_CLK, GPIO_FN_DV_HSYNC, GPIO_FN_DV_VSYNC,
|
||||||
|
GPIO_FN_DV_D15, GPIO_FN_DV_D14, GPIO_FN_DV_D13, GPIO_FN_DV_D12,
|
||||||
|
GPIO_FN_DV_D11, GPIO_FN_DV_D10, GPIO_FN_DV_D9, GPIO_FN_DV_D8,
|
||||||
|
GPIO_FN_DV_D7, GPIO_FN_DV_D6, GPIO_FN_DV_D5, GPIO_FN_DV_D4,
|
||||||
|
GPIO_FN_DV_D3, GPIO_FN_DV_D2, GPIO_FN_DV_D1, GPIO_FN_DV_D0,
|
||||||
|
|
||||||
|
/* CPG */
|
||||||
|
GPIO_FN_STATUS0, GPIO_FN_PDSTATUS,
|
||||||
|
|
||||||
|
/* SIOF0 */
|
||||||
|
GPIO_FN_SIOF0_MCK, GPIO_FN_SIOF0_SCK,
|
||||||
|
GPIO_FN_SIOF0_SYNC, GPIO_FN_SIOF0_SS1, GPIO_FN_SIOF0_SS2,
|
||||||
|
GPIO_FN_SIOF0_TXD, GPIO_FN_SIOF0_RXD,
|
||||||
|
|
||||||
|
/* SIOF1 */
|
||||||
|
GPIO_FN_SIOF1_MCK, GPIO_FN_SIOF1_SCK,
|
||||||
|
GPIO_FN_SIOF1_SYNC, GPIO_FN_SIOF1_SS1, GPIO_FN_SIOF1_SS2,
|
||||||
|
GPIO_FN_SIOF1_TXD, GPIO_FN_SIOF1_RXD,
|
||||||
|
|
||||||
|
/* SIM */
|
||||||
|
GPIO_FN_SIM_D, GPIO_FN_SIM_CLK, GPIO_FN_SIM_RST,
|
||||||
|
|
||||||
|
/* TSIF */
|
||||||
|
GPIO_FN_TS_SDAT, GPIO_FN_TS_SCK, GPIO_FN_TS_SDEN, GPIO_FN_TS_SPSYNC,
|
||||||
|
|
||||||
|
/* IRDA */
|
||||||
|
GPIO_FN_IRDA_IN, GPIO_FN_IRDA_OUT,
|
||||||
|
|
||||||
|
/* TPU */
|
||||||
|
GPIO_FN_TPUTO,
|
||||||
|
|
||||||
|
/* FLCTL */
|
||||||
|
GPIO_FN_FCE, GPIO_FN_NAF7, GPIO_FN_NAF6, GPIO_FN_NAF5, GPIO_FN_NAF4,
|
||||||
|
GPIO_FN_NAF3, GPIO_FN_NAF2, GPIO_FN_NAF1, GPIO_FN_NAF0, GPIO_FN_FCDE,
|
||||||
|
GPIO_FN_FOE, GPIO_FN_FSC, GPIO_FN_FWE, GPIO_FN_FRB,
|
||||||
|
|
||||||
|
/* KEYSC */
|
||||||
|
GPIO_FN_KEYIN0, GPIO_FN_KEYIN1, GPIO_FN_KEYIN2, GPIO_FN_KEYIN3,
|
||||||
|
GPIO_FN_KEYIN4, GPIO_FN_KEYOUT0, GPIO_FN_KEYOUT1, GPIO_FN_KEYOUT2,
|
||||||
|
GPIO_FN_KEYOUT3, GPIO_FN_KEYOUT4_IN6, GPIO_FN_KEYOUT5_IN5,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_SH7722_H__ */
|
|
@ -0,0 +1,254 @@
|
||||||
|
#ifndef __ASM_SH7723_H__
|
||||||
|
#define __ASM_SH7723_H__
|
||||||
|
|
||||||
|
enum {
|
||||||
|
/* PTA */
|
||||||
|
GPIO_PTA7, GPIO_PTA6, GPIO_PTA5, GPIO_PTA4,
|
||||||
|
GPIO_PTA3, GPIO_PTA2, GPIO_PTA1, GPIO_PTA0,
|
||||||
|
|
||||||
|
/* PTB */
|
||||||
|
GPIO_PTB7, GPIO_PTB6, GPIO_PTB5, GPIO_PTB4,
|
||||||
|
GPIO_PTB3, GPIO_PTB2, GPIO_PTB1, GPIO_PTB0,
|
||||||
|
|
||||||
|
/* PTC */
|
||||||
|
GPIO_PTC7, GPIO_PTC6, GPIO_PTC5, GPIO_PTC4,
|
||||||
|
GPIO_PTC3, GPIO_PTC2, GPIO_PTC1, GPIO_PTC0,
|
||||||
|
|
||||||
|
/* PTD */
|
||||||
|
GPIO_PTD7, GPIO_PTD6, GPIO_PTD5, GPIO_PTD4,
|
||||||
|
GPIO_PTD3, GPIO_PTD2, GPIO_PTD1, GPIO_PTD0,
|
||||||
|
|
||||||
|
/* PTE */
|
||||||
|
GPIO_PTE5, GPIO_PTE4, GPIO_PTE3, GPIO_PTE2,
|
||||||
|
GPIO_PTE1, GPIO_PTE0,
|
||||||
|
|
||||||
|
/* PTF */
|
||||||
|
GPIO_PTF7, GPIO_PTF6, GPIO_PTF5, GPIO_PTF4,
|
||||||
|
GPIO_PTF3, GPIO_PTF2, GPIO_PTF1, GPIO_PTF0,
|
||||||
|
|
||||||
|
/* PTG */
|
||||||
|
GPIO_PTG5, GPIO_PTG4, GPIO_PTG3, GPIO_PTG2,
|
||||||
|
GPIO_PTG1, GPIO_PTG0,
|
||||||
|
|
||||||
|
/* PTH */
|
||||||
|
GPIO_PTH7, GPIO_PTH6, GPIO_PTH5, GPIO_PTH4,
|
||||||
|
GPIO_PTH3, GPIO_PTH2, GPIO_PTH1, GPIO_PTH0,
|
||||||
|
|
||||||
|
/* PTJ */
|
||||||
|
GPIO_PTJ7, GPIO_PTJ5, GPIO_PTJ3, GPIO_PTJ2,
|
||||||
|
GPIO_PTJ1, GPIO_PTJ0,
|
||||||
|
|
||||||
|
/* PTK */
|
||||||
|
GPIO_PTK7, GPIO_PTK6, GPIO_PTK5, GPIO_PTK4,
|
||||||
|
GPIO_PTK3, GPIO_PTK2, GPIO_PTK1, GPIO_PTK0,
|
||||||
|
|
||||||
|
/* PTL */
|
||||||
|
GPIO_PTL7, GPIO_PTL6, GPIO_PTL5, GPIO_PTL4,
|
||||||
|
GPIO_PTL3, GPIO_PTL2, GPIO_PTL1, GPIO_PTL0,
|
||||||
|
|
||||||
|
/* PTM */
|
||||||
|
GPIO_PTM7, GPIO_PTM6, GPIO_PTM5, GPIO_PTM4,
|
||||||
|
GPIO_PTM3, GPIO_PTM2, GPIO_PTM1, GPIO_PTM0,
|
||||||
|
|
||||||
|
/* PTN */
|
||||||
|
GPIO_PTN7, GPIO_PTN6, GPIO_PTN5, GPIO_PTN4,
|
||||||
|
GPIO_PTN3, GPIO_PTN2, GPIO_PTN1, GPIO_PTN0,
|
||||||
|
|
||||||
|
/* PTQ */
|
||||||
|
GPIO_PTQ3, GPIO_PTQ2, GPIO_PTQ1, GPIO_PTQ0,
|
||||||
|
|
||||||
|
/* PTR */
|
||||||
|
GPIO_PTR7, GPIO_PTR6, GPIO_PTR5, GPIO_PTR4,
|
||||||
|
GPIO_PTR3, GPIO_PTR2, GPIO_PTR1, GPIO_PTR0,
|
||||||
|
|
||||||
|
/* PTS */
|
||||||
|
GPIO_PTS7, GPIO_PTS6, GPIO_PTS5, GPIO_PTS4,
|
||||||
|
GPIO_PTS3, GPIO_PTS2, GPIO_PTS1, GPIO_PTS0,
|
||||||
|
|
||||||
|
/* PTT */
|
||||||
|
GPIO_PTT5, GPIO_PTT4, GPIO_PTT3, GPIO_PTT2,
|
||||||
|
GPIO_PTT1, GPIO_PTT0,
|
||||||
|
|
||||||
|
/* PTU */
|
||||||
|
GPIO_PTU5, GPIO_PTU4, GPIO_PTU3, GPIO_PTU2,
|
||||||
|
GPIO_PTU1, GPIO_PTU0,
|
||||||
|
|
||||||
|
/* PTV */
|
||||||
|
GPIO_PTV7, GPIO_PTV6, GPIO_PTV5, GPIO_PTV4,
|
||||||
|
GPIO_PTV3, GPIO_PTV2, GPIO_PTV1, GPIO_PTV0,
|
||||||
|
|
||||||
|
/* PTW */
|
||||||
|
GPIO_PTW7, GPIO_PTW6, GPIO_PTW5, GPIO_PTW4,
|
||||||
|
GPIO_PTW3, GPIO_PTW2, GPIO_PTW1, GPIO_PTW0,
|
||||||
|
|
||||||
|
/* PTX */
|
||||||
|
GPIO_PTX7, GPIO_PTX6, GPIO_PTX5, GPIO_PTX4,
|
||||||
|
GPIO_PTX3, GPIO_PTX2, GPIO_PTX1, GPIO_PTX0,
|
||||||
|
|
||||||
|
/* PTY */
|
||||||
|
GPIO_PTY7, GPIO_PTY6, GPIO_PTY5, GPIO_PTY4,
|
||||||
|
GPIO_PTY3, GPIO_PTY2, GPIO_PTY1, GPIO_PTY0,
|
||||||
|
|
||||||
|
/* PTZ */
|
||||||
|
GPIO_PTZ7, GPIO_PTZ6, GPIO_PTZ5, GPIO_PTZ4,
|
||||||
|
GPIO_PTZ3, GPIO_PTZ2, GPIO_PTZ1, GPIO_PTZ0,
|
||||||
|
|
||||||
|
/* SCIF0 (SCIF: 3 pin PTT/PTU) */
|
||||||
|
GPIO_FN_SCIF0_PTT_TXD, GPIO_FN_SCIF0_PTT_RXD, GPIO_FN_SCIF0_PTT_SCK,
|
||||||
|
GPIO_FN_SCIF0_PTU_TXD, GPIO_FN_SCIF0_PTU_RXD, GPIO_FN_SCIF0_PTU_SCK,
|
||||||
|
|
||||||
|
/* SCIF1 (SCIF: 3 pin PTS/PTV) */
|
||||||
|
GPIO_FN_SCIF1_PTS_TXD, GPIO_FN_SCIF1_PTS_RXD, GPIO_FN_SCIF1_PTS_SCK,
|
||||||
|
GPIO_FN_SCIF1_PTV_TXD, GPIO_FN_SCIF1_PTV_RXD, GPIO_FN_SCIF1_PTV_SCK,
|
||||||
|
|
||||||
|
/* SCIF2 (SCIF: 3 pin PTT/PTU) */
|
||||||
|
GPIO_FN_SCIF2_PTT_TXD, GPIO_FN_SCIF2_PTT_RXD, GPIO_FN_SCIF2_PTT_SCK,
|
||||||
|
GPIO_FN_SCIF2_PTU_TXD, GPIO_FN_SCIF2_PTU_RXD, GPIO_FN_SCIF2_PTU_SCK,
|
||||||
|
|
||||||
|
/* SCIF3 (SCIFA: 5 pin PTS/PTV) */
|
||||||
|
GPIO_FN_SCIF3_PTS_TXD, GPIO_FN_SCIF3_PTS_RXD, GPIO_FN_SCIF3_PTS_SCK,
|
||||||
|
GPIO_FN_SCIF3_PTS_RTS, GPIO_FN_SCIF3_PTS_CTS,
|
||||||
|
GPIO_FN_SCIF3_PTV_TXD, GPIO_FN_SCIF3_PTV_RXD, GPIO_FN_SCIF3_PTV_SCK,
|
||||||
|
GPIO_FN_SCIF3_PTV_RTS, GPIO_FN_SCIF3_PTV_CTS,
|
||||||
|
|
||||||
|
/* SCIF4 (SCIFA: 3 pin PTE/PTN) */
|
||||||
|
GPIO_FN_SCIF4_PTE_TXD, GPIO_FN_SCIF4_PTE_RXD, GPIO_FN_SCIF4_PTE_SCK,
|
||||||
|
GPIO_FN_SCIF4_PTN_TXD, GPIO_FN_SCIF4_PTN_RXD, GPIO_FN_SCIF4_PTN_SCK,
|
||||||
|
|
||||||
|
/* SCIF5 (SCIFA: 3 pin PTE/PTN) */
|
||||||
|
GPIO_FN_SCIF5_PTE_TXD, GPIO_FN_SCIF5_PTE_RXD, GPIO_FN_SCIF5_PTE_SCK,
|
||||||
|
GPIO_FN_SCIF5_PTN_TXD, GPIO_FN_SCIF5_PTN_RXD, GPIO_FN_SCIF5_PTN_SCK,
|
||||||
|
|
||||||
|
/* CEU */
|
||||||
|
GPIO_FN_VIO_D15, GPIO_FN_VIO_D14, GPIO_FN_VIO_D13, GPIO_FN_VIO_D12,
|
||||||
|
GPIO_FN_VIO_D11, GPIO_FN_VIO_D10, GPIO_FN_VIO_D9, GPIO_FN_VIO_D8,
|
||||||
|
GPIO_FN_VIO_D7, GPIO_FN_VIO_D6, GPIO_FN_VIO_D5, GPIO_FN_VIO_D4,
|
||||||
|
GPIO_FN_VIO_D3, GPIO_FN_VIO_D2, GPIO_FN_VIO_D1, GPIO_FN_VIO_D0,
|
||||||
|
GPIO_FN_VIO_FLD, GPIO_FN_VIO_CKO,
|
||||||
|
GPIO_FN_VIO_VD1, GPIO_FN_VIO_HD1, GPIO_FN_VIO_CLK1,
|
||||||
|
GPIO_FN_VIO_VD2, GPIO_FN_VIO_HD2, GPIO_FN_VIO_CLK2,
|
||||||
|
|
||||||
|
/* LCDC */
|
||||||
|
GPIO_FN_LCDD23, GPIO_FN_LCDD22, GPIO_FN_LCDD21, GPIO_FN_LCDD20,
|
||||||
|
GPIO_FN_LCDD19, GPIO_FN_LCDD18, GPIO_FN_LCDD17, GPIO_FN_LCDD16,
|
||||||
|
GPIO_FN_LCDD15, GPIO_FN_LCDD14, GPIO_FN_LCDD13, GPIO_FN_LCDD12,
|
||||||
|
GPIO_FN_LCDD11, GPIO_FN_LCDD10, GPIO_FN_LCDD9, GPIO_FN_LCDD8,
|
||||||
|
GPIO_FN_LCDD7, GPIO_FN_LCDD6, GPIO_FN_LCDD5, GPIO_FN_LCDD4,
|
||||||
|
GPIO_FN_LCDD3, GPIO_FN_LCDD2, GPIO_FN_LCDD1, GPIO_FN_LCDD0,
|
||||||
|
GPIO_FN_LCDLCLK_PTR, GPIO_FN_LCDLCLK_PTW,
|
||||||
|
/* Main LCD */
|
||||||
|
GPIO_FN_LCDDON, GPIO_FN_LCDVCPWC, GPIO_FN_LCDVEPWC, GPIO_FN_LCDVSYN,
|
||||||
|
/* Main LCD - RGB Mode */
|
||||||
|
GPIO_FN_LCDDCK, GPIO_FN_LCDHSYN, GPIO_FN_LCDDISP,
|
||||||
|
/* Main LCD - SYS Mode */
|
||||||
|
GPIO_FN_LCDRS, GPIO_FN_LCDCS, GPIO_FN_LCDWR, GPIO_FN_LCDRD,
|
||||||
|
|
||||||
|
/* IRQ */
|
||||||
|
GPIO_FN_IRQ0, GPIO_FN_IRQ1, GPIO_FN_IRQ2, GPIO_FN_IRQ3,
|
||||||
|
GPIO_FN_IRQ4, GPIO_FN_IRQ5, GPIO_FN_IRQ6, GPIO_FN_IRQ7,
|
||||||
|
|
||||||
|
/* AUD */
|
||||||
|
GPIO_FN_AUDATA3, GPIO_FN_AUDATA2, GPIO_FN_AUDATA1, GPIO_FN_AUDATA0,
|
||||||
|
GPIO_FN_AUDCK, GPIO_FN_AUDSYNC,
|
||||||
|
|
||||||
|
/* SDHI0 (PTD) */
|
||||||
|
GPIO_FN_SDHI0CD_PTD, GPIO_FN_SDHI0WP_PTD,
|
||||||
|
GPIO_FN_SDHI0D3_PTD, GPIO_FN_SDHI0D2_PTD,
|
||||||
|
GPIO_FN_SDHI0D1_PTD, GPIO_FN_SDHI0D0_PTD,
|
||||||
|
GPIO_FN_SDHI0CMD_PTD, GPIO_FN_SDHI0CLK_PTD,
|
||||||
|
|
||||||
|
/* SDHI0 (PTS) */
|
||||||
|
GPIO_FN_SDHI0CD_PTS, GPIO_FN_SDHI0WP_PTS,
|
||||||
|
GPIO_FN_SDHI0D3_PTS, GPIO_FN_SDHI0D2_PTS,
|
||||||
|
GPIO_FN_SDHI0D1_PTS, GPIO_FN_SDHI0D0_PTS,
|
||||||
|
GPIO_FN_SDHI0CMD_PTS, GPIO_FN_SDHI0CLK_PTS,
|
||||||
|
|
||||||
|
/* SDHI1 */
|
||||||
|
GPIO_FN_SDHI1CD, GPIO_FN_SDHI1WP, GPIO_FN_SDHI1D3, GPIO_FN_SDHI1D2,
|
||||||
|
GPIO_FN_SDHI1D1, GPIO_FN_SDHI1D0, GPIO_FN_SDHI1CMD, GPIO_FN_SDHI1CLK,
|
||||||
|
|
||||||
|
/* SIUA */
|
||||||
|
GPIO_FN_SIUAFCK, GPIO_FN_SIUAILR, GPIO_FN_SIUAIBT, GPIO_FN_SIUAISLD,
|
||||||
|
GPIO_FN_SIUAOLR, GPIO_FN_SIUAOBT, GPIO_FN_SIUAOSLD, GPIO_FN_SIUAMCK,
|
||||||
|
GPIO_FN_SIUAISPD, GPIO_FN_SIUOSPD,
|
||||||
|
|
||||||
|
/* SIUB */
|
||||||
|
GPIO_FN_SIUBFCK, GPIO_FN_SIUBILR, GPIO_FN_SIUBIBT, GPIO_FN_SIUBISLD,
|
||||||
|
GPIO_FN_SIUBOLR, GPIO_FN_SIUBOBT, GPIO_FN_SIUBOSLD, GPIO_FN_SIUBMCK,
|
||||||
|
|
||||||
|
/* IRDA */
|
||||||
|
GPIO_FN_IRDA_IN, GPIO_FN_IRDA_OUT,
|
||||||
|
|
||||||
|
/* VOU */
|
||||||
|
GPIO_FN_DV_CLKI, GPIO_FN_DV_CLK, GPIO_FN_DV_HSYNC, GPIO_FN_DV_VSYNC,
|
||||||
|
GPIO_FN_DV_D15, GPIO_FN_DV_D14, GPIO_FN_DV_D13, GPIO_FN_DV_D12,
|
||||||
|
GPIO_FN_DV_D11, GPIO_FN_DV_D10, GPIO_FN_DV_D9, GPIO_FN_DV_D8,
|
||||||
|
GPIO_FN_DV_D7, GPIO_FN_DV_D6, GPIO_FN_DV_D5, GPIO_FN_DV_D4,
|
||||||
|
GPIO_FN_DV_D3, GPIO_FN_DV_D2, GPIO_FN_DV_D1, GPIO_FN_DV_D0,
|
||||||
|
|
||||||
|
/* KEYSC */
|
||||||
|
GPIO_FN_KEYIN0, GPIO_FN_KEYIN1, GPIO_FN_KEYIN2, GPIO_FN_KEYIN3,
|
||||||
|
GPIO_FN_KEYIN4, GPIO_FN_KEYOUT0, GPIO_FN_KEYOUT1, GPIO_FN_KEYOUT2,
|
||||||
|
GPIO_FN_KEYOUT3, GPIO_FN_KEYOUT4_IN6, GPIO_FN_KEYOUT5_IN5,
|
||||||
|
|
||||||
|
/* MSIOF0 (PTF) */
|
||||||
|
GPIO_FN_MSIOF0_PTF_TXD, GPIO_FN_MSIOF0_PTF_RXD, GPIO_FN_MSIOF0_PTF_MCK,
|
||||||
|
GPIO_FN_MSIOF0_PTF_TSYNC, GPIO_FN_MSIOF0_PTF_TSCK,
|
||||||
|
GPIO_FN_MSIOF0_PTF_RSYNC, GPIO_FN_MSIOF0_PTF_RSCK,
|
||||||
|
GPIO_FN_MSIOF0_PTF_SS1, GPIO_FN_MSIOF0_PTF_SS2,
|
||||||
|
|
||||||
|
/* MSIOF0 (PTT+PTX) */
|
||||||
|
GPIO_FN_MSIOF0_PTT_TXD, GPIO_FN_MSIOF0_PTT_RXD, GPIO_FN_MSIOF0_PTX_MCK,
|
||||||
|
GPIO_FN_MSIOF0_PTT_TSYNC, GPIO_FN_MSIOF0_PTT_TSCK,
|
||||||
|
GPIO_FN_MSIOF0_PTT_RSYNC, GPIO_FN_MSIOF0_PTT_RSCK,
|
||||||
|
GPIO_FN_MSIOF0_PTT_SS1, GPIO_FN_MSIOF0_PTT_SS2,
|
||||||
|
|
||||||
|
/* MSIOF1 */
|
||||||
|
GPIO_FN_MSIOF1_TXD, GPIO_FN_MSIOF1_RXD, GPIO_FN_MSIOF1_MCK,
|
||||||
|
GPIO_FN_MSIOF1_TSYNC, GPIO_FN_MSIOF1_TSCK,
|
||||||
|
GPIO_FN_MSIOF1_RSYNC, GPIO_FN_MSIOF1_RSCK,
|
||||||
|
GPIO_FN_MSIOF1_SS1, GPIO_FN_MSIOF1_SS2,
|
||||||
|
|
||||||
|
/* TSIF */
|
||||||
|
GPIO_FN_TS0_SDAT, GPIO_FN_TS0_SCK, GPIO_FN_TS0_SDEN, GPIO_FN_TS0_SPSYNC,
|
||||||
|
|
||||||
|
/* FLCTL */
|
||||||
|
GPIO_FN_FCE, GPIO_FN_NAF7, GPIO_FN_NAF6, GPIO_FN_NAF5, GPIO_FN_NAF4,
|
||||||
|
GPIO_FN_NAF3, GPIO_FN_NAF2, GPIO_FN_NAF1, GPIO_FN_NAF0, GPIO_FN_FCDE,
|
||||||
|
GPIO_FN_FOE, GPIO_FN_FSC, GPIO_FN_FWE, GPIO_FN_FRB,
|
||||||
|
|
||||||
|
/* DMAC */
|
||||||
|
GPIO_FN_DACK1, GPIO_FN_DREQ1, GPIO_FN_DACK0, GPIO_FN_DREQ0,
|
||||||
|
|
||||||
|
/* ADC */
|
||||||
|
GPIO_FN_AN3, GPIO_FN_AN2, GPIO_FN_AN1, GPIO_FN_AN0, GPIO_FN_ADTRG,
|
||||||
|
|
||||||
|
/* CPG */
|
||||||
|
GPIO_FN_STATUS0, GPIO_FN_PDSTATUS,
|
||||||
|
|
||||||
|
/* TPU */
|
||||||
|
GPIO_FN_TPUTO3, GPIO_FN_TPUTO2, GPIO_FN_TPUTO1, GPIO_FN_TPUTO0,
|
||||||
|
|
||||||
|
/* BSC */
|
||||||
|
GPIO_FN_D31, GPIO_FN_D30, GPIO_FN_D29, GPIO_FN_D28,
|
||||||
|
GPIO_FN_D27, GPIO_FN_D26, GPIO_FN_D25, GPIO_FN_D24,
|
||||||
|
GPIO_FN_D23, GPIO_FN_D22, GPIO_FN_D21, GPIO_FN_D20,
|
||||||
|
GPIO_FN_D19, GPIO_FN_D18, GPIO_FN_D17, GPIO_FN_D16,
|
||||||
|
GPIO_FN_IOIS16, GPIO_FN_WAIT, GPIO_FN_BS,
|
||||||
|
GPIO_FN_A25, GPIO_FN_A24, GPIO_FN_A23, GPIO_FN_A22,
|
||||||
|
GPIO_FN_CS6B_CE1B, GPIO_FN_CS6A_CE2B,
|
||||||
|
GPIO_FN_CS5B_CE1A, GPIO_FN_CS5A_CE2A,
|
||||||
|
GPIO_FN_WE3_ICIOWR, GPIO_FN_WE2_ICIORD,
|
||||||
|
|
||||||
|
/* ATAPI */
|
||||||
|
GPIO_FN_IDED15, GPIO_FN_IDED14, GPIO_FN_IDED13, GPIO_FN_IDED12,
|
||||||
|
GPIO_FN_IDED11, GPIO_FN_IDED10, GPIO_FN_IDED9, GPIO_FN_IDED8,
|
||||||
|
GPIO_FN_IDED7, GPIO_FN_IDED6, GPIO_FN_IDED5, GPIO_FN_IDED4,
|
||||||
|
GPIO_FN_IDED3, GPIO_FN_IDED2, GPIO_FN_IDED1, GPIO_FN_IDED0,
|
||||||
|
GPIO_FN_DIRECTION, GPIO_FN_EXBUF_ENB, GPIO_FN_IDERST, GPIO_FN_IODACK,
|
||||||
|
GPIO_FN_IODREQ, GPIO_FN_IDEIORDY, GPIO_FN_IDEINT, GPIO_FN_IDEIOWR,
|
||||||
|
GPIO_FN_IDEIORD, GPIO_FN_IDECS1, GPIO_FN_IDECS0, GPIO_FN_IDEA2,
|
||||||
|
GPIO_FN_IDEA1, GPIO_FN_IDEA0,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_SH7723_H__ */
|
|
@ -5,7 +5,7 @@
|
||||||
extra-y := head_32.o init_task.o vmlinux.lds
|
extra-y := head_32.o init_task.o vmlinux.lds
|
||||||
|
|
||||||
obj-y := debugtraps.o io.o io_generic.o irq.o machvec.o process_32.o \
|
obj-y := debugtraps.o io.o io_generic.o irq.o machvec.o process_32.o \
|
||||||
ptrace_32.o setup.o signal_32.o sys_sh.o sys_sh32.o \
|
ptrace_32.o setup.o signal_32.o sys_sh.o sys_sh32.o gpio.o \
|
||||||
syscalls_32.o time_32.o topology.o traps.o traps_32.o
|
syscalls_32.o time_32.o topology.o traps.o traps_32.o
|
||||||
|
|
||||||
obj-y += cpu/ timers/
|
obj-y += cpu/ timers/
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extra-y := head_64.o init_task.o vmlinux.lds
|
extra-y := head_64.o init_task.o vmlinux.lds
|
||||||
|
|
||||||
obj-y := debugtraps.o io.o io_generic.o irq.o machvec.o process_64.o \
|
obj-y := debugtraps.o io.o io_generic.o irq.o machvec.o process_64.o \
|
||||||
ptrace_64.o setup.o signal_64.o sys_sh.o sys_sh64.o \
|
ptrace_64.o setup.o signal_64.o sys_sh.o sys_sh64.o gpio.o \
|
||||||
syscalls_64.o time_64.o topology.o traps.o traps_64.o
|
syscalls_64.o time_64.o topology.o traps.o traps_64.o
|
||||||
|
|
||||||
obj-y += cpu/ timers/
|
obj-y += cpu/ timers/
|
||||||
|
|
|
@ -12,3 +12,8 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7206) += setup-sh7206.o clock-sh7206.o
|
||||||
obj-$(CONFIG_CPU_SUBTYPE_SH7203) += setup-sh7203.o clock-sh7203.o
|
obj-$(CONFIG_CPU_SUBTYPE_SH7203) += setup-sh7203.o clock-sh7203.o
|
||||||
obj-$(CONFIG_CPU_SUBTYPE_SH7263) += setup-sh7203.o clock-sh7203.o
|
obj-$(CONFIG_CPU_SUBTYPE_SH7263) += setup-sh7203.o clock-sh7203.o
|
||||||
obj-$(CONFIG_CPU_SUBTYPE_MXG) += setup-mxg.o clock-sh7206.o
|
obj-$(CONFIG_CPU_SUBTYPE_MXG) += setup-mxg.o clock-sh7206.o
|
||||||
|
|
||||||
|
# Pinmux setup
|
||||||
|
pinmux-$(CONFIG_CPU_SUBTYPE_SH7203) := pinmux-sh7203.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -24,4 +24,8 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7710) := clock-sh7710.o
|
||||||
clock-$(CONFIG_CPU_SUBTYPE_SH7720) := clock-sh7710.o
|
clock-$(CONFIG_CPU_SUBTYPE_SH7720) := clock-sh7710.o
|
||||||
clock-$(CONFIG_CPU_SUBTYPE_SH7712) := clock-sh7712.o
|
clock-$(CONFIG_CPU_SUBTYPE_SH7712) := clock-sh7712.o
|
||||||
|
|
||||||
|
# Pinmux setup
|
||||||
|
pinmux-$(CONFIG_CPU_SUBTYPE_SH7720) := pinmux-sh7720.o
|
||||||
|
|
||||||
obj-y += $(clock-y)
|
obj-y += $(clock-y)
|
||||||
|
obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -27,5 +27,10 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7723) := clock-sh7722.o
|
||||||
clock-$(CONFIG_CPU_SUBTYPE_SH7366) := clock-sh7722.o
|
clock-$(CONFIG_CPU_SUBTYPE_SH7366) := clock-sh7722.o
|
||||||
clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o
|
clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o
|
||||||
|
|
||||||
|
# Pinmux setup
|
||||||
|
pinmux-$(CONFIG_CPU_SUBTYPE_SH7722) := pinmux-sh7722.o
|
||||||
|
pinmux-$(CONFIG_CPU_SUBTYPE_SH7723) := pinmux-sh7723.o
|
||||||
|
|
||||||
obj-y += $(clock-y)
|
obj-y += $(clock-y)
|
||||||
obj-$(CONFIG_SMP) += $(smp-y)
|
obj-$(CONFIG_SMP) += $(smp-y)
|
||||||
|
obj-$(CONFIG_GENERIC_GPIO) += $(pinmux-y)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,498 @@
|
||||||
|
/*
|
||||||
|
* Pinmuxed GPIO support for SuperH.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008 Magnus Damm
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/list.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
#include <linux/bitops.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
|
static struct pinmux_info *registered_gpio;
|
||||||
|
|
||||||
|
static struct pinmux_info *gpio_controller(unsigned gpio)
|
||||||
|
{
|
||||||
|
if (!registered_gpio)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (gpio < registered_gpio->first_gpio)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (gpio > registered_gpio->last_gpio)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return registered_gpio;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int enum_in_range(pinmux_enum_t enum_id, struct pinmux_range *r)
|
||||||
|
{
|
||||||
|
if (enum_id < r->begin)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (enum_id > r->end)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int read_write_reg(unsigned long reg, unsigned long reg_width,
|
||||||
|
unsigned long field_width, unsigned long in_pos,
|
||||||
|
unsigned long value, int do_write)
|
||||||
|
{
|
||||||
|
unsigned long data, mask, pos;
|
||||||
|
|
||||||
|
data = 0;
|
||||||
|
mask = (1 << field_width) - 1;
|
||||||
|
pos = reg_width - ((in_pos + 1) * field_width);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
pr_info("%s, addr = %lx, value = %ld, pos = %ld, "
|
||||||
|
"r_width = %ld, f_width = %ld\n",
|
||||||
|
do_write ? "write" : "read", reg, value, pos,
|
||||||
|
reg_width, field_width);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch (reg_width) {
|
||||||
|
case 8:
|
||||||
|
data = ctrl_inb(reg);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
data = ctrl_inw(reg);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
data = ctrl_inl(reg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!do_write)
|
||||||
|
return (data >> pos) & mask;
|
||||||
|
|
||||||
|
data &= ~(mask << pos);
|
||||||
|
data |= value << pos;
|
||||||
|
|
||||||
|
switch (reg_width) {
|
||||||
|
case 8:
|
||||||
|
ctrl_outb(data, reg);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
ctrl_outw(data, reg);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
ctrl_outl(data, reg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_data_reg(struct pinmux_info *gpioc, unsigned gpio,
|
||||||
|
struct pinmux_data_reg **drp, int *bitp)
|
||||||
|
{
|
||||||
|
pinmux_enum_t enum_id = gpioc->gpios[gpio].enum_id;
|
||||||
|
struct pinmux_data_reg *data_reg;
|
||||||
|
int k, n;
|
||||||
|
|
||||||
|
if (!enum_in_range(enum_id, &gpioc->data))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
k = 0;
|
||||||
|
while (1) {
|
||||||
|
data_reg = gpioc->data_regs + k;
|
||||||
|
|
||||||
|
if (!data_reg->reg_width)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (n = 0; n < data_reg->reg_width; n++) {
|
||||||
|
if (data_reg->enum_ids[n] == enum_id) {
|
||||||
|
*drp = data_reg;
|
||||||
|
*bitp = n;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_config_reg(struct pinmux_info *gpioc, pinmux_enum_t enum_id,
|
||||||
|
struct pinmux_cfg_reg **crp, int *indexp,
|
||||||
|
unsigned long **cntp)
|
||||||
|
{
|
||||||
|
struct pinmux_cfg_reg *config_reg;
|
||||||
|
unsigned long r_width, f_width;
|
||||||
|
int k, n;
|
||||||
|
|
||||||
|
k = 0;
|
||||||
|
while (1) {
|
||||||
|
config_reg = gpioc->cfg_regs + k;
|
||||||
|
|
||||||
|
r_width = config_reg->reg_width;
|
||||||
|
f_width = config_reg->field_width;
|
||||||
|
|
||||||
|
if (!r_width)
|
||||||
|
break;
|
||||||
|
for (n = 0; n < (r_width / f_width) * 1 << f_width; n++) {
|
||||||
|
if (config_reg->enum_ids[n] == enum_id) {
|
||||||
|
*crp = config_reg;
|
||||||
|
*indexp = n;
|
||||||
|
*cntp = &config_reg->cnt[n / (1 << f_width)];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_gpio_enum_id(struct pinmux_info *gpioc, unsigned gpio,
|
||||||
|
int pos, pinmux_enum_t *enum_idp)
|
||||||
|
{
|
||||||
|
pinmux_enum_t enum_id = gpioc->gpios[gpio].enum_id;
|
||||||
|
pinmux_enum_t *data = gpioc->gpio_data;
|
||||||
|
int k;
|
||||||
|
|
||||||
|
if (!enum_in_range(enum_id, &gpioc->data)) {
|
||||||
|
if (!enum_in_range(enum_id, &gpioc->mark)) {
|
||||||
|
pr_err("non data/mark enum_id for gpio %d\n", gpio);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos) {
|
||||||
|
*enum_idp = data[pos + 1];
|
||||||
|
return pos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (k = 0; k < gpioc->gpio_data_size; k++) {
|
||||||
|
if (data[k] == enum_id) {
|
||||||
|
*enum_idp = data[k + 1];
|
||||||
|
return k + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pr_err("cannot locate data/mark enum_id for gpio %d\n", gpio);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int write_config_reg(struct pinmux_info *gpioc,
|
||||||
|
struct pinmux_cfg_reg *crp,
|
||||||
|
int index)
|
||||||
|
{
|
||||||
|
unsigned long ncomb, pos, value;
|
||||||
|
|
||||||
|
ncomb = 1 << crp->field_width;
|
||||||
|
pos = index / ncomb;
|
||||||
|
value = index % ncomb;
|
||||||
|
|
||||||
|
return read_write_reg(crp->reg, crp->reg_width,
|
||||||
|
crp->field_width, pos, value, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int check_config_reg(struct pinmux_info *gpioc,
|
||||||
|
struct pinmux_cfg_reg *crp,
|
||||||
|
int index)
|
||||||
|
{
|
||||||
|
unsigned long ncomb, pos, value;
|
||||||
|
|
||||||
|
ncomb = 1 << crp->field_width;
|
||||||
|
pos = index / ncomb;
|
||||||
|
value = index % ncomb;
|
||||||
|
|
||||||
|
if (read_write_reg(crp->reg, crp->reg_width,
|
||||||
|
crp->field_width, pos, 0, 0) == value)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum { GPIO_CFG_DRYRUN, GPIO_CFG_REQ, GPIO_CFG_FREE };
|
||||||
|
|
||||||
|
int pinmux_config_gpio(struct pinmux_info *gpioc, unsigned gpio,
|
||||||
|
int pinmux_type, int cfg_mode)
|
||||||
|
{
|
||||||
|
struct pinmux_cfg_reg *cr = NULL;
|
||||||
|
pinmux_enum_t enum_id;
|
||||||
|
struct pinmux_range *range;
|
||||||
|
int in_range, pos, index;
|
||||||
|
unsigned long *cntp;
|
||||||
|
|
||||||
|
switch (pinmux_type) {
|
||||||
|
|
||||||
|
case PINMUX_TYPE_FUNCTION:
|
||||||
|
range = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PINMUX_TYPE_OUTPUT:
|
||||||
|
range = &gpioc->output;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PINMUX_TYPE_INPUT:
|
||||||
|
range = &gpioc->input;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PINMUX_TYPE_INPUT_PULLUP:
|
||||||
|
range = &gpioc->input_pu;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PINMUX_TYPE_INPUT_PULLDOWN:
|
||||||
|
range = &gpioc->input_pd;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto out_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = 0;
|
||||||
|
enum_id = 0;
|
||||||
|
index = 0;
|
||||||
|
while (1) {
|
||||||
|
pos = get_gpio_enum_id(gpioc, gpio, pos, &enum_id);
|
||||||
|
if (pos <= 0)
|
||||||
|
goto out_err;
|
||||||
|
|
||||||
|
if (!enum_id)
|
||||||
|
break;
|
||||||
|
|
||||||
|
in_range = enum_in_range(enum_id, &gpioc->function);
|
||||||
|
if (!in_range && range)
|
||||||
|
in_range = enum_in_range(enum_id, range);
|
||||||
|
|
||||||
|
if (!in_range)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (get_config_reg(gpioc, enum_id, &cr, &index, &cntp) != 0)
|
||||||
|
goto out_err;
|
||||||
|
|
||||||
|
switch (cfg_mode) {
|
||||||
|
case GPIO_CFG_DRYRUN:
|
||||||
|
if (!*cntp || !check_config_reg(gpioc, cr, index))
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GPIO_CFG_REQ:
|
||||||
|
if (write_config_reg(gpioc, cr, index) != 0)
|
||||||
|
goto out_err;
|
||||||
|
*cntp = *cntp + 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GPIO_CFG_FREE:
|
||||||
|
*cntp = *cntp - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
out_err:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DEFINE_SPINLOCK(gpio_lock);
|
||||||
|
|
||||||
|
int __gpio_request(unsigned gpio)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
struct pinmux_data_reg *dummy;
|
||||||
|
unsigned long flags;
|
||||||
|
int i, ret, pinmux_type;
|
||||||
|
|
||||||
|
ret = -EINVAL;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
|
if ((gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE) != PINMUX_TYPE_NONE)
|
||||||
|
goto err_unlock;
|
||||||
|
|
||||||
|
/* setup pin function here if no data is associated with pin */
|
||||||
|
|
||||||
|
if (get_data_reg(gpioc, gpio, &dummy, &i) != 0)
|
||||||
|
pinmux_type = PINMUX_TYPE_FUNCTION;
|
||||||
|
else
|
||||||
|
pinmux_type = PINMUX_TYPE_GPIO;
|
||||||
|
|
||||||
|
if (pinmux_type == PINMUX_TYPE_FUNCTION) {
|
||||||
|
if (pinmux_config_gpio(gpioc, gpio,
|
||||||
|
pinmux_type,
|
||||||
|
GPIO_CFG_DRYRUN) != 0)
|
||||||
|
goto err_unlock;
|
||||||
|
|
||||||
|
if (pinmux_config_gpio(gpioc, gpio,
|
||||||
|
pinmux_type,
|
||||||
|
GPIO_CFG_REQ) != 0)
|
||||||
|
BUG();
|
||||||
|
}
|
||||||
|
|
||||||
|
gpioc->gpios[gpio].flags = pinmux_type;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
err_unlock:
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
err_out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__gpio_request);
|
||||||
|
|
||||||
|
void gpio_free(unsigned gpio)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
unsigned long flags;
|
||||||
|
int pinmux_type;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
|
pinmux_type = gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE;
|
||||||
|
pinmux_config_gpio(gpioc, gpio, pinmux_type, GPIO_CFG_FREE);
|
||||||
|
gpioc->gpios[gpio].flags = PINMUX_TYPE_NONE;
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(gpio_free);
|
||||||
|
|
||||||
|
static int pinmux_direction(struct pinmux_info *gpioc,
|
||||||
|
unsigned gpio, int new_pinmux_type)
|
||||||
|
{
|
||||||
|
int ret, pinmux_type;
|
||||||
|
|
||||||
|
ret = -EINVAL;
|
||||||
|
pinmux_type = gpioc->gpios[gpio].flags & PINMUX_FLAG_TYPE;
|
||||||
|
|
||||||
|
switch (pinmux_type) {
|
||||||
|
case PINMUX_TYPE_GPIO:
|
||||||
|
break;
|
||||||
|
case PINMUX_TYPE_OUTPUT:
|
||||||
|
case PINMUX_TYPE_INPUT:
|
||||||
|
case PINMUX_TYPE_INPUT_PULLUP:
|
||||||
|
case PINMUX_TYPE_INPUT_PULLDOWN:
|
||||||
|
pinmux_config_gpio(gpioc, gpio, pinmux_type, GPIO_CFG_FREE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pinmux_config_gpio(gpioc, gpio,
|
||||||
|
new_pinmux_type,
|
||||||
|
GPIO_CFG_DRYRUN) != 0)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
if (pinmux_config_gpio(gpioc, gpio,
|
||||||
|
new_pinmux_type,
|
||||||
|
GPIO_CFG_REQ) != 0)
|
||||||
|
BUG();
|
||||||
|
|
||||||
|
gpioc->gpios[gpio].flags = new_pinmux_type;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
err_out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpio_direction_input(unsigned gpio)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
unsigned long flags;
|
||||||
|
int ret = -EINVAL;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
ret = pinmux_direction(gpioc, gpio, PINMUX_TYPE_INPUT);
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
err_out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(gpio_direction_input);
|
||||||
|
|
||||||
|
static int __gpio_get_set_value(struct pinmux_info *gpioc,
|
||||||
|
unsigned gpio, int value,
|
||||||
|
int do_write)
|
||||||
|
{
|
||||||
|
struct pinmux_data_reg *dr = NULL;
|
||||||
|
int bit = 0;
|
||||||
|
|
||||||
|
if (get_data_reg(gpioc, gpio, &dr, &bit) != 0)
|
||||||
|
BUG();
|
||||||
|
else
|
||||||
|
value = read_write_reg(dr->reg, dr->reg_width,
|
||||||
|
1, bit, value, do_write);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpio_direction_output(unsigned gpio, int value)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
unsigned long flags;
|
||||||
|
int ret = -EINVAL;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
goto err_out;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
__gpio_get_set_value(gpioc, gpio, value, 1);
|
||||||
|
ret = pinmux_direction(gpioc, gpio, PINMUX_TYPE_OUTPUT);
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
err_out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(gpio_direction_output);
|
||||||
|
|
||||||
|
int gpio_get_value(unsigned gpio)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
unsigned long flags;
|
||||||
|
int value = 0;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
BUG();
|
||||||
|
else {
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
value = __gpio_get_set_value(gpioc, gpio, 0, 0);
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(gpio_get_value);
|
||||||
|
|
||||||
|
void gpio_set_value(unsigned gpio, int value)
|
||||||
|
{
|
||||||
|
struct pinmux_info *gpioc = gpio_controller(gpio);
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
if (!gpioc)
|
||||||
|
BUG();
|
||||||
|
else {
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
__gpio_get_set_value(gpioc, gpio, value, 1);
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(gpio_set_value);
|
||||||
|
|
||||||
|
int register_pinmux(struct pinmux_info *pip)
|
||||||
|
{
|
||||||
|
registered_gpio = pip;
|
||||||
|
pr_info("pinmux: %s handling gpio %d -> %d\n",
|
||||||
|
pip->name, pip->first_gpio, pip->last_gpio);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue