diff options
| -rw-r--r-- | arch/sh/boards/mach-ecovec24/setup.c | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index d4ac32b63572..89c5a715d0b6 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <video/sh_mobile_lcdc.h> | 29 | #include <video/sh_mobile_lcdc.h> |
| 30 | #include <media/sh_mobile_ceu.h> | 30 | #include <media/sh_mobile_ceu.h> |
| 31 | #include <media/tw9910.h> | 31 | #include <media/tw9910.h> |
| 32 | #include <media/mt9t112.h> | ||
| 32 | #include <asm/heartbeat.h> | 33 | #include <asm/heartbeat.h> |
| 33 | #include <asm/sh_eth.h> | 34 | #include <asm/sh_eth.h> |
| 34 | #include <asm/clock.h> | 35 | #include <asm/clock.h> |
| @@ -566,11 +567,19 @@ static struct platform_device msiof0_device = { | |||
| 566 | 567 | ||
| 567 | #endif | 568 | #endif |
| 568 | 569 | ||
| 569 | /* I2C Video */ | 570 | /* I2C Video/Camera */ |
| 570 | static struct i2c_board_info i2c_camera[] = { | 571 | static struct i2c_board_info i2c_camera[] = { |
| 571 | { | 572 | { |
| 572 | I2C_BOARD_INFO("tw9910", 0x45), | 573 | I2C_BOARD_INFO("tw9910", 0x45), |
| 573 | }, | 574 | }, |
| 575 | { | ||
| 576 | /* 1st camera */ | ||
| 577 | I2C_BOARD_INFO("mt9t112", 0x3c), | ||
| 578 | }, | ||
| 579 | { | ||
| 580 | /* 2nd camera */ | ||
| 581 | I2C_BOARD_INFO("mt9t112", 0x3c), | ||
| 582 | }, | ||
| 574 | }; | 583 | }; |
| 575 | 584 | ||
| 576 | /* tw9910 */ | 585 | /* tw9910 */ |
| @@ -599,6 +608,52 @@ static struct soc_camera_link tw9910_link = { | |||
| 599 | .priv = &tw9910_info, | 608 | .priv = &tw9910_info, |
| 600 | }; | 609 | }; |
| 601 | 610 | ||
| 611 | /* mt9t112 */ | ||
| 612 | static int mt9t112_power1(struct device *dev, int mode) | ||
| 613 | { | ||
| 614 | gpio_set_value(GPIO_PTA3, mode); | ||
| 615 | if (mode) | ||
| 616 | mdelay(100); | ||
| 617 | |||
| 618 | return 0; | ||
| 619 | } | ||
| 620 | |||
| 621 | static struct mt9t112_camera_info mt9t112_info1 = { | ||
| 622 | .flags = MT9T112_FLAG_PCLK_RISING_EDGE | MT9T112_FLAG_DATAWIDTH_8, | ||
| 623 | .divider = { 0x49, 0x6, 0, 6, 0, 9, 9, 6, 0 }, /* for 24MHz */ | ||
| 624 | }; | ||
| 625 | |||
| 626 | static struct soc_camera_link mt9t112_link1 = { | ||
| 627 | .i2c_adapter_id = 0, | ||
| 628 | .power = mt9t112_power1, | ||
| 629 | .bus_id = 0, | ||
| 630 | .board_info = &i2c_camera[1], | ||
| 631 | .module_name = "mt9t112", | ||
| 632 | .priv = &mt9t112_info1, | ||
| 633 | }; | ||
| 634 | |||
| 635 | static int mt9t112_power2(struct device *dev, int mode) | ||
| 636 | { | ||
| 637 | gpio_set_value(GPIO_PTA4, mode); | ||
| 638 | if (mode) | ||
| 639 | mdelay(100); | ||
| 640 | |||
| 641 | return 0; | ||
| 642 | } | ||
| 643 | |||
| 644 | static struct mt9t112_camera_info mt9t112_info2 = { | ||
| 645 | .flags = MT9T112_FLAG_PCLK_RISING_EDGE | MT9T112_FLAG_DATAWIDTH_8, | ||
| 646 | .divider = { 0x49, 0x6, 0, 6, 0, 9, 9, 6, 0 }, /* for 24MHz */ | ||
| 647 | }; | ||
| 648 | |||
| 649 | static struct soc_camera_link mt9t112_link2 = { | ||
| 650 | .i2c_adapter_id = 1, | ||
| 651 | .power = mt9t112_power2, | ||
| 652 | .bus_id = 1, | ||
| 653 | .board_info = &i2c_camera[2], | ||
| 654 | .module_name = "mt9t112", | ||
| 655 | .priv = &mt9t112_info2, | ||
| 656 | }; | ||
| 602 | 657 | ||
| 603 | static struct platform_device camera_devices[] = { | 658 | static struct platform_device camera_devices[] = { |
| 604 | { | 659 | { |
| @@ -608,6 +663,20 @@ static struct platform_device camera_devices[] = { | |||
| 608 | .platform_data = &tw9910_link, | 663 | .platform_data = &tw9910_link, |
| 609 | }, | 664 | }, |
| 610 | }, | 665 | }, |
| 666 | { | ||
| 667 | .name = "soc-camera-pdrv", | ||
| 668 | .id = 1, | ||
| 669 | .dev = { | ||
| 670 | .platform_data = &mt9t112_link1, | ||
| 671 | }, | ||
| 672 | }, | ||
| 673 | { | ||
| 674 | .name = "soc-camera-pdrv", | ||
| 675 | .id = 2, | ||
| 676 | .dev = { | ||
| 677 | .platform_data = &mt9t112_link2, | ||
| 678 | }, | ||
| 679 | }, | ||
| 611 | }; | 680 | }; |
| 612 | 681 | ||
| 613 | static struct platform_device *ecovec_devices[] __initdata = { | 682 | static struct platform_device *ecovec_devices[] __initdata = { |
| @@ -627,6 +696,8 @@ static struct platform_device *ecovec_devices[] __initdata = { | |||
| 627 | &msiof0_device, | 696 | &msiof0_device, |
| 628 | #endif | 697 | #endif |
| 629 | &camera_devices[0], | 698 | &camera_devices[0], |
| 699 | &camera_devices[1], | ||
| 700 | &camera_devices[2], | ||
| 630 | }; | 701 | }; |
| 631 | 702 | ||
| 632 | #define EEPROM_ADDR 0x50 | 703 | #define EEPROM_ADDR 0x50 |
| @@ -943,6 +1014,12 @@ static int __init arch_setup(void) | |||
| 943 | gpio_request(GPIO_PTU2, NULL); | 1014 | gpio_request(GPIO_PTU2, NULL); |
| 944 | gpio_direction_output(GPIO_PTU2, 1); | 1015 | gpio_direction_output(GPIO_PTU2, 1); |
| 945 | 1016 | ||
| 1017 | /* enable Camera */ | ||
| 1018 | gpio_request(GPIO_PTA3, NULL); | ||
| 1019 | gpio_request(GPIO_PTA4, NULL); | ||
| 1020 | gpio_direction_output(GPIO_PTA3, 0); | ||
| 1021 | gpio_direction_output(GPIO_PTA4, 0); | ||
| 1022 | |||
| 946 | /* enable I2C device */ | 1023 | /* enable I2C device */ |
| 947 | i2c_register_board_info(1, i2c1_devices, | 1024 | i2c_register_board_info(1, i2c1_devices, |
| 948 | ARRAY_SIZE(i2c1_devices)); | 1025 | ARRAY_SIZE(i2c1_devices)); |
