rk30: sdk add wm8326 support
[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 #include <plat/board.h>
25
26 struct led_newton_pwm {
27         const char      *name;
28         unsigned int    pwm_id;
29         unsigned                pwm_gpio;
30         char*                   pwm_iomux_name;
31         unsigned int    pwm_iomux_pwm;
32         unsigned int    pwm_iomux_gpio;
33         unsigned int    freq;/**/
34         unsigned int    period;/*1-100*/
35 };
36
37 struct led_newton_pwm_platform_data {
38         int                     num_leds;
39         struct led_newton_pwm* leds;
40 };
41
42 struct hdmi_platform_data {
43         u32 hdmi_on_pin;
44         u32 hdmi_on_level;
45         int (*io_init)(void);
46         int (*io_deinit)(void);
47 };
48
49 /* adc battery */
50 struct rk29_adc_battery_platform_data {
51         int (*io_init)(void);
52         int (*io_deinit)(void);
53
54         int dc_det_pin;
55         int batt_low_pin;
56         int charge_ok_pin;
57         int charge_set_pin;
58
59         int dc_det_level;
60         int batt_low_level;
61         int charge_ok_level;
62         int charge_set_level;
63 };
64
65
66 struct rk29_button_light_info{
67         u32 led_on_pin;
68         u32 led_on_level;
69         int (*io_init)(void);
70         int (*io_deinit)(void);
71 };
72
73 /*vmac*/
74 struct rk29_vmac_platform_data {
75         int (*vmac_register_set)(void);
76         int (*rmii_io_init)(void);
77         int (*rmii_io_deinit)(void);
78     int (*rmii_power_control)(int enable);
79 };
80
81 #define INVALID_GPIO        -1
82
83
84 #ifndef _LINUX_WLAN_PLAT_H_
85 struct wifi_platform_data {
86         int (*set_power)(int val);
87         int (*set_reset)(int val);
88         int (*set_carddetect)(int val);
89         void *(*mem_prealloc)(int section, unsigned long size);
90         int (*get_mac_addr)(unsigned char *buf);
91 };
92 #endif
93
94 struct rk29_i2c_platform_data {
95         int     bus_num;        
96         unsigned int    flags;     
97         unsigned int    slave_addr; 
98         unsigned long   scl_rate;   
99 #define I2C_MODE_IRQ    0
100 #define I2C_MODE_POLL   1
101         unsigned int    mode:1;
102         int (*io_init)(void);
103         int (*io_deinit)(void);
104 };
105
106 struct bq27510_platform_data {  
107         int (*init_dc_check_pin)(void); 
108         unsigned int dc_check_pin;      
109         unsigned int bat_num;
110 };
111
112 struct bq27541_platform_data {  
113         int (*init_dc_check_pin)(void); 
114         unsigned int dc_check_pin;
115         unsigned int bat_check_pin;
116         unsigned int chgok_check_pin;
117         unsigned int bat_num;
118 };
119
120 /*i2s*/
121 struct rk29_i2s_platform_data {
122         int (*io_init)(void);
123         int (*io_deinit)(void);
124 };
125
126 /*p1003 touch */
127 struct p1003_platform_data {
128     u16     model;
129
130     int     (*get_pendown_state)(void);
131     int     (*init_platform_hw)(void);
132     int     (*p1003_platform_sleep)(void);
133     int     (*p1003_platform_wakeup)(void);
134     void    (*exit_platform_hw)(void);
135 };
136 struct eeti_egalax_platform_data{
137         u16     model;
138
139     int     (*get_pendown_state)(void);
140     int     (*init_platform_hw)(void);
141     int     (*eeti_egalax_platform_sleep)(void);
142     int     (*eeti_egalax_platform_wakeup)(void);
143     void    (*exit_platform_hw)(void);
144     int     standby_pin;
145     int     standby_value;
146     int     disp_on_pin;
147     int     disp_on_value;
148  
149 };
150 //added by zyw
151 struct atmel_1386_platform_data {
152         u8    numtouch; /* Number of touches to report  */
153         int  (*init_platform_hw)(struct device *dev);
154         void  (*exit_platform_hw)(struct device *dev);
155         int   max_x;    /* The default reported X range   */  
156         int   max_y;    /* The default reported Y range   */
157         u8    (*valid_interrupt) (void);
158         u8    (*read_chg) (void);
159 };
160
161 /*sintex touch*/
162 struct sintek_platform_data {
163         u16     model;
164
165         int     (*get_pendown_state)(void);
166         int     (*init_platform_hw)(void);
167         int     (*sintek_platform_sleep)(void);
168         int     (*sintek_platform_wakeup)(void);
169         void    (*exit_platform_hw)(void);
170 };
171
172 /*synaptics  touch*/
173 struct synaptics_platform_data {
174         u16     model;
175         
176         int     (*get_pendown_state)(void);
177         int     (*init_platform_hw)(void);
178         int     (*sintek_platform_sleep)(void);
179         int     (*sintek_platform_wakeup)(void);
180         void    (*exit_platform_hw)(void);
181 };
182
183
184 struct bma023_platform_data {
185     u16     model;
186         u16     swap_xy;
187         u16             swap_xyz;
188         signed char orientation[9];
189     int     (*get_pendown_state)(void);
190     int     (*init_platform_hw)(void);
191     int     (*mma8452_platform_sleep)(void);
192     int     (*mma8452_platform_wakeup)(void);
193     void    (*exit_platform_hw)(void);
194 };
195
196 struct cm3202_platform_data {
197         int CM3202_SD_IOPIN;
198         int DATA_ADC_CHN;
199         int     (*init_platform_hw)(void);
200         void    (*exit_platform_hw)(void);
201 };
202
203 /*it7260 touch */
204 struct it7260_platform_data {
205     int     (*get_pendown_state)(void);
206     int     (*init_platform_hw)(void);
207     int     (*it7260_platform_sleep)(void);
208     int     (*it7260_platform_wakeup)(void);
209     void    (*exit_platform_hw)(void);
210 };
211
212 struct ft5406_platform_data {
213     int     (*get_pendown_state)(void);
214     int     (*init_platform_hw)(void);
215     int     (*platform_sleep)(void);
216     int     (*platform_wakeup)(void);
217     void    (*exit_platform_hw)(void);
218 };
219
220
221 struct cs42l52_platform_data {
222     int     (*get_pendown_state)(void);
223     int     (*init_platform_hw)(void);
224     int     (*platform_sleep)(void);
225     int     (*platform_wakeup)(void);
226     void    (*exit_platform_hw)(void);
227 };
228
229 //tcl miaozh add
230 /*nas touch */
231 struct nas_platform_data {
232     u16     model;
233
234     int     (*get_pendown_state)(void);
235     int     (*init_platform_hw)(void);
236     int     (*nas_platform_sleep)(void);
237     int     (*nas_platform_wakeup)(void);
238     void    (*exit_platform_hw)(void);
239 };
240
241
242 struct laibao_platform_data {
243     u16     model;
244
245     int     (*get_pendown_state)(void);
246     int     (*init_platform_hw)(void);
247     int     (*laibao_platform_sleep)(void);
248     int     (*laibao_platform_wakeup)(void);
249     void    (*exit_platform_hw)(void);
250     int     pwr_pin;
251         int             pwr_on_value;
252     int     reset_pin;
253         int             reset_value;
254 };
255
256 struct rk29_newton_data {
257 };
258
259 struct tca6424_platform_data {
260         /*  the first extern gpio number in all of gpio groups */
261         unsigned int gpio_base;
262         unsigned int gpio_pin_num;
263         /*  the first gpio irq  number in all of irq source */
264
265         unsigned int gpio_irq_start;
266         unsigned int irq_pin_num;        //number of interrupt
267         unsigned int tca6424_irq_pin;     //rk29 gpio
268         unsigned int expand_port_group;
269         unsigned int expand_port_pinnum;
270         unsigned int rk_irq_mode;
271         unsigned int rk_irq_gpio_pull_up_down;
272         
273         /* initial polarity inversion setting */
274         uint16_t        invert;
275         struct rk29_gpio_expander_info  *settinginfo;
276         int  settinginfolen;
277         void    *context;       /* param to setup/teardown */
278
279         int             (*setup)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
280         int             (*teardown)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
281         char    **names;
282         void    (*reseti2cpin)(void);
283 };
284
285 void __init rk29_setup_early_printk(void);
286 void __init rk29_map_common_io(void);
287 void __init board_power_init(void);
288
289 enum periph_pll {
290         periph_pll_96mhz = 96000000, /* save more power */
291         periph_pll_144mhz = 144000000,
292         periph_pll_288mhz = 288000000, /* for USB 1.1 */
293         periph_pll_300mhz = 300000000, /* for Ethernet */
294 #if defined(CONFIG_RK29_VMAC) && defined(CONFIG_USB20_HOST_EN)
295         periph_pll_default = periph_pll_300mhz,
296 #else
297         periph_pll_default = periph_pll_288mhz,
298 #endif
299 };
300
301 enum codec_pll {
302         codec_pll_297mhz = 297000000, /* for HDMI */
303         codec_pll_300mhz = 300000000,
304         codec_pll_504mhz = 504000000,
305         codec_pll_552mhz = 552000000,
306         codec_pll_594mhz = 594000000, /* for HDMI */
307         codec_pll_600mhz = 600000000,
308 };
309
310 void __init rk29_clock_init(enum periph_pll ppll_rate); /* codec pll is 297MHz, has xin27m */
311 void __init rk29_clock_init2(enum periph_pll ppll_rate, enum codec_pll cpll_rate, bool has_xin27m);
312
313 #endif