fix White screen when power_on or resume
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rk29 / include / mach / board.h
1 /* arch/arm/mach-rk29/include/mach/board.h
2  *
3  * Copyright (C) 2010 ROCKCHIP, Inc.
4  *
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.
8  *
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.
13  *
14  */
15 #ifndef __ASM_ARCH_RK29_BOARD_H
16 #define __ASM_ARCH_RK29_BOARD_H
17
18 #include <linux/device.h>
19 #include <linux/platform_device.h>
20 #include <linux/i2c.h>
21 #include <linux/types.h>
22 #include <linux/timer.h>
23 #include <linux/notifier.h>
24
25 /*spi*/
26 struct spi_cs_gpio {
27         const char *name;
28         unsigned int cs_gpio;
29         char *cs_iomux_name;
30         unsigned int cs_iomux_mode;
31 };
32
33 struct rk29xx_spi_platform_data {
34         int (*io_init)(struct spi_cs_gpio*, int);
35         int (*io_deinit)(struct spi_cs_gpio*, int);
36         int (*io_fix_leakage_bug)(void);
37         int (*io_resume_leakage_bug)(void);
38         struct spi_cs_gpio *chipselect_gpios;   
39         u16 num_chipselect;
40 };
41
42 /*vmac*/
43 struct rk29_vmac_platform_data {
44         int (*vmac_register_set)(void);
45         int (*rmii_io_init)(void);
46         int (*rmii_io_deinit)(void);
47     int (*rmii_power_control)(int enable);
48 };
49
50 #define INVALID_GPIO        -1
51
52 struct rk29lcd_info{
53     u32 lcd_id;
54     u32 txd_pin;
55     u32 clk_pin;
56     u32 cs_pin;
57     int (*io_init)(void);
58     int (*io_deinit)(void);
59 };
60
61 struct rk29_fb_setting_info{
62     u8 data_num;
63     u8 vsync_en;
64     u8 den_en;
65     u8 mcu_fmk_en;
66     u8 disp_on_en;
67     u8 standby_en;
68 };
69
70 struct rk29fb_info{
71     u32 fb_id;
72     u32 mcu_fmk_pin;
73     struct rk29lcd_info *lcd_info;
74     int (*io_init)(struct rk29_fb_setting_info *fb_setting);
75     int (*io_deinit)(void);
76     int (*io_enable)(void);
77     int (*io_disable)(void);
78 };
79
80 struct rk29_bl_info{
81     u32 pwm_id;
82     u32 bl_ref;
83     int (*io_init)(void);
84     int (*io_deinit)(void);
85         int (*pwm_suspend)(void);
86         int (*pwm_resume)(void);
87         int min_brightness;     /* 0 ~ 255 */
88         unsigned int delay_ms;  /* in milliseconds */
89 };
90
91 struct wifi_platform_data {
92         int (*set_power)(int val);
93         int (*set_reset)(int val);
94         int (*set_carddetect)(int val);
95         void *(*mem_prealloc)(int section, unsigned long size);
96         int (*get_mac_addr)(unsigned char *buf);
97 };
98
99 struct rk29_sdmmc_platform_data {
100         unsigned int host_caps;
101         unsigned int host_ocr_avail;
102         unsigned int use_dma:1;
103         char dma_name[8];
104         int (*io_init)(void);
105         int (*io_deinit)(void);
106         int (*status)(struct device *);
107         int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
108         int detect_irq;
109                 int enable_sd_wakeup;
110 };
111 struct rk29_i2c_platform_data {
112         int     bus_num;        
113         unsigned int    flags;     
114         unsigned int    slave_addr; 
115         unsigned long   scl_rate;   
116 #define I2C_MODE_IRQ    0
117 #define I2C_MODE_POLL   1
118         unsigned int    mode:1;
119         int (*io_init)(void);
120         int (*io_deinit)(void);
121 };
122
123 struct bq27510_platform_data {  
124         int (*init_dc_check_pin)(void); 
125         unsigned int dc_check_pin;      
126         unsigned int bat_num;
127 };
128
129 /*i2s*/
130 struct rk29_i2s_platform_data {
131         int (*io_init)(void);
132         int (*io_deinit)(void);
133 };
134
135 /*p1003 touch */
136 struct p1003_platform_data {
137     u16     model;
138
139     int     (*get_pendown_state)(void);
140     int     (*init_platform_hw)(void);
141     int     (*p1003_platform_sleep)(void);
142     int     (*p1003_platform_wakeup)(void);
143     void    (*exit_platform_hw)(void);
144 };
145 struct eeti_egalax_platform_data{
146         u16     model;
147
148     int     (*get_pendown_state)(void);
149     int     (*init_platform_hw)(void);
150     int     (*eeti_egalax_platform_sleep)(void);
151     int     (*eeti_egalax_platform_wakeup)(void);
152     void    (*exit_platform_hw)(void);
153     int     standby_pin;
154     int     standby_value;
155     int     disp_on_pin;
156     int     disp_on_value;
157  
158 };
159
160 /*sintex touch*/
161 struct sintek_platform_data {
162         u16     model;
163
164         int     (*get_pendown_state)(void);
165         int     (*init_platform_hw)(void);
166         int     (*sintek_platform_sleep)(void);
167         int     (*sintek_platform_wakeup)(void);
168         void    (*exit_platform_hw)(void);
169 };
170
171 /*synaptics  touch*/
172 struct synaptics_platform_data {
173         u16     model;
174         
175         int     (*get_pendown_state)(void);
176         int     (*init_platform_hw)(void);
177         int     (*sintek_platform_sleep)(void);
178         int     (*sintek_platform_wakeup)(void);
179         void    (*exit_platform_hw)(void);
180 };
181
182 struct mma8452_platform_data {
183     u16     model;
184         u16     swap_xy;
185         u16             swap_xyz;
186         signed char orientation[9];
187     int     (*get_pendown_state)(void);
188     int     (*init_platform_hw)(void);
189     int     (*mma8452_platform_sleep)(void);
190     int     (*mma8452_platform_wakeup)(void);
191     void    (*exit_platform_hw)(void);
192 };
193
194 struct cm3202_platform_data {
195         int CM3202_SD_IOPIN;
196         int DATA_ADC_CHN;
197         int     (*init_platform_hw)(void);
198         void    (*exit_platform_hw)(void);
199 };
200
201 /*it7260 touch */
202 struct it7260_platform_data {
203     int     (*get_pendown_state)(void);
204     int     (*init_platform_hw)(void);
205     int     (*it7260_platform_sleep)(void);
206     int     (*it7260_platform_wakeup)(void);
207     void    (*exit_platform_hw)(void);
208 };
209
210 struct akm8975_platform_data {
211         char layouts[3][3];
212         char project_name[64];
213         int gpio_DRDY;
214 };
215
216 struct rk29_gpio_expander_info {
217         unsigned int gpio_num;
218         unsigned int pin_type;//GPIO_IN or GPIO_OUT
219         unsigned int pin_value;//GPIO_HIGH or GPIO_LOW
220 };
221
222 struct tca6424_platform_data {
223         /*  the first extern gpio number in all of gpio groups */
224         unsigned int gpio_base;
225         unsigned int gpio_pin_num;
226         /*  the first gpio irq  number in all of irq source */
227
228         unsigned int gpio_irq_start;
229         unsigned int irq_pin_num;        //number of interrupt
230         unsigned int tca6424_irq_pin;     //rk29 gpio
231         unsigned int expand_port_group;
232         unsigned int expand_port_pinnum;
233         unsigned int rk_irq_mode;
234         unsigned int rk_irq_gpio_pull_up_down;
235         
236         /* initial polarity inversion setting */
237         uint16_t        invert;
238         struct rk29_gpio_expander_info  *settinginfo;
239         int  settinginfolen;
240         void    *context;       /* param to setup/teardown */
241
242         int             (*setup)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
243         int             (*teardown)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
244         char    **names;
245         void    (*reseti2cpin)(void);
246 };
247
248 void __init rk29_setup_early_printk(void);
249 void __init rk29_map_common_io(void);
250 void __init board_power_init(void);
251
252 #define BOOT_MODE_NORMAL                0
253 #define BOOT_MODE_FACTORY2              1
254 #define BOOT_MODE_RECOVERY              2
255 #define BOOT_MODE_CHARGE                3
256 #define BOOT_MODE_POWER_TEST            4
257 #define BOOT_MODE_OFFMODE_CHARGING      5
258 int board_boot_mode(void);
259
260 enum periph_pll {
261         periph_pll_96mhz = 96000000,
262         periph_pll_144mhz = 144000000,
263         periph_pll_288mhz = 288000000,
264         periph_pll_300mhz = 300000000,
265 };
266 void __init rk29_clock_init(enum periph_pll ppll_rate);
267
268 /* for USB detection */
269 #ifdef CONFIG_USB_GADGET
270 int board_usb_detect_init(unsigned gpio);
271 #else
272 static int inline board_usb_detect_init(unsigned gpio) { return 0; }
273 #endif
274
275 /* for wakeup Android */
276 void rk28_send_wakeup_key(void);
277
278 #endif