3 * Copyright (C) 2012 ROCKCHIP, Inc.
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
16 #include <linux/kernel.h>
17 #include <linux/init.h>
18 #include <linux/platform_device.h>
19 #include <linux/input.h>
21 #include <linux/delay.h>
22 #include <linux/i2c.h>
23 #include <linux/skbuff.h>
24 #include <linux/spi/spi.h>
25 #include <linux/mmc/host.h>
26 #include <linux/ion.h>
27 #include <linux/cpufreq.h>
28 #include <linux/clk.h>
29 #include <mach/dvfs.h>
31 #include <asm/setup.h>
32 #include <asm/mach-types.h>
33 #include <asm/mach/arch.h>
34 #include <asm/mach/map.h>
35 #include <asm/mach/flash.h>
36 #include <asm/hardware/gic.h>
38 #include <mach/board.h>
39 #include <mach/hardware.h>
41 #include <mach/gpio.h>
42 #include <mach/iomux.h>
43 #include <linux/rk_fb.h>
44 #include <linux/regulator/machine.h>
45 #include <linux/rfkill-rk.h>
46 #include <linux/sensor-dev.h>
47 #include <linux/mfd/tps65910.h>
48 #include <linux/regulator/act8846.h>
49 #include <linux/mfd/rk808.h>
50 #include <linux/mfd/ricoh619.h>
51 #include <linux/regulator/rk29-pwm-regulator.h>
52 #ifdef CONFIG_MFD_RT5025
53 #include <linux/mfd/rt5025.h>
55 #include <plat/efuse.h>
57 #ifdef CONFIG_CW2015_BATTERY
58 #include <linux/power/cw2015_battery.h>
60 #if defined(CONFIG_MFD_RK610)
61 #include <linux/mfd/rk610_core.h>
64 #if defined(CONFIG_MFD_RK616)
65 #include <linux/mfd/rk616.h>
69 #if defined(CONFIG_RK_HDMI)
70 #include "../../../drivers/video/rockchip/hdmi/rk_hdmi.h"
73 #if defined(CONFIG_SPIM_RK29)
74 #include "../../../drivers/spi/rk29_spim.h"
76 #if defined(CONFIG_GPS_RK)
77 #include "../../../drivers/misc/gps/rk_gps/rk_gps.h"
79 #if defined(CONFIG_MU509)
80 #include <linux/mu509.h>
82 #if defined(CONFIG_MW100)
83 #include <linux/mw100.h>
85 #if defined(CONFIG_MT6229)
86 #include <linux/mt6229.h>
88 #if defined(CONFIG_ANDROID_TIMED_GPIO)
89 #include "../../../drivers/staging/android/timed_gpio.h"
92 #if defined(CONFIG_MT6620)
93 #include <linux/gps.h>
95 #include "board-rk3168-tb-camera.c"
97 #if defined(CONFIG_TOUCHSCREEN_GT8XX)
98 #define TOUCH_RESET_PIN RK30_PIN0_PB6
99 #define TOUCH_PWR_PIN RK30_PIN0_PC5 // need to fly line by hardware engineer
101 /* Android Parameter */
102 static int ap_mdm = 0;
103 module_param(ap_mdm, int, 0644);
104 static int ap_has_alsa = 0;
105 module_param(ap_has_alsa, int, 0644);
106 static int ap_data_only = 2;
107 module_param(ap_data_only, int, 0644);
108 static int ap_has_earphone = 0;
109 module_param(ap_has_earphone, int, 0644);
112 static int goodix_init_platform_hw(void)
116 if (TOUCH_PWR_PIN != INVALID_GPIO) {
117 ret = gpio_request(TOUCH_PWR_PIN, "goodix power pin");
119 gpio_free(TOUCH_PWR_PIN);
120 printk("goodix power error\n");
123 gpio_direction_output(TOUCH_PWR_PIN, 0);
124 gpio_set_value(TOUCH_PWR_PIN, GPIO_LOW);
128 if (TOUCH_RESET_PIN != INVALID_GPIO) {
129 ret = gpio_request(TOUCH_RESET_PIN, "goodix reset pin");
131 gpio_free(TOUCH_RESET_PIN);
132 printk("goodix gpio_request error\n");
135 gpio_direction_output(TOUCH_RESET_PIN, 1);
137 //gpio_set_value(TOUCH_RESET_PIN, GPIO_LOW);
139 //gpio_set_value(TOUCH_RESET_PIN, GPIO_HIGH);
145 struct goodix_platform_data goodix_info = {
147 .irq_pin = RK30_PIN1_PB7,
148 .rest_pin = TOUCH_RESET_PIN,
149 .init_platform_hw = goodix_init_platform_hw,
153 static struct spi_board_info board_spi_devices[] = {
156 /***********************************************************
158 ************************************************************/
159 #ifdef CONFIG_BACKLIGHT_RK29_BL
161 #define PWM_MODE PWM3
162 #define PWM_EFFECT_VALUE 1
164 #define LCD_DISP_ON_PIN
166 #ifdef LCD_DISP_ON_PIN
167 #define BL_EN_PIN RK30_PIN0_PA2
168 #define BL_EN_VALUE GPIO_HIGH
170 static int rk29_backlight_io_init(void)
175 #ifdef LCD_DISP_ON_PIN
176 ret = gpio_request(BL_EN_PIN, "bl_en");
178 gpio_direction_output(BL_EN_PIN, BL_EN_VALUE);
184 static int rk29_backlight_io_deinit(void)
186 int ret = 0, pwm_gpio;
187 #ifdef LCD_DISP_ON_PIN
188 gpio_free(BL_EN_PIN);
190 pwm_gpio = iomux_mode_to_gpio(PWM_MODE);
191 gpio_request(pwm_gpio, "bl_pwm");
192 gpio_direction_output(pwm_gpio, GPIO_LOW);
196 static int rk29_backlight_pwm_suspend(void)
198 int ret, pwm_gpio = iomux_mode_to_gpio(PWM_MODE);
200 ret = gpio_request(pwm_gpio, "bl_pwm");
202 printk("func %s, line %d: request gpio fail\n", __FUNCTION__, __LINE__);
205 gpio_direction_output(pwm_gpio, GPIO_LOW);
206 #ifdef LCD_DISP_ON_PIN
207 gpio_direction_output(BL_EN_PIN, !BL_EN_VALUE);
212 static int rk29_backlight_pwm_resume(void)
214 int pwm_gpio = iomux_mode_to_gpio(PWM_MODE);
218 #ifdef LCD_DISP_ON_PIN
220 gpio_direction_output(BL_EN_PIN, BL_EN_VALUE);
225 static struct rk29_bl_info rk29_bl_info = {
229 .brightness_mode =BRIGHTNESS_MODE_CONIC,
230 .bl_ref = PWM_EFFECT_VALUE,
231 .io_init = rk29_backlight_io_init,
232 .io_deinit = rk29_backlight_io_deinit,
233 .pwm_suspend = rk29_backlight_pwm_suspend,
234 .pwm_resume = rk29_backlight_pwm_resume,
237 static struct platform_device rk29_device_backlight = {
238 .name = "rk29_backlight",
241 .platform_data = &rk29_bl_info,
247 #ifdef CONFIG_RK29_SUPPORT_MODEM
249 #define RK30_MODEM_POWER RK30_PIN0_PC6
250 #define RK30_MODEM_POWER_IOMUX iomux_set(GPIO0_C6)
252 static int rk30_modem_io_init(void)
254 printk("%s\n", __FUNCTION__);
255 RK30_MODEM_POWER_IOMUX;
260 static struct rk29_io_t rk30_modem_io = {
261 .io_addr = RK30_MODEM_POWER,
264 .io_init = rk30_modem_io_init,
267 static struct platform_device rk30_device_modem = {
268 .name = "rk30_modem",
271 .platform_data = &rk30_modem_io,
275 #if defined(CONFIG_MU509)
276 static int mu509_io_init(void)
287 static int mu509_io_deinit(void)
293 struct rk29_mu509_data rk29_mu509_info = {
294 .io_init = mu509_io_init,
295 .io_deinit = mu509_io_deinit,
296 .modem_power_en = RK30_PIN2_PD5,
297 .bp_power = RK30_PIN0_PC6,
298 .bp_reset = RK30_PIN2_PD4,
299 .ap_wakeup_bp = RK30_PIN0_PC4,
300 .bp_wakeup_ap = RK30_PIN0_PC5,
302 struct platform_device rk29_device_mu509 = {
306 .platform_data = &rk29_mu509_info,
310 #if defined(CONFIG_MW100)
311 static int mw100_io_init(void)
321 static int mw100_io_deinit(void)
327 struct rk29_mw100_data rk29_mw100_info = {
328 .io_init = mw100_io_init,
329 .io_deinit = mw100_io_deinit,
330 .modem_power_en = RK30_PIN2_PD5,
331 .bp_power = RK30_PIN0_PC6,
332 .bp_reset = RK30_PIN2_PD4,
333 .ap_wakeup_bp = RK30_PIN0_PC4,
334 .bp_wakeup_ap = RK30_PIN0_PC5,
336 struct platform_device rk29_device_mw100 = {
340 .platform_data = &rk29_mw100_info,
344 #if defined(CONFIG_MT6229)
345 static int mt6229_io_init(void)
355 static int mt6229_io_deinit(void)
361 struct rk29_mt6229_data rk29_mt6229_info = {
362 .io_init = mt6229_io_init,
363 .io_deinit = mt6229_io_deinit,
364 .modem_power_en = RK30_PIN2_PD5,
365 .bp_power = RK30_PIN0_PC6,
366 .bp_reset = RK30_PIN2_PD4,
367 .ap_wakeup_bp = RK30_PIN0_PC4,
368 .bp_wakeup_ap = RK30_PIN0_PC5,
370 struct platform_device rk29_device_mt6229 = {
374 .platform_data = &rk29_mt6229_info,
380 #if defined (CONFIG_GS_MMA8452)
381 #define MMA8452_INT_PIN RK30_PIN0_PB7
383 static int mma8452_init_platform_hw(void)
388 static struct sensor_platform_data mma8452_info = {
389 .type = SENSOR_TYPE_ACCEL,
392 .init_platform_hw = mma8452_init_platform_hw,
393 .orientation = {-1, 0, 0, 0, -1, 0, 0, 0, 1},
396 #if defined (CONFIG_GS_LIS3DH)
397 #define LIS3DH_INT_PIN RK30_PIN0_PB7
399 static int lis3dh_init_platform_hw(void)
405 static struct sensor_platform_data lis3dh_info = {
406 .type = SENSOR_TYPE_ACCEL,
409 .init_platform_hw = lis3dh_init_platform_hw,
410 .orientation = {-1, 0, 0, 0, -1, 0, 0, 0, 1},
413 #if defined (CONFIG_COMPASS_AK8975)
414 static struct sensor_platform_data akm8975_info =
416 .type = SENSOR_TYPE_COMPASS,
449 #if defined(CONFIG_GYRO_L3G4200D)
451 #include <linux/l3g4200d.h>
452 #define L3G4200D_INT_PIN RK30_PIN0_PB4
454 static int l3g4200d_init_platform_hw(void)
459 static struct sensor_platform_data l3g4200d_info = {
460 .type = SENSOR_TYPE_GYROSCOPE,
463 .orientation = {0, 1, 0, -1, 0, 0, 0, 0, 1},
464 .init_platform_hw = l3g4200d_init_platform_hw,
465 .x_min = 40,//x_min,y_min,z_min = (0-100) according to hardware
472 #ifdef CONFIG_LS_CM3217
473 static struct sensor_platform_data cm3217_info = {
474 .type = SENSOR_TYPE_LIGHT,
476 .poll_delay_ms = 500,
481 #ifdef CONFIG_FB_ROCKCHIP
483 #define LCD_CS_PIN INVALID_GPIO
484 #define LCD_CS_VALUE GPIO_HIGH
486 #define LCD_EN_PIN RK30_PIN0_PB0
487 #define LCD_EN_VALUE GPIO_HIGH
489 static int rk_fb_io_init(struct rk29_fb_setting_info *fb_setting)
493 if(LCD_CS_PIN !=INVALID_GPIO)
495 ret = gpio_request(LCD_CS_PIN, NULL);
498 gpio_free(LCD_CS_PIN);
499 printk(KERN_ERR "request lcd cs pin fail!\n");
504 gpio_direction_output(LCD_CS_PIN, LCD_CS_VALUE);
508 if(LCD_EN_PIN !=INVALID_GPIO)
510 ret = gpio_request(LCD_EN_PIN, NULL);
513 gpio_free(LCD_EN_PIN);
514 printk(KERN_ERR "request lcd en pin fail!\n");
519 gpio_direction_output(LCD_EN_PIN, LCD_EN_VALUE);
524 static int rk_fb_io_disable(void)
526 if(LCD_CS_PIN !=INVALID_GPIO)
528 gpio_set_value(LCD_CS_PIN, !LCD_CS_VALUE);
530 if(LCD_EN_PIN !=INVALID_GPIO)
532 gpio_set_value(LCD_EN_PIN, !LCD_EN_VALUE);
536 static int rk_fb_io_enable(void)
538 if(LCD_CS_PIN !=INVALID_GPIO)
540 gpio_set_value(LCD_CS_PIN, LCD_CS_VALUE);
542 if(LCD_EN_PIN !=INVALID_GPIO)
544 gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE);
549 #if defined(CONFIG_LCDC0_RK3066B) || defined(CONFIG_LCDC0_RK3188)
550 struct rk29fb_info lcdc0_screen_info = {
551 #if defined(CONFIG_RK_HDMI) && defined(CONFIG_HDMI_SOURCE_LCDC0) && defined(CONFIG_DUAL_LCDC_DUAL_DISP_IN_KERNEL)
552 .prop = EXTEND, //extend display device
556 .set_screen_info = hdmi_init_lcdc,
558 .prop = PRMRY, //primary display device
559 .io_init = rk_fb_io_init,
560 .io_disable = rk_fb_io_disable,
561 .io_enable = rk_fb_io_enable,
562 .set_screen_info = set_lcd_info,
567 #if defined(CONFIG_LCDC1_RK3066B) || defined(CONFIG_LCDC1_RK3188)
568 struct rk29fb_info lcdc1_screen_info = {
569 #if defined(CONFIG_RK_HDMI) && defined(CONFIG_HDMI_SOURCE_LCDC1) && defined(CONFIG_DUAL_LCDC_DUAL_DISP_IN_KERNEL)
570 .prop = EXTEND, //extend display device
574 .set_screen_info = hdmi_init_lcdc,
576 .prop = PRMRY, //primary display device
577 .io_init = rk_fb_io_init,
578 .io_disable = rk_fb_io_disable,
579 .io_enable = rk_fb_io_enable,
580 .set_screen_info = set_lcd_info,
585 static struct resource resource_fb[] = {
589 .end = 0,//RK30_FB0_MEM_SIZE - 1,
590 .flags = IORESOURCE_MEM,
593 .name = "ipp buf", //for rotate
595 .end = 0,//RK30_FB0_MEM_SIZE - 1,
596 .flags = IORESOURCE_MEM,
601 .end = 0,//RK30_FB0_MEM_SIZE - 1,
602 .flags = IORESOURCE_MEM,
606 static struct platform_device device_fb = {
609 .num_resources = ARRAY_SIZE(resource_fb),
610 .resource = resource_fb,
613 #if defined(CONFIG_ARCH_RK3188)
614 static struct resource resource_mali[] = {
619 .flags = IORESOURCE_MEM,
624 static struct platform_device device_mali= {
625 .name = "mali400_ump",
627 .num_resources = ARRAY_SIZE(resource_mali),
628 .resource = resource_mali,
632 #if defined(CONFIG_LCDC0_RK3066B) || defined(CONFIG_LCDC0_RK3188)
633 static struct resource resource_lcdc0[] = {
636 .start = RK30_LCDC0_PHYS,
637 .end = RK30_LCDC0_PHYS + RK30_LCDC0_SIZE - 1,
638 .flags = IORESOURCE_MEM,
645 .flags = IORESOURCE_IRQ,
649 static struct platform_device device_lcdc0 = {
652 .num_resources = ARRAY_SIZE(resource_lcdc0),
653 .resource = resource_lcdc0,
655 .platform_data = &lcdc0_screen_info,
659 #if defined(CONFIG_LCDC1_RK3066B) || defined(CONFIG_LCDC1_RK3188)
660 static struct resource resource_lcdc1[] = {
663 .start = RK30_LCDC1_PHYS,
664 .end = RK30_LCDC1_PHYS + RK30_LCDC1_SIZE - 1,
665 .flags = IORESOURCE_MEM,
671 .flags = IORESOURCE_IRQ,
675 static struct platform_device device_lcdc1 = {
678 .num_resources = ARRAY_SIZE(resource_lcdc1),
679 .resource = resource_lcdc1,
681 .platform_data = &lcdc1_screen_info,
686 #if defined(CONFIG_MFD_RK610)
687 #define RK610_RST_PIN RK30_PIN2_PC5
688 static int rk610_power_on_init(void)
691 if(RK610_RST_PIN != INVALID_GPIO)
693 ret = gpio_request(RK610_RST_PIN, "rk610 reset");
696 printk(KERN_ERR "rk610_control_probe request gpio fail\n");
700 gpio_direction_output(RK610_RST_PIN, GPIO_HIGH);
702 gpio_direction_output(RK610_RST_PIN, GPIO_LOW);
704 gpio_set_value(RK610_RST_PIN, GPIO_HIGH);
713 static struct rk610_ctl_platform_data rk610_ctl_pdata = {
714 .rk610_power_on_init = rk610_power_on_init,
718 #if defined(CONFIG_MFD_RK616)
719 #define RK616_RST_PIN RK30_PIN3_PB2
720 #define RK616_PWREN_PIN RK30_PIN0_PA3
721 #define RK616_SCL_RATE (100*1000) //i2c scl rate
722 static int rk616_power_on_init(void)
726 if(RK616_PWREN_PIN != INVALID_GPIO)
728 ret = gpio_request(RK616_PWREN_PIN, "rk616 pwren");
731 printk(KERN_ERR "rk616 pwren gpio request fail\n");
735 gpio_direction_output(RK616_PWREN_PIN,GPIO_HIGH);
739 if(RK616_RST_PIN != INVALID_GPIO)
741 ret = gpio_request(RK616_RST_PIN, "rk616 reset");
744 printk(KERN_ERR "rk616 reset gpio request fail\n");
748 gpio_direction_output(RK616_RST_PIN, GPIO_HIGH);
750 gpio_direction_output(RK616_RST_PIN, GPIO_LOW);
752 gpio_set_value(RK616_RST_PIN, GPIO_HIGH);
761 static int rk616_power_deinit(void)
763 gpio_set_value(RK616_PWREN_PIN,GPIO_LOW);
764 gpio_set_value(RK616_RST_PIN,GPIO_LOW);
765 gpio_free(RK616_PWREN_PIN);
766 gpio_free(RK616_RST_PIN);
771 static struct rk616_platform_data rk616_pdata = {
772 .power_init = rk616_power_on_init,
773 .power_deinit = rk616_power_deinit,
774 .scl_rate = RK616_SCL_RATE,
775 .lcd0_func = INPUT, //port lcd0 as input
776 .lcd1_func = INPUT, //port lcd1 as input
777 .lvds_ch_nr = 1, //the number of used lvds channel
778 .hdmi_irq = RK30_PIN2_PD6,
779 .spk_ctl_gpio = RK30_PIN2_PD7,
780 .hp_ctl_gpio = RK30_PIN2_PD7,
785 #ifdef CONFIG_SND_SOC_RK610
786 static int rk610_codec_io_init(void)
789 //Must not gpio_request
793 static struct rk610_codec_platform_data rk610_codec_pdata = {
794 .spk_ctl_io = RK30_PIN2_PD7,
795 .io_init = rk610_codec_io_init,
799 #ifdef CONFIG_ANDROID_TIMED_GPIO
800 static struct timed_gpio timed_gpios[] = {
803 .gpio = INVALID_GPIO,
806 .adjust_time =20, //adjust for diff product
810 static struct timed_gpio_platform_data rk29_vibrator_info = {
812 .gpios = timed_gpios,
815 static struct platform_device rk29_device_vibrator = {
816 .name = "timed-gpio",
819 .platform_data = &rk29_vibrator_info,
825 #ifdef CONFIG_LEDS_GPIO_PLATFORM
826 static struct gpio_led rk29_leds[] = {
828 .name = "button-backlight",
829 .gpio = INVALID_GPIO,
830 .default_trigger = "timer",
832 .retain_state_suspended = 0,
833 .default_state = LEDS_GPIO_DEFSTATE_OFF,
837 static struct gpio_led_platform_data rk29_leds_pdata = {
839 .num_leds = ARRAY_SIZE(rk29_leds),
842 static struct platform_device rk29_device_gpio_leds = {
846 .platform_data = &rk29_leds_pdata,
851 #ifdef CONFIG_RK_IRDA
852 #define IRDA_IRQ_PIN INVALID_GPIO //RK30_PIN0_PA3
854 static int irda_iomux_init(void)
859 ret = gpio_request(IRDA_IRQ_PIN, NULL);
861 gpio_free(IRDA_IRQ_PIN);
862 printk(">>>>>> IRDA_IRQ_PIN gpio_request err \n ");
864 gpio_pull_updown(IRDA_IRQ_PIN, PullDisable);
865 gpio_direction_input(IRDA_IRQ_PIN);
870 static int irda_iomux_deinit(void)
872 gpio_free(IRDA_IRQ_PIN);
876 static struct irda_info rk29_irda_info = {
877 .intr_pin = IRDA_IRQ_PIN,
878 .iomux_init = irda_iomux_init,
879 .iomux_deinit = irda_iomux_deinit,
880 //.irda_pwr_ctl = bu92747guw_power_ctl,
883 static struct platform_device irda_device = {
884 #ifdef CONFIG_RK_IRDA_NET
887 .name = "bu92747_irda",
891 .platform_data = &rk29_irda_info,
897 #define ION_RESERVE_SIZE (80 * SZ_1M)
898 static struct ion_platform_data rk30_ion_pdata = {
902 .type = ION_HEAP_TYPE_CARVEOUT,
903 .id = ION_NOR_HEAP_ID,
905 .size = ION_RESERVE_SIZE,
910 static struct platform_device device_ion = {
911 .name = "ion-rockchip",
914 .platform_data = &rk30_ion_pdata,
919 /**************************************************************************************************
920 * SDMMC devices, include the module of SD,MMC,and sdio.noted by xbw at 2012-03-05
921 **************************************************************************************************/
922 #ifdef CONFIG_SDMMC_RK29
923 #include "board-rk3168-tb-sdmmc-conifg.c"
924 #include "../plat-rk/rk-sdmmc-ops.c"
925 #include "../plat-rk/rk-sdmmc-wifi.c"
926 #endif //endif ---#ifdef CONFIG_SDMMC_RK29
928 #ifdef CONFIG_SDMMC0_RK29
929 static int rk29_sdmmc0_cfg_gpio(void)
931 #ifdef CONFIG_SDMMC_RK29_OLD
933 iomux_set(MMC0_CLKOUT);
939 iomux_set_gpio_mode(iomux_mode_to_gpio(MMC0_DETN));
941 gpio_request(RK30_PIN3_PA7, "sdmmc-power");
942 gpio_direction_output(RK30_PIN3_PA7, GPIO_LOW);
945 rk29_sdmmc_set_iomux(0, 0xFFFF);
947 #if defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO)
948 #if SDMMC_USE_NEW_IOMUX_API
949 iomux_set_gpio_mode(iomux_gpio_to_mode(RK29SDK_SD_CARD_DETECT_N));
951 rk30_mux_api_set(RK29SDK_SD_CARD_DETECT_PIN_NAME, RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO);
954 #if SDMMC_USE_NEW_IOMUX_API
955 iomux_set(MMC0_DETN);
957 rk30_mux_api_set(RK29SDK_SD_CARD_DETECT_PIN_NAME, RK29SDK_SD_CARD_DETECT_IOMUX_FMUX);
961 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
962 gpio_request(SDMMC0_WRITE_PROTECT_PIN, "sdmmc-wp");
963 gpio_direction_input(SDMMC0_WRITE_PROTECT_PIN);
971 #define CONFIG_SDMMC0_USE_DMA
972 struct rk29_sdmmc_platform_data default_sdmmc0_data = {
974 (MMC_VDD_25_26 | MMC_VDD_26_27 | MMC_VDD_27_28 | MMC_VDD_28_29 |
975 MMC_VDD_29_30 | MMC_VDD_30_31 | MMC_VDD_31_32 | MMC_VDD_32_33 |
976 MMC_VDD_33_34 | MMC_VDD_34_35 | MMC_VDD_35_36),
978 (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
979 .io_init = rk29_sdmmc0_cfg_gpio,
981 #if !defined(CONFIG_SDMMC_RK29_OLD)
982 .set_iomux = rk29_sdmmc_set_iomux,
985 .dma_name = "sd_mmc",
986 #ifdef CONFIG_SDMMC0_USE_DMA
992 #if defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC) && defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
993 .status = rk29sdk_wifi_mmc0_status,
994 .register_status_notify = rk29sdk_wifi_mmc0_status_register,
997 #if defined(RK29SDK_SD_CARD_PWR_EN) || (INVALID_GPIO != RK29SDK_SD_CARD_PWR_EN)
998 .power_en = RK29SDK_SD_CARD_PWR_EN,
999 .power_en_level = RK29SDK_SD_CARD_PWR_EN_LEVEL,
1001 .power_en = INVALID_GPIO,
1002 .power_en_level = GPIO_LOW,
1004 .enable_sd_wakeup = 0,
1006 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
1007 .write_prt = SDMMC0_WRITE_PROTECT_PIN,
1008 .write_prt_enalbe_level = SDMMC0_WRITE_PROTECT_ENABLE_VALUE;
1010 .write_prt = INVALID_GPIO,
1014 #if defined(RK29SDK_SD_CARD_DETECT_N) || (INVALID_GPIO != RK29SDK_SD_CARD_DETECT_N)
1015 .io = RK29SDK_SD_CARD_DETECT_N, //INVALID_GPIO,
1016 .enable = RK29SDK_SD_CARD_INSERT_LEVEL,
1017 #ifdef RK29SDK_SD_CARD_DETECT_PIN_NAME
1019 .name = RK29SDK_SD_CARD_DETECT_PIN_NAME,
1020 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO
1021 .fgpio = RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO,
1023 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FMUX
1024 .fmux = RK29SDK_SD_CARD_DETECT_IOMUX_FMUX,
1035 #endif // CONFIG_SDMMC0_RK29
1037 #ifdef CONFIG_SDMMC1_RK29
1038 #define CONFIG_SDMMC1_USE_DMA
1039 static int rk29_sdmmc1_cfg_gpio(void)
1041 #if defined(CONFIG_SDMMC_RK29_OLD)
1042 iomux_set(MMC1_CMD);
1043 iomux_set(MMC1_CLKOUT);
1050 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
1051 gpio_request(SDMMC1_WRITE_PROTECT_PIN, "sdio-wp");
1052 gpio_direction_input(SDMMC1_WRITE_PROTECT_PIN);
1060 struct rk29_sdmmc_platform_data default_sdmmc1_data = {
1062 (MMC_VDD_25_26 | MMC_VDD_26_27 | MMC_VDD_27_28 | MMC_VDD_28_29 |
1063 MMC_VDD_29_30 | MMC_VDD_30_31 | MMC_VDD_31_32 | MMC_VDD_32_33 |
1066 #if !defined(CONFIG_USE_SDMMC1_FOR_WIFI_DEVELOP_BOARD)
1067 .host_caps = (MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ |
1068 MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
1071 (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
1074 .io_init = rk29_sdmmc1_cfg_gpio,
1076 #if !defined(CONFIG_SDMMC_RK29_OLD)
1077 .set_iomux = rk29_sdmmc_set_iomux,
1081 #ifdef CONFIG_SDMMC1_USE_DMA
1087 #if defined(CONFIG_WIFI_CONTROL_FUNC) || defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
1088 .status = rk29sdk_wifi_status,
1089 .register_status_notify = rk29sdk_wifi_status_register,
1092 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
1093 .write_prt = SDMMC1_WRITE_PROTECT_PIN,
1094 .write_prt_enalbe_level = SDMMC1_WRITE_PROTECT_ENABLE_VALUE;
1096 .write_prt = INVALID_GPIO,
1099 #if defined(CONFIG_RK29_SDIO_IRQ_FROM_GPIO)
1100 .sdio_INT_gpio = RK29SDK_WIFI_SDIO_CARD_INT,
1104 #if defined(CONFIG_USE_SDMMC1_FOR_WIFI_DEVELOP_BOARD)
1105 #if defined(RK29SDK_SD_CARD_DETECT_N) || (INVALID_GPIO != RK29SDK_SD_CARD_DETECT_N)
1106 .io = RK29SDK_SD_CARD_DETECT_N,
1111 .enable = RK29SDK_SD_CARD_INSERT_LEVEL,
1112 #ifdef RK29SDK_SD_CARD_DETECT_PIN_NAME
1114 .name = RK29SDK_SD_CARD_DETECT_PIN_NAME,
1115 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO
1116 .fgpio = RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO,
1118 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FMUX
1119 .fmux = RK29SDK_SD_CARD_DETECT_IOMUX_FMUX,
1129 .enable_sd_wakeup = 0,
1131 #endif //endif--#ifdef CONFIG_SDMMC1_RK29
1133 /**************************************************************************************************
1134 * the end of setting for SDMMC devices
1135 **************************************************************************************************/
1137 #ifdef CONFIG_BATTERY_RK30_ADC
1138 static struct rk30_adc_battery_platform_data rk30_adc_battery_platdata = {
1139 .dc_det_pin = RK30_PIN0_PB2,
1140 .batt_low_pin = RK30_PIN0_PB1,
1141 .charge_set_pin = INVALID_GPIO,
1142 .charge_ok_pin = RK30_PIN0_PA6,
1143 .dc_det_level = GPIO_LOW,
1144 .charge_ok_level = GPIO_HIGH,
1147 static struct platform_device rk30_device_adc_battery = {
1148 .name = "rk30-battery",
1151 .platform_data = &rk30_adc_battery_platdata,
1155 #ifdef CONFIG_CW2015_BATTERY
1157 note the follow array must set depend on the battery that you use
1158 you must send the battery to cellwise-semi the contact information:
1159 name: chen gan; tel:13416876079; E-mail: ben.chen@cellwise-semi.com
1161 static u8 config_info[SIZE_BATINFO] = {
1162 0x15, 0x42, 0x60, 0x59, 0x52,
1163 0x58, 0x4D, 0x48, 0x48, 0x44,
1164 0x44, 0x46, 0x49, 0x48, 0x32,
1165 0x24, 0x20, 0x17, 0x13, 0x0F,
1166 0x19, 0x3E, 0x51, 0x45, 0x08,
1167 0x76, 0x0B, 0x85, 0x0E, 0x1C,
1168 0x2E, 0x3E, 0x4D, 0x52, 0x52,
1169 0x57, 0x3D, 0x1B, 0x6A, 0x2D,
1170 0x25, 0x43, 0x52, 0x87, 0x8F,
1171 0x91, 0x94, 0x52, 0x82, 0x8C,
1172 0x92, 0x96, 0xFF, 0x7B, 0xBB,
1173 0xCB, 0x2F, 0x7D, 0x72, 0xA5,
1174 0xB5, 0xC1, 0x46, 0xAE
1177 static struct cw_bat_platform_data cw_bat_platdata = {
1178 .dc_det_pin = RK30_PIN0_PB2,
1179 .dc_det_level = GPIO_LOW,
1181 .bat_low_pin = RK30_PIN0_PB1,
1182 .bat_low_level = GPIO_LOW,
1183 .chg_ok_pin = INVALID_GPIO,
1184 .chg_ok_level = GPIO_HIGH,
1187 .chg_mode_sel_pin = INVALID_GPIO,
1188 .chg_mode_sel_level = GPIO_HIGH,
1190 .cw_bat_config_info = config_info,
1195 #ifdef CONFIG_RK30_PWM_REGULATOR
1196 static int pwm_voltage_map[] = {
1197 800000,825000,850000, 875000,900000, 925000 ,950000, 975000,1000000, 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000, 1325000, 1350000,1375000
1199 static struct regulator_consumer_supply pwm_dcdc1_consumers[] = {
1201 .supply = "vdd_cpu",
1205 struct regulator_init_data pwm_regulator_init_dcdc[1] =
1209 .name = "PWM_DCDC1",
1211 .max_uV = 1800000, //0.6-1.8V
1213 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE,
1215 .num_consumer_supplies = ARRAY_SIZE(pwm_dcdc1_consumers),
1216 .consumer_supplies = pwm_dcdc1_consumers,
1220 static struct pwm_platform_data pwm_regulator_info[1] = {
1223 .pwm_gpio = RK30_PIN3_PD4,
1224 .pwm_iomux_pwm = PWM1,
1225 .pwm_iomux_gpio = GPIO3_D4,
1226 .pwm_voltage = 1100000,
1227 .suspend_voltage = 1000000,
1230 .coefficient = 575, //57.5%
1231 .pwm_voltage_map = pwm_voltage_map,
1232 .init_data = &pwm_regulator_init_dcdc[0],
1236 struct platform_device pwm_regulator_device[1] = {
1238 .name = "pwm-voltage-regulator",
1241 .platform_data = &pwm_regulator_info[0],
1247 #ifdef CONFIG_RK29_VMAC
1248 #define PHY_PWR_EN_GPIO RK30_PIN1_PD6
1249 #include "board-rk30-sdk-vmac.c"
1252 #ifdef CONFIG_RFKILL_RK
1253 // bluetooth rfkill device, its driver in net/rfkill/rfkill-rk.c
1254 static struct rfkill_rk_platform_data rfkill_rk_platdata = {
1255 .type = RFKILL_TYPE_BLUETOOTH,
1257 .poweron_gpio = { // BT_REG_ON
1258 .io = INVALID_GPIO, //RK30_PIN3_PC7,
1259 .enable = GPIO_HIGH,
1261 .name = "bt_poweron",
1266 .reset_gpio = { // BT_RST
1267 .io = RK30_PIN3_PC7, // set io to INVALID_GPIO for disable it
1275 .wake_gpio = { // BT_WAKE, use to control bt's sleep and wakeup
1276 .io = RK30_PIN3_PC6, // set io to INVALID_GPIO for disable it
1277 .enable = GPIO_HIGH,
1284 .wake_host_irq = { // BT_HOST_WAKE, for bt wakeup host when it is in deep sleep
1286 .io = RK30_PIN0_PA5, // set io to INVALID_GPIO for disable it
1287 .enable = GPIO_LOW, // set GPIO_LOW for falling, set 0 for rising
1294 .rts_gpio = { // UART_RTS, enable or disable BT's data coming
1295 .io = RK30_PIN1_PA3, // set io to INVALID_GPIO for disable it
1305 static struct platform_device device_rfkill_rk = {
1306 .name = "rfkill_rk",
1309 .platform_data = &rfkill_rk_platdata,
1314 #if defined(CONFIG_GPS_RK)
1315 int rk_gps_io_init(void)
1317 printk("%s \n", __FUNCTION__);
1319 gpio_request(RK30_PIN1_PB5, NULL);
1320 gpio_direction_output(RK30_PIN1_PB5, GPIO_LOW);
1322 iomux_set(GPS_RFCLK);//GPS_CLK
1323 iomux_set(GPS_MAG);//GPS_MAG
1324 iomux_set(GPS_SIG);//GPS_SIGN
1326 gpio_request(RK30_PIN1_PA6, NULL);
1327 gpio_direction_output(RK30_PIN1_PA6, GPIO_LOW);
1329 gpio_request(RK30_PIN1_PA5, NULL);
1330 gpio_direction_output(RK30_PIN1_PA5, GPIO_LOW);
1332 gpio_request(RK30_PIN1_PA7, NULL);
1333 gpio_direction_output(RK30_PIN1_PA7, GPIO_LOW);
1336 int rk_gps_power_up(void)
1338 printk("%s \n", __FUNCTION__);
1343 int rk_gps_power_down(void)
1345 printk("%s \n", __FUNCTION__);
1350 int rk_gps_reset_set(int level)
1354 int rk_enable_hclk_gps(void)
1356 struct clk *gps_aclk = NULL;
1357 gps_aclk = clk_get(NULL, "aclk_gps");
1359 clk_enable(gps_aclk);
1361 printk("%s \n", __FUNCTION__);
1364 printk("get gps aclk fail\n");
1367 int rk_disable_hclk_gps(void)
1369 struct clk *gps_aclk = NULL;
1370 gps_aclk = clk_get(NULL, "aclk_gps");
1372 //TO wait long enough until GPS ISR is finished.
1374 clk_disable(gps_aclk);
1376 printk("%s \n", __FUNCTION__);
1379 printk("get gps aclk fail\n");
1382 struct rk_gps_data rk_gps_info = {
1383 .io_init = rk_gps_io_init,
1384 .power_up = rk_gps_power_up,
1385 .power_down = rk_gps_power_down,
1386 .reset = rk_gps_reset_set,
1387 .enable_hclk_gps = rk_enable_hclk_gps,
1388 .disable_hclk_gps = rk_disable_hclk_gps,
1389 .GpsSign = RK30_PIN1_PB3,
1390 .GpsMag = RK30_PIN1_PB2, //GPIO index
1391 .GpsClk = RK30_PIN1_PB4, //GPIO index
1392 .GpsVCCEn = RK30_PIN1_PB5, //GPIO index
1393 .GpsSpi_CSO = RK30_PIN1_PA4, //GPIO index
1394 .GpsSpiClk = RK30_PIN1_PA5, //GPIO index
1395 .GpsSpiMOSI = RK30_PIN1_PA7, //GPIO index
1399 .u32GpsPhyAddr = RK30_GPS_PHYS,
1400 .u32GpsPhySize = RK30_GPS_SIZE,
1403 struct platform_device rk_device_gps = {
1404 .name = "gps_hv5820b",
1407 .platform_data = &rk_gps_info,
1412 #if defined(CONFIG_MT5931_MT6622)
1413 static struct mt6622_platform_data mt6622_platdata = {
1414 .power_gpio = { // BT_REG_ON
1415 .io = RK30_PIN3_PD5, // set io to INVALID_GPIO for disable it
1416 .enable = GPIO_HIGH,
1422 .reset_gpio = { // BT_RST
1423 .io = RK30_PIN0_PD7,
1424 .enable = GPIO_HIGH,
1431 .io = RK30_PIN3_PD2,
1432 .enable = GPIO_HIGH,
1438 .rts_gpio = { // UART_RTS
1439 .io = RK30_PIN1_PA3,
1449 static struct platform_device device_mt6622 = {
1453 .platform_data = &mt6622_platdata,
1458 static struct platform_device *devices[] __initdata = {
1462 #ifdef CONFIG_ANDROID_TIMED_GPIO
1463 &rk29_device_vibrator,
1465 #ifdef CONFIG_LEDS_GPIO_PLATFORM
1466 &rk29_device_gpio_leds,
1468 #ifdef CONFIG_RK_IRDA
1471 #if defined(CONFIG_WIFI_CONTROL_FUNC)||defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
1472 &rk29sdk_wifi_device,
1475 #if defined(CONFIG_MT6620)
1479 #ifdef CONFIG_RK29_SUPPORT_MODEM
1482 #if defined(CONFIG_MU509)
1485 #if defined(CONFIG_MW100)
1488 #if defined(CONFIG_MT6229)
1489 &rk29_device_mt6229,
1491 #ifdef CONFIG_BATTERY_RK30_ADC
1492 &rk30_device_adc_battery,
1494 #ifdef CONFIG_RFKILL_RK
1497 #ifdef CONFIG_GPS_RK
1500 #if defined(CONFIG_ARCH_RK3188)
1503 #ifdef CONFIG_MT5931_MT6622
1508 static int rk_platform_add_display_devices(void)
1510 struct platform_device *fb = NULL; //fb
1511 struct platform_device *lcdc0 = NULL; //lcdc0
1512 struct platform_device *lcdc1 = NULL; //lcdc1
1513 struct platform_device *bl = NULL; //backlight
1514 #ifdef CONFIG_FB_ROCKCHIP
1518 #if defined(CONFIG_LCDC0_RK3066B) || defined(CONFIG_LCDC0_RK3188)
1519 lcdc0 = &device_lcdc0,
1522 #if defined(CONFIG_LCDC1_RK3066B) || defined(CONFIG_LCDC1_RK3188)
1523 lcdc1 = &device_lcdc1,
1526 #ifdef CONFIG_BACKLIGHT_RK29_BL
1527 bl = &rk29_device_backlight,
1529 __rk_platform_add_display_devices(fb,lcdc0,lcdc1,bl);
1536 #ifdef CONFIG_I2C0_RK30
1537 static struct i2c_board_info __initdata i2c0_info[] = {
1538 #if defined (CONFIG_GS_MMA8452)
1540 .type = "gs_mma8452",
1543 .irq = MMA8452_INT_PIN,
1544 .platform_data = &mma8452_info,
1547 #if defined (CONFIG_GS_LIS3DH)
1549 .type = "gs_lis3dh",
1550 .addr = 0x19, //0x19(SA0-->VCC), 0x18(SA0-->GND)
1552 .irq = LIS3DH_INT_PIN,
1553 .platform_data = &lis3dh_info,
1556 #if defined (CONFIG_COMPASS_AK8975)
1561 .irq = RK30_PIN3_PD7,
1562 .platform_data = &akm8975_info,
1565 #if defined (CONFIG_GYRO_L3G4200D)
1567 .type = "l3g4200d_gryo",
1570 .irq = L3G4200D_INT_PIN,
1571 .platform_data = &l3g4200d_info,
1574 #if defined (CONFIG_SND_SOC_RK1000)
1576 .type = "rk1000_i2c_codec",
1581 .type = "rk1000_control",
1586 #if defined (CONFIG_SND_SOC_RT5631)
1594 #if defined (CONFIG_SND_SOC_RT5640)
1602 #ifdef CONFIG_MFD_RK610
1604 .type = "rk610_ctl",
1607 .platform_data = &rk610_ctl_pdata,
1609 #ifdef CONFIG_RK610_TVOUT
1611 .type = "rk610_tvout",
1616 #ifdef CONFIG_HDMI_RK610
1618 .type = "rk610_hdmi",
1621 .irq = INVALID_GPIO,
1624 #ifdef CONFIG_SND_SOC_RK610
1625 {//RK610_CODEC addr from 0x60 to 0x80 (0x60~0x80)
1626 .type = "rk610_i2c_codec",
1629 .platform_data = &rk610_codec_pdata,
1637 int __sramdata g_pmic_type = 0;
1638 #ifdef CONFIG_I2C1_RK30
1639 #ifdef CONFIG_MFD_WM831X_I2C
1640 #define PMU_POWER_SLEEP RK30_PIN0_PA1
1642 static struct pmu_info wm8326_dcdc_info[] = {
1644 .name = "vdd_core", //logic
1647 .suspend_vol = 950000,
1650 .name = "vdd_cpu", //arm
1653 .suspend_vol = 950000,
1656 .name = "dcdc3", //ddr
1659 .suspend_vol = 1150000,
1661 #ifdef CONFIG_MACH_RK3066_SDK
1663 .name = "dcdc4", //vcc_io
1666 .suspend_vol = 3000000,
1670 .name = "dcdc4", //vcc_io
1673 .suspend_vol = 2800000,
1678 static struct pmu_info wm8326_ldo_info[] = {
1680 .name = "ldo1", //vcc18_cif
1683 .suspend_vol = 1800000,
1686 .name = "ldo2", //vccio_wl
1689 .suspend_vol = 1800000,
1695 .suspend_vol = 1100000,
1698 .name = "ldo4", //vdd11
1701 .suspend_vol = 1000000,
1704 .name = "ldo5", //vcc25
1707 .suspend_vol = 1800000,
1710 .name = "ldo6", //vcc33
1713 .suspend_vol = 3300000,
1716 .name = "ldo7", //vcc28_cif
1719 .suspend_vol = 2800000,
1722 .name = "ldo8", //vcca33
1725 .suspend_vol = 3300000,
1728 .name = "ldo9", //vcc_tp
1731 .suspend_vol = 3300000,
1734 .name = "ldo10", //flash_io
1737 .suspend_vol = 1800000,
1741 #include "board-pmu-wm8326.c"
1744 #ifdef CONFIG_MFD_TPS65910
1745 #define TPS65910_HOST_IRQ RK30_PIN0_PB3
1747 #define PMU_POWER_SLEEP RK30_PIN0_PA1
1749 static struct pmu_info tps65910_dcdc_info[] = {
1751 .name = "vdd_core", //logic
1756 .name = "vdd2", //ddr
1761 .name = "vio", //vcc_io
1767 static struct pmu_info tps65910_ldo_info[] = {
1769 .name = "vpll", //vdd10
1774 .name = "vdig1", //vcc18_cif
1779 .name = "vdig2", //vdd_jetta
1784 .name = "vaux1", //vcc28_cif
1789 .name = "vaux2", //vcca33
1794 .name = "vaux33", //vcc_tp
1799 .name = "vmmc", //vcc30
1804 .name = "vdac", //vcc18
1810 #include "board-pmu-tps65910.c"
1813 #ifdef CONFIG_REGULATOR_ACT8846
1814 #define PMU_POWER_SLEEP RK30_PIN0_PA1
1815 #define PMU_VSEL RK30_PIN3_PD3
1816 static struct pmu_info act8846_dcdc_info[] = {
1818 .name = "act_dcdc1", //ddr
1821 .suspend_vol = 1200000,
1824 .name = "vdd_core", //logic
1827 #ifdef CONFIG_ACT8846_SUPPORT_RESET
1828 .suspend_vol = 1200000,
1830 .suspend_vol = 900000,
1835 .name = "vdd_cpu", //arm
1838 #ifdef CONFIG_ACT8846_SUPPORT_RESET
1839 .suspend_vol = 1200000,
1841 .suspend_vol = 900000,
1846 .name = "act_dcdc4", //vccio
1849 #ifdef CONFIG_ACT8846_SUPPORT_RESET
1850 .suspend_vol = 3000000,
1852 .suspend_vol = 2800000,
1858 static struct pmu_info act8846_ldo_info[] = {
1860 .name = "act_ldo1", //vdd11
1865 .name = "act_ldo2", //vdd12
1870 .name = "act_ldo3", //vcc18_cif
1875 .name = "act_ldo4", //vcca33
1880 .name = "act_ldo5", //vcctp
1885 .name = "act_ldo6", //vcc33
1890 .name = "act_ldo7", //vccio_wl
1895 .name = "act_ldo8", //vcc28_cif
1901 #include "board-pmu-act8846.c"
1904 #ifdef CONFIG_MFD_RK808
1905 #define PMU_POWER_SLEEP RK30_PIN0_PA1
1906 #define RK808_HOST_IRQ RK30_PIN0_PB3
1908 static struct pmu_info rk808_dcdc_info[] = {
1910 .name = "vdd_cpu", //arm
1913 .suspend_vol = 900000,
1916 .name = "vdd_core", //logic
1919 .suspend_vol = 900000,
1922 .name = "rk_dcdc3", //ddr
1925 .suspend_vol = 1200000,
1928 .name = "rk_dcdc4", //vccio
1931 .suspend_vol = 3000000,
1935 static struct pmu_info rk808_ldo_info[] = {
1937 .name = "rk_ldo1", //vcc33
1940 .suspend_vol = 3300000,
1943 .name = "rk_ldo2", //vcctp
1946 .suspend_vol = 3300000,
1950 .name = "rk_ldo3", //vdd10
1953 .suspend_vol = 1000000,
1956 .name = "rk_ldo4", //vcc18
1959 .suspend_vol = 1800000,
1962 .name = "rk_ldo5", //vcc28_cif
1965 .suspend_vol = 2800000,
1968 .name = "rk_ldo6", //vdd12
1971 .suspend_vol = 1200000,
1974 .name = "rk_ldo7", //vcc18_cif
1977 .suspend_vol = 1800000,
1980 .name = "rk_ldo8", //vcca_33
1983 .suspend_vol = 3300000,
1987 #include "board-pmu-rk808.c"
1989 #ifdef CONFIG_MFD_RICOH619
1990 #define PMU_POWER_SLEEP RK30_PIN0_PA1
1991 #define RICOH619_HOST_IRQ RK30_PIN0_PB3
1993 static struct pmu_info ricoh619_dcdc_info[] = {
1995 .name = "vdd_cpu", //arm
1998 .suspend_vol = 900000,
2001 .name = "vdd_core", //logic
2004 .suspend_vol = 900000,
2008 .name = "ricoh_dc3", //vcc18
2011 .suspend_vol = 1800000,
2015 .name = "ricoh_dc4", //vccio
2018 .suspend_vol = 3300000,
2022 .name = "ricoh_dc5", //ddr
2025 .suspend_vol = 1200000,
2029 static struct pmu_info ricoh619_ldo_info[] = {
2031 .name = "ricoh_ldo1", //vcc30
2036 .name = "ricoh_ldo2", //vcca33
2041 .name = "ricoh_ldo3", //vcctp
2046 .name = "ricoh_ldo4", //vccsd
2051 .name = "ricoh_ldo5", //vcc18_cif
2056 .name = "ricoh_ldo6", //vdd12
2061 .name = "ricoh_ldo7", //vcc28_cif
2066 .name = "ricoh_ldo8", //vcc25
2071 .name = "ricoh_ldo9", //vdd10
2076 .name = "ricoh_ldo10", //vcca18
2083 #include "board-pmu-ricoh619.c"
2086 #ifdef CONFIG_MFD_RT5025
2087 #define RT5025_HOST_IRQ RK30_PIN0_PB3
2089 static struct pmu_info rt5025_dcdc_info[] = {
2091 .name = "vdd_cpu", //arm
2096 .name = "vdd_core", //logic
2102 .name = "rt5025-dcdc3", //vccio
2108 static struct pmu_info rt5025_ldo_info[] = {
2110 .name = "rt5025-ldo1", //vcc18
2115 .name = "rt5025-ldo2", //vddjetta
2120 .name = "rt5025-ldo3", //vdd10
2125 .name = "rt5025-ldo4", //vccjetta
2130 .name = "rt5025-ldo5", //vccio_wl
2135 .name = "rt5025-ldo6", //vcc_tp
2142 #include "board-pmu-rt5025.c"
2147 static struct i2c_board_info __initdata i2c1_info[] = {
2148 #if defined (CONFIG_MFD_WM831X_I2C)
2153 .irq = RK30_PIN0_PB3,
2154 .platform_data = &wm831x_platdata,
2157 #if defined (CONFIG_MFD_TPS65910)
2160 .addr = TPS65910_I2C_ID0,
2162 .irq = TPS65910_HOST_IRQ,
2163 .platform_data = &tps65910_data,
2167 #if defined (CONFIG_REGULATOR_ACT8846)
2172 // .irq = ACT8846_HOST_IRQ,
2173 .platform_data=&act8846_data,
2176 #if defined (CONFIG_MFD_RK808)
2181 // .irq = ACT8846_HOST_IRQ,
2182 .platform_data=&rk808_data,
2186 #if defined (CONFIG_MFD_RICOH619)
2191 .irq = RICOH619_HOST_IRQ,
2192 .platform_data=&ricoh619_data,
2196 #if defined (CONFIG_MFD_RT5025)
2201 .irq = RT5025_HOST_IRQ,
2202 .platform_data=&rt5025_data,
2206 #if defined (CONFIG_RTC_HYM8563)
2208 .type = "rtc_hym8563",
2211 .irq = RK30_PIN1_PA4,
2213 #if defined (CONFIG_CW2015_BATTERY)
2218 .platform_data = &cw_bat_platdata,
2226 void __sramfunc board_pmu_suspend(void)
2228 #if defined (CONFIG_MFD_WM831X_I2C)
2229 if(pmic_is_wm8326())
2230 board_pmu_wm8326_suspend();
2232 #if defined (CONFIG_MFD_TPS65910)
2233 if(pmic_is_tps65910())
2234 board_pmu_tps65910_suspend();
2236 #if defined (CONFIG_REGULATOR_ACT8846)
2237 if(pmic_is_act8846())
2238 board_pmu_act8846_suspend();
2240 #if defined (CONFIG_MFD_RK808)
2242 board_pmu_rk808_suspend();
2244 #if defined (CONFIG_MFD_RICOH619)
2245 if(pmic_is_ricoh619())
2246 board_pmu_ricoh619_suspend();
2251 void __sramfunc board_pmu_resume(void)
2253 #if defined (CONFIG_MFD_WM831X_I2C)
2254 if(pmic_is_wm8326())
2255 board_pmu_wm8326_resume();
2257 #if defined (CONFIG_MFD_TPS65910)
2258 if(pmic_is_tps65910())
2259 board_pmu_tps65910_resume();
2261 #if defined (CONFIG_REGULATOR_ACT8846)
2262 if(pmic_is_act8846())
2263 board_pmu_act8846_resume();
2265 #if defined (CONFIG_MFD_RK808)
2267 board_pmu_rk808_resume();
2269 #if defined (CONFIG_MFD_RICOH619)
2270 if(pmic_is_ricoh619())
2271 board_pmu_ricoh619_resume();
2276 int __sramdata gpio3d6_iomux,gpio3d6_do,gpio3d6_dir,gpio3d6_en;
2278 #define grf_readl(offset) readl_relaxed(RK30_GRF_BASE + offset)
2279 #define grf_writel(v, offset) do { writel_relaxed(v, RK30_GRF_BASE + offset); dsb(); } while (0)
2281 void __sramfunc rk30_pwm_logic_suspend_voltage(void)
2283 #ifdef CONFIG_RK30_PWM_REGULATOR
2285 // int gpio0d7_iomux,gpio0d7_do,gpio0d7_dir,gpio0d7_en;
2287 gpio3d6_iomux = grf_readl(GRF_GPIO3D_IOMUX);
2288 gpio3d6_do = grf_readl(GRF_GPIO3H_DO);
2289 gpio3d6_dir = grf_readl(GRF_GPIO3H_DIR);
2290 gpio3d6_en = grf_readl(GRF_GPIO3H_EN);
2292 grf_writel((0x03000300), GRF_GPIO3D_IOMUX);
2293 grf_writel((1<<28)|(1<<12), GRF_GPIO3H_DIR);
2294 grf_writel((1<<28)|(1<<12), GRF_GPIO3H_DO);
2295 grf_writel((1<<28)|(1<<12), GRF_GPIO3H_EN);
2298 void __sramfunc rk30_pwm_logic_resume_voltage(void)
2300 #ifdef CONFIG_RK30_PWM_REGULATOR
2301 grf_writel((1<<28)|gpio3d6_iomux, GRF_GPIO3D_IOMUX);
2302 grf_writel((1<<30)|gpio3d6_en, GRF_GPIO3H_EN);
2303 grf_writel((1<<30)|gpio3d6_dir, GRF_GPIO3H_DIR);
2304 grf_writel((1<<30)|gpio3d6_do, GRF_GPIO3H_DO);
2310 extern void pwm_suspend_voltage(void);
2311 extern void pwm_resume_voltage(void);
2312 void rk30_pwm_suspend_voltage_set(void)
2314 #ifdef CONFIG_RK30_PWM_REGULATOR
2315 pwm_suspend_voltage();
2318 void rk30_pwm_resume_voltage_set(void)
2320 #ifdef CONFIG_RK30_PWM_REGULATOR
2321 pwm_resume_voltage();
2326 #ifdef CONFIG_I2C2_RK30
2327 static struct i2c_board_info __initdata i2c2_info[] = {
2328 #if defined (CONFIG_TOUCHSCREEN_GT8XX)
2330 .type = "Goodix-TS",
2333 .irq = RK30_PIN1_PB7,
2334 .platform_data = &goodix_info,
2337 #if defined (CONFIG_LS_CM3217)
2339 .type = "lightsensor",
2342 .platform_data = &cm3217_info,
2348 #ifdef CONFIG_I2C3_RK30
2349 static struct i2c_board_info __initdata i2c3_info[] = {
2353 #ifdef CONFIG_I2C4_RK30
2354 static struct i2c_board_info __initdata i2c4_info[] = {
2355 #if defined (CONFIG_MFD_RK616)
2360 .platform_data = &rk616_pdata,
2367 #ifdef CONFIG_I2C_GPIO_RK30
2368 #define I2C_SDA_PIN INVALID_GPIO// RK30_PIN2_PD6 //set sda_pin here
2369 #define I2C_SCL_PIN INVALID_GPIO//RK30_PIN2_PD7 //set scl_pin here
2370 static int rk30_i2c_io_init(void)
2372 //set iomux (gpio) here
2373 //rk30_mux_api_set(GPIO2D7_I2C1SCL_NAME, GPIO2D_GPIO2D7);
2374 //rk30_mux_api_set(GPIO2D6_I2C1SDA_NAME, GPIO2D_GPIO2D6);
2378 struct i2c_gpio_platform_data default_i2c_gpio_data = {
2379 .sda_pin = I2C_SDA_PIN,
2380 .scl_pin = I2C_SCL_PIN,
2381 .udelay = 5, // clk = 500/udelay = 100Khz
2382 .timeout = 100,//msecs_to_jiffies(100),
2384 .io_init = rk30_i2c_io_init,
2386 static struct i2c_board_info __initdata i2c_gpio_info[] = {
2390 static void __init rk30_i2c_register_board_info(void)
2392 #ifdef CONFIG_I2C0_RK30
2393 i2c_register_board_info(0, i2c0_info, ARRAY_SIZE(i2c0_info));
2395 #ifdef CONFIG_I2C1_RK30
2396 i2c_register_board_info(1, i2c1_info, ARRAY_SIZE(i2c1_info));
2398 #ifdef CONFIG_I2C2_RK30
2399 i2c_register_board_info(2, i2c2_info, ARRAY_SIZE(i2c2_info));
2401 #ifdef CONFIG_I2C3_RK30
2402 i2c_register_board_info(3, i2c3_info, ARRAY_SIZE(i2c3_info));
2404 #ifdef CONFIG_I2C4_RK30
2405 i2c_register_board_info(4, i2c4_info, ARRAY_SIZE(i2c4_info));
2407 #ifdef CONFIG_I2C_GPIO_RK30
2408 i2c_register_board_info(5, i2c_gpio_info, ARRAY_SIZE(i2c_gpio_info));
2413 // ========== Begin of rk3168 top board keypad defination ============
2415 #include <plat/key.h>
2417 static struct rk29_keys_button key_button[] = {
2420 .code = KEY_VOLUMEDOWN,
2422 .gpio = INVALID_GPIO,
2423 .active_low = PRESS_LEV_LOW,
2428 .gpio = RK30_PIN0_PA4,
2429 .active_low = PRESS_LEV_LOW,
2434 .code = KEY_VOLUMEUP,
2436 .gpio = INVALID_GPIO,
2437 .active_low = PRESS_LEV_LOW,
2443 .gpio = INVALID_GPIO,
2444 .active_low = PRESS_LEV_LOW,
2450 .gpio = INVALID_GPIO,
2451 .active_low = PRESS_LEV_LOW,
2457 .gpio = INVALID_GPIO,
2458 .active_low = PRESS_LEV_LOW,
2464 .gpio = INVALID_GPIO,
2465 .active_low = PRESS_LEV_LOW,
2468 struct rk29_keys_platform_data rk29_keys_pdata = {
2469 .buttons = key_button,
2470 .nbuttons = ARRAY_SIZE(key_button),
2471 .chn = 1, //chn: 0-7, if do not use ADC,set 'chn' -1
2474 // =========== End of rk3168 top board keypad defination =============
2477 #define POWER_ON_PIN RK30_PIN0_PA0 //power_hold
2478 static void rk30_pm_power_off(void)
2480 printk(KERN_ERR "rk30_pm_power_off start...\n");
2481 #if defined(CONFIG_MFD_WM831X)
2482 if(pmic_is_wm8326()){
2483 wm831x_set_bits(Wm831x,WM831X_GPIO_LEVEL,0x0001,0x0000); //set sys_pwr 0
2484 wm831x_device_shutdown(Wm831x);//wm8326 shutdown
2488 #if defined(CONFIG_REGULATOR_ACT8846)
2489 if(pmic_is_act8846())
2491 act8846_device_shutdown();
2495 #if defined(CONFIG_MFD_TPS65910)
2496 if(pmic_is_tps65910())
2498 tps65910_device_shutdown();//tps65910 shutdown
2502 #if defined(CONFIG_MFD_RK808)
2505 rk808_device_shutdown();//rk808 shutdown
2508 #if defined(CONFIG_MFD_RICOH619)
2509 if(pmic_is_ricoh619()){
2510 ricoh619_power_off(); //ricoh619 shutdown
2514 #if defined(CONFIG_MFD_RT5025)
2515 if(pmic_is_rt5025()){
2516 rt5025_power_off(); //rt5025 shutdown
2520 gpio_direction_output(POWER_ON_PIN, GPIO_LOW);
2524 static void __init machine_rk30_board_init(void)
2527 gpio_request(POWER_ON_PIN, "poweronpin");
2528 gpio_direction_output(POWER_ON_PIN, GPIO_HIGH);
2530 pm_power_off = rk30_pm_power_off;
2532 gpio_direction_output(POWER_ON_PIN, GPIO_HIGH);
2535 rk30_i2c_register_board_info();
2536 spi_register_board_info(board_spi_devices, ARRAY_SIZE(board_spi_devices));
2537 platform_add_devices(devices, ARRAY_SIZE(devices));
2538 rk_platform_add_display_devices();
2539 board_usb_detect_init(RK30_PIN0_PA7);
2541 #if defined(CONFIG_WIFI_CONTROL_FUNC)
2542 rk29sdk_wifi_bt_gpio_control_init();
2543 #elif defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
2544 rk29sdk_wifi_combo_module_gpio_init();
2547 #if defined(CONFIG_MT6620)
2548 clk_set_rate(clk_get_sys("rk_serial.0", "uart"), 48*1000000);
2551 #if defined(CONFIG_MT5931_MT6622)
2552 clk_set_rate(clk_get_sys("rk_serial.0", "uart"), 24*1000000);
2555 #define HD_SCREEN_SIZE 1920UL*1200UL*4*3
2556 static void __init rk30_reserve(void)
2558 #if defined(CONFIG_ARCH_RK3188)
2559 /*if lcd resolution great than or equal to 1920*1200,reserve the ump memory */
2560 if(!(get_fb_size() < ALIGN(HD_SCREEN_SIZE,SZ_1M)))
2562 int ump_mem_phy_size=512UL*1024UL*1024UL;
2563 resource_mali[0].start = board_mem_reserve_add("ump buf", ump_mem_phy_size);
2564 resource_mali[0].end = resource_mali[0].start + ump_mem_phy_size -1;
2568 rk30_ion_pdata.heaps[0].base = board_mem_reserve_add("ion", ION_RESERVE_SIZE);
2570 #ifdef CONFIG_FB_ROCKCHIP
2571 resource_fb[0].start = board_mem_reserve_add("fb0 buf", get_fb_size());
2572 resource_fb[0].end = resource_fb[0].start + get_fb_size()- 1;
2574 resource_fb[1].start = board_mem_reserve_add("ipp buf", RK30_FB0_MEM_SIZE);
2575 resource_fb[1].end = resource_fb[1].start + RK30_FB0_MEM_SIZE - 1;
2578 #if defined(CONFIG_FB_ROTATE) || !defined(CONFIG_THREE_FB_BUFFER)
2579 resource_fb[2].start = board_mem_reserve_add("fb2 buf",get_fb_size());
2580 resource_fb[2].end = resource_fb[2].start + get_fb_size() - 1;
2584 #ifdef CONFIG_VIDEO_RK29
2585 rk30_camera_request_reserve_mem();
2588 #ifdef CONFIG_GPS_RK
2589 //it must be more than 8MB
2590 rk_gps_info.u32MemoryPhyAddr = board_mem_reserve_add("gps", SZ_8M);
2592 board_mem_reserved();
2594 /******************************** arm dvfs frequency volt table **********************************/
2596 * dvfs_cpu_logic_table: table for arm and logic dvfs
2597 * @frequency : arm frequency
2598 * @cpu_volt : arm voltage depend on frequency
2601 #if defined(CONFIG_ARCH_RK3188)
2603 static struct cpufreq_frequency_table dvfs_arm_table_volt_level0[] = {
2604 {.frequency = 312 * 1000, .index = 850 * 1000},
2605 {.frequency = 504 * 1000, .index = 900 * 1000},
2606 {.frequency = 816 * 1000, .index = 950 * 1000},
2607 {.frequency = 1008 * 1000, .index = 1025 * 1000},
2608 {.frequency = 1200 * 1000, .index = 1100 * 1000},
2609 {.frequency = 1416 * 1000, .index = 1200 * 1000},
2610 {.frequency = 1608 * 1000, .index = 1300 * 1000},
2611 {.frequency = CPUFREQ_TABLE_END},
2614 static struct cpufreq_frequency_table dvfs_arm_table_volt_level1[] = {
2615 {.frequency = 312 * 1000, .index = 875 * 1000},
2616 {.frequency = 504 * 1000, .index = 925 * 1000},
2617 {.frequency = 816 * 1000, .index = 975 * 1000},
2618 {.frequency = 1008 * 1000, .index = 1075 * 1000},
2619 {.frequency = 1200 * 1000, .index = 1150 * 1000},
2620 {.frequency = 1416 * 1000, .index = 1250 * 1000},
2621 {.frequency = 1608 * 1000, .index = 1350 * 1000},
2622 {.frequency = CPUFREQ_TABLE_END},
2625 static struct cpufreq_frequency_table dvfs_arm_table_volt_level2[] = {
2626 {.frequency = 312 * 1000, .index = 900 * 1000},
2627 {.frequency = 504 * 1000, .index = 925 * 1000},
2628 {.frequency = 816 * 1000, .index = 1000 * 1000},
2629 {.frequency = 1008 * 1000, .index = 1075 * 1000},
2630 {.frequency = 1200 * 1000, .index = 1200 * 1000},
2631 {.frequency = 1416 * 1000, .index = 1250 * 1000},
2632 {.frequency = 1608 * 1000, .index = 1350 * 1000},
2633 {.frequency = CPUFREQ_TABLE_END},
2636 /******************************** gpu dvfs frequency volt table **********************************/
2638 static struct cpufreq_frequency_table dvfs_gpu_table_volt_level0[] = {
2639 {.frequency = 133 * 1000, .index = 975 * 1000},//the mininum rate is limited 133M for rk3188
2640 {.frequency = 200 * 1000, .index = 975 * 1000},
2641 {.frequency = 266 * 1000, .index = 1000 * 1000},
2642 {.frequency = 300 * 1000, .index = 1050 * 1000},
2643 {.frequency = 400 * 1000, .index = 1100 * 1000},
2644 {.frequency = 600 * 1000, .index = 1200 * 1000},
2645 {.frequency = CPUFREQ_TABLE_END},
2648 static struct cpufreq_frequency_table dvfs_gpu_table_volt_level1[] = {
2649 {.frequency = 133 * 1000, .index = 975 * 1000},//the mininum rate is limited 133M for rk3188
2650 {.frequency = 200 * 1000, .index = 1000 * 1000},
2651 {.frequency = 266 * 1000, .index = 1025 * 1000},
2652 {.frequency = 300 * 1000, .index = 1050 * 1000},
2653 {.frequency = 400 * 1000, .index = 1100 * 1000},
2654 {.frequency = 600 * 1000, .index = 1250 * 1000},
2655 {.frequency = CPUFREQ_TABLE_END},
2658 /******************************** ddr dvfs frequency volt table **********************************/
2659 static struct cpufreq_frequency_table dvfs_ddr_table_volt_level0[] = {
2660 {.frequency = 200 * 1000 + DDR_FREQ_SUSPEND, .index = 950 * 1000},
2661 {.frequency = 300 * 1000 + DDR_FREQ_VIDEO, .index = 1000 * 1000},
2662 {.frequency = 396 * 1000 + DDR_FREQ_NORMAL, .index = 1100 * 1000},
2663 {.frequency = 460 * 1000 + DDR_FREQ_DUALVIEW, .index = 1150 * 1000},
2664 //{.frequency = 528 * 1000 + DDR_FREQ_NORMAL, .index = 1200 * 1000},
2665 {.frequency = CPUFREQ_TABLE_END},
2668 static struct cpufreq_frequency_table dvfs_ddr_table_t[] = {
2669 {.frequency = 200 * 1000 + DDR_FREQ_SUSPEND, .index = 950 * 1000},
2670 {.frequency = 460 * 1000 + DDR_FREQ_NORMAL, .index = 1150 * 1000},
2671 {.frequency = CPUFREQ_TABLE_END},
2674 //if you board is good for volt quality,select dvfs_arm_table_volt_level0
2675 #define dvfs_arm_table dvfs_arm_table_volt_level1
2676 #define dvfs_gpu_table dvfs_gpu_table_volt_level1
2677 #define dvfs_ddr_table dvfs_ddr_table_volt_level0
2680 //for RK3168 && RK3066B
2681 static struct cpufreq_frequency_table dvfs_arm_table[] = {
2682 {.frequency = 312 * 1000, .index = 950 * 1000},
2683 {.frequency = 504 * 1000, .index = 1000 * 1000},
2684 {.frequency = 816 * 1000, .index = 1050 * 1000},
2685 {.frequency = 1008 * 1000, .index = 1125 * 1000},
2686 {.frequency = 1200 * 1000, .index = 1200 * 1000},
2687 //{.frequency = 1416 * 1000, .index = 1250 * 1000},
2688 //{.frequency = 1608 * 1000, .index = 1300 * 1000},
2689 {.frequency = CPUFREQ_TABLE_END},
2692 static struct cpufreq_frequency_table dvfs_gpu_table[] = {
2693 {.frequency = 100 * 1000, .index = 1000 * 1000},
2694 {.frequency = 200 * 1000, .index = 1000 * 1000},
2695 {.frequency = 266 * 1000, .index = 1050 * 1000},
2696 //{.frequency = 300 * 1000, .index = 1050 * 1000},
2697 {.frequency = 400 * 1000, .index = 1125 * 1000},
2698 {.frequency = CPUFREQ_TABLE_END},
2701 static struct cpufreq_frequency_table dvfs_ddr_table[] = {
2702 {.frequency = 200 * 1000 + DDR_FREQ_SUSPEND, .index = 1000 * 1000},
2703 {.frequency = 300 * 1000 + DDR_FREQ_VIDEO, .index = 1050 * 1000},
2704 {.frequency = 400 * 1000 + DDR_FREQ_NORMAL, .index = 1100 * 1000},
2705 {.frequency = 450 * 1000, .index = 1150 * 1000},
2706 {.frequency = CPUFREQ_TABLE_END},
2709 /******************************** arm dvfs frequency volt table end **********************************/
2710 //#define DVFS_CPU_TABLE_SIZE (ARRAY_SIZE(dvfs_cpu_logic_table))
2711 //static struct cpufreq_frequency_table cpu_dvfs_table[DVFS_CPU_TABLE_SIZE];
2712 //static struct cpufreq_frequency_table dep_cpu2core_table[DVFS_CPU_TABLE_SIZE];
2713 int get_max_freq(struct cpufreq_frequency_table *table)
2717 for(i=0;table[i].frequency!= CPUFREQ_TABLE_END;i++)
2719 if(temp<table[i].frequency)
2720 temp=table[i].frequency;
2722 printk("get_max_freq=%d\n",temp);
2726 void __init board_clock_init(void)
2728 u32 flags=RK30_CLOCKS_DEFAULT_FLAGS;
2729 #if !defined(CONFIG_ARCH_RK3188)
2730 if(get_max_freq(dvfs_gpu_table)<=(400*1000))
2732 flags=RK30_CLOCKS_DEFAULT_FLAGS|CLK_GPU_GPLL;
2735 flags=RK30_CLOCKS_DEFAULT_FLAGS|CLK_GPU_CPLL;
2737 rk30_clock_data_init(periph_pll_default, codec_pll_default, flags);
2738 //dvfs_set_arm_logic_volt(dvfs_cpu_logic_table, cpu_dvfs_table, dep_cpu2core_table);
2739 dvfs_set_freq_volt_table(clk_get(NULL, "cpu"), dvfs_arm_table);
2740 dvfs_set_freq_volt_table(clk_get(NULL, "gpu"), dvfs_gpu_table);
2741 #if defined(CONFIG_ARCH_RK3188)
2742 if (rk_pll_flag() == 0)
2743 dvfs_set_freq_volt_table(clk_get(NULL, "ddr"), dvfs_ddr_table);
2745 dvfs_set_freq_volt_table(clk_get(NULL, "ddr"), dvfs_ddr_table_t);
2747 dvfs_set_freq_volt_table(clk_get(NULL, "ddr"), dvfs_ddr_table);
2751 MACHINE_START(RK30, "RK30board")
2752 .boot_params = PLAT_PHYS_OFFSET + 0x800,
2753 .fixup = rk30_fixup,
2754 .reserve = &rk30_reserve,
2755 .map_io = rk30_map_io,
2756 .init_irq = rk30_init_irq,
2757 .timer = &rk30_timer,
2758 .init_machine = machine_rk30_board_init,