1 /* linux/arch/arm/mach-s5pv310/mach-smdkc210.c
3 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com/
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/platform_device.h>
12 #include <linux/serial_core.h>
13 #include <linux/i2c.h>
14 #include <linux/gpio.h>
15 #include <linux/mmc/host.h>
16 #include <linux/smsc911x.h>
18 #include <linux/regulator/machine.h>
19 #include <linux/regulator/max8649.h>
20 #include <linux/clk.h>
22 #include <asm/mach/arch.h>
23 #include <asm/mach-types.h>
25 #include <plat/regs-serial.h>
26 #include <plat/s5pv310.h>
27 #include <plat/clock.h>
30 #include <plat/devs.h>
33 #include <plat/fimg2d.h>
34 #include <plat/sdhci.h>
35 #include <plat/mshci.h>
37 #include <plat/tvout.h>
39 #include <plat/csis.h>
40 #include <plat/fimc.h>
41 #include <plat/gpio-cfg.h>
44 #include <media/s5k3ba_platform.h>
45 #include <media/s5k4ba_platform.h>
46 #include <media/s5k4ea_platform.h>
47 #include <media/s5k6aa_platform.h>
49 #include <mach/regs-gpio.h>
52 #include <mach/regs-mem.h>
53 #include <mach/media.h>
55 /* Following are default values for UCON, ULCON and UFCON UART registers */
56 #define SMDKC210_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
57 S3C2410_UCON_RXILEVEL | \
58 S3C2410_UCON_TXIRQMODE | \
59 S3C2410_UCON_RXIRQMODE | \
60 S3C2410_UCON_RXFIFO_TOI | \
61 S3C2443_UCON_RXERR_IRQEN)
63 #define SMDKC210_ULCON_DEFAULT S3C2410_LCON_CS8
65 #define SMDKC210_UFCON_DEFAULT (S3C2410_UFCON_FIFOMODE | \
66 S5PV210_UFCON_TXTRIG4 | \
67 S5PV210_UFCON_RXTRIG4)
69 static struct s3c2410_uartcfg smdkc210_uartcfgs[] __initdata = {
73 .ucon = SMDKC210_UCON_DEFAULT,
74 .ulcon = SMDKC210_ULCON_DEFAULT,
75 .ufcon = SMDKC210_UFCON_DEFAULT,
80 .ucon = SMDKC210_UCON_DEFAULT,
81 .ulcon = SMDKC210_ULCON_DEFAULT,
82 .ufcon = SMDKC210_UFCON_DEFAULT,
87 .ucon = SMDKC210_UCON_DEFAULT,
88 .ulcon = SMDKC210_ULCON_DEFAULT,
89 .ufcon = SMDKC210_UFCON_DEFAULT,
94 .ucon = SMDKC210_UCON_DEFAULT,
95 .ulcon = SMDKC210_ULCON_DEFAULT,
96 .ufcon = SMDKC210_UFCON_DEFAULT,
101 .ucon = SMDKC210_UCON_DEFAULT,
102 .ulcon = SMDKC210_ULCON_DEFAULT,
103 .ufcon = SMDKC210_UFCON_DEFAULT,
107 #undef WRITEBACK_ENABLED
108 //#define WRITEBACK_ENABLED
110 #ifdef CONFIG_VIDEO_FIMC
112 * External camera reset
113 * Because the most of cameras take i2c bus signal, so that
114 * you have to reset at the boot time for other i2c slave devices.
115 * This function also called at fimc_init_camera()
116 * Do optimization for cameras on your platform.
119 static int smdkv310_cam0_reset(int dummy)
123 err = gpio_request(S5PV310_GPX1(2), "GPX1");
125 printk(KERN_ERR "#### failed to request GPX1_2 ####\n");
127 s3c_gpio_setpull(S5PV310_GPX1(2), S3C_GPIO_PULL_NONE);
128 gpio_direction_output(S5PV310_GPX1(2), 0);
129 gpio_direction_output(S5PV310_GPX1(2), 1);
130 gpio_free(S5PV310_GPX1(2));
136 static int smdkv310_cam1_reset(int dummy)
141 err = gpio_request(S5PV310_GPX1(0), "GPX1");
143 printk(KERN_ERR "#### failed to request GPX1_0 ####\n");
145 s3c_gpio_setpull(S5PV310_GPX1(0), S3C_GPIO_PULL_NONE);
146 gpio_direction_output(S5PV310_GPX1(0), 0);
147 gpio_direction_output(S5PV310_GPX1(0), 1);
148 gpio_free(S5PV310_GPX1(0));
155 static int smdkv310_cam0_standby(void)
159 err = gpio_request(S5PV310_GPX3(3), "GPX3");
161 printk(KERN_ERR "#### failed to request GPX3_3 ####\n");
162 s3c_gpio_setpull(S5PV310_GPX3(3), S3C_GPIO_PULL_NONE);
163 gpio_direction_output(S5PV310_GPX3(3), 0);
164 gpio_direction_output(S5PV310_GPX3(3), 1);
165 gpio_free(S5PV310_GPX3(3));
170 static int smdkv310_cam1_standby(void)
175 err = gpio_request(S5PV310_GPX1(1), "GPX1");
177 printk(KERN_ERR "#### failed to request GPX1_1 ####\n");
178 s3c_gpio_setpull(S5PV310_GPX1(1), S3C_GPIO_PULL_NONE);
179 gpio_direction_output(S5PV310_GPX1(1), 0);
180 gpio_direction_output(S5PV310_GPX1(1), 1);
181 gpio_free(S5PV310_GPX1(1));
187 /* Set for MIPI-CSI Camera module Reset */
189 static int smdkv310_mipi_cam0_reset(int dummy)
193 err = gpio_request(S5PV310_GPX1(2), "GPX1");
195 printk(KERN_ERR "#### failed to reset(GPX1_2) MIPI CAM\n");
197 s3c_gpio_setpull(S5PV310_GPX1(2), S3C_GPIO_PULL_NONE);
198 gpio_direction_output(S5PV310_GPX1(2), 0);
199 gpio_direction_output(S5PV310_GPX1(2), 1);
200 gpio_free(S5PV310_GPX1(2));
206 static int smdkv310_mipi_cam1_reset(int dummy)
210 err = gpio_request(S5PV310_GPX1(0), "GPX1");
212 printk(KERN_ERR "#### failed to reset(GPX1_0) MIPI CAM\n");
214 s3c_gpio_setpull(S5PV310_GPX1(0), S3C_GPIO_PULL_NONE);
215 gpio_direction_output(S5PV310_GPX1(0), 0);
216 gpio_direction_output(S5PV310_GPX1(0), 1);
217 gpio_free(S5PV310_GPX1(0));
223 #ifdef CONFIG_VIDEO_S5K3BA
224 static struct s5k3ba_platform_data s5k3ba_plat = {
225 .default_width = 640,
226 .default_height = 480,
227 .pixelformat = V4L2_PIX_FMT_VYUY,
232 static struct i2c_board_info s5k3ba_i2c_info = {
233 I2C_BOARD_INFO("S5K3BA", 0x2d),
234 .platform_data = &s5k3ba_plat,
237 static struct s3c_platform_camera s5k3ba = {
240 .clk_name = "sclk_cam0",
242 .cam_power = smdkv310_cam0_reset,
246 .clk_name = "sclk_cam1",
248 .cam_power = smdkv310_cam1_reset,
250 .type = CAM_TYPE_ITU,
251 .fmt = ITU_601_YCBCR422_8BIT,
252 .order422 = CAM_ORDER422_8BIT_CRYCBY,
253 .info = &s5k3ba_i2c_info,
254 .pixelformat = V4L2_PIX_FMT_VYUY,
255 .srclk_name = "xusbxti",
256 .clk_rate = 24000000,
277 #ifdef CONFIG_VIDEO_S5K4BA
278 static struct s5k4ba_platform_data s5k4ba_plat = {
279 .default_width = 800,
280 .default_height = 600,
281 .pixelformat = V4L2_PIX_FMT_UYVY,
286 static struct i2c_board_info s5k4ba_i2c_info = {
287 I2C_BOARD_INFO("S5K4BA", 0x2d),
288 .platform_data = &s5k4ba_plat,
291 static struct s3c_platform_camera s5k4ba = {
294 .clk_name = "sclk_cam0",
296 .cam_power = smdkv310_cam0_reset,
300 .clk_name = "sclk_cam1",
302 .cam_power = smdkv310_cam1_reset,
304 .type = CAM_TYPE_ITU,
305 .fmt = ITU_601_YCBCR422_8BIT,
306 .order422 = CAM_ORDER422_8BIT_CBYCRY,
307 .info = &s5k4ba_i2c_info,
308 .pixelformat = V4L2_PIX_FMT_UYVY,
309 .srclk_name = "xusbxti",
310 .clk_rate = 24000000,
332 #ifdef CONFIG_VIDEO_S5K4EA
333 static struct s5k4ea_platform_data s5k4ea_plat = {
334 .default_width = 1920,
335 .default_height = 1080,
336 .pixelformat = V4L2_PIX_FMT_UYVY,
341 static struct i2c_board_info s5k4ea_i2c_info = {
342 I2C_BOARD_INFO("S5K4EA", 0x2d),
343 .platform_data = &s5k4ea_plat,
346 static struct s3c_platform_camera s5k4ea = {
349 .clk_name = "sclk_cam0",
351 .cam_power = smdkv310_mipi_cam0_reset,
355 .clk_name = "sclk_cam1",
357 .cam_power = smdkv310_mipi_cam1_reset,
359 .type = CAM_TYPE_MIPI,
360 .fmt = MIPI_CSI_YCBCR422_8BIT,
361 .order422 = CAM_ORDER422_8BIT_CBYCRY,
362 .info = &s5k4ea_i2c_info,
363 .pixelformat = V4L2_PIX_FMT_UYVY,
364 .srclk_name = "mout_mpll",
365 .clk_rate = 48000000,
390 #ifdef CONFIG_VIDEO_S5K6AA
391 static struct s5k6aa_platform_data s5k6aa_plat = {
392 .default_width = 640,
393 .default_height = 480,
394 .pixelformat = V4L2_PIX_FMT_UYVY,
399 static struct i2c_board_info s5k6aa_i2c_info = {
400 I2C_BOARD_INFO("S5K6AA", 0x3c),
401 .platform_data = &s5k6aa_plat,
404 static struct s3c_platform_camera s5k6aa = {
407 .clk_name = "sclk_cam0",
409 .cam_power = smdkv310_mipi_cam0_reset,
413 .clk_name = "sclk_cam1",
415 .cam_power = smdkv310_mipi_cam1_reset,
417 .type = CAM_TYPE_MIPI,
418 .fmt = MIPI_CSI_YCBCR422_8BIT,
419 .order422 = CAM_ORDER422_8BIT_CBYCRY,
420 .info = &s5k6aa_i2c_info,
421 .pixelformat = V4L2_PIX_FMT_UYVY,
422 .srclk_name = "xusbxti",
423 .clk_rate = 24000000,
425 /* default resol for preview kind of thing */
449 #ifdef WRITEBACK_ENABLED
450 static struct i2c_board_info writeback_i2c_info = {
451 I2C_BOARD_INFO("WriteBack", 0x0),
454 static struct s3c_platform_camera writeback = {
456 .fmt = ITU_601_YCBCR422_8BIT,
457 .order422 = CAM_ORDER422_8BIT_CBYCRY,
459 .info = &writeback_i2c_info,
460 .pixelformat = V4L2_PIX_FMT_YUV444,
475 /* Interface setting */
476 static struct s3c_platform_fimc fimc_plat = {
478 .default_cam = CAMERA_PAR_A,
481 .default_cam = CAMERA_PAR_B,
484 .default_cam = CAMERA_CSI_C,
487 .default_cam = CAMERA_CSI_D,
489 #ifdef WRITEBACK_ENABLED
490 .default_cam = CAMERA_WB,
493 #ifdef CONFIG_VIDEO_S5K3BA
496 #ifdef CONFIG_VIDEO_S5K4BA
499 #ifdef CONFIG_VIDEO_S5K4EA
502 #ifdef CONFIG_VIDEO_S5K6AA
505 #ifdef WRITEBACK_ENABLED
509 #ifdef CONFIG_CPU_S5PV310_EVT1
516 static struct resource smdkc210_smsc911x_resources[] = {
518 .start = S5PV310_PA_SROM1,
519 .end = S5PV310_PA_SROM1 + SZ_64K - 1,
520 .flags = IORESOURCE_MEM,
523 .start = IRQ_EINT(5),
525 .flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
529 static struct smsc911x_platform_config smsc9215 = {
530 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_HIGH,
531 .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
532 .flags = SMSC911X_USE_16BIT | SMSC911X_FORCE_INTERNAL_PHY,
533 .phy_interface = PHY_INTERFACE_MODE_MII,
534 .mac = {0x00, 0x80, 0x00, 0x23, 0x45, 0x67},
537 static struct platform_device smdkc210_smsc911x = {
540 .num_resources = ARRAY_SIZE(smdkc210_smsc911x_resources),
541 .resource = &smdkc210_smsc911x_resources,
543 .platform_data = &smsc9215,
547 static struct regulator_consumer_supply max8952_supply[] = {
548 REGULATOR_SUPPLY("vdd_arm", NULL),
551 static struct regulator_consumer_supply max8649_supply[] = {
552 REGULATOR_SUPPLY("vdd_int", NULL),
555 static struct regulator_consumer_supply max8649a_supply[] = {
556 REGULATOR_SUPPLY("vdd_g3d", NULL),
559 static struct regulator_init_data max8952_init_data = {
561 .name = "vdd_arm range",
566 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
568 .num_consumer_supplies = 1,
569 .consumer_supplies = &max8952_supply[0],
572 static struct regulator_init_data max8649_init_data = {
574 .name = "vdd_int range",
579 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
581 .num_consumer_supplies = 1,
582 .consumer_supplies = &max8649_supply[0],
584 static struct regulator_init_data max8649a_init_data = {
586 .name = "vdd_g3d range",
591 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
593 .num_consumer_supplies = 1,
594 .consumer_supplies = &max8649a_supply[0],
597 static struct max8649_platform_data s5pv310_max8952_info = {
598 .mode = 3, /* VID1 = 1, VID0 = 1 */
600 .ramp_timing = MAX8649_RAMP_32MV,
601 .regulator = &max8952_init_data,
604 static struct max8649_platform_data s5pv310_max8649_info = {
605 .mode = 2, /* VID1 = 1, VID0 = 0 */
607 .ramp_timing = MAX8649_RAMP_32MV,
608 .regulator = &max8649_init_data,
610 static struct max8649_platform_data s5pv310_max8649a_info = {
611 .mode = 2, /* VID1 = 1, VID0 = 0 */
613 .ramp_timing = MAX8649_RAMP_32MV,
614 .regulator = &max8649a_init_data,
617 #ifdef CONFIG_I2C_S3C2410
619 static struct i2c_board_info i2c_devs0[] __initdata = {
621 I2C_BOARD_INFO("24c128", 0x50), /* Samsung S524AD0XD1 */
623 I2C_BOARD_INFO("24c128", 0x52), /* Samsung S524AD0XD1 */
625 I2C_BOARD_INFO("max8952", 0x60),
626 .platform_data = &s5pv310_max8952_info,
628 I2C_BOARD_INFO("max8649", 0x62),
629 .platform_data = &s5pv310_max8649a_info,
632 #ifdef CONFIG_S3C_DEV_I2C1
634 static struct i2c_board_info i2c_devs1[] __initdata = {
636 I2C_BOARD_INFO("max8649", 0x60),
637 .platform_data = &s5pv310_max8649_info,
641 #ifdef CONFIG_S3C_DEV_I2C2
643 static struct i2c_board_info i2c_devs2[] __initdata = {
646 #ifdef CONFIG_S3C_DEV_I2C3
648 static struct i2c_board_info i2c_devs3[] __initdata = {
651 #ifdef CONFIG_S3C_DEV_I2C4
653 static struct i2c_board_info i2c_devs4[] __initdata = {
656 #ifdef CONFIG_S3C_DEV_I2C5
658 static struct i2c_board_info i2c_devs5[] __initdata = {
661 #ifdef CONFIG_S3C_DEV_I2C6
663 static struct i2c_board_info i2c_devs6[] __initdata = {
666 #ifdef CONFIG_S3C_DEV_I2C7
668 static struct i2c_board_info i2c_devs7[] __initdata = {
673 #ifdef CONFIG_S3C_DEV_HSMMC
674 static struct s3c_sdhci_platdata smdkc210_hsmmc0_pdata __initdata = {
675 .cd_type = S3C_SDHCI_CD_GPIO,
676 .ext_cd_gpio = S5PV310_GPK0(2),
677 .ext_cd_gpio_invert = 1,
678 #if defined(CONFIG_S5PV310_SD_CH0_8BIT)
680 .host_caps = MMC_CAP_8_BIT_DATA,
684 #ifdef CONFIG_S3C_DEV_HSMMC1
685 static struct s3c_sdhci_platdata smdkc210_hsmmc1_pdata __initdata = {
686 .cd_type = S3C_SDHCI_CD_GPIO,
687 .ext_cd_gpio = S5PV310_GPK0(2),
688 .ext_cd_gpio_invert = 1,
691 #ifdef CONFIG_S3C_DEV_HSMMC2
692 static struct s3c_sdhci_platdata smdkc210_hsmmc2_pdata __initdata = {
693 .cd_type = S3C_SDHCI_CD_GPIO,
694 .ext_cd_gpio = S5PV310_GPK2(2),
695 .ext_cd_gpio_invert = 1,
696 #if defined(CONFIG_S5PV310_SD_CH2_8BIT)
698 .host_caps = MMC_CAP_8_BIT_DATA,
702 #ifdef CONFIG_S3C_DEV_HSMMC3
703 static struct s3c_sdhci_platdata smdkc210_hsmmc3_pdata __initdata = {
704 .cd_type = S3C_SDHCI_CD_GPIO,
705 .ext_cd_gpio = S5PV310_GPK2(2),
706 .ext_cd_gpio_invert = 1,
709 #ifdef CONFIG_S5P_DEV_MSHC
710 static struct s3c_mshci_platdata smdkc210_mshc_pdata __initdata = {
711 .cd_type = S3C_MSHCI_CD_INTERNAL,
713 .wp_gpio = 0xffffffff,
714 #if defined(CONFIG_S5PV310_MSHC_CH0_8BIT)
716 .host_caps = MMC_CAP_8_BIT_DATA,
721 #ifdef CONFIG_VIDEO_FIMG2D
722 static struct fimg2d_platdata fimg2d_data __initdata = {
724 .parent_clkname = "mout_mpll",
725 .clkname = "sclk_fimg2d",
726 .gate_clkname = "fimg2d",
727 .clkrate = 250 * 1000000,
731 static struct platform_device *smdkc210_devices[] __initdata = {
732 #ifdef CONFIG_S5PV310_DEV_PD
733 &s5pv310_device_pd[PD_MFC],
734 &s5pv310_device_pd[PD_G3D],
735 &s5pv310_device_pd[PD_LCD0],
736 &s5pv310_device_pd[PD_LCD1],
737 &s5pv310_device_pd[PD_CAM],
738 &s5pv310_device_pd[PD_TV],
739 &s5pv310_device_pd[PD_GPS],
743 #ifdef CONFIG_I2C_S3C2410
745 #if defined(CONFIG_S3C_DEV_I2C1)
748 #if defined(CONFIG_S3C_DEV_I2C2)
751 #if defined(CONFIG_S3C_DEV_I2C3)
754 #if defined(CONFIG_S3C_DEV_I2C4)
757 #if defined(CONFIG_S3C_DEV_I2C5)
760 #if defined(CONFIG_S3C_DEV_I2C6)
763 #if defined(CONFIG_S3C_DEV_I2C7)
767 #if defined(CONFIG_SND_SOC_SMDK_WM9713)
768 &s5pv310_device_ac97,
770 #ifdef CONFIG_SND_SAMSUNG_SOC_SPDIF
771 &s5pv310_device_spdif,
773 #ifdef CONFIG_S3C_DEV_HSMMC
776 #ifdef CONFIG_S3C_DEV_HSMMC1
779 #ifdef CONFIG_S3C_DEV_HSMMC2
782 #ifdef CONFIG_S3C_DEV_HSMMC3
785 #ifdef CONFIG_S5P_DEV_MSHC
788 #ifdef CONFIG_TOUCHSCREEN_S3C2410
789 #ifdef CONFIG_S3C_DEV_ADC
792 #ifdef CONFIG_S3C_DEV_ADC1
797 #ifdef CONFIG_S3C_ADC
801 #ifdef CONFIG_VIDEO_TVOUT
807 #ifdef CONFIG_S3C2410_WATCHDOG
811 &s3c_device_usb_ehci,
812 &s3c_device_usb_ohci,
814 #ifdef CONFIG_USB_GADGET
815 &s3c_device_usbgadget,
817 #ifdef CONFIG_S3C_DEV_RTC
820 #ifdef CONFIG_S3C_DEV_GIB
824 #ifdef CONFIG_VIDEO_MFC5X
828 #ifdef CONFIG_VIDEO_JPEG
832 #ifdef CONFIG_VIDEO_FIMG2D
836 #ifdef CONFIG_S5P_SYSMMU
840 #ifdef CONFIG_VIDEO_FIMC
845 #ifdef CONFIG_VIDEO_FIMC_MIPI
852 #if defined(CONFIG_VIDEO_TVOUT)
853 static struct s5p_platform_hpd hdmi_hpd_data __initdata = {
856 static struct s5p_platform_cec hdmi_cec_data __initdata = {
861 static void __init smdkc210_map_io(void)
863 s5p_init_io(NULL, 0, S5P_VA_CHIPID);
864 s3c24xx_init_clocks(24000000);
865 s3c24xx_init_uarts(smdkc210_uartcfgs, ARRAY_SIZE(smdkc210_uartcfgs));
867 clk_xusbxti.rate = 24000000;
870 static void __init sromc_setup(void)
874 tmp = __raw_readl(S5P_SROM_BW);
877 __raw_writel(tmp, S5P_SROM_BW);
879 __raw_writel(0xff1ffff1, S5P_SROM_BC1);
881 tmp = __raw_readl(S5P_VA_GPIO + 0x120);
884 __raw_writel(tmp, (S5P_VA_GPIO + 0x120));
886 __raw_writel(0x22222222, (S5P_VA_GPIO + 0x180));
887 __raw_writel(0x22222222, (S5P_VA_GPIO + 0x1a0));
888 __raw_writel(0x22222222, (S5P_VA_GPIO + 0x1c0));
889 __raw_writel(0x22222222, (S5P_VA_GPIO + 0x1e0));
892 #ifdef CONFIG_TOUCHSCREEN_S3C2410
893 static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
896 .oversampling_shift = 2,
900 static void __init smdkc210_machine_init(void)
904 #if defined(CONFIG_S5PV310_DEV_PD) && !defined(CONFIG_PM_RUNTIME)
906 * These power domains should be always on
907 * without runtime pm support.
909 s5pv310_pd_enable(&s5pv310_device_pd[PD_MFC].dev);
910 s5pv310_pd_enable(&s5pv310_device_pd[PD_G3D].dev);
911 s5pv310_pd_enable(&s5pv310_device_pd[PD_LCD0].dev);
912 s5pv310_pd_enable(&s5pv310_device_pd[PD_LCD1].dev);
913 s5pv310_pd_enable(&s5pv310_device_pd[PD_CAM].dev);
914 s5pv310_pd_enable(&s5pv310_device_pd[PD_TV].dev);
915 s5pv310_pd_enable(&s5pv310_device_pd[PD_GPS].dev);
918 smdkc210_smsc911x_init();
919 #ifdef CONFIG_I2C_S3C2410
920 s3c_i2c0_set_platdata(NULL);
921 i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
922 #ifdef CONFIG_S3C_DEV_I2C1
923 s3c_i2c1_set_platdata(NULL);
924 i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
926 #ifdef CONFIG_S3C_DEV_I2C2
927 s3c_i2c2_set_platdata(NULL);
928 i2c_register_board_info(2, i2c_devs2, ARRAY_SIZE(i2c_devs2));
930 #ifdef CONFIG_S3C_DEV_I2C3
931 s3c_i2c3_set_platdata(NULL);
932 i2c_register_board_info(3, i2c_devs3, ARRAY_SIZE(i2c_devs3));
934 #ifdef CONFIG_S3C_DEV_I2C4
935 s3c_i2c4_set_platdata(NULL);
936 i2c_register_board_info(4, i2c_devs4, ARRAY_SIZE(i2c_devs4));
938 #ifdef CONFIG_S3C_DEV_I2C5
939 s3c_i2c5_set_platdata(NULL);
940 i2c_register_board_info(5, i2c_devs5, ARRAY_SIZE(i2c_devs5));
942 #ifdef CONFIG_S3C_DEV_I2C6
943 s3c_i2c6_set_platdata(NULL);
944 i2c_register_board_info(6, i2c_devs6, ARRAY_SIZE(i2c_devs6));
946 #ifdef CONFIG_S3C_DEV_I2C7
947 s3c_i2c7_set_platdata(NULL);
948 i2c_register_board_info(7, i2c_devs7, ARRAY_SIZE(i2c_devs7));
952 #ifdef CONFIG_VIDEO_FIMG2D
953 s5p_fimg2d_set_platdata(&fimg2d_data);
956 #ifdef CONFIG_S3C_DEV_HSMMC
957 s3c_sdhci0_set_platdata(&smdkc210_hsmmc0_pdata);
959 #ifdef CONFIG_S3C_DEV_HSMMC1
960 s3c_sdhci1_set_platdata(&smdkc210_hsmmc1_pdata);
962 #ifdef CONFIG_S3C_DEV_HSMMC2
963 s3c_sdhci2_set_platdata(&smdkc210_hsmmc2_pdata);
965 #ifdef CONFIG_S3C_DEV_HSMMC3
966 s3c_sdhci3_set_platdata(&smdkc210_hsmmc3_pdata);
968 #ifdef CONFIG_S5P_DEV_MSHC
969 s3c_mshci_set_platdata(&smdkc210_mshc_pdata);
972 #ifdef CONFIG_TOUCHSCREEN_S3C2410
973 #ifdef CONFIG_S3C_DEV_ADC
974 s3c24xx_ts_set_platdata(&s3c_ts_platform);
976 #ifdef CONFIG_S3C_DEV_ADC1
977 s3c24xx_ts1_set_platdata(&s3c_ts_platform);
981 #ifdef CONFIG_VIDEO_FIMC
983 s3c_fimc0_set_platdata(&fimc_plat);
984 s3c_fimc1_set_platdata(&fimc_plat);
985 s3c_fimc2_set_platdata(&fimc_plat);
986 s3c_fimc3_set_platdata(&fimc_plat);
987 #ifdef CONFIG_VIDEO_FIMC_MIPI
988 s3c_csis0_set_platdata(NULL);
989 s3c_csis1_set_platdata(NULL);
993 #if defined(CONFIG_VIDEO_TVOUT)
994 s5p_hdmi_hpd_set_platdata(&hdmi_hpd_data);
995 s5p_hdmi_cec_set_platdata(&hdmi_cec_data);
998 #ifdef CONFIG_S5PV310_DEV_PD
1000 s3c_device_fb.dev.parent = &s5pv310_device_pd[PD_LCD0].dev;
1004 #ifdef CONFIG_S5PV310_DEV_PD
1005 #ifdef CONFIG_VIDEO_FIMC
1006 s3c_device_fimc0.dev.parent = &s5pv310_device_pd[PD_CAM].dev;
1007 s3c_device_fimc1.dev.parent = &s5pv310_device_pd[PD_CAM].dev;
1008 s3c_device_fimc2.dev.parent = &s5pv310_device_pd[PD_CAM].dev;
1009 s3c_device_fimc3.dev.parent = &s5pv310_device_pd[PD_CAM].dev;
1013 platform_add_devices(smdkc210_devices, ARRAY_SIZE(smdkc210_devices));
1016 MACHINE_START(SMDKC210, "SMDKC210")
1017 /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
1018 .phys_io = S3C_PA_UART & 0xfff00000,
1019 .io_pg_offst = (((u32)S3C_VA_UART) >> 18) & 0xfffc,
1020 .boot_params = S5P_PA_SDRAM + 0x100,
1021 .init_irq = s5pv310_init_irq,
1022 .map_io = smdkc210_map_io,
1023 .init_machine = smdkc210_machine_init,
1024 .timer = &s5pv310_timer,