diff options
Diffstat (limited to 'arch/arm/mach-omap1/board-ams-delta.c')
| -rw-r--r-- | arch/arm/mach-omap1/board-ams-delta.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 73c86392fcd3..1d4163b9f0b7 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
| @@ -16,9 +16,12 @@ | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/input.h> | 17 | #include <linux/input.h> |
| 18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
| 19 | #include <linux/leds.h> | ||
| 19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
| 20 | #include <linux/serial_8250.h> | 21 | #include <linux/serial_8250.h> |
| 21 | 22 | ||
| 23 | #include <media/soc_camera.h> | ||
| 24 | |||
| 22 | #include <asm/serial.h> | 25 | #include <asm/serial.h> |
| 23 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
| 24 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| @@ -32,6 +35,7 @@ | |||
| 32 | #include <plat/usb.h> | 35 | #include <plat/usb.h> |
| 33 | #include <plat/board.h> | 36 | #include <plat/board.h> |
| 34 | #include <plat/common.h> | 37 | #include <plat/common.h> |
| 38 | #include <mach/camera.h> | ||
| 35 | 39 | ||
| 36 | #include <mach/ams-delta-fiq.h> | 40 | #include <mach/ams-delta-fiq.h> |
| 37 | 41 | ||
| @@ -213,10 +217,56 @@ static struct platform_device ams_delta_led_device = { | |||
| 213 | .id = -1 | 217 | .id = -1 |
| 214 | }; | 218 | }; |
| 215 | 219 | ||
| 220 | static struct i2c_board_info ams_delta_camera_board_info[] = { | ||
| 221 | { | ||
| 222 | I2C_BOARD_INFO("ov6650", 0x60), | ||
| 223 | }, | ||
| 224 | }; | ||
| 225 | |||
| 226 | #ifdef CONFIG_LEDS_TRIGGERS | ||
| 227 | DEFINE_LED_TRIGGER(ams_delta_camera_led_trigger); | ||
| 228 | |||
| 229 | static int ams_delta_camera_power(struct device *dev, int power) | ||
| 230 | { | ||
| 231 | /* | ||
| 232 | * turn on camera LED | ||
| 233 | */ | ||
| 234 | if (power) | ||
| 235 | led_trigger_event(ams_delta_camera_led_trigger, LED_FULL); | ||
| 236 | else | ||
| 237 | led_trigger_event(ams_delta_camera_led_trigger, LED_OFF); | ||
| 238 | return 0; | ||
| 239 | } | ||
| 240 | #else | ||
| 241 | #define ams_delta_camera_power NULL | ||
| 242 | #endif | ||
| 243 | |||
| 244 | static struct soc_camera_link __initdata ams_delta_iclink = { | ||
| 245 | .bus_id = 0, /* OMAP1 SoC camera bus */ | ||
| 246 | .i2c_adapter_id = 1, | ||
| 247 | .board_info = &ams_delta_camera_board_info[0], | ||
| 248 | .module_name = "ov6650", | ||
| 249 | .power = ams_delta_camera_power, | ||
| 250 | }; | ||
| 251 | |||
| 252 | static struct platform_device ams_delta_camera_device = { | ||
| 253 | .name = "soc-camera-pdrv", | ||
| 254 | .id = 0, | ||
| 255 | .dev = { | ||
| 256 | .platform_data = &ams_delta_iclink, | ||
| 257 | }, | ||
| 258 | }; | ||
| 259 | |||
| 260 | static struct omap1_cam_platform_data ams_delta_camera_platform_data = { | ||
| 261 | .camexclk_khz = 12000, /* default 12MHz clock, no extra DPLL */ | ||
| 262 | .lclk_khz_max = 1334, /* results in 5fps CIF, 10fps QCIF */ | ||
| 263 | }; | ||
| 264 | |||
| 216 | static struct platform_device *ams_delta_devices[] __initdata = { | 265 | static struct platform_device *ams_delta_devices[] __initdata = { |
| 217 | &ams_delta_kp_device, | 266 | &ams_delta_kp_device, |
| 218 | &ams_delta_lcd_device, | 267 | &ams_delta_lcd_device, |
| 219 | &ams_delta_led_device, | 268 | &ams_delta_led_device, |
| 269 | &ams_delta_camera_device, | ||
| 220 | }; | 270 | }; |
| 221 | 271 | ||
| 222 | static void __init ams_delta_init(void) | 272 | static void __init ams_delta_init(void) |
| @@ -225,6 +275,20 @@ static void __init ams_delta_init(void) | |||
| 225 | omap_cfg_reg(UART1_TX); | 275 | omap_cfg_reg(UART1_TX); |
| 226 | omap_cfg_reg(UART1_RTS); | 276 | omap_cfg_reg(UART1_RTS); |
| 227 | 277 | ||
| 278 | /* parallel camera interface */ | ||
| 279 | omap_cfg_reg(H19_1610_CAM_EXCLK); | ||
| 280 | omap_cfg_reg(J15_1610_CAM_LCLK); | ||
| 281 | omap_cfg_reg(L18_1610_CAM_VS); | ||
| 282 | omap_cfg_reg(L15_1610_CAM_HS); | ||
| 283 | omap_cfg_reg(L19_1610_CAM_D0); | ||
| 284 | omap_cfg_reg(K14_1610_CAM_D1); | ||
| 285 | omap_cfg_reg(K15_1610_CAM_D2); | ||
| 286 | omap_cfg_reg(K19_1610_CAM_D3); | ||
| 287 | omap_cfg_reg(K18_1610_CAM_D4); | ||
| 288 | omap_cfg_reg(J14_1610_CAM_D5); | ||
| 289 | omap_cfg_reg(J19_1610_CAM_D6); | ||
| 290 | omap_cfg_reg(J18_1610_CAM_D7); | ||
| 291 | |||
| 228 | iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc)); | 292 | iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc)); |
| 229 | 293 | ||
| 230 | omap_board_config = ams_delta_config; | 294 | omap_board_config = ams_delta_config; |
| @@ -236,6 +300,11 @@ static void __init ams_delta_init(void) | |||
| 236 | ams_delta_latch2_write(~0, 0); | 300 | ams_delta_latch2_write(~0, 0); |
| 237 | 301 | ||
| 238 | omap1_usb_init(&ams_delta_usb_config); | 302 | omap1_usb_init(&ams_delta_usb_config); |
| 303 | omap1_set_camera_info(&ams_delta_camera_platform_data); | ||
| 304 | #ifdef CONFIG_LEDS_TRIGGERS | ||
| 305 | led_trigger_register_simple("ams_delta_camera", | ||
| 306 | &ams_delta_camera_led_trigger); | ||
| 307 | #endif | ||
| 239 | platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices)); | 308 | platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices)); |
| 240 | 309 | ||
| 241 | #ifdef CONFIG_AMS_DELTA_FIQ | 310 | #ifdef CONFIG_AMS_DELTA_FIQ |
