2006-01-09 20:05:41 +03:00
/*
2007-02-05 13:42:07 +03:00
* include / asm - arm / arch - at91 / board . h
2006-01-09 20:05:41 +03:00
*
* Copyright ( C ) 2005 HP Labs
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/*
* These are data structures found in platform_device . dev . platform_data ,
2006-06-30 20:29:51 +04:00
* and describing board - specific data needed by drivers . For example ,
2006-01-09 20:05:41 +03:00
* which pin is used for a given GPIO role .
*
* In 2.6 , drivers should strongly avoid board - specific knowledge so
* that supporting new boards normally won ' t require driver patches .
* Most board - specific knowledge should be in arch / . . . / board - * . c files .
*/
# ifndef __ASM_ARCH_BOARD_H
# define __ASM_ARCH_BOARD_H
2006-04-02 20:15:51 +04:00
# include <linux/mtd/partitions.h>
2006-06-19 21:16:46 +04:00
# include <linux/device.h>
# include <linux/spi/spi.h>
2006-04-02 20:15:51 +04:00
2006-01-09 20:05:41 +03:00
/* USB Device */
struct at91_udc_data {
u8 vbus_pin ; /* high == host powering us */
u8 pullup_pin ; /* high == D+ pulled up */
} ;
extern void __init at91_add_device_udc ( struct at91_udc_data * data ) ;
/* Compact Flash */
struct at91_cf_data {
u8 irq_pin ; /* I/O IRQ */
u8 det_pin ; /* Card detect */
u8 vcc_pin ; /* power switching */
u8 rst_pin ; /* card reset */
2006-12-04 11:09:08 +03:00
u8 chipselect ; /* EBI Chip Select number */
2006-01-09 20:05:41 +03:00
} ;
extern void __init at91_add_device_cf ( struct at91_cf_data * data ) ;
/* MMC / SD */
struct at91_mmc_data {
u8 det_pin ; /* card detect IRQ */
2006-12-04 11:09:08 +03:00
unsigned slot_b : 1 ; /* uses Slot B */
2006-01-09 20:05:41 +03:00
unsigned wire4 : 1 ; /* (SD) supports DAT0..DAT3 */
u8 wp_pin ; /* (SD) writeprotect detect */
u8 vcc_pin ; /* power switching (high == on) */
} ;
2007-02-08 11:00:39 +03:00
extern void __init at91_add_device_mmc ( short mmc_id , struct at91_mmc_data * data ) ;
2006-01-09 20:05:41 +03:00
2007-05-02 20:46:49 +04:00
/* Ethernet (EMAC & MACB) */
2006-01-09 20:05:41 +03:00
struct at91_eth_data {
u8 phy_irq_pin ; /* PHY IRQ */
u8 is_rmii ; /* using RMII interface? */
} ;
extern void __init at91_add_device_eth ( struct at91_eth_data * data ) ;
2007-02-01 11:22:23 +03:00
# if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263)
# define eth_platform_data at91_eth_data
# endif
2006-01-09 20:05:41 +03:00
/* USB Host */
struct at91_usbh_data {
u8 ports ; /* number of ports on root hub */
2007-02-08 11:00:39 +03:00
u8 vbus_pin [ ] ; /* port power-control pin */
2006-01-09 20:05:41 +03:00
} ;
extern void __init at91_add_device_usbh ( struct at91_usbh_data * data ) ;
2006-04-02 20:15:51 +04:00
/* NAND / SmartMedia */
struct at91_nand_data {
u8 enable_pin ; /* chip enable */
u8 det_pin ; /* card detect */
u8 rdy_pin ; /* ready/busy */
u8 ale ; /* address line number connected to ALE */
u8 cle ; /* address line number connected to CLE */
2006-12-04 11:09:08 +03:00
u8 bus_width_16 ; /* buswidth is 16 bit */
struct mtd_partition * ( * partition_info ) ( int , int * ) ;
2006-04-02 20:15:51 +04:00
} ;
extern void __init at91_add_device_nand ( struct at91_nand_data * data ) ;
/* I2C*/
2006-06-19 21:16:46 +04:00
extern void __init at91_add_device_i2c ( void ) ;
2006-04-02 20:15:51 +04:00
2006-06-19 21:16:46 +04:00
/* SPI */
extern void __init at91_add_device_spi ( struct spi_board_info * devices , int nr_devices ) ;
/* Serial */
struct at91_uart_config {
unsigned short console_tty ; /* tty number of serial console */
unsigned short nr_tty ; /* number of serial tty's */
short tty_map [ ] ; /* map UART to tty number */
} ;
2006-10-04 18:02:04 +04:00
extern struct platform_device * atmel_default_console_device ;
2006-06-19 21:16:46 +04:00
extern void __init at91_init_serial ( struct at91_uart_config * config ) ;
2006-10-04 18:02:04 +04:00
struct atmel_uart_data {
2006-06-19 21:16:46 +04:00
short use_dma_tx ; /* use transmit DMA? */
short use_dma_rx ; /* use receive DMA? */
2006-10-04 18:02:08 +04:00
void __iomem * regs ; /* virtual base address, if any */
2006-06-19 21:16:46 +04:00
} ;
extern void __init at91_add_device_serial ( void ) ;
2006-04-02 20:15:51 +04:00
2007-05-02 20:46:49 +04:00
/* LCD Controller */
struct atmel_lcdfb_info ;
extern void __init at91_add_device_lcdc ( struct atmel_lcdfb_info * data ) ;
/* AC97 */
struct atmel_ac97_data {
u8 reset_pin ; /* reset */
2007-05-07 18:17:47 +04:00
} ;
2007-05-02 20:46:49 +04:00
extern void __init at91_add_device_ac97 ( struct atmel_ac97_data * data ) ;
2006-04-02 20:15:48 +04:00
/* LEDs */
extern u8 at91_leds_cpu ;
extern u8 at91_leds_timer ;
extern void __init at91_init_leds ( u8 cpu_led , u8 timer_led ) ;
2006-01-09 20:05:41 +03:00
# endif