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