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