diff options
Diffstat (limited to 'arch/arm/mach-s5pv210/mach-goni.c')
-rw-r--r-- | arch/arm/mach-s5pv210/mach-goni.c | 381 |
1 files changed, 375 insertions, 6 deletions
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index d9ecf57fc2a5..b1dcf964a768 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c | |||
@@ -15,7 +15,13 @@ | |||
15 | #include <linux/fb.h> | 15 | #include <linux/fb.h> |
16 | #include <linux/i2c.h> | 16 | #include <linux/i2c.h> |
17 | #include <linux/i2c-gpio.h> | 17 | #include <linux/i2c-gpio.h> |
18 | #include <linux/i2c/qt602240_ts.h> | ||
18 | #include <linux/mfd/max8998.h> | 19 | #include <linux/mfd/max8998.h> |
20 | #include <linux/mfd/wm8994/pdata.h> | ||
21 | #include <linux/regulator/fixed.h> | ||
22 | #include <linux/spi/spi.h> | ||
23 | #include <linux/spi/spi_gpio.h> | ||
24 | #include <linux/lcd.h> | ||
19 | #include <linux/gpio_keys.h> | 25 | #include <linux/gpio_keys.h> |
20 | #include <linux/input.h> | 26 | #include <linux/input.h> |
21 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
@@ -35,7 +41,10 @@ | |||
35 | #include <plat/devs.h> | 41 | #include <plat/devs.h> |
36 | #include <plat/cpu.h> | 42 | #include <plat/cpu.h> |
37 | #include <plat/fb.h> | 43 | #include <plat/fb.h> |
44 | #include <plat/iic.h> | ||
45 | #include <plat/keypad.h> | ||
38 | #include <plat/sdhci.h> | 46 | #include <plat/sdhci.h> |
47 | #include <plat/clock.h> | ||
39 | 48 | ||
40 | /* Following are default values for UCON, ULCON and UFCON UART registers */ | 49 | /* Following are default values for UCON, ULCON and UFCON UART registers */ |
41 | #define GONI_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ | 50 | #define GONI_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \ |
@@ -87,13 +96,12 @@ static struct s3c2410_uartcfg goni_uartcfgs[] __initdata = { | |||
87 | /* Frame Buffer */ | 96 | /* Frame Buffer */ |
88 | static struct s3c_fb_pd_win goni_fb_win0 = { | 97 | static struct s3c_fb_pd_win goni_fb_win0 = { |
89 | .win_mode = { | 98 | .win_mode = { |
90 | .pixclock = 1000000000000ULL / ((16+16+2+480)*(28+3+2+800)*55), | ||
91 | .left_margin = 16, | 99 | .left_margin = 16, |
92 | .right_margin = 16, | 100 | .right_margin = 16, |
93 | .upper_margin = 3, | 101 | .upper_margin = 2, |
94 | .lower_margin = 28, | 102 | .lower_margin = 28, |
95 | .hsync_len = 2, | 103 | .hsync_len = 2, |
96 | .vsync_len = 2, | 104 | .vsync_len = 1, |
97 | .xres = 480, | 105 | .xres = 480, |
98 | .yres = 800, | 106 | .yres = 800, |
99 | .refresh = 55, | 107 | .refresh = 55, |
@@ -111,9 +119,160 @@ static struct s3c_fb_platdata goni_lcd_pdata __initdata = { | |||
111 | .setup_gpio = s5pv210_fb_gpio_setup_24bpp, | 119 | .setup_gpio = s5pv210_fb_gpio_setup_24bpp, |
112 | }; | 120 | }; |
113 | 121 | ||
122 | static int lcd_power_on(struct lcd_device *ld, int enable) | ||
123 | { | ||
124 | return 1; | ||
125 | } | ||
126 | |||
127 | static int reset_lcd(struct lcd_device *ld) | ||
128 | { | ||
129 | static unsigned int first = 1; | ||
130 | int reset_gpio = -1; | ||
131 | |||
132 | reset_gpio = S5PV210_MP05(5); | ||
133 | |||
134 | if (first) { | ||
135 | gpio_request(reset_gpio, "MLCD_RST"); | ||
136 | first = 0; | ||
137 | } | ||
138 | |||
139 | gpio_direction_output(reset_gpio, 1); | ||
140 | return 1; | ||
141 | } | ||
142 | |||
143 | static struct lcd_platform_data goni_lcd_platform_data = { | ||
144 | .reset = reset_lcd, | ||
145 | .power_on = lcd_power_on, | ||
146 | .lcd_enabled = 0, | ||
147 | .reset_delay = 120, /* 120ms */ | ||
148 | .power_on_delay = 25, /* 25ms */ | ||
149 | .power_off_delay = 200, /* 200ms */ | ||
150 | }; | ||
151 | |||
152 | #define LCD_BUS_NUM 3 | ||
153 | static struct spi_board_info spi_board_info[] __initdata = { | ||
154 | { | ||
155 | .modalias = "s6e63m0", | ||
156 | .platform_data = &goni_lcd_platform_data, | ||
157 | .max_speed_hz = 1200000, | ||
158 | .bus_num = LCD_BUS_NUM, | ||
159 | .chip_select = 0, | ||
160 | .mode = SPI_MODE_3, | ||
161 | .controller_data = (void *)S5PV210_MP01(1), /* DISPLAY_CS */ | ||
162 | }, | ||
163 | }; | ||
164 | |||
165 | static struct spi_gpio_platform_data lcd_spi_gpio_data = { | ||
166 | .sck = S5PV210_MP04(1), /* DISPLAY_CLK */ | ||
167 | .mosi = S5PV210_MP04(3), /* DISPLAY_SI */ | ||
168 | .miso = SPI_GPIO_NO_MISO, | ||
169 | .num_chipselect = 1, | ||
170 | }; | ||
171 | |||
172 | static struct platform_device goni_spi_gpio = { | ||
173 | .name = "spi_gpio", | ||
174 | .id = LCD_BUS_NUM, | ||
175 | .dev = { | ||
176 | .parent = &s3c_device_fb.dev, | ||
177 | .platform_data = &lcd_spi_gpio_data, | ||
178 | }, | ||
179 | }; | ||
180 | |||
181 | /* KEYPAD */ | ||
182 | static uint32_t keymap[] __initdata = { | ||
183 | /* KEY(row, col, keycode) */ | ||
184 | KEY(0, 1, KEY_MENU), /* Send */ | ||
185 | KEY(0, 2, KEY_BACK), /* End */ | ||
186 | KEY(1, 1, KEY_CONFIG), /* Half shot */ | ||
187 | KEY(1, 2, KEY_VOLUMEUP), | ||
188 | KEY(2, 1, KEY_CAMERA), /* Full shot */ | ||
189 | KEY(2, 2, KEY_VOLUMEDOWN), | ||
190 | }; | ||
191 | |||
192 | static struct matrix_keymap_data keymap_data __initdata = { | ||
193 | .keymap = keymap, | ||
194 | .keymap_size = ARRAY_SIZE(keymap), | ||
195 | }; | ||
196 | |||
197 | static struct samsung_keypad_platdata keypad_data __initdata = { | ||
198 | .keymap_data = &keymap_data, | ||
199 | .rows = 3, | ||
200 | .cols = 3, | ||
201 | }; | ||
202 | |||
203 | /* Radio */ | ||
204 | static struct i2c_board_info i2c1_devs[] __initdata = { | ||
205 | { | ||
206 | I2C_BOARD_INFO("si470x", 0x10), | ||
207 | }, | ||
208 | }; | ||
209 | |||
210 | static void __init goni_radio_init(void) | ||
211 | { | ||
212 | int gpio; | ||
213 | |||
214 | gpio = S5PV210_GPJ2(4); /* XMSMDATA_4 */ | ||
215 | gpio_request(gpio, "FM_INT"); | ||
216 | s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf)); | ||
217 | i2c1_devs[0].irq = gpio_to_irq(gpio); | ||
218 | |||
219 | gpio = S5PV210_GPJ2(5); /* XMSMDATA_5 */ | ||
220 | gpio_request(gpio, "FM_RST"); | ||
221 | gpio_direction_output(gpio, 1); | ||
222 | } | ||
223 | |||
224 | /* TSP */ | ||
225 | static struct qt602240_platform_data qt602240_platform_data = { | ||
226 | .x_line = 17, | ||
227 | .y_line = 11, | ||
228 | .x_size = 800, | ||
229 | .y_size = 480, | ||
230 | .blen = 0x21, | ||
231 | .threshold = 0x28, | ||
232 | .voltage = 2800000, /* 2.8V */ | ||
233 | .orient = QT602240_DIAGONAL, | ||
234 | }; | ||
235 | |||
236 | static struct s3c2410_platform_i2c i2c2_data __initdata = { | ||
237 | .flags = 0, | ||
238 | .bus_num = 2, | ||
239 | .slave_addr = 0x10, | ||
240 | .frequency = 400 * 1000, | ||
241 | .sda_delay = 100, | ||
242 | }; | ||
243 | |||
244 | static struct i2c_board_info i2c2_devs[] __initdata = { | ||
245 | { | ||
246 | I2C_BOARD_INFO("qt602240_ts", 0x4a), | ||
247 | .platform_data = &qt602240_platform_data, | ||
248 | }, | ||
249 | }; | ||
250 | |||
251 | static void __init goni_tsp_init(void) | ||
252 | { | ||
253 | int gpio; | ||
254 | |||
255 | gpio = S5PV210_GPJ1(3); /* XMSMADDR_11 */ | ||
256 | gpio_request(gpio, "TSP_LDO_ON"); | ||
257 | gpio_direction_output(gpio, 1); | ||
258 | gpio_export(gpio, 0); | ||
259 | |||
260 | gpio = S5PV210_GPJ0(5); /* XMSMADDR_5 */ | ||
261 | gpio_request(gpio, "TSP_INT"); | ||
262 | |||
263 | s5p_register_gpio_interrupt(gpio); | ||
264 | s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0xf)); | ||
265 | s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP); | ||
266 | i2c2_devs[0].irq = gpio_to_irq(gpio); | ||
267 | } | ||
268 | |||
114 | /* MAX8998 regulators */ | 269 | /* MAX8998 regulators */ |
115 | #if defined(CONFIG_REGULATOR_MAX8998) || defined(CONFIG_REGULATOR_MAX8998_MODULE) | 270 | #if defined(CONFIG_REGULATOR_MAX8998) || defined(CONFIG_REGULATOR_MAX8998_MODULE) |
116 | 271 | ||
272 | static struct regulator_consumer_supply goni_ldo5_consumers[] = { | ||
273 | REGULATOR_SUPPLY("vmmc", "s3c-sdhci.0"), | ||
274 | }; | ||
275 | |||
117 | static struct regulator_init_data goni_ldo2_data = { | 276 | static struct regulator_init_data goni_ldo2_data = { |
118 | .constraints = { | 277 | .constraints = { |
119 | .name = "VALIVE_1.1V", | 278 | .name = "VALIVE_1.1V", |
@@ -153,6 +312,8 @@ static struct regulator_init_data goni_ldo5_data = { | |||
153 | .max_uV = 2800000, | 312 | .max_uV = 2800000, |
154 | .apply_uV = 1, | 313 | .apply_uV = 1, |
155 | }, | 314 | }, |
315 | .num_consumer_supplies = ARRAY_SIZE(goni_ldo5_consumers), | ||
316 | .consumer_supplies = goni_ldo5_consumers, | ||
156 | }; | 317 | }; |
157 | 318 | ||
158 | static struct regulator_init_data goni_ldo6_data = { | 319 | static struct regulator_init_data goni_ldo6_data = { |
@@ -360,6 +521,119 @@ static struct max8998_platform_data goni_max8998_pdata = { | |||
360 | }; | 521 | }; |
361 | #endif | 522 | #endif |
362 | 523 | ||
524 | static struct regulator_consumer_supply wm8994_fixed_voltage0_supplies[] = { | ||
525 | { | ||
526 | .dev_name = "5-001a", | ||
527 | .supply = "DBVDD", | ||
528 | }, { | ||
529 | .dev_name = "5-001a", | ||
530 | .supply = "AVDD2", | ||
531 | }, { | ||
532 | .dev_name = "5-001a", | ||
533 | .supply = "CPVDD", | ||
534 | }, | ||
535 | }; | ||
536 | |||
537 | static struct regulator_consumer_supply wm8994_fixed_voltage1_supplies[] = { | ||
538 | { | ||
539 | .dev_name = "5-001a", | ||
540 | .supply = "SPKVDD1", | ||
541 | }, { | ||
542 | .dev_name = "5-001a", | ||
543 | .supply = "SPKVDD2", | ||
544 | }, | ||
545 | }; | ||
546 | |||
547 | static struct regulator_init_data wm8994_fixed_voltage0_init_data = { | ||
548 | .constraints = { | ||
549 | .always_on = 1, | ||
550 | }, | ||
551 | .num_consumer_supplies = ARRAY_SIZE(wm8994_fixed_voltage0_supplies), | ||
552 | .consumer_supplies = wm8994_fixed_voltage0_supplies, | ||
553 | }; | ||
554 | |||
555 | static struct regulator_init_data wm8994_fixed_voltage1_init_data = { | ||
556 | .constraints = { | ||
557 | .always_on = 1, | ||
558 | }, | ||
559 | .num_consumer_supplies = ARRAY_SIZE(wm8994_fixed_voltage1_supplies), | ||
560 | .consumer_supplies = wm8994_fixed_voltage1_supplies, | ||
561 | }; | ||
562 | |||
563 | static struct fixed_voltage_config wm8994_fixed_voltage0_config = { | ||
564 | .supply_name = "VCC_1.8V_PDA", | ||
565 | .microvolts = 1800000, | ||
566 | .gpio = -EINVAL, | ||
567 | .init_data = &wm8994_fixed_voltage0_init_data, | ||
568 | }; | ||
569 | |||
570 | static struct fixed_voltage_config wm8994_fixed_voltage1_config = { | ||
571 | .supply_name = "V_BAT", | ||
572 | .microvolts = 3700000, | ||
573 | .gpio = -EINVAL, | ||
574 | .init_data = &wm8994_fixed_voltage1_init_data, | ||
575 | }; | ||
576 | |||
577 | static struct platform_device wm8994_fixed_voltage0 = { | ||
578 | .name = "reg-fixed-voltage", | ||
579 | .id = 0, | ||
580 | .dev = { | ||
581 | .platform_data = &wm8994_fixed_voltage0_config, | ||
582 | }, | ||
583 | }; | ||
584 | |||
585 | static struct platform_device wm8994_fixed_voltage1 = { | ||
586 | .name = "reg-fixed-voltage", | ||
587 | .id = 1, | ||
588 | .dev = { | ||
589 | .platform_data = &wm8994_fixed_voltage1_config, | ||
590 | }, | ||
591 | }; | ||
592 | |||
593 | static struct regulator_consumer_supply wm8994_avdd1_supply = { | ||
594 | .dev_name = "5-001a", | ||
595 | .supply = "AVDD1", | ||
596 | }; | ||
597 | |||
598 | static struct regulator_consumer_supply wm8994_dcvdd_supply = { | ||
599 | .dev_name = "5-001a", | ||
600 | .supply = "DCVDD", | ||
601 | }; | ||
602 | |||
603 | static struct regulator_init_data wm8994_ldo1_data = { | ||
604 | .constraints = { | ||
605 | .name = "AVDD1_3.0V", | ||
606 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
607 | }, | ||
608 | .num_consumer_supplies = 1, | ||
609 | .consumer_supplies = &wm8994_avdd1_supply, | ||
610 | }; | ||
611 | |||
612 | static struct regulator_init_data wm8994_ldo2_data = { | ||
613 | .constraints = { | ||
614 | .name = "DCVDD_1.0V", | ||
615 | }, | ||
616 | .num_consumer_supplies = 1, | ||
617 | .consumer_supplies = &wm8994_dcvdd_supply, | ||
618 | }; | ||
619 | |||
620 | static struct wm8994_pdata wm8994_platform_data = { | ||
621 | /* configure gpio1 function: 0x0001(Logic level input/output) */ | ||
622 | .gpio_defaults[0] = 0x0001, | ||
623 | /* configure gpio3/4/5/7 function for AIF2 voice */ | ||
624 | .gpio_defaults[2] = 0x8100, | ||
625 | .gpio_defaults[3] = 0x8100, | ||
626 | .gpio_defaults[4] = 0x8100, | ||
627 | .gpio_defaults[6] = 0x0100, | ||
628 | /* configure gpio8/9/10/11 function for AIF3 BT */ | ||
629 | .gpio_defaults[7] = 0x8100, | ||
630 | .gpio_defaults[8] = 0x0100, | ||
631 | .gpio_defaults[9] = 0x0100, | ||
632 | .gpio_defaults[10] = 0x0100, | ||
633 | .ldo[0] = { S5PV210_MP03(6), NULL, &wm8994_ldo1_data }, /* XM0FRNB_2 */ | ||
634 | .ldo[1] = { 0, NULL, &wm8994_ldo2_data }, | ||
635 | }; | ||
636 | |||
363 | /* GPIO I2C PMIC */ | 637 | /* GPIO I2C PMIC */ |
364 | #define AP_I2C_GPIO_PMIC_BUS_4 4 | 638 | #define AP_I2C_GPIO_PMIC_BUS_4 4 |
365 | static struct i2c_gpio_platform_data goni_i2c_gpio_pmic_data = { | 639 | static struct i2c_gpio_platform_data goni_i2c_gpio_pmic_data = { |
@@ -385,6 +659,29 @@ static struct i2c_board_info i2c_gpio_pmic_devs[] __initdata = { | |||
385 | #endif | 659 | #endif |
386 | }; | 660 | }; |
387 | 661 | ||
662 | /* GPIO I2C AP 1.8V */ | ||
663 | #define AP_I2C_GPIO_BUS_5 5 | ||
664 | static struct i2c_gpio_platform_data goni_i2c_gpio5_data = { | ||
665 | .sda_pin = S5PV210_MP05(3), /* XM0ADDR_11 */ | ||
666 | .scl_pin = S5PV210_MP05(2), /* XM0ADDR_10 */ | ||
667 | }; | ||
668 | |||
669 | static struct platform_device goni_i2c_gpio5 = { | ||
670 | .name = "i2c-gpio", | ||
671 | .id = AP_I2C_GPIO_BUS_5, | ||
672 | .dev = { | ||
673 | .platform_data = &goni_i2c_gpio5_data, | ||
674 | }, | ||
675 | }; | ||
676 | |||
677 | static struct i2c_board_info i2c_gpio5_devs[] __initdata = { | ||
678 | { | ||
679 | /* CS/ADDR = low 0x34 (FYI: high = 0x36) */ | ||
680 | I2C_BOARD_INFO("wm8994", 0x1a), | ||
681 | .platform_data = &wm8994_platform_data, | ||
682 | }, | ||
683 | }; | ||
684 | |||
388 | /* PMIC Power button */ | 685 | /* PMIC Power button */ |
389 | static struct gpio_keys_button goni_gpio_keys_table[] = { | 686 | static struct gpio_keys_button goni_gpio_keys_table[] = { |
390 | { | 687 | { |
@@ -444,11 +741,37 @@ static struct s3c_sdhci_platdata goni_hsmmc2_data __initdata = { | |||
444 | .ext_cd_gpio_invert = 1, | 741 | .ext_cd_gpio_invert = 1, |
445 | }; | 742 | }; |
446 | 743 | ||
744 | static struct regulator_consumer_supply mmc2_supplies[] = { | ||
745 | REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"), | ||
746 | }; | ||
747 | |||
748 | static struct regulator_init_data mmc2_fixed_voltage_init_data = { | ||
749 | .constraints = { | ||
750 | .name = "V_TF_2.8V", | ||
751 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
752 | }, | ||
753 | .num_consumer_supplies = ARRAY_SIZE(mmc2_supplies), | ||
754 | .consumer_supplies = mmc2_supplies, | ||
755 | }; | ||
756 | |||
757 | static struct fixed_voltage_config mmc2_fixed_voltage_config = { | ||
758 | .supply_name = "EXT_FLASH_EN", | ||
759 | .microvolts = 2800000, | ||
760 | .gpio = GONI_EXT_FLASH_EN, | ||
761 | .enable_high = true, | ||
762 | .init_data = &mmc2_fixed_voltage_init_data, | ||
763 | }; | ||
764 | |||
765 | static struct platform_device mmc2_fixed_voltage = { | ||
766 | .name = "reg-fixed-voltage", | ||
767 | .id = 2, | ||
768 | .dev = { | ||
769 | .platform_data = &mmc2_fixed_voltage_config, | ||
770 | }, | ||
771 | }; | ||
772 | |||
447 | static void goni_setup_sdhci(void) | 773 | static void goni_setup_sdhci(void) |
448 | { | 774 | { |
449 | gpio_request(GONI_EXT_FLASH_EN, "FLASH_EN"); | ||
450 | gpio_direction_output(GONI_EXT_FLASH_EN, 1); | ||
451 | |||
452 | s3c_sdhci0_set_platdata(&goni_hsmmc0_data); | 775 | s3c_sdhci0_set_platdata(&goni_hsmmc0_data); |
453 | s3c_sdhci1_set_platdata(&goni_hsmmc1_data); | 776 | s3c_sdhci1_set_platdata(&goni_hsmmc1_data); |
454 | s3c_sdhci2_set_platdata(&goni_hsmmc2_data); | 777 | s3c_sdhci2_set_platdata(&goni_hsmmc2_data); |
@@ -457,7 +780,10 @@ static void goni_setup_sdhci(void) | |||
457 | static struct platform_device *goni_devices[] __initdata = { | 780 | static struct platform_device *goni_devices[] __initdata = { |
458 | &s3c_device_fb, | 781 | &s3c_device_fb, |
459 | &s5p_device_onenand, | 782 | &s5p_device_onenand, |
783 | &goni_spi_gpio, | ||
460 | &goni_i2c_gpio_pmic, | 784 | &goni_i2c_gpio_pmic, |
785 | &goni_i2c_gpio5, | ||
786 | &mmc2_fixed_voltage, | ||
461 | &goni_device_gpiokeys, | 787 | &goni_device_gpiokeys, |
462 | &s5p_device_fimc0, | 788 | &s5p_device_fimc0, |
463 | &s5p_device_fimc1, | 789 | &s5p_device_fimc1, |
@@ -465,8 +791,24 @@ static struct platform_device *goni_devices[] __initdata = { | |||
465 | &s3c_device_hsmmc0, | 791 | &s3c_device_hsmmc0, |
466 | &s3c_device_hsmmc1, | 792 | &s3c_device_hsmmc1, |
467 | &s3c_device_hsmmc2, | 793 | &s3c_device_hsmmc2, |
794 | &s5pv210_device_iis0, | ||
795 | &s3c_device_usb_hsotg, | ||
796 | &samsung_device_keypad, | ||
797 | &s3c_device_i2c1, | ||
798 | &s3c_device_i2c2, | ||
799 | &wm8994_fixed_voltage0, | ||
800 | &wm8994_fixed_voltage1, | ||
468 | }; | 801 | }; |
469 | 802 | ||
803 | static void __init goni_sound_init(void) | ||
804 | { | ||
805 | /* Ths main clock of WM8994 codec uses the output of CLKOUT pin. | ||
806 | * The CLKOUT[9:8] set to 0x3(XUSBXTI) of 0xE010E000(OTHERS) | ||
807 | * because it needs 24MHz clock to operate WM8994 codec. | ||
808 | */ | ||
809 | __raw_writel(__raw_readl(S5P_OTHERS) | (0x3 << 8), S5P_OTHERS); | ||
810 | } | ||
811 | |||
470 | static void __init goni_map_io(void) | 812 | static void __init goni_map_io(void) |
471 | { | 813 | { |
472 | s5p_init_io(NULL, 0, S5P_VA_CHIPID); | 814 | s5p_init_io(NULL, 0, S5P_VA_CHIPID); |
@@ -476,6 +818,20 @@ static void __init goni_map_io(void) | |||
476 | 818 | ||
477 | static void __init goni_machine_init(void) | 819 | static void __init goni_machine_init(void) |
478 | { | 820 | { |
821 | /* Radio: call before I2C 1 registeration */ | ||
822 | goni_radio_init(); | ||
823 | |||
824 | /* I2C1 */ | ||
825 | s3c_i2c1_set_platdata(NULL); | ||
826 | i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs)); | ||
827 | |||
828 | /* TSP: call before I2C 2 registeration */ | ||
829 | goni_tsp_init(); | ||
830 | |||
831 | /* I2C2 */ | ||
832 | s3c_i2c2_set_platdata(&i2c2_data); | ||
833 | i2c_register_board_info(2, i2c2_devs, ARRAY_SIZE(i2c2_devs)); | ||
834 | |||
479 | /* PMIC */ | 835 | /* PMIC */ |
480 | goni_pmic_init(); | 836 | goni_pmic_init(); |
481 | i2c_register_board_info(AP_I2C_GPIO_PMIC_BUS_4, i2c_gpio_pmic_devs, | 837 | i2c_register_board_info(AP_I2C_GPIO_PMIC_BUS_4, i2c_gpio_pmic_devs, |
@@ -483,9 +839,22 @@ static void __init goni_machine_init(void) | |||
483 | /* SDHCI */ | 839 | /* SDHCI */ |
484 | goni_setup_sdhci(); | 840 | goni_setup_sdhci(); |
485 | 841 | ||
842 | /* SOUND */ | ||
843 | goni_sound_init(); | ||
844 | i2c_register_board_info(AP_I2C_GPIO_BUS_5, i2c_gpio5_devs, | ||
845 | ARRAY_SIZE(i2c_gpio5_devs)); | ||
846 | |||
486 | /* FB */ | 847 | /* FB */ |
487 | s3c_fb_set_platdata(&goni_lcd_pdata); | 848 | s3c_fb_set_platdata(&goni_lcd_pdata); |
488 | 849 | ||
850 | /* SPI */ | ||
851 | spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); | ||
852 | |||
853 | /* KEYPAD */ | ||
854 | samsung_keypad_set_platdata(&keypad_data); | ||
855 | |||
856 | clk_xusbxti.rate = 24000000; | ||
857 | |||
489 | platform_add_devices(goni_devices, ARRAY_SIZE(goni_devices)); | 858 | platform_add_devices(goni_devices, ARRAY_SIZE(goni_devices)); |
490 | } | 859 | } |
491 | 860 | ||