diff options
Diffstat (limited to 'arch/sh/boards/board-ap325rxa.c')
-rw-r--r-- | arch/sh/boards/board-ap325rxa.c | 75 |
1 files changed, 63 insertions, 12 deletions
diff --git a/arch/sh/boards/board-ap325rxa.c b/arch/sh/boards/board-ap325rxa.c index 1c67cba6e34..a64e38841c4 100644 --- a/arch/sh/boards/board-ap325rxa.c +++ b/arch/sh/boards/board-ap325rxa.c @@ -18,8 +18,11 @@ #include <linux/mtd/sh_flctl.h> #include <linux/delay.h> #include <linux/i2c.h> -#include <linux/smc911x.h> +#include <linux/smsc911x.h> #include <linux/gpio.h> +#include <linux/spi/spi.h> +#include <linux/spi/spi_gpio.h> +#include <media/soc_camera.h> #include <media/soc_camera_platform.h> #include <media/sh_mobile_ceu.h> #include <video/sh_mobile_lcdc.h> @@ -27,12 +30,14 @@ #include <asm/clock.h> #include <cpu/sh7723.h> -static struct smc911x_platdata smc911x_info = { - .flags = SMC911X_USE_32BIT, - .irq_flags = IRQF_TRIGGER_LOW, +static struct smsc911x_platform_config smsc911x_config = { + .phy_interface = PHY_INTERFACE_MODE_MII, + .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, + .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, + .flags = SMSC911X_USE_32BIT, }; -static struct resource smc9118_resources[] = { +static struct resource smsc9118_resources[] = { [0] = { .start = 0xb6080000, .end = 0xb60fffff, @@ -45,13 +50,13 @@ static struct resource smc9118_resources[] = { } }; -static struct platform_device smc9118_device = { - .name = "smc911x", +static struct platform_device smsc9118_device = { + .name = "smsc911x", .id = -1, - .num_resources = ARRAY_SIZE(smc9118_resources), - .resource = smc9118_resources, + .num_resources = ARRAY_SIZE(smsc9118_resources), + .resource = smsc9118_resources, .dev = { - .platform_data = &smc911x_info, + .platform_data = &smsc911x_config, }, }; @@ -161,6 +166,16 @@ static void ap320_wvga_power_on(void *board_data) ctrl_outw(0x100, FPGA_BKLREG); } +static void ap320_wvga_power_off(void *board_data) +{ + /* backlight */ + ctrl_outw(0, FPGA_BKLREG); + gpio_set_value(GPIO_PTS3, 1); + + /* ASD AP-320/325 LCD OFF */ + ctrl_outw(0, FPGA_LCDREG); +} + static struct sh_mobile_lcdc_info lcdc_info = { .clock_source = LCDC_CLK_EXTERNAL, .ch[0] = { @@ -186,6 +201,7 @@ static struct sh_mobile_lcdc_info lcdc_info = { }, .board_cfg = { .display_on = ap320_wvga_power_on, + .display_off = ap320_wvga_power_off, }, } }; @@ -212,6 +228,12 @@ static struct platform_device lcdc_device = { }, }; +static void camera_power(int val) +{ + gpio_set_value(GPIO_PTZ5, val); /* RST_CAM/RSTB */ + mdelay(10); +} + #ifdef CONFIG_I2C static unsigned char camera_ncm03j_magic[] = { @@ -241,9 +263,11 @@ static int camera_set_capture(struct soc_camera_platform_info *info, int ret = 0; int i; + camera_power(0); if (!enable) return 0; /* no disable for now */ + camera_power(1); for (i = 0; i < ARRAY_SIZE(camera_ncm03j_magic); i += 2) { u_int8_t buf[8]; @@ -315,8 +339,22 @@ static struct platform_device ceu_device = { }, }; +struct spi_gpio_platform_data sdcard_cn3_platform_data = { + .sck = GPIO_PTD0, + .mosi = GPIO_PTD1, + .miso = GPIO_PTD2, + .num_chipselect = 1, +}; + +static struct platform_device sdcard_cn3_device = { + .name = "spi_gpio", + .dev = { + .platform_data = &sdcard_cn3_platform_data, + }, +}; + static struct platform_device *ap325rxa_devices[] __initdata = { - &smc9118_device, + &smsc9118_device, &ap325rxa_nor_flash_device, &lcdc_device, &ceu_device, @@ -324,6 +362,7 @@ static struct platform_device *ap325rxa_devices[] __initdata = { &camera_device, #endif &nand_flash_device, + &sdcard_cn3_device, }; static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = { @@ -332,6 +371,15 @@ static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = { }, }; +static struct spi_board_info ap325rxa_spi_devices[] = { + { + .modalias = "mmc_spi", + .max_speed_hz = 5000000, + .chip_select = 0, + .controller_data = (void *) GPIO_PTD5, + }, +}; + static int __init ap325rxa_devices_setup(void) { /* LD3 and LD4 LEDs */ @@ -398,7 +446,7 @@ static int __init ap325rxa_devices_setup(void) 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_direction_output(GPIO_PTZ5, 0); /* RST_CAM */ gpio_request(GPIO_PTZ4, NULL); gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */ @@ -429,6 +477,9 @@ static int __init ap325rxa_devices_setup(void) i2c_register_board_info(0, ap325rxa_i2c_devices, ARRAY_SIZE(ap325rxa_i2c_devices)); + spi_register_board_info(ap325rxa_spi_devices, + ARRAY_SIZE(ap325rxa_spi_devices)); + return platform_add_devices(ap325rxa_devices, ARRAY_SIZE(ap325rxa_devices)); } |