Loading arch/arm/mach-at91/at91sam9263_devices.c +10 −3 Original line number Diff line number Diff line Loading @@ -891,7 +891,8 @@ static struct platform_device at91sam9263_isi_device = { .num_resources = ARRAY_SIZE(isi_resources), }; void __init at91_add_device_isi(void) void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) { at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */ at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */ Loading @@ -904,14 +905,20 @@ void __init at91_add_device_isi(void) at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */ at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */ at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */ at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */ at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */ at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */ at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */ at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */ if (use_pck_as_mck) { at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */ /* TODO: register the PCK for ISI_MCK and set its parent */ } } #else void __init at91_add_device_isi(void) {} void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) {} #endif Loading arch/arm/mach-at91/at91sam9g45_devices.c +104 −9 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ #include <linux/dma-mapping.h> #include <linux/gpio.h> #include <linux/clk.h> #include <linux/platform_device.h> #include <linux/i2c-gpio.h> #include <linux/atmel-mci.h> Loading @@ -28,7 +29,10 @@ #include <mach/at_hdmac.h> #include <mach/atmel-mci.h> #include <media/atmel-isi.h> #include "generic.h" #include "clock.h" /* -------------------------------------------------------------------- Loading @@ -38,10 +42,6 @@ #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) static u64 hdmac_dmamask = DMA_BIT_MASK(32); static struct at_dma_platform_data atdma_pdata = { .nr_channels = 8, }; static struct resource hdmac_resources[] = { [0] = { .start = AT91SAM9G45_BASE_DMA, Loading @@ -56,12 +56,11 @@ static struct resource hdmac_resources[] = { }; static struct platform_device at_hdmac_device = { .name = "at_hdmac", .name = "at91sam9g45_dma", .id = -1, .dev = { .dma_mask = &hdmac_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &atdma_pdata, }, .resource = hdmac_resources, .num_resources = ARRAY_SIZE(hdmac_resources), Loading @@ -69,8 +68,14 @@ static struct platform_device at_hdmac_device = { void __init at91_add_device_hdmac(void) { dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask); dma_cap_set(DMA_SLAVE, atdma_pdata.cap_mask); #if defined(CONFIG_OF) struct device_node *of_node = of_find_node_by_name(NULL, "dma-controller"); if (of_node) of_node_put(of_node); else #endif platform_device_register(&at_hdmac_device); } #else Loading Loading @@ -869,6 +874,96 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data) void __init at91_add_device_ac97(struct ac97c_platform_data *data) {} #endif /* -------------------------------------------------------------------- * Image Sensor Interface * -------------------------------------------------------------------- */ #if defined(CONFIG_VIDEO_ATMEL_ISI) || defined(CONFIG_VIDEO_ATMEL_ISI_MODULE) static u64 isi_dmamask = DMA_BIT_MASK(32); static struct isi_platform_data isi_data; struct resource isi_resources[] = { [0] = { .start = AT91SAM9G45_BASE_ISI, .end = AT91SAM9G45_BASE_ISI + SZ_16K - 1, .flags = IORESOURCE_MEM, }, [1] = { .start = AT91SAM9G45_ID_ISI, .end = AT91SAM9G45_ID_ISI, .flags = IORESOURCE_IRQ, }, }; static struct platform_device at91sam9g45_isi_device = { .name = "atmel_isi", .id = 0, .dev = { .dma_mask = &isi_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &isi_data, }, .resource = isi_resources, .num_resources = ARRAY_SIZE(isi_resources), }; static struct clk_lookup isi_mck_lookups[] = { CLKDEV_CON_DEV_ID("isi_mck", "atmel_isi.0", NULL), }; void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) { struct clk *pck; struct clk *parent; if (!data) return; isi_data = *data; at91_set_A_periph(AT91_PIN_PB20, 0); /* ISI_D0 */ at91_set_A_periph(AT91_PIN_PB21, 0); /* ISI_D1 */ at91_set_A_periph(AT91_PIN_PB22, 0); /* ISI_D2 */ at91_set_A_periph(AT91_PIN_PB23, 0); /* ISI_D3 */ at91_set_A_periph(AT91_PIN_PB24, 0); /* ISI_D4 */ at91_set_A_periph(AT91_PIN_PB25, 0); /* ISI_D5 */ at91_set_A_periph(AT91_PIN_PB26, 0); /* ISI_D6 */ at91_set_A_periph(AT91_PIN_PB27, 0); /* ISI_D7 */ at91_set_A_periph(AT91_PIN_PB28, 0); /* ISI_PCK */ at91_set_A_periph(AT91_PIN_PB30, 0); /* ISI_HSYNC */ at91_set_A_periph(AT91_PIN_PB29, 0); /* ISI_VSYNC */ at91_set_B_periph(AT91_PIN_PB8, 0); /* ISI_PD8 */ at91_set_B_periph(AT91_PIN_PB9, 0); /* ISI_PD9 */ at91_set_B_periph(AT91_PIN_PB10, 0); /* ISI_PD10 */ at91_set_B_periph(AT91_PIN_PB11, 0); /* ISI_PD11 */ platform_device_register(&at91sam9g45_isi_device); if (use_pck_as_mck) { at91_set_B_periph(AT91_PIN_PB31, 0); /* ISI_MCK (PCK1) */ pck = clk_get(NULL, "pck1"); parent = clk_get(NULL, "plla"); BUG_ON(IS_ERR(pck) || IS_ERR(parent)); if (clk_set_parent(pck, parent)) { pr_err("Failed to set PCK's parent\n"); } else { /* Register PCK as ISI_MCK */ isi_mck_lookups[0].clk = pck; clkdev_add_table(isi_mck_lookups, ARRAY_SIZE(isi_mck_lookups)); } clk_put(pck); clk_put(parent); } } #else void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) {} #endif /* -------------------------------------------------------------------- * LCD Controller Loading arch/arm/mach-at91/at91sam9rl_devices.c +1 −7 Original line number Diff line number Diff line Loading @@ -33,10 +33,6 @@ #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) static u64 hdmac_dmamask = DMA_BIT_MASK(32); static struct at_dma_platform_data atdma_pdata = { .nr_channels = 2, }; static struct resource hdmac_resources[] = { [0] = { .start = AT91SAM9RL_BASE_DMA, Loading @@ -51,12 +47,11 @@ static struct resource hdmac_resources[] = { }; static struct platform_device at_hdmac_device = { .name = "at_hdmac", .name = "at91sam9rl_dma", .id = -1, .dev = { .dma_mask = &hdmac_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &atdma_pdata, }, .resource = hdmac_resources, .num_resources = ARRAY_SIZE(hdmac_resources), Loading @@ -64,7 +59,6 @@ static struct platform_device at_hdmac_device = { void __init at91_add_device_hdmac(void) { dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask); platform_device_register(&at_hdmac_device); } #else Loading arch/arm/mach-at91/board-flexibity.c +11 −1 Original line number Diff line number Diff line /* * linux/arch/arm/mach-at91/board-flexibity.c * * Copyright (C) 2010 Flexibity * Copyright (C) 2010-2011 Flexibity * Copyright (C) 2005 SAN People * Copyright (C) 2006 Atmel * Loading Loading @@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = { .pullup_pin = -EINVAL, /* pull-up driven by UDC */ }; /* I2C devices */ static struct i2c_board_info __initdata flexibity_i2c_devices[] = { { I2C_BOARD_INFO("ds1307", 0x68), }, }; /* SPI devices */ static struct spi_board_info flexibity_spi_devices[] = { { /* DataFlash chip */ Loading Loading @@ -141,6 +148,9 @@ static void __init flexibity_board_init(void) at91_add_device_usbh(&flexibity_usbh_data); /* USB Device */ at91_add_device_udc(&flexibity_udc_data); /* I2C */ at91_add_device_i2c(flexibity_i2c_devices, ARRAY_SIZE(flexibity_i2c_devices)); /* SPI */ at91_add_device_spi(flexibity_spi_devices, ARRAY_SIZE(flexibity_spi_devices)); Loading arch/arm/mach-at91/board-sam9m10g45ek.c +78 −2 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include <linux/gpio_keys.h> #include <linux/input.h> #include <linux/leds.h> #include <linux/clk.h> #include <linux/atmel-mci.h> #include <linux/delay.h> #include <mach/hardware.h> #include <video/atmel_lcdc.h> #include <media/soc_camera.h> #include <media/atmel-isi.h> #include <asm/setup.h> #include <asm/mach-types.h> Loading Loading @@ -184,6 +186,71 @@ static void __init ek_add_device_nand(void) } /* * ISI */ static struct isi_platform_data __initdata isi_data = { .frate = ISI_CFG1_FRATE_CAPTURE_ALL, /* to use codec and preview path simultaneously */ .full_mode = 1, .data_width_flags = ISI_DATAWIDTH_8 | ISI_DATAWIDTH_10, /* ISI_MCK is provided by programmable clock or external clock */ .mck_hz = 25000000, }; /* * soc-camera OV2640 */ #if defined(CONFIG_SOC_CAMERA_OV2640) || \ defined(CONFIG_SOC_CAMERA_OV2640_MODULE) static unsigned long isi_camera_query_bus_param(struct soc_camera_link *link) { /* ISI board for ek using default 8-bits connection */ return SOCAM_DATAWIDTH_8; } static int i2c_camera_power(struct device *dev, int on) { /* enable or disable the camera */ pr_debug("%s: %s the camera\n", __func__, on ? "ENABLE" : "DISABLE"); at91_set_gpio_output(AT91_PIN_PD13, !on); if (!on) goto out; /* If enabled, give a reset impulse */ at91_set_gpio_output(AT91_PIN_PD12, 0); msleep(20); at91_set_gpio_output(AT91_PIN_PD12, 1); msleep(100); out: return 0; } static struct i2c_board_info i2c_camera = { I2C_BOARD_INFO("ov2640", 0x30), }; static struct soc_camera_link iclink_ov2640 = { .bus_id = 0, .board_info = &i2c_camera, .i2c_adapter_id = 0, .power = i2c_camera_power, .query_bus_param = isi_camera_query_bus_param, }; static struct platform_device isi_ov2640 = { .name = "soc-camera-pdrv", .id = 0, .dev = { .platform_data = &iclink_ov2640, }, }; #endif /* * LCD Controller */ Loading Loading @@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = { #endif }; static struct platform_device *devices[] __initdata = { #if defined(CONFIG_SOC_CAMERA_OV2640) || \ defined(CONFIG_SOC_CAMERA_OV2640_MODULE) &isi_ov2640, #endif }; static void __init ek_board_init(void) { Loading @@ -399,6 +471,8 @@ static void __init ek_board_init(void) ek_add_device_nand(); /* I2C */ at91_add_device_i2c(0, NULL, 0); /* ISI, using programmable clock as ISI_MCK */ at91_add_device_isi(&isi_data, true); /* LCD Controller */ at91_add_device_lcdc(&ek_lcdc_data); /* Touch Screen */ Loading @@ -410,6 +484,8 @@ static void __init ek_board_init(void) /* LEDs */ at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led)); /* Other platform devices */ platform_add_devices(devices, ARRAY_SIZE(devices)); } MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK") Loading Loading
arch/arm/mach-at91/at91sam9263_devices.c +10 −3 Original line number Diff line number Diff line Loading @@ -891,7 +891,8 @@ static struct platform_device at91sam9263_isi_device = { .num_resources = ARRAY_SIZE(isi_resources), }; void __init at91_add_device_isi(void) void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) { at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */ at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */ Loading @@ -904,14 +905,20 @@ void __init at91_add_device_isi(void) at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */ at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */ at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */ at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */ at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */ at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */ at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */ at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */ if (use_pck_as_mck) { at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */ /* TODO: register the PCK for ISI_MCK and set its parent */ } } #else void __init at91_add_device_isi(void) {} void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) {} #endif Loading
arch/arm/mach-at91/at91sam9g45_devices.c +104 −9 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ #include <linux/dma-mapping.h> #include <linux/gpio.h> #include <linux/clk.h> #include <linux/platform_device.h> #include <linux/i2c-gpio.h> #include <linux/atmel-mci.h> Loading @@ -28,7 +29,10 @@ #include <mach/at_hdmac.h> #include <mach/atmel-mci.h> #include <media/atmel-isi.h> #include "generic.h" #include "clock.h" /* -------------------------------------------------------------------- Loading @@ -38,10 +42,6 @@ #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) static u64 hdmac_dmamask = DMA_BIT_MASK(32); static struct at_dma_platform_data atdma_pdata = { .nr_channels = 8, }; static struct resource hdmac_resources[] = { [0] = { .start = AT91SAM9G45_BASE_DMA, Loading @@ -56,12 +56,11 @@ static struct resource hdmac_resources[] = { }; static struct platform_device at_hdmac_device = { .name = "at_hdmac", .name = "at91sam9g45_dma", .id = -1, .dev = { .dma_mask = &hdmac_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &atdma_pdata, }, .resource = hdmac_resources, .num_resources = ARRAY_SIZE(hdmac_resources), Loading @@ -69,8 +68,14 @@ static struct platform_device at_hdmac_device = { void __init at91_add_device_hdmac(void) { dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask); dma_cap_set(DMA_SLAVE, atdma_pdata.cap_mask); #if defined(CONFIG_OF) struct device_node *of_node = of_find_node_by_name(NULL, "dma-controller"); if (of_node) of_node_put(of_node); else #endif platform_device_register(&at_hdmac_device); } #else Loading Loading @@ -869,6 +874,96 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data) void __init at91_add_device_ac97(struct ac97c_platform_data *data) {} #endif /* -------------------------------------------------------------------- * Image Sensor Interface * -------------------------------------------------------------------- */ #if defined(CONFIG_VIDEO_ATMEL_ISI) || defined(CONFIG_VIDEO_ATMEL_ISI_MODULE) static u64 isi_dmamask = DMA_BIT_MASK(32); static struct isi_platform_data isi_data; struct resource isi_resources[] = { [0] = { .start = AT91SAM9G45_BASE_ISI, .end = AT91SAM9G45_BASE_ISI + SZ_16K - 1, .flags = IORESOURCE_MEM, }, [1] = { .start = AT91SAM9G45_ID_ISI, .end = AT91SAM9G45_ID_ISI, .flags = IORESOURCE_IRQ, }, }; static struct platform_device at91sam9g45_isi_device = { .name = "atmel_isi", .id = 0, .dev = { .dma_mask = &isi_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &isi_data, }, .resource = isi_resources, .num_resources = ARRAY_SIZE(isi_resources), }; static struct clk_lookup isi_mck_lookups[] = { CLKDEV_CON_DEV_ID("isi_mck", "atmel_isi.0", NULL), }; void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) { struct clk *pck; struct clk *parent; if (!data) return; isi_data = *data; at91_set_A_periph(AT91_PIN_PB20, 0); /* ISI_D0 */ at91_set_A_periph(AT91_PIN_PB21, 0); /* ISI_D1 */ at91_set_A_periph(AT91_PIN_PB22, 0); /* ISI_D2 */ at91_set_A_periph(AT91_PIN_PB23, 0); /* ISI_D3 */ at91_set_A_periph(AT91_PIN_PB24, 0); /* ISI_D4 */ at91_set_A_periph(AT91_PIN_PB25, 0); /* ISI_D5 */ at91_set_A_periph(AT91_PIN_PB26, 0); /* ISI_D6 */ at91_set_A_periph(AT91_PIN_PB27, 0); /* ISI_D7 */ at91_set_A_periph(AT91_PIN_PB28, 0); /* ISI_PCK */ at91_set_A_periph(AT91_PIN_PB30, 0); /* ISI_HSYNC */ at91_set_A_periph(AT91_PIN_PB29, 0); /* ISI_VSYNC */ at91_set_B_periph(AT91_PIN_PB8, 0); /* ISI_PD8 */ at91_set_B_periph(AT91_PIN_PB9, 0); /* ISI_PD9 */ at91_set_B_periph(AT91_PIN_PB10, 0); /* ISI_PD10 */ at91_set_B_periph(AT91_PIN_PB11, 0); /* ISI_PD11 */ platform_device_register(&at91sam9g45_isi_device); if (use_pck_as_mck) { at91_set_B_periph(AT91_PIN_PB31, 0); /* ISI_MCK (PCK1) */ pck = clk_get(NULL, "pck1"); parent = clk_get(NULL, "plla"); BUG_ON(IS_ERR(pck) || IS_ERR(parent)); if (clk_set_parent(pck, parent)) { pr_err("Failed to set PCK's parent\n"); } else { /* Register PCK as ISI_MCK */ isi_mck_lookups[0].clk = pck; clkdev_add_table(isi_mck_lookups, ARRAY_SIZE(isi_mck_lookups)); } clk_put(pck); clk_put(parent); } } #else void __init at91_add_device_isi(struct isi_platform_data *data, bool use_pck_as_mck) {} #endif /* -------------------------------------------------------------------- * LCD Controller Loading
arch/arm/mach-at91/at91sam9rl_devices.c +1 −7 Original line number Diff line number Diff line Loading @@ -33,10 +33,6 @@ #if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) static u64 hdmac_dmamask = DMA_BIT_MASK(32); static struct at_dma_platform_data atdma_pdata = { .nr_channels = 2, }; static struct resource hdmac_resources[] = { [0] = { .start = AT91SAM9RL_BASE_DMA, Loading @@ -51,12 +47,11 @@ static struct resource hdmac_resources[] = { }; static struct platform_device at_hdmac_device = { .name = "at_hdmac", .name = "at91sam9rl_dma", .id = -1, .dev = { .dma_mask = &hdmac_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &atdma_pdata, }, .resource = hdmac_resources, .num_resources = ARRAY_SIZE(hdmac_resources), Loading @@ -64,7 +59,6 @@ static struct platform_device at_hdmac_device = { void __init at91_add_device_hdmac(void) { dma_cap_set(DMA_MEMCPY, atdma_pdata.cap_mask); platform_device_register(&at_hdmac_device); } #else Loading
arch/arm/mach-at91/board-flexibity.c +11 −1 Original line number Diff line number Diff line /* * linux/arch/arm/mach-at91/board-flexibity.c * * Copyright (C) 2010 Flexibity * Copyright (C) 2010-2011 Flexibity * Copyright (C) 2005 SAN People * Copyright (C) 2006 Atmel * Loading Loading @@ -62,6 +62,13 @@ static struct at91_udc_data __initdata flexibity_udc_data = { .pullup_pin = -EINVAL, /* pull-up driven by UDC */ }; /* I2C devices */ static struct i2c_board_info __initdata flexibity_i2c_devices[] = { { I2C_BOARD_INFO("ds1307", 0x68), }, }; /* SPI devices */ static struct spi_board_info flexibity_spi_devices[] = { { /* DataFlash chip */ Loading Loading @@ -141,6 +148,9 @@ static void __init flexibity_board_init(void) at91_add_device_usbh(&flexibity_usbh_data); /* USB Device */ at91_add_device_udc(&flexibity_udc_data); /* I2C */ at91_add_device_i2c(flexibity_i2c_devices, ARRAY_SIZE(flexibity_i2c_devices)); /* SPI */ at91_add_device_spi(flexibity_spi_devices, ARRAY_SIZE(flexibity_spi_devices)); Loading
arch/arm/mach-at91/board-sam9m10g45ek.c +78 −2 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include <linux/gpio_keys.h> #include <linux/input.h> #include <linux/leds.h> #include <linux/clk.h> #include <linux/atmel-mci.h> #include <linux/delay.h> #include <mach/hardware.h> #include <video/atmel_lcdc.h> #include <media/soc_camera.h> #include <media/atmel-isi.h> #include <asm/setup.h> #include <asm/mach-types.h> Loading Loading @@ -184,6 +186,71 @@ static void __init ek_add_device_nand(void) } /* * ISI */ static struct isi_platform_data __initdata isi_data = { .frate = ISI_CFG1_FRATE_CAPTURE_ALL, /* to use codec and preview path simultaneously */ .full_mode = 1, .data_width_flags = ISI_DATAWIDTH_8 | ISI_DATAWIDTH_10, /* ISI_MCK is provided by programmable clock or external clock */ .mck_hz = 25000000, }; /* * soc-camera OV2640 */ #if defined(CONFIG_SOC_CAMERA_OV2640) || \ defined(CONFIG_SOC_CAMERA_OV2640_MODULE) static unsigned long isi_camera_query_bus_param(struct soc_camera_link *link) { /* ISI board for ek using default 8-bits connection */ return SOCAM_DATAWIDTH_8; } static int i2c_camera_power(struct device *dev, int on) { /* enable or disable the camera */ pr_debug("%s: %s the camera\n", __func__, on ? "ENABLE" : "DISABLE"); at91_set_gpio_output(AT91_PIN_PD13, !on); if (!on) goto out; /* If enabled, give a reset impulse */ at91_set_gpio_output(AT91_PIN_PD12, 0); msleep(20); at91_set_gpio_output(AT91_PIN_PD12, 1); msleep(100); out: return 0; } static struct i2c_board_info i2c_camera = { I2C_BOARD_INFO("ov2640", 0x30), }; static struct soc_camera_link iclink_ov2640 = { .bus_id = 0, .board_info = &i2c_camera, .i2c_adapter_id = 0, .power = i2c_camera_power, .query_bus_param = isi_camera_query_bus_param, }; static struct platform_device isi_ov2640 = { .name = "soc-camera-pdrv", .id = 0, .dev = { .platform_data = &iclink_ov2640, }, }; #endif /* * LCD Controller */ Loading Loading @@ -377,7 +444,12 @@ static struct gpio_led ek_pwm_led[] = { #endif }; static struct platform_device *devices[] __initdata = { #if defined(CONFIG_SOC_CAMERA_OV2640) || \ defined(CONFIG_SOC_CAMERA_OV2640_MODULE) &isi_ov2640, #endif }; static void __init ek_board_init(void) { Loading @@ -399,6 +471,8 @@ static void __init ek_board_init(void) ek_add_device_nand(); /* I2C */ at91_add_device_i2c(0, NULL, 0); /* ISI, using programmable clock as ISI_MCK */ at91_add_device_isi(&isi_data, true); /* LCD Controller */ at91_add_device_lcdc(&ek_lcdc_data); /* Touch Screen */ Loading @@ -410,6 +484,8 @@ static void __init ek_board_init(void) /* LEDs */ at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led)); /* Other platform devices */ platform_add_devices(devices, ARRAY_SIZE(devices)); } MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK") Loading