diff options
Diffstat (limited to 'arch/arm/mach-davinci/board-dm365-evm.c')
-rw-r--r-- | arch/arm/mach-davinci/board-dm365-evm.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index b476395d2cd4..d15beceb632e 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <linux/mtd/partitions.h> | 24 | #include <linux/mtd/partitions.h> |
25 | #include <linux/mtd/nand.h> | 25 | #include <linux/mtd/nand.h> |
26 | #include <linux/input.h> | 26 | #include <linux/input.h> |
27 | #include <linux/spi/spi.h> | ||
28 | #include <linux/spi/eeprom.h> | ||
27 | 29 | ||
28 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
29 | #include <asm/mach/arch.h> | 31 | #include <asm/mach/arch.h> |
@@ -37,6 +39,8 @@ | |||
37 | #include <mach/nand.h> | 39 | #include <mach/nand.h> |
38 | #include <mach/keyscan.h> | 40 | #include <mach/keyscan.h> |
39 | 41 | ||
42 | #include <media/tvp514x.h> | ||
43 | |||
40 | static inline int have_imager(void) | 44 | static inline int have_imager(void) |
41 | { | 45 | { |
42 | /* REVISIT when it's supported, trigger via Kconfig */ | 46 | /* REVISIT when it's supported, trigger via Kconfig */ |
@@ -306,6 +310,73 @@ static void dm365evm_mmc_configure(void) | |||
306 | davinci_cfg_reg(DM365_SD1_DATA0); | 310 | davinci_cfg_reg(DM365_SD1_DATA0); |
307 | } | 311 | } |
308 | 312 | ||
313 | static struct tvp514x_platform_data tvp5146_pdata = { | ||
314 | .clk_polarity = 0, | ||
315 | .hs_polarity = 1, | ||
316 | .vs_polarity = 1 | ||
317 | }; | ||
318 | |||
319 | #define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) | ||
320 | /* Inputs available at the TVP5146 */ | ||
321 | static struct v4l2_input tvp5146_inputs[] = { | ||
322 | { | ||
323 | .index = 0, | ||
324 | .name = "Composite", | ||
325 | .type = V4L2_INPUT_TYPE_CAMERA, | ||
326 | .std = TVP514X_STD_ALL, | ||
327 | }, | ||
328 | { | ||
329 | .index = 1, | ||
330 | .name = "S-Video", | ||
331 | .type = V4L2_INPUT_TYPE_CAMERA, | ||
332 | .std = TVP514X_STD_ALL, | ||
333 | }, | ||
334 | }; | ||
335 | |||
336 | /* | ||
337 | * this is the route info for connecting each input to decoder | ||
338 | * ouput that goes to vpfe. There is a one to one correspondence | ||
339 | * with tvp5146_inputs | ||
340 | */ | ||
341 | static struct vpfe_route tvp5146_routes[] = { | ||
342 | { | ||
343 | .input = INPUT_CVBS_VI2B, | ||
344 | .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, | ||
345 | }, | ||
346 | { | ||
347 | .input = INPUT_SVIDEO_VI2C_VI1C, | ||
348 | .output = OUTPUT_10BIT_422_EMBEDDED_SYNC, | ||
349 | }, | ||
350 | }; | ||
351 | |||
352 | static struct vpfe_subdev_info vpfe_sub_devs[] = { | ||
353 | { | ||
354 | .name = "tvp5146", | ||
355 | .grp_id = 0, | ||
356 | .num_inputs = ARRAY_SIZE(tvp5146_inputs), | ||
357 | .inputs = tvp5146_inputs, | ||
358 | .routes = tvp5146_routes, | ||
359 | .can_route = 1, | ||
360 | .ccdc_if_params = { | ||
361 | .if_type = VPFE_BT656, | ||
362 | .hdpol = VPFE_PINPOL_POSITIVE, | ||
363 | .vdpol = VPFE_PINPOL_POSITIVE, | ||
364 | }, | ||
365 | .board_info = { | ||
366 | I2C_BOARD_INFO("tvp5146", 0x5d), | ||
367 | .platform_data = &tvp5146_pdata, | ||
368 | }, | ||
369 | }, | ||
370 | }; | ||
371 | |||
372 | static struct vpfe_config vpfe_cfg = { | ||
373 | .num_subdevs = ARRAY_SIZE(vpfe_sub_devs), | ||
374 | .sub_devs = vpfe_sub_devs, | ||
375 | .i2c_adapter_id = 1, | ||
376 | .card_name = "DM365 EVM", | ||
377 | .ccdc = "ISIF", | ||
378 | }; | ||
379 | |||
309 | static void __init evm_init_i2c(void) | 380 | static void __init evm_init_i2c(void) |
310 | { | 381 | { |
311 | davinci_init_i2c(&i2c_pdata); | 382 | davinci_init_i2c(&i2c_pdata); |
@@ -497,9 +568,29 @@ static struct davinci_uart_config uart_config __initdata = { | |||
497 | 568 | ||
498 | static void __init dm365_evm_map_io(void) | 569 | static void __init dm365_evm_map_io(void) |
499 | { | 570 | { |
571 | /* setup input configuration for VPFE input devices */ | ||
572 | dm365_set_vpfe_config(&vpfe_cfg); | ||
500 | dm365_init(); | 573 | dm365_init(); |
501 | } | 574 | } |
502 | 575 | ||
576 | static struct spi_eeprom at25640 = { | ||
577 | .byte_len = SZ_64K / 8, | ||
578 | .name = "at25640", | ||
579 | .page_size = 32, | ||
580 | .flags = EE_ADDR2, | ||
581 | }; | ||
582 | |||
583 | static struct spi_board_info dm365_evm_spi_info[] __initconst = { | ||
584 | { | ||
585 | .modalias = "at25", | ||
586 | .platform_data = &at25640, | ||
587 | .max_speed_hz = 10 * 1000 * 1000, | ||
588 | .bus_num = 0, | ||
589 | .chip_select = 0, | ||
590 | .mode = SPI_MODE_0, | ||
591 | }, | ||
592 | }; | ||
593 | |||
503 | static __init void dm365_evm_init(void) | 594 | static __init void dm365_evm_init(void) |
504 | { | 595 | { |
505 | evm_init_i2c(); | 596 | evm_init_i2c(); |
@@ -516,6 +607,9 @@ static __init void dm365_evm_init(void) | |||
516 | dm365_init_asp(&dm365_evm_snd_data); | 607 | dm365_init_asp(&dm365_evm_snd_data); |
517 | dm365_init_rtc(); | 608 | dm365_init_rtc(); |
518 | dm365_init_ks(&dm365evm_ks_data); | 609 | dm365_init_ks(&dm365evm_ks_data); |
610 | |||
611 | dm365_init_spi0(BIT(0), dm365_evm_spi_info, | ||
612 | ARRAY_SIZE(dm365_evm_spi_info)); | ||
519 | } | 613 | } |
520 | 614 | ||
521 | static __init void dm365_evm_irq_init(void) | 615 | static __init void dm365_evm_irq_init(void) |