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