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#include <linux/serial.h>
  43#include <linux/platform_data/macb.h>
  44#include <linux/platform_data/atmel.h>
  45
  46 /* USB Device */
  47struct at91_udc_data {
  48        int     vbus_pin;               /* high == host powering us */
  49        u8      vbus_active_low;        /* vbus polarity */
  50        u8      vbus_polled;            /* Use polling, not interrupt */
  51        int     pullup_pin;             /* active == D+ pulled up */
  52        u8      pullup_active_low;      /* true == pullup_pin is active low */
  53};
  54extern void __init at91_add_device_udc(struct at91_udc_data *data);
  55
  56 /* USB High Speed Device */
  57extern void __init at91_add_device_usba(struct usba_platform_data *data);
  58
  59 /* Compact Flash */
  60struct at91_cf_data {
  61        int     irq_pin;                /* I/O IRQ */
  62        int     det_pin;                /* Card detect */
  63        int     vcc_pin;                /* power switching */
  64        int     rst_pin;                /* card reset */
  65        u8      chipselect;             /* EBI Chip Select number */
  66        u8      flags;
  67#define AT91_CF_TRUE_IDE        0x01
  68#define AT91_IDE_SWAP_A0_A2     0x02
  69};
  70extern void __init at91_add_device_cf(struct at91_cf_data *data);
  71
  72 /* MMC / SD */
  73  /* at91_mci platform config */
  74struct at91_mmc_data {
  75        int             det_pin;        /* card detect IRQ */
  76        unsigned        slot_b:1;       /* uses Slot B */
  77        unsigned        wire4:1;        /* (SD) supports DAT0..DAT3 */
  78        int             wp_pin;         /* (SD) writeprotect detect */
  79        int             vcc_pin;        /* power switching (high == on) */
  80};
  81extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data);
  82
  83  /* atmel-mci platform config */
  84extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data);
  85
  86extern void __init at91_add_device_eth(struct macb_platform_data *data);
  87
  88 /* USB Host */
  89#define AT91_MAX_USBH_PORTS     3
  90struct at91_usbh_data {
  91        int             vbus_pin[AT91_MAX_USBH_PORTS];  /* port power-control pin */
  92        int             overcurrent_pin[AT91_MAX_USBH_PORTS];
  93        u8              ports;                          /* number of ports on root hub */
  94        u8              overcurrent_supported;
  95        u8              vbus_pin_active_low[AT91_MAX_USBH_PORTS];
  96        u8              overcurrent_status[AT91_MAX_USBH_PORTS];
  97        u8              overcurrent_changed[AT91_MAX_USBH_PORTS];
  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);
 101extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data);
 102
 103extern void __init at91_add_device_nand(struct atmel_nand_data *data);
 104
 105 /* I2C*/
 106#if defined(CONFIG_ARCH_AT91SAM9G45)
 107extern void __init at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices);
 108#else
 109extern void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices);
 110#endif
 111
 112 /* SPI */
 113extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices);
 114
 115 /* Serial */
 116#define ATMEL_UART_CTS  0x01
 117#define ATMEL_UART_RTS  0x02
 118#define ATMEL_UART_DSR  0x04
 119#define ATMEL_UART_DTR  0x08
 120#define ATMEL_UART_DCD  0x10
 121#define ATMEL_UART_RI   0x20
 122
 123extern void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins);
 124
 125extern struct platform_device *atmel_default_console_device;
 126
 127struct atmel_uart_data {
 128        int                     num;            /* port num */
 129        short                   use_dma_tx;     /* use transmit DMA? */
 130        short                   use_dma_rx;     /* use receive DMA? */
 131        void __iomem            *regs;          /* virt. base address, if any */
 132        struct serial_rs485     rs485;          /* rs485 settings */
 133};
 134extern void __init at91_add_device_serial(void);
 135
 136/*
 137 * PWM
 138 */
 139#define AT91_PWM0       0
 140#define AT91_PWM1       1
 141#define AT91_PWM2       2
 142#define AT91_PWM3       3
 143
 144extern void __init at91_add_device_pwm(u32 mask);
 145
 146/*
 147 * SSC -- accessed through ssc_request(id).  Drivers don't bind to SSC
 148 * platform devices.  Their SSC ID is part of their configuration data,
 149 * along with information about which SSC signals they should use.
 150 */
 151#define ATMEL_SSC_TK    0x01
 152#define ATMEL_SSC_TF    0x02
 153#define ATMEL_SSC_TD    0x04
 154#define ATMEL_SSC_TX    (ATMEL_SSC_TK | ATMEL_SSC_TF | ATMEL_SSC_TD)
 155
 156#define ATMEL_SSC_RK    0x10
 157#define ATMEL_SSC_RF    0x20
 158#define ATMEL_SSC_RD    0x40
 159#define ATMEL_SSC_RX    (ATMEL_SSC_RK | ATMEL_SSC_RF | ATMEL_SSC_RD)
 160
 161extern void __init at91_add_device_ssc(unsigned id, unsigned pins);
 162
 163 /* LCD Controller */
 164struct atmel_lcdfb_info;
 165extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data);
 166
 167 /* AC97 */
 168extern void __init at91_add_device_ac97(struct ac97c_platform_data *data);
 169
 170 /* ISI */
 171struct isi_platform_data;
 172extern void __init at91_add_device_isi(struct isi_platform_data *data,
 173                bool use_pck_as_mck);
 174
 175 /* Touchscreen Controller */
 176struct at91_tsadcc_data {
 177        unsigned int    adc_clock;
 178        u8              pendet_debounce;
 179        u8              ts_sample_hold_time;
 180};
 181extern void __init at91_add_device_tsadcc(struct at91_tsadcc_data *data);
 182
 183/* CAN */
 184struct at91_can_data {
 185        void (*transceiver_switch)(int on);
 186};
 187extern void __init at91_add_device_can(struct at91_can_data *data);
 188
 189 /* LEDs */
 190extern void __init at91_gpio_leds(struct gpio_led *leds, int nr);
 191extern void __init at91_pwm_leds(struct gpio_led *leds, int nr);
 192
 193/* FIXME: this needs a better location, but gets stuff building again */
 194extern int at91_suspend_entering_slow_clock(void);
 195
 196#endif
 197