1 /* arch/arm/mach-rk29/include/mach/board.h
3 * Copyright (C) 2010 ROCKCHIP, Inc.
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.
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.
15 #ifndef __ASM_ARCH_RK29_BOARD_H
16 #define __ASM_ARCH_RK29_BOARD_H
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>
25 struct led_newton_pwm {
30 unsigned int pwm_iomux_pwm;
31 unsigned int pwm_iomux_gpio;
32 unsigned int freq;/**/
33 unsigned int period;/*1-100*/
36 struct led_newton_pwm_platform_data {
38 struct led_newton_pwm* leds;
41 struct hdmi_platform_data {
45 int (*io_deinit)(void);
49 struct rk29_adc_battery_platform_data {
51 int (*io_deinit)(void);
66 int (*iomux_init)(void);
67 int (*iomux_deinit)(void);
68 int (*irda_pwr_ctl)(int en);
71 struct rk29_button_light_info{
75 int (*io_deinit)(void);
83 unsigned int cs_iomux_mode;
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;
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);
103 #define INVALID_GPIO -1
110 int (*io_init)(void);
111 int (*io_deinit)(void);
114 struct rk29_fb_setting_info{
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);
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 */
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);
154 struct rk29_sdmmc_platform_data {
155 unsigned int host_caps;
156 unsigned int host_ocr_avail;
157 unsigned int use_dma:1;
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);
165 int enable_sd_wakeup;
168 struct rk29_i2c_platform_data {
171 unsigned int slave_addr;
172 unsigned long scl_rate;
173 #define I2C_MODE_IRQ 0
174 #define I2C_MODE_POLL 1
176 int (*io_init)(void);
177 int (*io_deinit)(void);
180 struct bq27510_platform_data {
181 int (*init_dc_check_pin)(void);
182 unsigned int dc_check_pin;
183 unsigned int bat_num;
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;
195 struct rk29_i2s_platform_data {
196 int (*io_init)(void);
197 int (*io_deinit)(void);
201 struct p1003_platform_data {
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);
210 struct eeti_egalax_platform_data{
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);
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);
236 struct sintek_platform_data {
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);
247 struct synaptics_platform_data {
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);
257 struct mma8452_platform_data {
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);
268 struct bma023_platform_data {
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);
280 struct cm3202_platform_data {
283 int (*init_platform_hw)(void);
284 void (*exit_platform_hw)(void);
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);
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);
304 struct goodix_platform_data {
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);
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);
325 struct nas_platform_data {
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);
336 struct laibao_platform_data {
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);
350 struct akm8975_platform_data {
351 short m_layout[4][3][3];
352 char project_name[64];
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
361 struct rk29_newton_data {
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 */
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;
378 /* initial polarity inversion setting */
380 struct rk29_gpio_expander_info *settinginfo;
382 void *context; /* param to setup/teardown */
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);
387 void (*reseti2cpin)(void);
390 void __init rk29_setup_early_printk(void);
391 void __init rk29_map_common_io(void);
392 void __init board_power_init(void);
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);
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,
412 periph_pll_default = periph_pll_288mhz,
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,
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);
428 /* for USB detection */
429 #ifdef CONFIG_USB_GADGET
430 int board_usb_detect_init(unsigned gpio);
432 static int inline board_usb_detect_init(unsigned gpio) { return 0; }
435 /* for wakeup Android */
436 void rk28_send_wakeup_key(void);