2006-01-09 17:05:41 +00:00
/*
2007-02-05 11:42:07 +01:00
* include / asm - arm / arch - at91 / board . h
2006-01-09 17:05:41 +00: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 18:29:51 +02:00
* and describing board - specific data needed by drivers . For example ,
2006-01-09 17:05:41 +00: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 17:15:51 +01:00
# include <linux/mtd/partitions.h>
2006-06-19 18:16:46 +01:00
# include <linux/device.h>
2007-11-19 13:47:20 +01:00
# include <linux/i2c.h>
2006-06-19 18:16:46 +01:00
# include <linux/spi/spi.h>
2006-04-02 17:15:51 +01:00
2006-01-09 17:05:41 +00: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 09:09:08 +01:00
u8 chipselect ; /* EBI Chip Select number */
2006-01-09 17:05:41 +00: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 09:09:08 +01:00
unsigned slot_b : 1 ; /* uses Slot B */
2006-01-09 17:05:41 +00:00
unsigned wire4 : 1 ; /* (SD) supports DAT0..DAT3 */
u8 wp_pin ; /* (SD) writeprotect detect */
u8 vcc_pin ; /* power switching (high == on) */
} ;
2007-02-08 09:00:39 +01:00
extern void __init at91_add_device_mmc ( short mmc_id , struct at91_mmc_data * data ) ;
2006-01-09 17:05:41 +00:00
2007-05-02 17:46:49 +01:00
/* Ethernet (EMAC & MACB) */
2006-01-09 17:05:41 +00:00
struct at91_eth_data {
2007-07-12 19:07:24 +02:00
u32 phy_mask ;
2006-01-09 17:05:41 +00:00
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 09:22:23 +01:00
# if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263)
# define eth_platform_data at91_eth_data
# endif
2006-01-09 17:05:41 +00:00
/* USB Host */
struct at91_usbh_data {
u8 ports ; /* number of ports on root hub */
2007-02-08 09:00:39 +01:00
u8 vbus_pin [ ] ; /* port power-control pin */
2006-01-09 17:05:41 +00:00
} ;
extern void __init at91_add_device_usbh ( struct at91_usbh_data * data ) ;
2006-04-02 17:15:51 +01: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 09:09:08 +01:00
u8 bus_width_16 ; /* buswidth is 16 bit */
struct mtd_partition * ( * partition_info ) ( int , int * ) ;
2006-04-02 17:15:51 +01:00
} ;
extern void __init at91_add_device_nand ( struct at91_nand_data * data ) ;
/* I2C*/
2007-11-19 13:47:20 +01:00
extern void __init at91_add_device_i2c ( struct i2c_board_info * devices , int nr_devices ) ;
2006-04-02 17:15:51 +01:00
2006-06-19 18:16:46 +01:00
/* SPI */
extern void __init at91_add_device_spi ( struct spi_board_info * devices , int nr_devices ) ;
/* Serial */
2008-01-23 09:25:15 +01:00
# define ATMEL_UART_CTS 0x01
# define ATMEL_UART_RTS 0x02
# define ATMEL_UART_DSR 0x04
# define ATMEL_UART_DTR 0x08
# define ATMEL_UART_DCD 0x10
# define ATMEL_UART_RI 0x20
extern void __init at91_register_uart ( unsigned id , unsigned portnr , unsigned pins ) ;
extern void __init at91_set_serial_console ( unsigned portnr ) ;
2006-06-19 18:16:46 +01:00
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 16:02:04 +02:00
extern struct platform_device * atmel_default_console_device ;
2008-01-23 09:25:15 +01:00
extern void __init __deprecated at91_init_serial ( struct at91_uart_config * config ) ;
2006-06-19 18:16:46 +01:00
2006-10-04 16:02:04 +02:00
struct atmel_uart_data {
2006-06-19 18:16:46 +01:00
short use_dma_tx ; /* use transmit DMA? */
short use_dma_rx ; /* use receive DMA? */
2006-10-04 16:02:08 +02:00
void __iomem * regs ; /* virtual base address, if any */
2006-06-19 18:16:46 +01:00
} ;
extern void __init at91_add_device_serial ( void ) ;
2006-04-02 17:15:51 +01:00
2008-01-23 09:18:06 +01:00
/*
* SSC - - accessed through ssc_request ( id ) . Drivers don ' t bind to SSC
* platform devices . Their SSC ID is part of their configuration data ,
* along with information about which SSC signals they should use .
*/
# define ATMEL_SSC_TK 0x01
# define ATMEL_SSC_TF 0x02
# define ATMEL_SSC_TD 0x04
# define ATMEL_SSC_TX (ATMEL_SSC_TK | ATMEL_SSC_TF | ATMEL_SSC_TD)
# define ATMEL_SSC_RK 0x10
# define ATMEL_SSC_RF 0x20
# define ATMEL_SSC_RD 0x40
# define ATMEL_SSC_RX (ATMEL_SSC_RK | ATMEL_SSC_RF | ATMEL_SSC_RD)
extern void __init at91_add_device_ssc ( unsigned id , unsigned pins ) ;
2007-05-02 17:46:49 +01: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 15:17:47 +01:00
} ;
2007-05-02 17:46:49 +01:00
extern void __init at91_add_device_ac97 ( struct atmel_ac97_data * data ) ;
2008-01-22 11:43:26 +01:00
/* ISI */
extern void __init at91_add_device_isi ( void ) ;
2006-04-02 17:15:48 +01:00
/* LEDs */
extern u8 at91_leds_cpu ;
extern u8 at91_leds_timer ;
extern void __init at91_init_leds ( u8 cpu_led , u8 timer_led ) ;
2007-10-26 17:54:39 +01:00
/* FIXME: this needs a better location, but gets stuff building again */
extern int at91_suspend_entering_slow_clock ( void ) ;
2006-01-09 17:05:41 +00:00
# endif