Driver : add new driver al3006/bma023 & fix gc0309 building error
[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 struct led_newton_pwm {
26         const char      *name;
27         unsigned int    pwm_id;
28         unsigned                pwm_gpio;
29         char*                   pwm_iomux_name;
30         unsigned int    pwm_iomux_pwm;
31         unsigned int    pwm_iomux_gpio;
32         unsigned int    freq;/**/
33         unsigned int    period;/*1-100*/
34 };
35
36 struct led_newton_pwm_platform_data {
37         int                     num_leds;
38         struct led_newton_pwm* leds;
39 };
40
41 struct hdmi_platform_data {
42         u32 hdmi_on_pin;
43         u32 hdmi_on_level;
44         int (*io_init)(void);
45         int (*io_deinit)(void);
46 };
47 struct irda_info{
48     u32 intr_pin;
49     int (*iomux_init)(void);
50     int (*iomux_deinit)(void);
51     int (*irda_pwr_ctl)(int en);
52 };
53
54 struct rk29_button_light_info{
55         u32 led_on_pin;
56         u32 led_on_level;
57         int (*io_init)(void);
58         int (*io_deinit)(void);
59 };
60
61 /*spi*/
62 struct spi_cs_gpio {
63         const char *name;
64         unsigned int cs_gpio;
65         char *cs_iomux_name;
66         unsigned int cs_iomux_mode;
67 };
68
69 struct rk29xx_spi_platform_data {
70         int (*io_init)(struct spi_cs_gpio*, int);
71         int (*io_deinit)(struct spi_cs_gpio*, int);
72         int (*io_fix_leakage_bug)(void);
73         int (*io_resume_leakage_bug)(void);
74         struct spi_cs_gpio *chipselect_gpios;   
75         u16 num_chipselect;
76 };
77
78 /*vmac*/
79 struct rk29_vmac_platform_data {
80         int (*vmac_register_set)(void);
81         int (*rmii_io_init)(void);
82         int (*rmii_io_deinit)(void);
83     int (*rmii_power_control)(int enable);
84 };
85
86 #define INVALID_GPIO        -1
87
88 struct rk29lcd_info{
89     u32 lcd_id;
90     u32 txd_pin;
91     u32 clk_pin;
92     u32 cs_pin;
93     int (*io_init)(void);
94     int (*io_deinit)(void);
95 };
96
97 struct rk29_fb_setting_info{
98     u8 data_num;
99     u8 vsync_en;
100     u8 den_en;
101     u8 mcu_fmk_en;
102     u8 disp_on_en;
103     u8 standby_en;
104 };
105
106 struct rk29fb_info{
107     u32 fb_id;
108     u32 mcu_fmk_pin;
109     struct rk29lcd_info *lcd_info;
110     int (*io_init)(struct rk29_fb_setting_info *fb_setting);
111     int (*io_deinit)(void);
112     int (*io_enable)(void);
113     int (*io_disable)(void);
114 };
115
116 struct rk29_bl_info{
117     u32 pwm_id;
118     u32 bl_ref;
119     int (*io_init)(void);
120     int (*io_deinit)(void);
121         int (*pwm_suspend)(void);
122         int (*pwm_resume)(void);
123         int min_brightness;     /* 0 ~ 255 */
124         unsigned int delay_ms;  /* in milliseconds */
125 };
126
127 #ifndef _LINUX_WLAN_PLAT_H_
128 struct wifi_platform_data {
129         int (*set_power)(int val);
130         int (*set_reset)(int val);
131         int (*set_carddetect)(int val);
132         void *(*mem_prealloc)(int section, unsigned long size);
133         int (*get_mac_addr)(unsigned char *buf);
134 };
135 #endif
136
137 struct rk29_sdmmc_platform_data {
138         unsigned int host_caps;
139         unsigned int host_ocr_avail;
140         unsigned int use_dma:1;
141         char dma_name[8];
142         int (*io_init)(void);
143         int (*io_deinit)(void);
144         void (*set_iomux)(int device_id, unsigned int bus_width);//added by xbw at 2011-10-13
145         int (*status)(struct device *);
146         int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
147         int detect_irq;
148                 int enable_sd_wakeup;
149         int write_prt;
150 };
151 struct rk29_i2c_platform_data {
152         int     bus_num;        
153         unsigned int    flags;     
154         unsigned int    slave_addr; 
155         unsigned long   scl_rate;   
156 #define I2C_MODE_IRQ    0
157 #define I2C_MODE_POLL   1
158         unsigned int    mode:1;
159         int (*io_init)(void);
160         int (*io_deinit)(void);
161 };
162
163 struct bq27510_platform_data {  
164         int (*init_dc_check_pin)(void); 
165         unsigned int dc_check_pin;      
166         unsigned int bat_num;
167 };
168
169 struct bq27541_platform_data {  
170         int (*init_dc_check_pin)(void); 
171         unsigned int dc_check_pin;
172         unsigned int bat_check_pin;
173         unsigned int chgok_check_pin;
174         unsigned int bat_num;
175 };
176
177 /*i2s*/
178 struct rk29_i2s_platform_data {
179         int (*io_init)(void);
180         int (*io_deinit)(void);
181 };
182
183 /*p1003 touch */
184 struct p1003_platform_data {
185     u16     model;
186
187     int     (*get_pendown_state)(void);
188     int     (*init_platform_hw)(void);
189     int     (*p1003_platform_sleep)(void);
190     int     (*p1003_platform_wakeup)(void);
191     void    (*exit_platform_hw)(void);
192 };
193 struct eeti_egalax_platform_data{
194         u16     model;
195
196     int     (*get_pendown_state)(void);
197     int     (*init_platform_hw)(void);
198     int     (*eeti_egalax_platform_sleep)(void);
199     int     (*eeti_egalax_platform_wakeup)(void);
200     void    (*exit_platform_hw)(void);
201     int     standby_pin;
202     int     standby_value;
203     int     disp_on_pin;
204     int     disp_on_value;
205  
206 };
207 //added by zyw
208 struct atmel_1386_platform_data {
209         u8    numtouch; /* Number of touches to report  */
210         int  (*init_platform_hw)(struct device *dev);
211         void  (*exit_platform_hw)(struct device *dev);
212         int   max_x;    /* The default reported X range   */  
213         int   max_y;    /* The default reported Y range   */
214         u8    (*valid_interrupt) (void);
215         u8    (*read_chg) (void);
216 };
217
218 /*sintex touch*/
219 struct sintek_platform_data {
220         u16     model;
221
222         int     (*get_pendown_state)(void);
223         int     (*init_platform_hw)(void);
224         int     (*sintek_platform_sleep)(void);
225         int     (*sintek_platform_wakeup)(void);
226         void    (*exit_platform_hw)(void);
227 };
228
229 /*synaptics  touch*/
230 struct synaptics_platform_data {
231         u16     model;
232         
233         int     (*get_pendown_state)(void);
234         int     (*init_platform_hw)(void);
235         int     (*sintek_platform_sleep)(void);
236         int     (*sintek_platform_wakeup)(void);
237         void    (*exit_platform_hw)(void);
238 };
239
240 struct mma8452_platform_data {
241     u16     model;
242         u16     swap_xy;
243         u16             swap_xyz;
244         signed char orientation[9];
245     int     (*get_pendown_state)(void);
246     int     (*init_platform_hw)(void);
247     int     (*mma8452_platform_sleep)(void);
248     int     (*mma8452_platform_wakeup)(void);
249     void    (*exit_platform_hw)(void);
250 };
251 struct bma023_platform_data {
252     u16     model;
253         u16     swap_xy;
254         u16             swap_xyz;
255         signed char orientation[9];
256     int     (*get_pendown_state)(void);
257     int     (*init_platform_hw)(void);
258     int     (*mma8452_platform_sleep)(void);
259     int     (*mma8452_platform_wakeup)(void);
260     void    (*exit_platform_hw)(void);
261 };
262
263 struct cm3202_platform_data {
264         int CM3202_SD_IOPIN;
265         int DATA_ADC_CHN;
266         int     (*init_platform_hw)(void);
267         void    (*exit_platform_hw)(void);
268 };
269
270 /*it7260 touch */
271 struct it7260_platform_data {
272     int     (*get_pendown_state)(void);
273     int     (*init_platform_hw)(void);
274     int     (*it7260_platform_sleep)(void);
275     int     (*it7260_platform_wakeup)(void);
276     void    (*exit_platform_hw)(void);
277 };
278
279 struct ft5406_platform_data {
280     int     (*get_pendown_state)(void);
281     int     (*init_platform_hw)(void);
282     int     (*platform_sleep)(void);
283     int     (*platform_wakeup)(void);
284     void    (*exit_platform_hw)(void);
285 };
286
287 struct goodix_platform_data {
288         int model ;
289         int rest_pin;
290         int irq_pin ;
291     int     (*get_pendown_state)(void);
292     int     (*init_platform_hw)(void);
293     int     (*platform_sleep)(void);
294     int     (*platform_wakeup)(void);
295     void    (*exit_platform_hw)(void);
296 };
297
298 struct cs42l52_platform_data {
299     int     (*get_pendown_state)(void);
300     int     (*init_platform_hw)(void);
301     int     (*platform_sleep)(void);
302     int     (*platform_wakeup)(void);
303     void    (*exit_platform_hw)(void);
304 };
305
306 //tcl miaozh add
307 /*nas touch */
308 struct nas_platform_data {
309     u16     model;
310
311     int     (*get_pendown_state)(void);
312     int     (*init_platform_hw)(void);
313     int     (*nas_platform_sleep)(void);
314     int     (*nas_platform_wakeup)(void);
315     void    (*exit_platform_hw)(void);
316 };
317
318
319 struct laibao_platform_data {
320     u16     model;
321
322     int     (*get_pendown_state)(void);
323     int     (*init_platform_hw)(void);
324     int     (*laibao_platform_sleep)(void);
325     int     (*laibao_platform_wakeup)(void);
326     void    (*exit_platform_hw)(void);
327     int     lcd_disp_on_pin;
328     int     disp_on_value;
329     int     lcd_cs_pin;
330     int     lcd_cs_value;
331 };
332
333 struct akm8975_platform_data {
334         char layouts[3][3];
335         char project_name[64];
336         int gpio_DRDY;
337 };
338
339 struct rk29_gpio_expander_info {
340         unsigned int gpio_num;
341         unsigned int pin_type;//GPIO_IN or GPIO_OUT
342         unsigned int pin_value;//GPIO_HIGH or GPIO_LOW
343 };
344 struct rk29_newton_data {
345 };
346
347 struct tca6424_platform_data {
348         /*  the first extern gpio number in all of gpio groups */
349         unsigned int gpio_base;
350         unsigned int gpio_pin_num;
351         /*  the first gpio irq  number in all of irq source */
352
353         unsigned int gpio_irq_start;
354         unsigned int irq_pin_num;        //number of interrupt
355         unsigned int tca6424_irq_pin;     //rk29 gpio
356         unsigned int expand_port_group;
357         unsigned int expand_port_pinnum;
358         unsigned int rk_irq_mode;
359         unsigned int rk_irq_gpio_pull_up_down;
360         
361         /* initial polarity inversion setting */
362         uint16_t        invert;
363         struct rk29_gpio_expander_info  *settinginfo;
364         int  settinginfolen;
365         void    *context;       /* param to setup/teardown */
366
367         int             (*setup)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
368         int             (*teardown)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
369         char    **names;
370         void    (*reseti2cpin)(void);
371 };
372
373 void __init rk29_setup_early_printk(void);
374 void __init rk29_map_common_io(void);
375 void __init board_power_init(void);
376
377 #define BOOT_MODE_NORMAL                0
378 #define BOOT_MODE_FACTORY2              1
379 #define BOOT_MODE_RECOVERY              2
380 #define BOOT_MODE_CHARGE                3
381 #define BOOT_MODE_POWER_TEST            4
382 #define BOOT_MODE_OFFMODE_CHARGING      5
383 #define BOOT_MODE_REBOOT                6
384 #define BOOT_MODE_PANIC                 7
385 int board_boot_mode(void);
386
387 enum periph_pll {
388         periph_pll_96mhz = 96000000, /* save more power */
389         periph_pll_144mhz = 144000000,
390         periph_pll_288mhz = 288000000, /* for USB 1.1 */
391         periph_pll_300mhz = 300000000, /* for Ethernet */
392 #if defined(CONFIG_RK29_VMAC) && defined(CONFIG_USB20_HOST_EN)
393         periph_pll_default = periph_pll_300mhz,
394 #else
395         periph_pll_default = periph_pll_288mhz,
396 #endif
397 };
398
399 enum codec_pll {
400         codec_pll_297mhz = 297000000, /* for HDMI */
401         codec_pll_300mhz = 300000000,
402         codec_pll_504mhz = 504000000,
403         codec_pll_552mhz = 552000000,
404         codec_pll_594mhz = 594000000, /* for HDMI */
405         codec_pll_600mhz = 600000000,
406 };
407
408 void __init rk29_clock_init(enum periph_pll ppll_rate); /* codec pll is 297MHz, has xin27m */
409 void __init rk29_clock_init2(enum periph_pll ppll_rate, enum codec_pll cpll_rate, bool has_xin27m);
410
411 /* for USB detection */
412 #ifdef CONFIG_USB_GADGET
413 int board_usb_detect_init(unsigned gpio);
414 #else
415 static int inline board_usb_detect_init(unsigned gpio) { return 0; }
416 #endif
417
418 /* for wakeup Android */
419 void rk28_send_wakeup_key(void);
420
421 #endif