diff options
Diffstat (limited to 'arch/arm/mach-exynos/mach-universal_c210.c')
-rw-r--r-- | arch/arm/mach-exynos/mach-universal_c210.c | 80 |
1 files changed, 75 insertions, 5 deletions
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 38939956c34..bdc7a220a81 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include <media/v4l2-mediabus.h> | 47 | #include <media/v4l2-mediabus.h> |
48 | #include <media/s5p_fimc.h> | 48 | #include <media/s5p_fimc.h> |
49 | #include <media/m5mols.h> | 49 | #include <media/m5mols.h> |
50 | #include <media/s5k6aa.h> | ||
50 | 51 | ||
51 | #include "common.h" | 52 | #include "common.h" |
52 | 53 | ||
@@ -123,8 +124,10 @@ static struct regulator_consumer_supply lp3974_buck1_consumer = | |||
123 | static struct regulator_consumer_supply lp3974_buck2_consumer = | 124 | static struct regulator_consumer_supply lp3974_buck2_consumer = |
124 | REGULATOR_SUPPLY("vddg3d", NULL); | 125 | REGULATOR_SUPPLY("vddg3d", NULL); |
125 | 126 | ||
126 | static struct regulator_consumer_supply lp3974_buck3_consumer = | 127 | static struct regulator_consumer_supply lp3974_buck3_consumer[] = { |
127 | REGULATOR_SUPPLY("vdet", "s5p-sdo"); | 128 | REGULATOR_SUPPLY("vdet", "s5p-sdo"), |
129 | REGULATOR_SUPPLY("vdd_reg", "0-003c"), | ||
130 | }; | ||
128 | 131 | ||
129 | static struct regulator_init_data lp3974_buck1_data = { | 132 | static struct regulator_init_data lp3974_buck1_data = { |
130 | .constraints = { | 133 | .constraints = { |
@@ -169,8 +172,8 @@ static struct regulator_init_data lp3974_buck3_data = { | |||
169 | .enabled = 1, | 172 | .enabled = 1, |
170 | }, | 173 | }, |
171 | }, | 174 | }, |
172 | .num_consumer_supplies = 1, | 175 | .num_consumer_supplies = ARRAY_SIZE(lp3974_buck3_consumer), |
173 | .consumer_supplies = &lp3974_buck3_consumer, | 176 | .consumer_supplies = lp3974_buck3_consumer, |
174 | }; | 177 | }; |
175 | 178 | ||
176 | static struct regulator_init_data lp3974_buck4_data = { | 179 | static struct regulator_init_data lp3974_buck4_data = { |
@@ -303,6 +306,9 @@ static struct regulator_init_data lp3974_ldo8_data = { | |||
303 | .consumer_supplies = lp3974_ldo8_consumer, | 306 | .consumer_supplies = lp3974_ldo8_consumer, |
304 | }; | 307 | }; |
305 | 308 | ||
309 | static struct regulator_consumer_supply lp3974_ldo9_consumer = | ||
310 | REGULATOR_SUPPLY("vddio", "0-003c"); | ||
311 | |||
306 | static struct regulator_init_data lp3974_ldo9_data = { | 312 | static struct regulator_init_data lp3974_ldo9_data = { |
307 | .constraints = { | 313 | .constraints = { |
308 | .name = "VCC_2.8V", | 314 | .name = "VCC_2.8V", |
@@ -314,6 +320,8 @@ static struct regulator_init_data lp3974_ldo9_data = { | |||
314 | .enabled = 1, | 320 | .enabled = 1, |
315 | }, | 321 | }, |
316 | }, | 322 | }, |
323 | .num_consumer_supplies = 1, | ||
324 | .consumer_supplies = &lp3974_ldo9_consumer, | ||
317 | }; | 325 | }; |
318 | 326 | ||
319 | static struct regulator_init_data lp3974_ldo10_data = { | 327 | static struct regulator_init_data lp3974_ldo10_data = { |
@@ -412,6 +420,7 @@ static struct regulator_init_data lp3974_ldo15_data = { | |||
412 | }; | 420 | }; |
413 | 421 | ||
414 | static struct regulator_consumer_supply lp3974_ldo16_consumer[] = { | 422 | static struct regulator_consumer_supply lp3974_ldo16_consumer[] = { |
423 | REGULATOR_SUPPLY("vdda", "0-003c"), | ||
415 | REGULATOR_SUPPLY("a_sensor", "0-001f"), | 424 | REGULATOR_SUPPLY("a_sensor", "0-001f"), |
416 | }; | 425 | }; |
417 | 426 | ||
@@ -819,6 +828,8 @@ static struct s3c_fb_pd_win universal_fb_win0 = { | |||
819 | }, | 828 | }, |
820 | .max_bpp = 32, | 829 | .max_bpp = 32, |
821 | .default_bpp = 16, | 830 | .default_bpp = 16, |
831 | .virtual_x = 480, | ||
832 | .virtual_y = 2 * 800, | ||
822 | }; | 833 | }; |
823 | 834 | ||
824 | static struct s3c_fb_platdata universal_lcd_pdata __initdata = { | 835 | static struct s3c_fb_platdata universal_lcd_pdata __initdata = { |
@@ -830,6 +841,28 @@ static struct s3c_fb_platdata universal_lcd_pdata __initdata = { | |||
830 | .setup_gpio = exynos4_fimd0_gpio_setup_24bpp, | 841 | .setup_gpio = exynos4_fimd0_gpio_setup_24bpp, |
831 | }; | 842 | }; |
832 | 843 | ||
844 | static struct regulator_consumer_supply cam_vt_dio_supply = | ||
845 | REGULATOR_SUPPLY("vdd_core", "0-003c"); | ||
846 | |||
847 | static struct regulator_init_data cam_vt_dio_reg_init_data = { | ||
848 | .constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS }, | ||
849 | .num_consumer_supplies = 1, | ||
850 | .consumer_supplies = &cam_vt_dio_supply, | ||
851 | }; | ||
852 | |||
853 | static struct fixed_voltage_config cam_vt_dio_fixed_voltage_cfg = { | ||
854 | .supply_name = "CAM_VT_D_IO", | ||
855 | .microvolts = 2800000, | ||
856 | .gpio = EXYNOS4_GPE2(1), /* CAM_PWR_EN2 */ | ||
857 | .enable_high = 1, | ||
858 | .init_data = &cam_vt_dio_reg_init_data, | ||
859 | }; | ||
860 | |||
861 | static struct platform_device cam_vt_dio_fixed_reg_dev = { | ||
862 | .name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_VT_DIO, | ||
863 | .dev = { .platform_data = &cam_vt_dio_fixed_voltage_cfg }, | ||
864 | }; | ||
865 | |||
833 | static struct regulator_consumer_supply cam_i_core_supply = | 866 | static struct regulator_consumer_supply cam_i_core_supply = |
834 | REGULATOR_SUPPLY("core", "0-001f"); | 867 | REGULATOR_SUPPLY("core", "0-001f"); |
835 | 868 | ||
@@ -885,6 +918,28 @@ static struct s5p_platform_mipi_csis mipi_csis_platdata = { | |||
885 | #define GPIO_CAM_LEVEL_EN(n) EXYNOS4_GPE4(n + 3) | 918 | #define GPIO_CAM_LEVEL_EN(n) EXYNOS4_GPE4(n + 3) |
886 | #define GPIO_CAM_8M_ISP_INT EXYNOS4_GPX1(5) /* XEINT_13 */ | 919 | #define GPIO_CAM_8M_ISP_INT EXYNOS4_GPX1(5) /* XEINT_13 */ |
887 | #define GPIO_CAM_MEGA_nRST EXYNOS4_GPE2(5) | 920 | #define GPIO_CAM_MEGA_nRST EXYNOS4_GPE2(5) |
921 | #define GPIO_CAM_VGA_NRST EXYNOS4_GPE4(7) | ||
922 | #define GPIO_CAM_VGA_NSTBY EXYNOS4_GPE4(6) | ||
923 | |||
924 | static int s5k6aa_set_power(int on) | ||
925 | { | ||
926 | gpio_set_value(GPIO_CAM_LEVEL_EN(2), !!on); | ||
927 | return 0; | ||
928 | } | ||
929 | |||
930 | static struct s5k6aa_platform_data s5k6aa_platdata = { | ||
931 | .mclk_frequency = 21600000UL, | ||
932 | .gpio_reset = { GPIO_CAM_VGA_NRST, 0 }, | ||
933 | .gpio_stby = { GPIO_CAM_VGA_NSTBY, 0 }, | ||
934 | .bus_type = V4L2_MBUS_PARALLEL, | ||
935 | .horiz_flip = 1, | ||
936 | .set_power = s5k6aa_set_power, | ||
937 | }; | ||
938 | |||
939 | static struct i2c_board_info s5k6aa_board_info = { | ||
940 | I2C_BOARD_INFO("S5K6AA", 0x3C), | ||
941 | .platform_data = &s5k6aa_platdata, | ||
942 | }; | ||
888 | 943 | ||
889 | static int m5mols_set_power(struct device *dev, int on) | 944 | static int m5mols_set_power(struct device *dev, int on) |
890 | { | 945 | { |
@@ -909,6 +964,14 @@ static struct s5p_fimc_isp_info universal_camera_sensors[] = { | |||
909 | .mux_id = 0, | 964 | .mux_id = 0, |
910 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | | 965 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | |
911 | V4L2_MBUS_VSYNC_ACTIVE_LOW, | 966 | V4L2_MBUS_VSYNC_ACTIVE_LOW, |
967 | .bus_type = FIMC_ITU_601, | ||
968 | .board_info = &s5k6aa_board_info, | ||
969 | .i2c_bus_num = 0, | ||
970 | .clk_frequency = 24000000UL, | ||
971 | }, { | ||
972 | .mux_id = 0, | ||
973 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | | ||
974 | V4L2_MBUS_VSYNC_ACTIVE_LOW, | ||
912 | .bus_type = FIMC_MIPI_CSI2, | 975 | .bus_type = FIMC_MIPI_CSI2, |
913 | .board_info = &m5mols_board_info, | 976 | .board_info = &m5mols_board_info, |
914 | .i2c_bus_num = 0, | 977 | .i2c_bus_num = 0, |
@@ -927,9 +990,11 @@ static struct gpio universal_camera_gpios[] = { | |||
927 | { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW, "CAM_LVL_EN2" }, | 990 | { GPIO_CAM_LEVEL_EN(2), GPIOF_OUT_INIT_LOW, "CAM_LVL_EN2" }, |
928 | { GPIO_CAM_8M_ISP_INT, GPIOF_IN, "8M_ISP_INT" }, | 991 | { GPIO_CAM_8M_ISP_INT, GPIOF_IN, "8M_ISP_INT" }, |
929 | { GPIO_CAM_MEGA_nRST, GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" }, | 992 | { GPIO_CAM_MEGA_nRST, GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" }, |
993 | { GPIO_CAM_VGA_NRST, GPIOF_OUT_INIT_LOW, "CAM_VGA_NRST" }, | ||
994 | { GPIO_CAM_VGA_NSTBY, GPIOF_OUT_INIT_LOW, "CAM_VGA_NSTBY" }, | ||
930 | }; | 995 | }; |
931 | 996 | ||
932 | static void universal_camera_init(void) | 997 | static void __init universal_camera_init(void) |
933 | { | 998 | { |
934 | s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata), | 999 | s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata), |
935 | &s5p_device_mipi_csis0); | 1000 | &s5p_device_mipi_csis0); |
@@ -950,6 +1015,8 @@ static void universal_camera_init(void) | |||
950 | /* Free GPIOs controlled directly by the sensor drivers. */ | 1015 | /* Free GPIOs controlled directly by the sensor drivers. */ |
951 | gpio_free(GPIO_CAM_MEGA_nRST); | 1016 | gpio_free(GPIO_CAM_MEGA_nRST); |
952 | gpio_free(GPIO_CAM_8M_ISP_INT); | 1017 | gpio_free(GPIO_CAM_8M_ISP_INT); |
1018 | gpio_free(GPIO_CAM_VGA_NRST); | ||
1019 | gpio_free(GPIO_CAM_VGA_NSTBY); | ||
953 | 1020 | ||
954 | if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) | 1021 | if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) |
955 | pr_err("Camera port A setup failed\n"); | 1022 | pr_err("Camera port A setup failed\n"); |
@@ -962,6 +1029,7 @@ static struct platform_device *universal_devices[] __initdata = { | |||
962 | &s5p_device_fimc1, | 1029 | &s5p_device_fimc1, |
963 | &s5p_device_fimc2, | 1030 | &s5p_device_fimc2, |
964 | &s5p_device_fimc3, | 1031 | &s5p_device_fimc3, |
1032 | &s5p_device_g2d, | ||
965 | &mmc0_fixed_voltage, | 1033 | &mmc0_fixed_voltage, |
966 | &s3c_device_hsmmc0, | 1034 | &s3c_device_hsmmc0, |
967 | &s3c_device_hsmmc2, | 1035 | &s3c_device_hsmmc2, |
@@ -981,12 +1049,14 @@ static struct platform_device *universal_devices[] __initdata = { | |||
981 | &universal_gpio_keys, | 1049 | &universal_gpio_keys, |
982 | &s5p_device_onenand, | 1050 | &s5p_device_onenand, |
983 | &s5p_device_fimd0, | 1051 | &s5p_device_fimd0, |
1052 | &s5p_device_jpeg, | ||
984 | &s5p_device_mfc, | 1053 | &s5p_device_mfc, |
985 | &s5p_device_mfc_l, | 1054 | &s5p_device_mfc_l, |
986 | &s5p_device_mfc_r, | 1055 | &s5p_device_mfc_r, |
987 | &exynos4_device_pd[PD_MFC], | 1056 | &exynos4_device_pd[PD_MFC], |
988 | &exynos4_device_pd[PD_LCD0], | 1057 | &exynos4_device_pd[PD_LCD0], |
989 | &exynos4_device_pd[PD_CAM], | 1058 | &exynos4_device_pd[PD_CAM], |
1059 | &cam_vt_dio_fixed_reg_dev, | ||
990 | &cam_i_core_fixed_reg_dev, | 1060 | &cam_i_core_fixed_reg_dev, |
991 | &cam_s_if_fixed_reg_dev, | 1061 | &cam_s_if_fixed_reg_dev, |
992 | &s5p_device_fimc_md, | 1062 | &s5p_device_fimc_md, |