mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 04:42:12 +00:00
Merge branch 'features/imx27-visstrim' of git://git.pengutronix.de/git/imx/linux-2.6 into next/boards
* 'features/imx27-visstrim' of git://git.pengutronix.de/git/imx/linux-2.6: i.MX27: visstrim_m10: Add led support. i.MX27: visstrim_m10: Add video support. i.MX27: visstrim_m10: Register I2C devices after I2C busses have been added. i.MX27: visstrim_m10: Sort IMX_HAVE_PLATFORM_MXC_MMC properly. i.MX27: visstrim_m10: Add m41t00 RTC support.
This commit is contained in:
commit
622e695886
@ -320,8 +320,10 @@ config MACH_IMX27_VISSTRIM_M10
|
||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||
select IMX_HAVE_PLATFORM_IMX_SSI
|
||||
select IMX_HAVE_PLATFORM_IMX_UART
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select IMX_HAVE_PLATFORM_MX2_CAMERA
|
||||
select IMX_HAVE_PLATFORM_MXC_EHCI
|
||||
select IMX_HAVE_PLATFORM_MXC_MMC
|
||||
select LEDS_GPIO_REGISTER
|
||||
help
|
||||
Include support for Visstrim_m10 platform and its different variants.
|
||||
This includes specific configurations for the board and its
|
||||
|
@ -30,6 +30,10 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <media/soc_camera.h>
|
||||
#include <sound/tlv320aic32x4.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -39,6 +43,8 @@
|
||||
|
||||
#include "devices-imx27.h"
|
||||
|
||||
#define TVP5150_RSTN (GPIO_PORTC + 18)
|
||||
#define TVP5150_PWDN (GPIO_PORTC + 19)
|
||||
#define OTG_PHY_CS_GPIO (GPIO_PORTF + 17)
|
||||
#define SDHC1_IRQ IRQ_GPIOB(25)
|
||||
|
||||
@ -100,8 +106,99 @@ static const int visstrim_m10_pins[] __initconst = {
|
||||
PE1_PF_USBOTG_STP,
|
||||
PB23_PF_USB_PWR,
|
||||
PB24_PF_USB_OC,
|
||||
/* CSI */
|
||||
PB10_PF_CSI_D0,
|
||||
PB11_PF_CSI_D1,
|
||||
PB12_PF_CSI_D2,
|
||||
PB13_PF_CSI_D3,
|
||||
PB14_PF_CSI_D4,
|
||||
PB15_PF_CSI_MCLK,
|
||||
PB16_PF_CSI_PIXCLK,
|
||||
PB17_PF_CSI_D5,
|
||||
PB18_PF_CSI_D6,
|
||||
PB19_PF_CSI_D7,
|
||||
PB20_PF_CSI_VSYNC,
|
||||
PB21_PF_CSI_HSYNC,
|
||||
};
|
||||
|
||||
/* Camera */
|
||||
static int visstrim_camera_power(struct device *dev, int on)
|
||||
{
|
||||
gpio_set_value(TVP5150_PWDN, on);
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
static int visstrim_camera_reset(struct device *dev)
|
||||
{
|
||||
gpio_set_value(TVP5150_RSTN, 0);
|
||||
ndelay(500);
|
||||
gpio_set_value(TVP5150_RSTN, 1);
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
static struct i2c_board_info visstrim_i2c_camera = {
|
||||
I2C_BOARD_INFO("tvp5150", 0x5d),
|
||||
};
|
||||
|
||||
static struct soc_camera_link iclink_tvp5150 = {
|
||||
.bus_id = 0,
|
||||
.board_info = &visstrim_i2c_camera,
|
||||
.i2c_adapter_id = 0,
|
||||
.power = visstrim_camera_power,
|
||||
.reset = visstrim_camera_reset,
|
||||
};
|
||||
|
||||
static struct mx2_camera_platform_data visstrim_camera = {
|
||||
.flags = MX2_CAMERA_CCIR | MX2_CAMERA_CCIR_INTERLACE |
|
||||
MX2_CAMERA_SWAP16 | MX2_CAMERA_PCLK_SAMPLE_RISING,
|
||||
.clk = 100000,
|
||||
};
|
||||
|
||||
static phys_addr_t mx2_camera_base __initdata;
|
||||
#define MX2_CAMERA_BUF_SIZE SZ_8M
|
||||
|
||||
static void __init visstrim_camera_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int dma;
|
||||
|
||||
/* Initialize tvp5150 gpios */
|
||||
mxc_gpio_mode(TVP5150_RSTN | GPIO_GPIO | GPIO_OUT);
|
||||
mxc_gpio_mode(TVP5150_PWDN | GPIO_GPIO | GPIO_OUT);
|
||||
gpio_set_value(TVP5150_RSTN, 1);
|
||||
gpio_set_value(TVP5150_PWDN, 0);
|
||||
ndelay(1);
|
||||
|
||||
gpio_set_value(TVP5150_PWDN, 1);
|
||||
ndelay(1);
|
||||
gpio_set_value(TVP5150_RSTN, 0);
|
||||
ndelay(500);
|
||||
gpio_set_value(TVP5150_RSTN, 1);
|
||||
ndelay(200000);
|
||||
|
||||
pdev = imx27_add_mx2_camera(&visstrim_camera);
|
||||
if (IS_ERR(pdev))
|
||||
return;
|
||||
|
||||
dma = dma_declare_coherent_memory(&pdev->dev,
|
||||
mx2_camera_base, mx2_camera_base,
|
||||
MX2_CAMERA_BUF_SIZE,
|
||||
DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE);
|
||||
if (!(dma & DMA_MEMORY_MAP))
|
||||
return;
|
||||
}
|
||||
|
||||
static void __init visstrim_reserve(void)
|
||||
{
|
||||
/* reserve 4 MiB for mx2-camera */
|
||||
mx2_camera_base = memblock_alloc(MX2_CAMERA_BUF_SIZE,
|
||||
MX2_CAMERA_BUF_SIZE);
|
||||
memblock_free(mx2_camera_base, MX2_CAMERA_BUF_SIZE);
|
||||
memblock_remove(mx2_camera_base, MX2_CAMERA_BUF_SIZE);
|
||||
}
|
||||
|
||||
/* GPIOs used as events for applications */
|
||||
static struct gpio_keys_button visstrim_gpio_keys[] = {
|
||||
{
|
||||
@ -136,6 +233,35 @@ static const struct gpio_keys_platform_data
|
||||
.nbuttons = ARRAY_SIZE(visstrim_gpio_keys),
|
||||
};
|
||||
|
||||
/* led */
|
||||
static const struct gpio_led visstrim_m10_leds[] __initconst = {
|
||||
{
|
||||
.name = "visstrim:ld0",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 29),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld1",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 24),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld2",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 28),
|
||||
},
|
||||
{
|
||||
.name = "visstrim:ld3",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = (GPIO_PORTC + 25),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct gpio_led_platform_data visstrim_m10_led_data __initconst = {
|
||||
.leds = visstrim_m10_leds,
|
||||
.num_leds = ARRAY_SIZE(visstrim_m10_leds),
|
||||
};
|
||||
|
||||
/* Visstrim_SM10 has a microSD slot connected to sdhc1 */
|
||||
static int visstrim_m10_sdhc1_init(struct device *dev,
|
||||
irq_handler_t detect_irq, void *data)
|
||||
@ -216,6 +342,9 @@ static struct i2c_board_info visstrim_m10_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic32x4", 0x18),
|
||||
.platform_data = &visstrim_m10_aic32x4_pdata,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("m41t00", 0x68),
|
||||
}
|
||||
};
|
||||
|
||||
@ -254,15 +383,20 @@ static void __init visstrim_m10_board_init(void)
|
||||
imx27_add_imx_ssi(0, &visstrim_m10_ssi_pdata);
|
||||
imx27_add_imx_uart0(&uart_pdata);
|
||||
|
||||
i2c_register_board_info(0, visstrim_m10_i2c_devices,
|
||||
ARRAY_SIZE(visstrim_m10_i2c_devices));
|
||||
imx27_add_imx_i2c(0, &visstrim_m10_i2c_data);
|
||||
imx27_add_imx_i2c(1, &visstrim_m10_i2c_data);
|
||||
i2c_register_board_info(0, visstrim_m10_i2c_devices,
|
||||
ARRAY_SIZE(visstrim_m10_i2c_devices));
|
||||
|
||||
imx27_add_mxc_mmc(0, &visstrim_m10_sdhc_pdata);
|
||||
imx27_add_mxc_ehci_otg(&visstrim_m10_usbotg_pdata);
|
||||
imx27_add_fec(NULL);
|
||||
imx_add_gpio_keys(&visstrim_gpio_keys_platform_data);
|
||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||
platform_device_register_resndata(NULL, "soc-camera-pdrv", 0, NULL, 0,
|
||||
&iclink_tvp5150, sizeof(iclink_tvp5150));
|
||||
gpio_led_register_device(0, &visstrim_m10_led_data);
|
||||
visstrim_camera_init();
|
||||
}
|
||||
|
||||
static void __init visstrim_m10_timer_init(void)
|
||||
@ -276,6 +410,7 @@ static struct sys_timer visstrim_m10_timer = {
|
||||
|
||||
MACHINE_START(IMX27_VISSTRIM_M10, "Vista Silicon Visstrim_M10")
|
||||
.atag_offset = 0x100,
|
||||
.reserve = visstrim_reserve,
|
||||
.map_io = mx27_map_io,
|
||||
.init_early = imx27_init_early,
|
||||
.init_irq = mx27_init_irq,
|
||||
|
Loading…
Reference in New Issue
Block a user