linux/arch/arm/mach-at91/include/mach/board.h
<<
>>
Prefs
   1/*
   2 * arch/arm/mach-at91/include/mach/board.h
   3 *
   4 *  Copyright (C) 2005 HP Labs
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21/*
  22 * These are data structures found in platform_device.dev.platform_data,
  23 * and describing board-specific data needed by drivers.  For example,
  24 * which pin is used for a given GPIO role.
  25 *
  26 * In 2.6, drivers should strongly avoid board-specific knowledge so
  27 * that supporting new boards normally won't require driver patches.
  28 * Most board-specific knowledge should be in arch/.../board-*.c files.
  29 */
  30
  31#ifndef __ASM_ARCH_BOARD_H
  32#define __ASM_ARCH_BOARD_H
  33
  34#include <linux/mtd/partitions.h>
  35#include <linux/device.h>
  36#include <linux/i2c.h>
  37#include <linux/leds.h>
  38#include <linux/spi/spi.h>
  39#include <linux/usb/atmel_usba_udc.h>
  40#include <linux/atmel-mci.h>
  41#include <sound/atmel-ac97c.h>
  42
  43 /* USB Device */
  44struct at91_udc_data {
  45        u8      vbus_pin;               /* high == host powering us */
  46        u8      pullup_pin;             /* active == D+ pulled up */
  47        u8      pullup_active_low;      /* true == pullup_pin is active low */
  48};
  49extern void __init at91_add_device_udc(struct at91_udc_data *data);
  50
  51 /* USB High Speed Device */
  52extern void __init at91_add_device_usba(struct usba_platform_data *data);
  53
  54 /* Compact Flash */
  55struct at91_cf_data {
  56        u8      irq_pin;                /* I/O IRQ */
  57        u8      det_pin;                /* Card detect */
  58        u8      vcc_pin;                /* power switching */
  59        u8      rst_pin;                /* card reset */
  60        u8      chipselect;             /* EBI Chip Select number */
  61        u8      flags;
  62#define AT91_CF_TRUE_IDE        0x01
  63#define AT91_IDE_SWAP_A0_A2     0x02
  64};
  65extern void __init at91_add_device_cf(struct at91_cf_data *data);
  66
  67 /* MMC / SD */
  68  /* at91_mci platform config */
  69struct at91_mmc_data {
  70        u8              det_pin;        /* card detect IRQ */
  71        unsigned        slot_b:1;       /* uses Slot B */
  72        unsigned        wire4:1;        /* (SD) supports DAT0..DAT3 */
  73        u8              wp_pin;         /* (SD) writeprotect detect */
  74        u8              vcc_pin;        /* power switching (high == on) */
  75};
  76extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
  77
  78  /* atmel-mci platform config */
  79extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data);
  80
  81 /* Ethernet (EMAC & MACB) */
  82struct at91_eth_data {
  83        u32             phy_mask;
  84        u8              phy_irq_pin;    /* PHY IRQ */
  85        u8              is_rmii;        /* using RMII interface? */
  86};
  87extern void __init at91_add_device_eth(struct at91_eth_data *data);
  88
  89#if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) \
  90        || defined(CONFIG_ARCH_AT91SAM9G45)
  91#define eth_platform_data       at91_eth_data
  92#endif
  93
  94 /* USB Host */
  95struct at91_usbh_data {
  96        u8              ports;          /* number of ports on root hub */
  97        u8              vbus_pin[2];    /* port power-control pin */
  98};
  99extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
 100extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
 101
 102 /* NAND / SmartMedia */
 103struct atmel_nand_data {
 104        u8              enable_pin;     /* chip enable */
 105        u8              det_pin;        /* card detect */
 106        u8              rdy_pin;        /* ready/busy */
 107        u8              rdy_pin_active_low;     /* rdy_pin value is inverted */
 108        u8              ale;            /* address line number connected to ALE */
 109        u8              cle;            /* address line number connected to CLE */
 110        u8              bus_width_16;   /* buswidth is 16 bit */
 111        struct mtd_partition* (*partition_info)(int, int*);
 112};
 113extern void __init at91_add_device_nand(struct atmel_nand_data *data);
 114
 115 /* I2C*/
 116#if defined(CONFIG_ARCH_AT91SAM9G45)
 117extern void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices);
 118#else
 119extern void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices);
 120#endif
 121
 122 /* SPI */
 123extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices);
 124
 125 /* Serial */
 126#define ATMEL_UART_CTS  0x01
 127#define ATMEL_UART_RTS  0x02
 128#define ATMEL_UART_DSR  0x04
 129#define ATMEL_UART_DTR  0x08
 130#define ATMEL_UART_DCD  0x10
 131#define ATMEL_UART_RI   0x20
 132
 133extern void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins);
 134extern void __init at91_set_serial_console(unsigned portnr);
 135
 136struct at91_uart_config {
 137        unsigned short  console_tty;    /* tty number of serial console */
 138        unsigned short  nr_tty;         /* number of serial tty's */
 139        short           tty_map[];      /* map UART to tty number */
 140};
 141extern struct platform_device *atmel_default_console_device;
 142extern void __init __deprecated at91_init_serial(struct at91_uart_config *config);
 143
 144struct atmel_uart_data {
 145        short           use_dma_tx;     /* use transmit DMA? */
 146        short           use_dma_rx;     /* use receive DMA? */
 147        void __iomem    *regs;          /* virtual base address, if any */
 148};
 149extern void __init at91_add_device_serial(void);
 150
 151/*
 152 * PWM
 153 */
 154#define AT91_PWM0       0
 155#define AT91_PWM1       1
 156#define AT91_PWM2       2
 157#define AT91_PWM3       3
 158
 159extern void __init at91_add_device_pwm(u32 mask);
 160
 161/*
 162 * SSC -- accessed through ssc_request(id).  Drivers don't bind to SSC
 163 * platform devices.  Their SSC ID is part of their configuration data,
 164 * along with information about which SSC signals they should use.
 165 */
 166#define ATMEL_SSC_TK    0x01
 167#define ATMEL_SSC_TF    0x02
 168#define ATMEL_SSC_TD    0x04
 169#define ATMEL_SSC_TX    (ATMEL_SSC_TK | ATMEL_SSC_TF | ATMEL_SSC_TD)
 170
 171#define ATMEL_SSC_RK    0x10
 172#define ATMEL_SSC_RF    0x20
 173#define ATMEL_SSC_RD    0x40
 174#define ATMEL_SSC_RX    (ATMEL_SSC_RK | ATMEL_SSC_RF | ATMEL_SSC_RD)
 175
 176extern void __init at91_add_device_ssc(unsigned id, unsigned pins);
 177
 178 /* LCD Controller */
 179struct atmel_lcdfb_info;
 180extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
 181
 182 /* AC97 */
 183extern void __init at91_add_device_ac97(struct ac97c_platform_data *data);
 184
 185 /* ISI */
 186extern void __init at91_add_device_isi(void);
 187
 188 /* Touchscreen Controller */
 189extern void __init at91_add_device_tsadcc(void);
 190
 191/* CAN */
 192struct at91_can_data {
 193        void (*transceiver_switch)(int on);
 194};
 195extern void __init at91_add_device_can(struct at91_can_data *data);
 196
 197 /* LEDs */
 198extern void __init at91_init_leds(u8 cpu_led, u8 timer_led);
 199extern void __init at91_gpio_leds(struct gpio_led *leds, int nr);
 200extern void __init at91_pwm_leds(struct gpio_led *leds, int nr);
 201
 202/* FIXME: this needs a better location, but gets stuff building again */
 203extern int at91_suspend_entering_slow_clock(void);
 204
 205#endif
 206