1 /* arch/arm/mach-rk30/board-rk30-sdk.c
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>
45 #ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_S3202
46 #include <linux/interrupt.h>
47 #include <linux/rmi.h>
49 #include <linux/sensor-dev.h>
50 #include <linux/regulator/machine.h>
51 #include <linux/rfkill-rk.h>
53 #if defined(CONFIG_HDMI_RK30)
54 #include "../../../drivers/video/rockchip/hdmi/rk_hdmi.h"
56 #include "../../../drivers/headset_observe/rk_headset.h"
57 #include <linux/mfd/tlv320aic3262-core.h>
58 #include <linux/mfd/tlv320aic3262-registers.h>
60 #if defined(CONFIG_SPIM_RK29)
61 #include "../../../drivers/spi/rk29_spim.h"
63 #if defined(CONFIG_ANDROID_TIMED_GPIO)
64 #include "../../../drivers/staging/android/timed_gpio.h"
66 #include <linux/mtk23d.h>
67 #include "../../../drivers/tty/serial/sc8800.h"
68 #define BP_VOL_PIN RK30_PIN6_PB2
69 #define RK30_FB0_MEM_SIZE 8*SZ_1M
71 #ifdef CONFIG_VIDEO_RK29
72 /*---------------- Camera Sensor Macro Define Begin ------------------------*/
73 /*---------------- Camera Sensor Configuration Macro Begin ------------------------*/
75 #define CONFIG_SENSOR_0 RK29_CAM_SENSOR_OV5640 /* back camera sensor */
76 #define CONFIG_SENSOR_IIC_ADDR_0 0x78
77 #define CONFIG_SENSOR_IIC_ADAPTER_ID_0 3
78 #define CONFIG_SENSOR_CIF_INDEX_0 0
79 #define CONFIG_SENSOR_ORIENTATION_0 90
80 #define CONFIG_SENSOR_POWER_PIN_0 RK30_PIN4_PC6
81 #define CONFIG_SENSOR_RESET_PIN_0 INVALID_GPIO
82 #define CONFIG_SENSOR_POWERDN_PIN_0 RK30_PIN1_PB6
83 #define CONFIG_SENSOR_FALSH_PIN_0 RK30_PIN4_PD6
84 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_H
85 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L
86 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
87 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_H
89 #define CONFIG_SENSOR_QCIF_FPS_FIXED_0 15000
90 #define CONFIG_SENSOR_240X160_FPS_FIXED_0 15000
91 #define CONFIG_SENSOR_QVGA_FPS_FIXED_0 15000
92 #define CONFIG_SENSOR_CIF_FPS_FIXED_0 15000
93 #define CONFIG_SENSOR_VGA_FPS_FIXED_0 15000
94 #define CONFIG_SENSOR_480P_FPS_FIXED_0 15000
95 #define CONFIG_SENSOR_SVGA_FPS_FIXED_0 15000
96 #define CONFIG_SENSOR_720P_FPS_FIXED_0 30000
98 #define CONFIG_SENSOR_01 RK29_CAM_SENSOR_OV5642 /* back camera sensor 1 */
99 #define CONFIG_SENSOR_IIC_ADDR_01 0x00
100 #define CONFIG_SENSOR_CIF_INDEX_01 1
101 #define CONFIG_SENSOR_IIC_ADAPTER_ID_01 4
102 #define CONFIG_SENSOR_ORIENTATION_01 90
103 #define CONFIG_SENSOR_POWER_PIN_01 INVALID_GPIO
104 #define CONFIG_SENSOR_RESET_PIN_01 INVALID_GPIO
105 #define CONFIG_SENSOR_POWERDN_PIN_01 RK30_PIN1_PD6
106 #define CONFIG_SENSOR_FALSH_PIN_01 INVALID_GPIO
107 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_01 RK29_CAM_POWERACTIVE_L
108 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_01 RK29_CAM_RESETACTIVE_L
109 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_01 RK29_CAM_POWERDNACTIVE_H
110 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_01 RK29_CAM_FLASHACTIVE_L
112 #define CONFIG_SENSOR_QCIF_FPS_FIXED_01 15000
113 #define CONFIG_SENSOR_240X160_FPS_FIXED_01 15000
114 #define CONFIG_SENSOR_QVGA_FPS_FIXED_01 15000
115 #define CONFIG_SENSOR_CIF_FPS_FIXED_01 15000
116 #define CONFIG_SENSOR_VGA_FPS_FIXED_01 15000
117 #define CONFIG_SENSOR_480P_FPS_FIXED_01 15000
118 #define CONFIG_SENSOR_SVGA_FPS_FIXED_01 15000
119 #define CONFIG_SENSOR_720P_FPS_FIXED_01 30000
121 #define CONFIG_SENSOR_02 RK29_CAM_SENSOR_OV5640 /* back camera sensor 2 */
122 #define CONFIG_SENSOR_IIC_ADDR_02 0x00
123 #define CONFIG_SENSOR_CIF_INDEX_02 1
124 #define CONFIG_SENSOR_IIC_ADAPTER_ID_02 4
125 #define CONFIG_SENSOR_ORIENTATION_02 90
126 #define CONFIG_SENSOR_POWER_PIN_02 INVALID_GPIO
127 #define CONFIG_SENSOR_RESET_PIN_02 INVALID_GPIO
128 #define CONFIG_SENSOR_POWERDN_PIN_02 RK30_PIN1_PD6
129 #define CONFIG_SENSOR_FALSH_PIN_02 INVALID_GPIO
130 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_02 RK29_CAM_POWERACTIVE_L
131 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_02 RK29_CAM_RESETACTIVE_L
132 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_02 RK29_CAM_POWERDNACTIVE_H
133 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_02 RK29_CAM_FLASHACTIVE_L
135 #define CONFIG_SENSOR_QCIF_FPS_FIXED_02 15000
136 #define CONFIG_SENSOR_240X160_FPS_FIXED_02 15000
137 #define CONFIG_SENSOR_QVGA_FPS_FIXED_02 15000
138 #define CONFIG_SENSOR_CIF_FPS_FIXED_02 15000
139 #define CONFIG_SENSOR_VGA_FPS_FIXED_02 15000
140 #define CONFIG_SENSOR_480P_FPS_FIXED_02 15000
141 #define CONFIG_SENSOR_SVGA_FPS_FIXED_02 15000
142 #define CONFIG_SENSOR_720P_FPS_FIXED_02 30000
144 #define CONFIG_SENSOR_1 RK29_CAM_SENSOR_GT2005 /* front camera sensor 0 */
145 #define CONFIG_SENSOR_IIC_ADDR_1 0x78
146 #define CONFIG_SENSOR_IIC_ADAPTER_ID_1 3
147 #define CONFIG_SENSOR_CIF_INDEX_1 0
148 #define CONFIG_SENSOR_ORIENTATION_1 270
149 #define CONFIG_SENSOR_POWER_PIN_1 RK30_PIN4_PC6
150 #define CONFIG_SENSOR_RESET_PIN_1 INVALID_GPIO
151 #define CONFIG_SENSOR_POWERDN_PIN_1 RK30_PIN1_PB7
152 #define CONFIG_SENSOR_FALSH_PIN_1 INVALID_GPIO
153 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_H
154 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L
155 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_L
156 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L
158 #define CONFIG_SENSOR_QCIF_FPS_FIXED_1 15000
159 #define CONFIG_SENSOR_240X160_FPS_FIXED_1 15000
160 #define CONFIG_SENSOR_QVGA_FPS_FIXED_1 15000
161 #define CONFIG_SENSOR_CIF_FPS_FIXED_1 15000
162 #define CONFIG_SENSOR_VGA_FPS_FIXED_1 15000
163 #define CONFIG_SENSOR_480P_FPS_FIXED_1 15000
164 #define CONFIG_SENSOR_SVGA_FPS_FIXED_1 15000
165 #define CONFIG_SENSOR_720P_FPS_FIXED_1 30000
167 #define CONFIG_SENSOR_11 RK29_CAM_SENSOR_OV2659 /* front camera sensor 1 */
168 #define CONFIG_SENSOR_IIC_ADDR_11 0x00
169 #define CONFIG_SENSOR_IIC_ADAPTER_ID_11 3
170 #define CONFIG_SENSOR_CIF_INDEX_11 0
171 #define CONFIG_SENSOR_ORIENTATION_11 270
172 #define CONFIG_SENSOR_POWER_PIN_11 INVALID_GPIO
173 #define CONFIG_SENSOR_RESET_PIN_11 INVALID_GPIO
174 #define CONFIG_SENSOR_POWERDN_PIN_11 INVALID_GPIO//RK30_PIN1_PB7
175 #define CONFIG_SENSOR_FALSH_PIN_11 INVALID_GPIO
176 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_11 RK29_CAM_POWERACTIVE_L
177 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_11 RK29_CAM_RESETACTIVE_L
178 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_11 RK29_CAM_POWERDNACTIVE_H
179 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_11 RK29_CAM_FLASHACTIVE_L
181 #define CONFIG_SENSOR_QCIF_FPS_FIXED_11 15000
182 #define CONFIG_SENSOR_240X160_FPS_FIXED_11 15000
183 #define CONFIG_SENSOR_QVGA_FPS_FIXED_11 15000
184 #define CONFIG_SENSOR_CIF_FPS_FIXED_11 15000
185 #define CONFIG_SENSOR_VGA_FPS_FIXED_11 15000
186 #define CONFIG_SENSOR_480P_FPS_FIXED_11 15000
187 #define CONFIG_SENSOR_SVGA_FPS_FIXED_11 15000
188 #define CONFIG_SENSOR_720P_FPS_FIXED_11 30000
190 #define CONFIG_SENSOR_12 RK29_CAM_SENSOR_OV2659//RK29_CAM_SENSOR_OV2655 /* front camera sensor 2 */
191 #define CONFIG_SENSOR_IIC_ADDR_12 0x00
192 #define CONFIG_SENSOR_IIC_ADAPTER_ID_12 3
193 #define CONFIG_SENSOR_CIF_INDEX_12 0
194 #define CONFIG_SENSOR_ORIENTATION_12 270
195 #define CONFIG_SENSOR_POWER_PIN_12 INVALID_GPIO
196 #define CONFIG_SENSOR_RESET_PIN_12 INVALID_GPIO
197 #define CONFIG_SENSOR_POWERDN_PIN_12 INVALID_GPIO//RK30_PIN1_PB7
198 #define CONFIG_SENSOR_FALSH_PIN_12 INVALID_GPIO
199 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_12 RK29_CAM_POWERACTIVE_L
200 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_12 RK29_CAM_RESETACTIVE_L
201 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_12 RK29_CAM_POWERDNACTIVE_H
202 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_12 RK29_CAM_FLASHACTIVE_L
204 #define CONFIG_SENSOR_QCIF_FPS_FIXED_12 15000
205 #define CONFIG_SENSOR_240X160_FPS_FIXED_12 15000
206 #define CONFIG_SENSOR_QVGA_FPS_FIXED_12 15000
207 #define CONFIG_SENSOR_CIF_FPS_FIXED_12 15000
208 #define CONFIG_SENSOR_VGA_FPS_FIXED_12 15000
209 #define CONFIG_SENSOR_480P_FPS_FIXED_12 15000
210 #define CONFIG_SENSOR_SVGA_FPS_FIXED_12 15000
211 #define CONFIG_SENSOR_720P_FPS_FIXED_12 30000
214 #endif //#ifdef CONFIG_VIDEO_RK29
215 /*---------------- Camera Sensor Configuration Macro End------------------------*/
216 #include "../../../drivers/media/video/rk30_camera.c"
217 /*---------------- Camera Sensor Macro Define End ---------*/
219 #define PMEM_CAM_SIZE PMEM_CAM_NECESSARY
220 /*****************************************************************************************
222 * author: ddl@rock-chips.com
223 *****************************************************************************************/
224 #ifdef CONFIG_VIDEO_RK29
225 #define CONFIG_SENSOR_POWER_IOCTL_USR 0
226 #define CONFIG_SENSOR_RESET_IOCTL_USR 0
227 #define CONFIG_SENSOR_POWERDOWN_IOCTL_USR 0
228 #define CONFIG_SENSOR_FLASH_IOCTL_USR 1
230 #if CONFIG_SENSOR_POWER_IOCTL_USR
231 static int sensor_power_usr_cb (struct rk29camera_gpio_res *res,int on)
233 #error "CONFIG_SENSOR_POWER_IOCTL_USR is 1, sensor_power_usr_cb function must be writed!!";
237 #if CONFIG_SENSOR_RESET_IOCTL_USR
238 static int sensor_reset_usr_cb (struct rk29camera_gpio_res *res,int on)
240 #error "CONFIG_SENSOR_RESET_IOCTL_USR is 1, sensor_reset_usr_cb function must be writed!!";
244 #if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
245 static int sensor_powerdown_usr_cb (struct rk29camera_gpio_res *res,int on)
247 #error "CONFIG_SENSOR_POWERDOWN_IOCTL_USR is 1, sensor_powerdown_usr_cb function must be writed!!";
251 #if CONFIG_SENSOR_FLASH_IOCTL_USR
253 #define CONFIG_SENSOR_FALSH_EN_PIN_0 RK30_PIN4_PD6 //high:enable
254 #define CONFIG_SENSOR_FALSH_MODE_PIN_0 RK30_PIN0_PD6 //high:FLASH, low:torch
255 static int sensor_flash_usr_cb (struct rk29camera_gpio_res *res, int on)
257 static int init_flag = 0;
259 gpio_request(CONFIG_SENSOR_FALSH_MODE_PIN_0, "camera_falsh_mode");
260 rk30_mux_api_set(GPIO0D6_PWM2_NAME, GPIO0D_GPIO0D6);
261 gpio_request(CONFIG_SENSOR_FALSH_EN_PIN_0, "camera_falsh_en");
262 rk30_mux_api_set(GPIO4D6_SMCDATA14_TRACEDATA14_NAME, GPIO4D_GPIO4D6);
267 gpio_direction_output(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
268 gpio_direction_output(CONFIG_SENSOR_FALSH_MODE_PIN_0, 1);
273 gpio_direction_output(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
274 gpio_direction_output(CONFIG_SENSOR_FALSH_MODE_PIN_0, 1);
279 gpio_direction_output(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
280 gpio_direction_output(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
285 printk("%s..Flash command(%d) is invalidate \n",__FUNCTION__, on);
286 gpio_direction_output(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
294 static struct rk29camera_platform_ioctl_cb sensor_ioctl_cb = {
295 #if CONFIG_SENSOR_POWER_IOCTL_USR
296 .sensor_power_cb = sensor_power_usr_cb,
298 .sensor_power_cb = NULL,
301 #if CONFIG_SENSOR_RESET_IOCTL_USR
302 .sensor_reset_cb = sensor_reset_usr_cb,
304 .sensor_reset_cb = NULL,
307 #if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
308 .sensor_powerdown_cb = sensor_powerdown_usr_cb,
310 .sensor_powerdown_cb = NULL,
313 #if CONFIG_SENSOR_FLASH_IOCTL_USR
314 .sensor_flash_cb = sensor_flash_usr_cb,
316 .sensor_flash_cb = NULL,
320 #if CONFIG_SENSOR_IIC_ADDR_0
321 static struct reginfo_t rk_init_data_sensor_reg_0[] =
325 static struct reginfo_t rk_init_data_sensor_winseqreg_0[] ={
330 #if CONFIG_SENSOR_IIC_ADDR_1
331 static struct reginfo_t rk_init_data_sensor_reg_1[] =
335 static struct reginfo_t rk_init_data_sensor_winseqreg_1[] =
340 #if CONFIG_SENSOR_IIC_ADDR_01
341 static struct reginfo_t rk_init_data_sensor_reg_01[] =
345 static struct reginfo_t rk_init_data_sensor_winseqreg_01[] =
350 #if CONFIG_SENSOR_IIC_ADDR_02
351 static struct reginfo_t rk_init_data_sensor_reg_02[] =
355 static struct reginfo_t rk_init_data_sensor_winseqreg_02[] =
360 #if CONFIG_SENSOR_IIC_ADDR_11
361 static struct reginfo_t rk_init_data_sensor_reg_11[] =
365 static struct reginfo_t rk_init_data_sensor_winseqreg_11[] =
370 #if CONFIG_SENSOR_IIC_ADDR_12
371 static struct reginfo_t rk_init_data_sensor_reg_12[] =
375 static struct reginfo_t rk_init_data_sensor_winseqreg_12[] =
380 static rk_sensor_user_init_data_s rk_init_data_sensor[RK_CAM_NUM] =
382 #if CONFIG_SENSOR_IIC_ADDR_0
384 .rk_sensor_init_width = INVALID_VALUE,
385 .rk_sensor_init_height = INVALID_VALUE,
386 .rk_sensor_init_bus_param = INVALID_VALUE,
387 .rk_sensor_init_pixelcode = INVALID_VALUE,
388 .rk_sensor_init_data = rk_init_data_sensor_reg_0,
389 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_0,
390 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
391 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_0) / sizeof(struct reginfo_t),
395 .rk_sensor_init_width = INVALID_VALUE,
396 .rk_sensor_init_height = INVALID_VALUE,
397 .rk_sensor_init_bus_param = INVALID_VALUE,
398 .rk_sensor_init_pixelcode = INVALID_VALUE,
399 .rk_sensor_init_data = NULL,
400 .rk_sensor_init_winseq = NULL,
401 .rk_sensor_winseq_size = 0,
402 .rk_sensor_init_data_size = 0,
405 #if CONFIG_SENSOR_IIC_ADDR_1
407 .rk_sensor_init_width = INVALID_VALUE,
408 .rk_sensor_init_height = INVALID_VALUE,
409 .rk_sensor_init_bus_param = INVALID_VALUE,
410 .rk_sensor_init_pixelcode = INVALID_VALUE,
411 .rk_sensor_init_data = rk_init_data_sensor_reg_1,
412 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_1,
413 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
414 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_1) / sizeof(struct reginfo_t),
418 .rk_sensor_init_width = INVALID_VALUE,
419 .rk_sensor_init_height = INVALID_VALUE,
420 .rk_sensor_init_bus_param = INVALID_VALUE,
421 .rk_sensor_init_pixelcode = INVALID_VALUE,
422 .rk_sensor_init_data = NULL,
423 .rk_sensor_init_winseq = NULL,
424 .rk_sensor_winseq_size = 0,
425 .rk_sensor_init_data_size = 0,
428 #if CONFIG_SENSOR_IIC_ADDR_01
430 .rk_sensor_init_width = INVALID_VALUE,
431 .rk_sensor_init_height = INVALID_VALUE,
432 .rk_sensor_init_bus_param = INVALID_VALUE,
433 .rk_sensor_init_pixelcode = INVALID_VALUE,
434 .rk_sensor_init_data = rk_init_data_sensor_reg_01,
435 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_01,
436 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_01) / sizeof(struct reginfo_t),
437 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_01) / sizeof(struct reginfo_t),
441 .rk_sensor_init_width = INVALID_VALUE,
442 .rk_sensor_init_height = INVALID_VALUE,
443 .rk_sensor_init_bus_param = INVALID_VALUE,
444 .rk_sensor_init_pixelcode = INVALID_VALUE,
445 .rk_sensor_init_data = NULL,
446 .rk_sensor_init_winseq = NULL,
447 .rk_sensor_winseq_size = 0,
448 .rk_sensor_init_data_size = 0,
451 #if CONFIG_SENSOR_IIC_ADDR_02
453 .rk_sensor_init_width = INVALID_VALUE,
454 .rk_sensor_init_height = INVALID_VALUE,
455 .rk_sensor_init_bus_param = INVALID_VALUE,
456 .rk_sensor_init_pixelcode = INVALID_VALUE,
457 .rk_sensor_init_data = rk_init_data_sensor_reg_02,
458 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_02,
459 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_02) / sizeof(struct reginfo_t),
460 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_02) / sizeof(struct reginfo_t),
464 .rk_sensor_init_width = INVALID_VALUE,
465 .rk_sensor_init_height = INVALID_VALUE,
466 .rk_sensor_init_bus_param = INVALID_VALUE,
467 .rk_sensor_init_pixelcode = INVALID_VALUE,
468 .rk_sensor_init_data = NULL,
469 .rk_sensor_init_winseq = NULL,
470 .rk_sensor_winseq_size = 0,
471 .rk_sensor_init_data_size = 0,
474 #if CONFIG_SENSOR_IIC_ADDR_11
476 .rk_sensor_init_width = INVALID_VALUE,
477 .rk_sensor_init_height = INVALID_VALUE,
478 .rk_sensor_init_bus_param = INVALID_VALUE,
479 .rk_sensor_init_pixelcode = INVALID_VALUE,
480 .rk_sensor_init_data = rk_init_data_sensor_reg_11,
481 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_11,
482 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_11) / sizeof(struct reginfo_t),
483 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_11) / sizeof(struct reginfo_t),
487 .rk_sensor_init_width = INVALID_VALUE,
488 .rk_sensor_init_height = INVALID_VALUE,
489 .rk_sensor_init_bus_param = INVALID_VALUE,
490 .rk_sensor_init_pixelcode = INVALID_VALUE,
491 .rk_sensor_init_data = NULL,
492 .rk_sensor_init_winseq = NULL,
493 .rk_sensor_winseq_size = 0,
494 .rk_sensor_init_data_size = 0,
497 #if CONFIG_SENSOR_IIC_ADDR_12
499 .rk_sensor_init_width = INVALID_VALUE,
500 .rk_sensor_init_height = INVALID_VALUE,
501 .rk_sensor_init_bus_param = INVALID_VALUE,
502 .rk_sensor_init_pixelcode = INVALID_VALUE,
503 .rk_sensor_init_data = rk_init_data_sensor_reg_12,
504 .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_12,
505 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_12) / sizeof(struct reginfo_t),
506 .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_12) / sizeof(struct reginfo_t),
510 .rk_sensor_init_width = INVALID_VALUE,
511 .rk_sensor_init_height = INVALID_VALUE,
512 .rk_sensor_init_bus_param = INVALID_VALUE,
513 .rk_sensor_init_pixelcode = INVALID_VALUE,
514 .rk_sensor_init_data = NULL,
515 .rk_sensor_init_winseq = NULL,
516 .rk_sensor_winseq_size = 0,
517 .rk_sensor_init_data_size = 0,
522 #include "../../../drivers/media/video/rk30_camera.c"
524 #endif /* CONFIG_VIDEO_RK29 */
526 //hhb@rock-chips.com 2012-04-27
528 #if defined(CONFIG_TOUCHSCREEN_FT5306)
530 #define TOUCH_RESET_PIN RK30_PIN6_PB1
531 #define TOUCH_INT_PIN RK30_PIN4_PD7
532 int ft5306_init_platform_hw(void)
535 printk("ft5406_init_platform_hw\n");
536 if(gpio_request(TOUCH_RESET_PIN,NULL) != 0){
537 gpio_free(TOUCH_RESET_PIN);
538 printk("ft5406_init_platform_hw gpio_request error\n");
542 if(gpio_request(TOUCH_INT_PIN,NULL) != 0){
543 gpio_free(TOUCH_INT_PIN);
544 printk("ift5406_init_platform_hw gpio_request error\n");
547 rk30_mux_api_set(GPIO4D7_SMCDATA15_TRACEDATA15_NAME, 0);
549 gpio_direction_output(TOUCH_RESET_PIN, 0);
550 gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
552 gpio_direction_input(TOUCH_INT_PIN);
554 gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
560 void ft5306_exit_platform_hw(void)
562 printk("ft5306_exit_platform_hw\n");
563 gpio_free(TOUCH_RESET_PIN);
564 gpio_free(TOUCH_INT_PIN);
567 int ft5306_platform_sleep(void)
569 //printk("ft5306_platform_sleep\n");
570 gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
574 int ft5306_platform_wakeup(void)
576 //printk("ft5306_platform_wakeup\n");
577 gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
582 struct ft5x0x_platform_data ft5306_info = {
584 .init_platform_hw= ft5306_init_platform_hw,
585 .exit_platform_hw= ft5306_exit_platform_hw,
586 .ft5x0x_platform_sleep = ft5306_platform_sleep,
587 .ft5x0x_platform_wakeup = ft5306_platform_wakeup,
593 #if defined (CONFIG_TOUCHSCREEN_SYNAPTICS_S3202)
595 #define TOUCH_RESET_PIN -1
596 #define TOUCH_INT_PIN RK30_PIN4_PC2
597 #define TOUCH_POWER_PIN -1
598 #define TOUCH_IO_POWER_PIN -1
600 struct syna_gpio_data {
605 int syna_init_platform_hw(void)
610 static int synaptics_touchpad_gpio_setup(void *gpio_data, bool configure)
613 struct syna_gpio_data *data = gpio_data;
616 retval = gpio_request(data->gpio_number, "rmi4_attn");
618 pr_err("%s: Failed to get attn gpio %d. Code: %d.",
619 __func__, data->gpio_number, retval);
622 rk30_mux_api_set(GPIO4C2_SMCDATA2_TRACEDATA2_NAME, 0);
623 retval = gpio_direction_input(data->gpio_number);
625 pr_err("%s: Failed to setup attn gpio %d. Code: %d.",
626 __func__, data->gpio_number, retval);
627 gpio_free(data->gpio_number);
630 printk("%s: No way to deconfigure gpio %d.",
631 __func__, data->gpio_number);
638 static struct syna_gpio_data s3202_gpiodata = {
639 .gpio_number = TOUCH_INT_PIN,
640 .gpio_name = "GPIO4_C2",
642 static unsigned char s3202_key_array[4]={ KEY_BACK, KEY_MENU, KEY_HOMEPAGE, KEY_SEARCH };
644 struct rmi_f1a_button_map s3202_buttons = {
646 .map = s3202_key_array,
649 static struct rmi_device_platform_data s3202_platformdata = {
650 .sensor_name = "Espresso",
651 .driver_name = "rmi_generic",
652 .attn_gpio = TOUCH_INT_PIN,
653 .attn_polarity = RMI_ATTN_ACTIVE_LOW,
654 .level_triggered = false, /* For testing */
655 .gpio_data = &s3202_gpiodata,
656 .gpio_config = synaptics_touchpad_gpio_setup,
657 .init_hw = syna_init_platform_hw,
666 .f1a_button_map = &s3202_buttons,
672 /***********************************************************
674 ************************************************************/
675 #ifdef CONFIG_BACKLIGHT_RK29_BL
677 #define PWM_MUX_NAME GPIO0A3_PWM0_NAME
678 #define PWM_MUX_MODE GPIO0A_PWM0
679 #define PWM_MUX_MODE_GPIO GPIO0A_GPIO0A3
680 #define PWM_GPIO RK30_PIN0_PA3
681 #define PWM_EFFECT_VALUE 0
683 #define LCD_DISP_ON_PIN
685 #ifdef LCD_DISP_ON_PIN
686 #define BL_EN_MUX_NAME GPIO4D2_SMCDATA10_TRACEDATA10_NAME
687 #define BL_EN_MUX_MODE GPIO4D_GPIO4D2
688 #define BL_EN_PIN RK30_PIN4_PD2
689 #define BL_EN_VALUE GPIO_HIGH
691 static int rk29_backlight_io_init(void)
694 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
695 #ifdef LCD_DISP_ON_PIN
696 rk30_mux_api_set(BL_EN_MUX_NAME, BL_EN_MUX_MODE);
697 ret = gpio_request(BL_EN_PIN, NULL);
699 gpio_free(BL_EN_PIN);
702 gpio_direction_output(BL_EN_PIN, 0);
703 gpio_set_value(BL_EN_PIN, BL_EN_VALUE);
708 static int rk29_backlight_io_deinit(void)
711 #ifdef LCD_DISP_ON_PIN
712 gpio_free(BL_EN_PIN);
714 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
718 static int rk29_backlight_pwm_suspend(void)
721 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
722 if (gpio_request(PWM_GPIO, NULL)) {
723 printk("func %s, line %d: request gpio fail\n", __FUNCTION__, __LINE__);
726 gpio_direction_output(PWM_GPIO, GPIO_HIGH);
727 #ifdef LCD_DISP_ON_PIN
728 gpio_direction_output(BL_EN_PIN, 0);
729 gpio_set_value(BL_EN_PIN, !BL_EN_VALUE);
734 static int rk29_backlight_pwm_resume(void)
736 gpio_direction_output(PWM_GPIO, GPIO_LOW);
738 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
739 #ifdef LCD_DISP_ON_PIN
741 gpio_direction_output(BL_EN_PIN, 1);
742 gpio_set_value(BL_EN_PIN, BL_EN_VALUE);
747 static struct rk29_bl_info rk29_bl_info = {
749 .bl_ref = PWM_EFFECT_VALUE,
750 .io_init = rk29_backlight_io_init,
751 .io_deinit = rk29_backlight_io_deinit,
752 .pwm_suspend = rk29_backlight_pwm_suspend,
753 .pwm_resume = rk29_backlight_pwm_resume,
756 static struct platform_device rk29_device_backlight = {
757 .name = "rk29_backlight",
760 .platform_data = &rk29_bl_info,
766 #ifdef CONFIG_RK29_SUPPORT_MODEM
768 #define RK30_MODEM_POWER RK30_PIN4_PD1
769 #define RK30_MODEM_POWER_IOMUX rk29_mux_api_set(GPIO4D1_SMCDATA9_TRACEDATA9_NAME, GPIO4D_GPIO4D1)
771 static int rk30_modem_io_init(void)
773 printk("%s\n", __FUNCTION__);
774 RK30_MODEM_POWER_IOMUX;
779 static struct rk29_io_t rk30_modem_io = {
780 .io_addr = RK30_MODEM_POWER,
783 .io_init = rk30_modem_io_init,
786 static struct platform_device rk30_device_modem = {
787 .name = "rk30_modem",
790 .platform_data = &rk30_modem_io,
794 #if defined(CONFIG_RK29_SC8800)
796 static int tdsc8800_io_init(void)
802 static int tdsc8800_io_deinit(void)
808 struct rk2818_23d_data rk29_tdsc8800_info = {
809 .io_init = tdsc8800_io_init,
810 .io_deinit = tdsc8800_io_deinit,
811 .bp_power = BP_VOL_PIN,
812 .bp_power_active_low = 1,
814 struct platform_device rk29_device_tdsc8800 = {
818 .platform_data = &rk29_tdsc8800_info,
822 static int sc8800_io_init(void)
824 rk30_mux_api_set(GPIO2B5_LCDC1DATA13_SMCADDR17_HSADCDATA8_NAME, GPIO2B_GPIO2B5);
825 rk30_mux_api_set(GPIO2A2_LCDCDATA2_SMCADDR6_NAME, GPIO2A_GPIO2A2);
827 rk30_mux_api_set(GPIO2C2_LCDC1DATA18_SMCBLSN1_HSADCDATA5_NAME, GPIO2C_GPIO2C2);//AP_ASK_BP_TEST1
828 gpio_request(RK30_PIN2_PC2, NULL);
829 gpio_direction_output(RK30_PIN2_PC2, 0);
830 gpio_request(RK30_PIN6_PB0, NULL);//AP_ON/OFF_BP
831 gpio_direction_output(RK30_PIN6_PB0, 0);
834 rk30_mux_api_set(GPIO2C3_LCDC1DATA19_SPI1CLK_HSADCDATA0_NAME, GPIO2C_SPI1_CLK);//spi 1
835 rk30_mux_api_set(GPIO2C4_LCDC1DATA20_SPI1CSN0_HSADCDATA1_NAME, GPIO2C_SPI1_CSN0);
836 rk30_mux_api_set(GPIO2C5_LCDC1DATA21_SPI1TXD_HSADCDATA2_NAME, GPIO2C_SPI1_TXD);
837 rk30_mux_api_set(GPIO2C6_LCDC1DATA22_SPI1RXD_HSADCDATA3_NAME, GPIO2C_SPI1_RXD);
841 static int sc8800_io_deinit(void)
847 static struct plat_sc8800 sc8800_plat_data = {
848 .slav_rts_pin = RK30_PIN6_PA0,
849 .slav_rdy_pin = RK30_PIN6_PA1,
850 .master_rts_pin = RK30_PIN2_PB5,
851 .master_rdy_pin = RK30_PIN2_PA2,
853 .io_init = sc8800_io_init,
854 .io_deinit = sc8800_io_deinit,
856 static struct rk29xx_spi_chip sc8800_spi_chip = {
863 static struct spi_board_info board_spi_devices[] = {
865 #if defined(CONFIG_RK29_SC8800)
867 .modalias = "sc8800",
869 .platform_data = &sc8800_plat_data,
870 .max_speed_hz = 13*1000*1000,
872 .controller_data = &sc8800_spi_chip,
879 #if defined (CONFIG_GS_MMA8452)
880 #define MMA8452_INT_PIN RK30_PIN4_PC0
882 static int mma8452_init_platform_hw(void)
884 rk30_mux_api_set(GPIO4C0_SMCDATA0_TRACEDATA0_NAME, GPIO4C_GPIO4C0);
889 static struct sensor_platform_data mma8452_info = {
890 .type = SENSOR_TYPE_ACCEL,
893 .init_platform_hw = mma8452_init_platform_hw,
894 .orientation = {-1, 0, 0, 0, 0, 1, 0, -1, 0},
898 #if defined (CONFIG_GS_LIS3DH)
899 #define LIS3DH_INT_PIN RK30_PIN4_PC0
901 static int lis3dh_init_platform_hw(void)
903 rk30_mux_api_set(GPIO4C0_SMCDATA0_TRACEDATA0_NAME, GPIO4C_GPIO4C0);
908 static struct gsensor_platform_data lis3dh_info = {
912 .init_platform_hw = lis3dh_init_platform_hw,
913 .orientation = {-1, 0, 0, 0, 0, 1, 0, -1, 0},
918 #if defined (CONFIG_RK_HEADSET_DET) || defined (CONFIG_RK_HEADSET_IRQ_HOOK_ADC_DET)
920 static int rk_headset_io_init(int gpio, char *iomux_name, int iomux_mode)
923 ret = gpio_request(gpio, NULL);
927 rk30_mux_api_set(iomux_name, iomux_mode);
928 gpio_pull_updown(gpio, PullDisable);
929 gpio_direction_input(gpio);
933 struct rk_headset_pdata rk_headset_info = {
934 .Headset_gpio = RK30_PIN0_PD3,
935 .headset_in_type = HEADSET_IN_LOW,
937 .hook_key_code = KEY_MEDIA,
938 .headset_gpio_info = {GPIO0D3_I2S22CHLRCKTX_SMCADVN_NAME, GPIO0D_GPIO0D3},
939 .headset_io_init = rk_headset_io_init,
942 struct platform_device rk_device_headset = {
943 .name = "rk_headsetdet",
946 .platform_data = &rk_headset_info,
951 #if defined (CONFIG_COMPASS_AK8975)
952 static struct sensor_platform_data akm8975_info =
954 .type = SENSOR_TYPE_COMPASS,
987 #if defined(CONFIG_GYRO_L3G4200D)
989 #include <linux/l3g4200d.h>
990 #define L3G4200D_INT_PIN RK30_PIN4_PC3
992 static int l3g4200d_init_platform_hw(void)
994 rk30_mux_api_set(GPIO4C3_SMCDATA3_TRACEDATA3_NAME, GPIO4C_GPIO4C3);
999 static struct sensor_platform_data l3g4200d_info = {
1000 .type = SENSOR_TYPE_GYROSCOPE,
1002 .poll_delay_ms = 30,
1003 .orientation = {1, 0, 0, 0, 1, 0, 0, 0, 1},
1004 .init_platform_hw = l3g4200d_init_platform_hw,
1005 .x_min = 40,//x_min,y_min,z_min = (0-100) according to hardware
1012 #ifdef CONFIG_LS_CM3217
1014 #define CM3217_POWER_PIN INVALID_GPIO
1015 #define CM3217_IRQ_PIN INVALID_GPIO
1016 static int cm3217_init_hw(void)
1019 if (gpio_request(CM3217_POWER_PIN, NULL) != 0) {
1020 gpio_free(CM3217_POWER_PIN);
1021 printk("%s: request cm3217 power pin error\n", __func__);
1024 gpio_pull_updown(CM3217_POWER_PIN, PullDisable);
1026 if (gpio_request(CM3217_IRQ_PIN, NULL) != 0) {
1027 gpio_free(CM3217_IRQ_PIN);
1028 printk("%s: request cm3217 int pin error\n", __func__);
1031 gpio_pull_updown(CM3217_IRQ_PIN, PullDisable);
1036 static void cm3217_exit_hw(void)
1039 gpio_free(CM3217_POWER_PIN);
1040 gpio_free(CM3217_IRQ_PIN);
1045 static struct cm3217_platform_data cm3217_info = {
1046 .irq_pin = CM3217_IRQ_PIN,
1047 .power_pin = CM3217_POWER_PIN,
1048 .init_platform_hw = cm3217_init_hw,
1049 .exit_platform_hw = cm3217_exit_hw,
1053 #if defined(CONFIG_PS_AL3006)
1054 static struct sensor_platform_data proximity_info = {
1055 .type = SENSOR_TYPE_PROXIMITY,
1057 .poll_delay_ms = 200,
1061 #if defined(CONFIG_LS_AL3006)
1062 static struct sensor_platform_data light_info = {
1063 .type = SENSOR_TYPE_LIGHT,
1065 .poll_delay_ms = 200,
1070 #ifdef CONFIG_FB_ROCKCHIP
1072 /*****************************************************************************************
1074 * author: hhb@rock-chips.com
1075 *****************************************************************************************/
1077 #define LCD_TXD_PIN RK30_PIN1_PA7
1078 #define LCD_CLK_PIN RK30_PIN1_PA5
1079 #define LCD_CS_PIN RK30_PIN1_PA4
1080 #define LCD_RST_PIN RK30_PIN4_PC7
1082 /*****************************************************************************************
1083 * frame buffer devices
1084 * author: hhb@rock-chips.com
1085 *****************************************************************************************/
1087 #define FB_DISPLAY_ON_PIN INVALID_GPIO//RK29_PIN6_PD0
1088 #define FB_LCD_STANDBY_PIN INVALID_GPIO//RK29_PIN6_PD1
1089 #define FB_LCD_CABC_EN_PIN INVALID_GPIO//RK29_PIN6_PD2
1090 #define FB_MCU_FMK_PIN INVALID_GPIO
1092 #define FB_DISPLAY_ON_VALUE GPIO_HIGH
1093 #define FB_LCD_STANDBY_VALUE GPIO_HIGH
1097 static int rk29_lcd_io_init(void)
1101 //printk("rk29_lcd_io_init\n");
1103 ret = gpio_request(LCD_TXD_PIN, NULL);
1105 gpio_free(LCD_TXD_PIN);
1106 printk("%s: request LCD_TXD_PIN error\n", __func__);
1110 ret = gpio_request(LCD_CLK_PIN, NULL);
1112 gpio_free(LCD_CLK_PIN);
1113 printk("%s: request LCD_CLK_PIN error\n", __func__);
1117 ret = gpio_request(LCD_CS_PIN, NULL);
1119 gpio_free(LCD_CS_PIN);
1120 printk("%s: request LCD_CS_PIN error\n", __func__);
1124 rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0TXD_NAME, GPIO1A_GPIO1A7);
1125 rk30_mux_api_set(GPIO1A5_UART1SOUT_SPI0CLK_NAME, GPIO1A_GPIO1A5);
1126 rk30_mux_api_set(GPIO1A4_UART1SIN_SPI0CSN0_NAME, GPIO1A_GPIO1A4);
1127 //rk30_mux_api_set(GPIO4C7_SMCDATA7_TRACEDATA7_NAME, GPIO4C_GPIO4C7);
1128 gpio_direction_output(LCD_CS_PIN, 1);
1129 gpio_direction_output(LCD_CLK_PIN, 1);
1130 gpio_direction_output(LCD_TXD_PIN, 1);
1134 #if defined (CONFIG_RK29_WORKING_POWER_MANAGEMENT)
1135 static int rk29_lcd_io_deinit(void)
1139 gpio_direction_input(LCD_TXD_PIN);
1140 gpio_direction_input(LCD_CLK_PIN);
1141 gpio_direction_input(LCD_CS_PIN);
1143 gpio_free(LCD_CS_PIN);
1144 gpio_free(LCD_CLK_PIN);
1145 gpio_free(LCD_TXD_PIN);
1149 static int rk29_lcd_io_deinit(void)
1152 //printk("rk29_lcd_io_deinit\n");
1154 gpio_direction_input(LCD_TXD_PIN);
1155 gpio_direction_input(LCD_CLK_PIN);
1156 gpio_direction_input(LCD_CS_PIN);
1158 gpio_free(LCD_CS_PIN);
1159 gpio_free(LCD_CLK_PIN);
1160 gpio_free(LCD_TXD_PIN);
1161 //gpio_free(LCD_RXD_PIN);
1163 //rk30_mux_api_set(GPIO0B7_I2S8CHSDO3_NAME, GPIO0B_GPIO0B7);
1164 //rk30_mux_api_set(GPIO0B6_I2S8CHSDO2_NAME, GPIO0B_GPIO0B6);
1165 //rk30_mux_api_set(GPIO0B5_I2S8CHSDO1_NAME, GPIO0B_GPIO0B5);
1172 static struct rk29lcd_info rk29_lcd_info = {
1173 .txd_pin = LCD_TXD_PIN,
1174 .clk_pin = LCD_CLK_PIN,
1175 .cs_pin = LCD_CS_PIN,
1176 .reset_pin = LCD_RST_PIN,
1177 .io_init = rk29_lcd_io_init,
1178 .io_deinit = rk29_lcd_io_deinit,
1182 #define LCD_EN_MUX_NAME GPIO0D4_I2S22CHSDI_SMCADDR0_NAME
1183 #define LCD_EN_PIN RK30_PIN0_PD4
1184 #define LCD_EN_VALUE GPIO_HIGH
1186 static int rk_fb_io_init(struct rk29_fb_setting_info *fb_setting)
1189 rk30_mux_api_set(LCD_EN_MUX_NAME, GPIO0D_GPIO0D4);
1190 ret = gpio_request(LCD_EN_PIN, NULL);
1193 gpio_free(LCD_EN_PIN);
1194 printk(KERN_ERR "request lcd en pin fail!\n");
1199 gpio_direction_output(LCD_EN_PIN, 1);
1200 gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE);
1204 static int rk_fb_io_disable(void)
1206 gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE ? 0:1);
1209 static int rk_fb_io_enable(void)
1211 gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE);
1215 #if defined(CONFIG_LCDC0_RK30)
1216 struct rk29fb_info lcdc0_screen_info = {
1218 .prop = PRMRY, //primary display device
1219 .lcd_info = &rk29_lcd_info,
1220 .io_init = rk_fb_io_init,
1221 .io_disable = rk_fb_io_disable,
1222 .io_enable = rk_fb_io_enable,
1223 .set_screen_info = set_lcd_info,
1227 #if defined(CONFIG_LCDC1_RK30)
1228 struct rk29fb_info lcdc1_screen_info = {
1229 #if defined(CONFIG_HDMI_RK30)
1230 .prop = EXTEND, //extend display device
1232 .set_screen_info = hdmi_set_info,
1237 static struct resource resource_fb[] = {
1241 .end = 0,//RK30_FB0_MEM_SIZE - 1,
1242 .flags = IORESOURCE_MEM,
1245 .name = "ipp buf", //for rotate
1247 .end = 0,//RK30_FB0_MEM_SIZE - 1,
1248 .flags = IORESOURCE_MEM,
1253 .end = 0,//RK30_FB0_MEM_SIZE - 1,
1254 .flags = IORESOURCE_MEM,
1258 static struct platform_device device_fb = {
1261 .num_resources = ARRAY_SIZE(resource_fb),
1262 .resource = resource_fb,
1266 #ifdef CONFIG_ANDROID_TIMED_GPIO
1267 static struct timed_gpio timed_gpios[] = {
1270 .gpio = RK30_PIN0_PA4,
1271 .max_timeout = 1000,
1273 .adjust_time =20, //adjust for diff product
1277 static struct timed_gpio_platform_data rk29_vibrator_info = {
1279 .gpios = timed_gpios,
1282 static struct platform_device rk29_device_vibrator = {
1283 .name = "timed-gpio",
1286 .platform_data = &rk29_vibrator_info,
1292 #ifdef CONFIG_LEDS_GPIO_PLATFORM
1293 static struct gpio_led rk29_leds[] = {
1295 .name = "button-backlight",
1296 .gpio = RK30_PIN4_PD7,
1297 .default_trigger = "timer",
1299 .retain_state_suspended = 0,
1300 .default_state = LEDS_GPIO_DEFSTATE_OFF,
1304 static struct gpio_led_platform_data rk29_leds_pdata = {
1306 .num_leds = ARRAY_SIZE(rk29_leds),
1309 static struct platform_device rk29_device_gpio_leds = {
1310 .name = "leds-gpio",
1313 .platform_data = &rk29_leds_pdata,
1318 #ifdef CONFIG_RK_IRDA
1319 #define IRDA_IRQ_PIN RK30_PIN6_PA1
1321 static int irda_iomux_init(void)
1326 ret = gpio_request(IRDA_IRQ_PIN, NULL);
1328 gpio_free(IRDA_IRQ_PIN);
1329 printk(">>>>>> IRDA_IRQ_PIN gpio_request err \n ");
1331 gpio_pull_updown(IRDA_IRQ_PIN, PullDisable);
1332 gpio_direction_input(IRDA_IRQ_PIN);
1337 static int irda_iomux_deinit(void)
1339 gpio_free(IRDA_IRQ_PIN);
1343 static struct irda_info rk29_irda_info = {
1344 .intr_pin = IRDA_IRQ_PIN,
1345 .iomux_init = irda_iomux_init,
1346 .iomux_deinit = irda_iomux_deinit,
1347 //.irda_pwr_ctl = bu92747guw_power_ctl,
1350 static struct platform_device irda_device = {
1351 #ifdef CONFIG_RK_IRDA_NET
1354 .name = "bu92747_irda",
1358 .platform_data = &rk29_irda_info,
1364 #define ION_RESERVE_SIZE (80 * SZ_1M)
1365 static struct ion_platform_data rk30_ion_pdata = {
1369 .type = ION_HEAP_TYPE_CARVEOUT,
1370 .id = ION_NOR_HEAP_ID,
1372 .size = ION_RESERVE_SIZE,
1377 static struct platform_device device_ion = {
1378 .name = "ion-rockchip",
1381 .platform_data = &rk30_ion_pdata,
1386 /**************************************************************************************************
1387 * SDMMC devices, include the module of SD,MMC,and sdio.noted by xbw at 2012-03-05
1388 **************************************************************************************************/
1389 #ifdef CONFIG_SDMMC_RK29
1390 #include "board-rk30-phone-sdmmc.c"
1392 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
1393 #define SDMMC0_WRITE_PROTECT_PIN RK30_PIN3_PB7 //According to your own project to set the value of write-protect-pin.
1396 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
1397 #define SDMMC1_WRITE_PROTECT_PIN RK30_PIN3_PC7 //According to your own project to set the value of write-protect-pin.
1400 #define RK29SDK_WIFI_SDIO_CARD_DETECT_N RK30_PIN6_PB2
1402 #endif //endif ---#ifdef CONFIG_SDMMC_RK29
1404 #ifdef CONFIG_SDMMC0_RK29
1405 static int rk29_sdmmc0_cfg_gpio(void)
1407 #ifdef CONFIG_SDMMC_RK29_OLD
1408 rk30_mux_api_set(GPIO3B1_SDMMC0CMD_NAME, GPIO3B_SDMMC0_CMD);
1409 rk30_mux_api_set(GPIO3B0_SDMMC0CLKOUT_NAME, GPIO3B_SDMMC0_CLKOUT);
1410 rk30_mux_api_set(GPIO3B2_SDMMC0DATA0_NAME, GPIO3B_SDMMC0_DATA0);
1411 rk30_mux_api_set(GPIO3B3_SDMMC0DATA1_NAME, GPIO3B_SDMMC0_DATA1);
1412 rk30_mux_api_set(GPIO3B4_SDMMC0DATA2_NAME, GPIO3B_SDMMC0_DATA2);
1413 rk30_mux_api_set(GPIO3B5_SDMMC0DATA3_NAME, GPIO3B_SDMMC0_DATA3);
1415 rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME, GPIO3B_GPIO3B6);
1417 rk30_mux_api_set(GPIO3A7_SDMMC0PWREN_NAME, GPIO3A_GPIO3A7);
1418 gpio_request(RK30_PIN3_PA7, "sdmmc-power");
1419 gpio_direction_output(RK30_PIN3_PA7, GPIO_LOW);
1422 rk29_sdmmc_set_iomux(0, 0xFFFF);
1424 rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME, GPIO3B_SDMMC0_DETECT_N);
1426 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
1427 gpio_request(SDMMC0_WRITE_PROTECT_PIN, "sdmmc-wp");
1428 gpio_direction_input(SDMMC0_WRITE_PROTECT_PIN);
1436 #define CONFIG_SDMMC0_USE_DMA
1437 struct rk29_sdmmc_platform_data default_sdmmc0_data = {
1439 (MMC_VDD_25_26 | MMC_VDD_26_27 | MMC_VDD_27_28 | MMC_VDD_28_29 |
1440 MMC_VDD_29_30 | MMC_VDD_30_31 | MMC_VDD_31_32 | MMC_VDD_32_33 |
1441 MMC_VDD_33_34 | MMC_VDD_34_35 | MMC_VDD_35_36),
1443 (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
1444 .io_init = rk29_sdmmc0_cfg_gpio,
1446 #if !defined(CONFIG_SDMMC_RK29_OLD)
1447 .set_iomux = rk29_sdmmc_set_iomux,
1450 .dma_name = "sd_mmc",
1451 #ifdef CONFIG_SDMMC0_USE_DMA
1456 .detect_irq = RK30_PIN3_PB6, // INVALID_GPIO
1457 .enable_sd_wakeup = 0,
1459 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
1460 .write_prt = SDMMC0_WRITE_PROTECT_PIN,
1462 .write_prt = INVALID_GPIO,
1465 #endif // CONFIG_SDMMC0_RK29
1467 #ifdef CONFIG_SDMMC1_RK29
1468 #define CONFIG_SDMMC1_USE_DMA
1469 static int rk29_sdmmc1_cfg_gpio(void)
1471 #if defined(CONFIG_SDMMC_RK29_OLD)
1472 rk30_mux_api_set(GPIO3C0_SMMC1CMD_NAME, GPIO3C_SMMC1_CMD);
1473 rk30_mux_api_set(GPIO3C5_SDMMC1CLKOUT_NAME, GPIO3C_SDMMC1_CLKOUT);
1474 rk30_mux_api_set(GPIO3C1_SDMMC1DATA0_NAME, GPIO3C_SDMMC1_DATA0);
1475 rk30_mux_api_set(GPIO3C2_SDMMC1DATA1_NAME, GPIO3C_SDMMC1_DATA1);
1476 rk30_mux_api_set(GPIO3C3_SDMMC1DATA2_NAME, GPIO3C_SDMMC1_DATA2);
1477 rk30_mux_api_set(GPIO3C4_SDMMC1DATA3_NAME, GPIO3C_SDMMC1_DATA3);
1478 //rk30_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_SDMMC1_DETECT_N);
1482 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
1483 gpio_request(SDMMC1_WRITE_PROTECT_PIN, "sdio-wp");
1484 gpio_direction_input(SDMMC1_WRITE_PROTECT_PIN);
1492 struct rk29_sdmmc_platform_data default_sdmmc1_data = {
1494 (MMC_VDD_25_26 | MMC_VDD_26_27 | MMC_VDD_27_28 | MMC_VDD_28_29 |
1495 MMC_VDD_29_30 | MMC_VDD_30_31 | MMC_VDD_31_32 | MMC_VDD_32_33 |
1498 #if !defined(CONFIG_USE_SDMMC1_FOR_WIFI_DEVELOP_BOARD)
1499 .host_caps = (MMC_CAP_4_BIT_DATA | MMC_CAP_SDIO_IRQ |
1500 MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
1503 (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
1506 .io_init = rk29_sdmmc1_cfg_gpio,
1508 #if !defined(CONFIG_SDMMC_RK29_OLD)
1509 .set_iomux = rk29_sdmmc_set_iomux,
1513 #ifdef CONFIG_SDMMC1_USE_DMA
1519 #if !defined(CONFIG_USE_SDMMC1_FOR_WIFI_DEVELOP_BOARD)
1520 #ifdef CONFIG_WIFI_CONTROL_FUNC
1521 .status = rk29sdk_wifi_status,
1522 .register_status_notify = rk29sdk_wifi_status_register,
1525 .detect_irq = RK29SDK_WIFI_SDIO_CARD_DETECT_N,
1528 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
1529 .write_prt = SDMMC1_WRITE_PROTECT_PIN,
1531 .write_prt = INVALID_GPIO,
1535 .detect_irq = INVALID_GPIO,
1536 .enable_sd_wakeup = 0,
1540 #endif //endif--#ifdef CONFIG_SDMMC1_RK29
1543 #ifdef CONFIG_BATTERY_RK30_ADC
1544 static struct rk30_adc_battery_platform_data rk30_adc_battery_platdata = {
1545 .dc_det_pin = RK30_PIN6_PA5,
1546 .batt_low_pin = RK30_PIN6_PA0,
1547 .charge_set_pin = INVALID_GPIO,
1548 .charge_ok_pin = RK30_PIN6_PA6,
1549 .dc_det_level = GPIO_LOW,
1550 .charge_ok_level = GPIO_HIGH,
1553 static struct platform_device rk30_device_adc_battery = {
1554 .name = "rk30-battery",
1557 .platform_data = &rk30_adc_battery_platdata,
1563 #ifdef CONFIG_RFKILL_RK
1564 // bluetooth rfkill device, its driver in net/rfkill/rfkill-rk.c
1565 static struct rfkill_rk_platform_data rfkill_rk_platdata = {
1566 .type = RFKILL_TYPE_BLUETOOTH,
1568 .poweron_gpio = { // BT_REG_ON
1569 .io = RK30_PIN4_PD5,
1570 .enable = GPIO_HIGH,
1572 .name = GPIO4D5_SMCDATA13_TRACEDATA13_NAME,
1573 .fgpio = GPIO4D_GPIO4D5,
1577 .reset_gpio = { // BT_RST
1578 .io = RK30_PIN3_PD1, // set io to INVALID_GPIO for disable it
1581 .name = GPIO3D1_SDMMC1BACKENDPWR_NAME,
1582 .fgpio = GPIO3D_GPIO3D1,
1586 .wake_gpio = { // BT_WAKE, use to control bt's sleep and wakeup
1587 .io = RK30_PIN3_PC6, // set io to INVALID_GPIO for disable it
1588 .enable = GPIO_HIGH,
1590 .name = GPIO3C6_SDMMC1DETECTN_NAME,
1591 .fgpio = GPIO3C_GPIO3C6,
1595 .wake_host_irq = { // BT_HOST_WAKE, for bt wakeup host when it is in deep sleep
1597 .io = RK30_PIN3_PD2, // set io to INVALID_GPIO for disable it
1598 .enable = GPIO_LOW, // set GPIO_LOW for falling, set 0 for rising
1600 .name = GPIO3D2_SDMMC1INTN_NAME,
1601 .fgpio = RK30_PIN3_PD2,
1606 .rts_gpio = { // UART_RTS, enable or disable BT's data coming
1607 .io = RK30_PIN1_PA3, // set io to INVALID_GPIO for disable it
1610 .name = GPIO1A3_UART0RTSN_NAME,
1611 .fgpio = GPIO1A_GPIO1A3,
1612 .fmux = GPIO1A_UART0_RTS_N,
1617 static struct platform_device device_rfkill_rk = {
1618 .name = "rfkill_rk",
1621 .platform_data = &rfkill_rk_platdata,
1626 /**************************************************************************************************
1627 * the end of setting for SDMMC devices
1628 **************************************************************************************************/
1630 static struct platform_device *devices[] __initdata = {
1631 #ifdef CONFIG_BACKLIGHT_RK29_BL
1632 &rk29_device_backlight,
1634 #ifdef CONFIG_FB_ROCKCHIP
1640 #ifdef CONFIG_ANDROID_TIMED_GPIO
1641 &rk29_device_vibrator,
1643 #ifdef CONFIG_LEDS_GPIO_PLATFORM
1644 &rk29_device_gpio_leds,
1646 #ifdef CONFIG_RK_IRDA
1649 #ifdef CONFIG_WIFI_CONTROL_FUNC
1650 &rk29sdk_wifi_device,
1652 #ifdef CONFIG_RFKILL_RK
1655 #ifdef CONFIG_RK29_SUPPORT_MODEM
1658 #if defined(CONFIG_TDSC8800)
1659 &rk29_device_tdsc8800,
1661 #if defined (CONFIG_RK_HEADSET_DET) || defined (CONFIG_RK_HEADSET_IRQ_HOOK_ADC_DET)
1664 #ifdef CONFIG_BATTERY_RK30_ADC
1665 &rk30_device_adc_battery,
1669 static struct aic3262_gpio_setup aic3262_gpio[] = {
1673 .value = AIC3262_GPIO1_FUNC_INT1_OUTPUT ,
1679 .value = AIC3262_GPIO2_FUNC_CLOCK_OUTPUT,
1689 .value = AIC3262_GPO1_FUNC_DISABLED,
1694 .value = AIC3262_GPO1_FUNC_ADC_MOD_CLK_OUTPUT,
1697 static struct aic3262_pdata aic3262_codec_pdata = {
1698 .gpio = aic3262_gpio,
1699 .gpio_reset = RK30_PIN0_PB7,
1703 #ifdef CONFIG_I2C0_RK30
1704 static struct i2c_board_info __initdata i2c0_info[] = {
1705 #if defined (CONFIG_GS_MMA8452)
1707 .type = "gs_mma8452",
1710 .irq = MMA8452_INT_PIN,
1711 .platform_data = &mma8452_info,
1714 #if defined (CONFIG_GS_LIS3DH)
1719 .irq = LIS3DH_INT_PIN,
1720 .platform_data = &lis3dh_info,
1724 #if defined (CONFIG_COMPASS_AK8975)
1729 .irq = RK30_PIN4_PC1,
1730 .platform_data = &akm8975_info,
1733 #if defined (CONFIG_GYRO_L3G4200D)
1735 .type = "l3g4200d_gryo",
1738 .irq = L3G4200D_INT_PIN,
1739 .platform_data = &l3g4200d_info,
1742 #if defined (CONFIG_INPUT_LPSENSOR_AL3006)
1745 .addr = 0x1c, //sel = 0; if sel =1, then addr = 0x1D
1747 .irq = RK30_PIN6_PA2,
1750 #if defined (CONFIG_LS_AL3006)
1752 .type = "light_al3006",
1753 .addr = 0x1c, //sel = 0; if sel =1, then addr = 0x1D
1755 .irq = RK30_PIN6_PA2,
1756 .platform_data = &light_info,
1760 #if defined (CONFIG_PS_AL3006)
1762 .type = "proximity_al3006",
1763 .addr = 0x1c, //sel = 0; if sel =1, then addr = 0x1D
1765 .irq = RK30_PIN6_PA2,
1766 .platform_data = &proximity_info,
1770 #if defined (CONFIG_SND_SOC_RK1000)
1772 .type = "rk1000_i2c_codec",
1777 .type = "rk1000_control",
1783 #if defined (CONFIG_SND_SOC_TLV320AIC326X)
1785 .type = "tlv320aic3262",
1788 .platform_data = &aic3262_codec_pdata,
1792 #if defined (CONFIG_SND_SOC_RT5631)
1800 #ifdef CONFIG_MFD_RK610
1802 .type = "rk610_ctl",
1806 #ifdef CONFIG_RK610_TVOUT
1808 .type = "rk610_tvout",
1813 #ifdef CONFIG_HDMI_RK610
1815 .type = "rk610_hdmi",
1818 .irq = RK29_PIN5_PA2,
1821 #ifdef CONFIG_SND_SOC_RK610
1822 {//RK610_CODEC addr from 0x60 to 0x80 (0x60~0x80)
1823 .type = "rk610_i2c_codec",
1833 #ifdef CONFIG_I2C1_RK30
1834 #define DC3_VCC_DDR_VOL 1800000 //for vcc_lpddr2_1v8
1835 #define DC5_VCC_DDR_VOL 1200000 //for vcc_lpddr2_1v2
1836 #include "board-rk30-phone-twl60xx.c"
1837 static struct i2c_board_info __initdata i2c1_info[] = {
1839 #if defined (CONFIG_TWL4030_CORE)
1844 .irq = RK30_PIN6_PA4,
1845 .platform_data = &tps80032_data,
1853 #ifdef CONFIG_I2C2_RK30
1854 static struct i2c_board_info __initdata i2c2_info[] = {
1856 #if defined (CONFIG_TOUCHSCREEN_SYNAPTICS_S3202)
1861 .irq = RK30_PIN4_PC2,
1862 .platform_data = &s3202_platformdata,
1867 #if defined (CONFIG_TOUCHSCREEN_FT5306)
1869 .type = "ft5x0x_ts",
1872 .irq = RK30_PIN4_PD7,//RK30_PIN2_PC2,
1873 .platform_data = &ft5306_info,
1877 #if defined (CONFIG_LS_CM3217)
1879 .type = "lightsensor",
1882 .irq = CM3217_IRQ_PIN,
1883 .platform_data = &cm3217_info,
1889 #ifdef CONFIG_I2C3_RK30
1891 static struct i2c_board_info __initdata i2c3_info[] = {
1897 #ifdef CONFIG_I2C4_RK30
1898 static struct i2c_board_info __initdata i2c4_info[] = {
1902 #ifdef CONFIG_I2C_GPIO_RK30
1903 #define I2C_SDA_PIN INVALID_GPIO// RK30_PIN2_PD6 //set sda_pin here
1904 #define I2C_SCL_PIN INVALID_GPIO//RK30_PIN2_PD7 //set scl_pin here
1905 static int rk30_i2c_io_init(void)
1907 //set iomux (gpio) here
1908 //rk30_mux_api_set(GPIO2D7_I2C1SCL_NAME, GPIO2D_GPIO2D7);
1909 //rk30_mux_api_set(GPIO2D6_I2C1SDA_NAME, GPIO2D_GPIO2D6);
1913 struct i2c_gpio_platform_data default_i2c_gpio_data = {
1914 .sda_pin = I2C_SDA_PIN,
1915 .scl_pin = I2C_SCL_PIN,
1916 .udelay = 5, // clk = 500/udelay = 100Khz
1917 .timeout = 100,//msecs_to_jiffies(100),
1919 .io_init = rk30_i2c_io_init,
1921 static struct i2c_board_info __initdata i2c_gpio_info[] = {
1925 static void __init rk30_i2c_register_board_info(void)
1927 #ifdef CONFIG_I2C0_RK30
1928 i2c_register_board_info(0, i2c0_info, ARRAY_SIZE(i2c0_info));
1930 #ifdef CONFIG_I2C1_RK30
1931 i2c_register_board_info(1, i2c1_info, ARRAY_SIZE(i2c1_info));
1933 #ifdef CONFIG_I2C2_RK30
1934 i2c_register_board_info(2, i2c2_info, ARRAY_SIZE(i2c2_info));
1936 #ifdef CONFIG_I2C3_RK30
1937 i2c_register_board_info(3, i2c3_info, ARRAY_SIZE(i2c3_info));
1939 #ifdef CONFIG_I2C4_RK30
1940 i2c_register_board_info(4, i2c4_info, ARRAY_SIZE(i2c4_info));
1942 #ifdef CONFIG_I2C_GPIO_RK30
1943 i2c_register_board_info(5, i2c_gpio_info, ARRAY_SIZE(i2c_gpio_info));
1948 static void rk30_pm_power_off(void)
1950 printk(KERN_ERR "rk30_pm_power_off start...\n");
1951 #if defined(CONFIG_TWL4030_CORE)
1958 /**********************************************************************************************
1960 * The virtual keys for android "back", "home", "menu", "search", these four keys are touch key
1961 * on the touch screen panel. (added by hhb@rock-chips.com 2011.04.21)
1962 * attention please: kobj_attribute.attr.name virtualkeys.synaptics_rmi4_i2c should be the same as
1963 * the input device in the touch screen driver.
1964 ***********************************************************************************************/
1965 static ssize_t rk_virtual_keys_show(struct kobject *kobj,
1966 struct kobj_attribute *attr, char *buf)
1968 #if (defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3202))
1969 printk("rk_virtual_keys_show S3202\n");
1970 /* centerx;centery;width;height; */
1972 __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":100:980:100:40"
1973 ":" __stringify(EV_KEY) ":" __stringify(KEY_MENU) ":200:980:100:40"
1974 ":" __stringify(EV_KEY) ":" __stringify(KEY_HOMEPAGE) ":300:980:100:40"
1975 ":" __stringify(EV_KEY) ":" __stringify(KEY_SEARCH) ":400:980:100:40"
1981 static struct kobj_attribute rk_virtual_keys_attr = {
1983 #if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3202)
1984 .name = "virtualkeys.synaptics_rmi4_i2c",
1986 .name = "virtualkeys",
1990 .show = rk_virtual_keys_show,
1993 static struct attribute *rk_properties_attrs[] = {
1994 &rk_virtual_keys_attr.attr,
1998 static struct attribute_group rk_properties_attr_group = {
1999 .attrs = rk_properties_attrs,
2001 static int rk_virtual_keys_init(void)
2004 struct kobject *properties_kobj;
2005 printk("rk_virtual_keys_init \n");
2006 properties_kobj = kobject_create_and_add("board_properties", NULL);
2007 if (properties_kobj)
2008 ret = sysfs_create_group(properties_kobj,
2009 &rk_properties_attr_group);
2010 if (!properties_kobj || ret)
2012 printk("failed to create board_properties for virtual key\n");
2017 /*************************end of virtual_keys************************/
2020 void board_gpio_suspend(void) {
2021 gpio_request(RK30_PIN2_PC3, NULL);
2022 rk30_mux_api_set(GPIO2C3_LCDC1DATA19_SPI1CLK_HSADCDATA0_NAME,GPIO2C_GPIO2C3);
2023 gpio_direction_input(RK30_PIN2_PC3);
2024 gpio_pull_updown(RK30_PIN2_PC3, 0);
2026 gpio_request(RK30_PIN2_PC5, NULL);
2027 rk30_mux_api_set(GPIO2C5_LCDC1DATA21_SPI1TXD_HSADCDATA2_NAME,GPIO2C_GPIO2C5);
2028 gpio_direction_input(RK30_PIN2_PC5);
2029 gpio_pull_updown(RK30_PIN2_PC5, 0);
2031 gpio_request(RK30_PIN2_PC6, NULL);
2032 rk30_mux_api_set(GPIO2C6_LCDC1DATA22_SPI1RXD_HSADCDATA3_NAME,GPIO2C_GPIO2C6);
2033 gpio_direction_input(RK30_PIN2_PC6);
2034 gpio_pull_updown(RK30_PIN2_PC6, 0);
2037 void board_gpio_resume(void) {
2039 gpio_request(RK30_PIN2_PC3, NULL);
2040 gpio_pull_updown(RK30_PIN2_PC3, 1);
2041 rk30_mux_api_set(GPIO2C3_LCDC1DATA19_SPI1CLK_HSADCDATA0_NAME,GPIO2C_SPI1_CLK);
2043 gpio_request(RK30_PIN2_PC5, NULL);
2044 gpio_pull_updown(RK30_PIN2_PC5, 1);
2045 rk30_mux_api_set(GPIO2C5_LCDC1DATA21_SPI1TXD_HSADCDATA2_NAME,GPIO2C_SPI1_TXD);
2047 gpio_request(RK30_PIN2_PC6, NULL);
2048 gpio_pull_updown(RK30_PIN2_PC6, 1);
2049 rk30_mux_api_set(GPIO2C6_LCDC1DATA22_SPI1RXD_HSADCDATA3_NAME,GPIO2C_SPI1_RXD);
2051 gpio_free(RK30_PIN2_PC3);
2052 gpio_free(RK30_PIN2_PC5);
2053 gpio_free(RK30_PIN2_PC6);
2056 static void __init machine_rk30_board_init(void)
2058 pm_power_off = rk30_pm_power_off;
2060 rk30_i2c_register_board_info();
2061 spi_register_board_info(board_spi_devices, ARRAY_SIZE(board_spi_devices));
2062 platform_add_devices(devices, ARRAY_SIZE(devices));
2063 board_usb_detect_init(RK30_PIN6_PA3);
2065 #ifdef CONFIG_WIFI_CONTROL_FUNC
2066 rk29sdk_wifi_bt_gpio_control_init();
2070 static void __init rk30_reserve(void)
2073 rk30_ion_pdata.heaps[0].base = board_mem_reserve_add("ion", ION_RESERVE_SIZE);
2075 #ifdef CONFIG_FB_ROCKCHIP
2076 resource_fb[0].start = board_mem_reserve_add("fb0", RK30_FB0_MEM_SIZE);
2077 resource_fb[0].end = resource_fb[0].start + RK30_FB0_MEM_SIZE - 1;
2078 resource_fb[1].start = board_mem_reserve_add("ipp buf", RK30_FB0_MEM_SIZE);
2079 resource_fb[1].end = resource_fb[1].start + RK30_FB0_MEM_SIZE - 1;
2080 resource_fb[2].start = board_mem_reserve_add("fb2", RK30_FB0_MEM_SIZE);
2081 resource_fb[2].end = resource_fb[2].start + RK30_FB0_MEM_SIZE - 1;
2083 #ifdef CONFIG_VIDEO_RK29
2084 rk30_camera_request_reserve_mem();
2086 board_mem_reserved();
2090 * dvfs_cpu_logic_table: table for arm and logic dvfs
2091 * @frequency : arm frequency
2092 * @cpu_volt : arm voltage depend on frequency
2093 * @logic_volt : logic voltage arm requests depend on frequency
2094 * comments : min arm/logic voltage
2096 static struct dvfs_arm_table dvfs_cpu_logic_table[] = {
2097 //{.frequency = 252 * 1000, .cpu_volt = 1050 * 1000, .logic_volt = 1050 * 1000},//0.975V/1.000V
2098 //{.frequency = 504 * 1000, .cpu_volt = 1050 * 1000, .logic_volt = 1050 * 1000},//0.975V/1.000V
2099 {.frequency = 816 * 1000, .cpu_volt = 1050 * 1000, .logic_volt = 1050 * 1000},//1.000V/1.025V
2100 {.frequency = 1008 * 1000, .cpu_volt = 1050 * 1000, .logic_volt = 1050 * 1000},//1.025V/1.050V
2101 {.frequency = 1200 * 1000, .cpu_volt = 1150 * 1000, .logic_volt = 1100 * 1000},//1.100V/1.050V
2102 {.frequency = 1272 * 1000, .cpu_volt = 1200 * 1000, .logic_volt = 1150 * 1000},//1.150V/1.100V
2103 {.frequency = 1416 * 1000, .cpu_volt = 1275 * 1000, .logic_volt = 1150 * 1000},//1.225V/1.100V
2104 //{.frequency = 1512 * 1000, .cpu_volt = 1325 * 1000, .logic_volt = 1200 * 1000},//1.300V/1.150V
2105 //{.frequency = 1608 * 1000, .cpu_volt = 1350 * 1000, .logic_volt = 1200 * 1000},//1.325V/1.175V
2106 {.frequency = CPUFREQ_TABLE_END},
2109 #define DVFS_CPU_TABLE_SIZE (ARRAY_SIZE(dvfs_cpu_logic_table))
2110 static struct cpufreq_frequency_table cpu_dvfs_table[DVFS_CPU_TABLE_SIZE];
2111 static struct cpufreq_frequency_table dep_cpu2core_table[DVFS_CPU_TABLE_SIZE];
2113 void __init board_clock_init(void)
2115 rk30_clock_data_init(periph_pll_default, codec_pll_default, RK30_CLOCKS_DEFAULT_FLAGS);
2116 dvfs_set_arm_logic_volt(dvfs_cpu_logic_table, cpu_dvfs_table, dep_cpu2core_table);
2119 MACHINE_START(RK30, "RK30board")
2120 .boot_params = PLAT_PHYS_OFFSET + 0x800,
2121 .fixup = rk30_fixup,
2122 .reserve = &rk30_reserve,
2123 .map_io = rk30_map_io,
2124 .init_irq = rk30_init_irq,
2125 .timer = &rk30_timer,
2126 .init_machine = machine_rk30_board_init,