linux/arch/arm/mach-at91/board-cam60.c
<<
>>
Prefs
   1/*
   2 * KwikByte CAM60 (KB9260)
   3 *
   4 * based on board-sam9260ek.c
   5 *   Copyright (C) 2005 SAN People
   6 *   Copyright (C) 2006 Atmel
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21 */
  22
  23#include <linux/types.h>
  24#include <linux/init.h>
  25#include <linux/mm.h>
  26#include <linux/module.h>
  27#include <linux/platform_device.h>
  28#include <linux/spi/spi.h>
  29#include <linux/spi/flash.h>
  30
  31#include <mach/hardware.h>
  32#include <asm/setup.h>
  33#include <asm/mach-types.h>
  34#include <asm/irq.h>
  35
  36#include <asm/mach/arch.h>
  37#include <asm/mach/map.h>
  38#include <asm/mach/irq.h>
  39
  40#include <mach/board.h>
  41#include <mach/gpio.h>
  42#include <mach/at91sam9_smc.h>
  43
  44#include "sam9_smc.h"
  45#include "generic.h"
  46
  47
  48static void __init cam60_map_io(void)
  49{
  50        /* Initialize processor: 10 MHz crystal */
  51        at91sam9260_initialize(10000000);
  52
  53        /* DBGU on ttyS0. (Rx & Tx only) */
  54        at91_register_uart(0, 0, 0);
  55
  56        /* set serial console to ttyS0 (ie, DBGU) */
  57        at91_set_serial_console(0);
  58}
  59
  60static void __init cam60_init_irq(void)
  61{
  62        at91sam9260_init_interrupts(NULL);
  63}
  64
  65
  66/*
  67 * USB Host
  68 */
  69static struct at91_usbh_data __initdata cam60_usbh_data = {
  70        .ports          = 1,
  71};
  72
  73
  74/*
  75 * SPI devices.
  76 */
  77#if defined(CONFIG_MTD_DATAFLASH)
  78static struct mtd_partition __initdata cam60_spi_partitions[] = {
  79        {
  80                .name   = "BOOT1",
  81                .offset = 0,
  82                .size   = 4 * 1056,
  83        },
  84        {
  85                .name   = "BOOT2",
  86                .offset = MTDPART_OFS_NXTBLK,
  87                .size   = 256 * 1056,
  88        },
  89        {
  90                .name   = "kernel",
  91                .offset = MTDPART_OFS_NXTBLK,
  92                .size   = 2222 * 1056,
  93        },
  94        {
  95                .name   = "file system",
  96                .offset = MTDPART_OFS_NXTBLK,
  97                .size   = MTDPART_SIZ_FULL,
  98        },
  99};
 100
 101static struct flash_platform_data __initdata cam60_spi_flash_platform_data = {
 102        .name           = "spi_flash",
 103        .parts          = cam60_spi_partitions,
 104        .nr_parts       = ARRAY_SIZE(cam60_spi_partitions)
 105};
 106#endif
 107
 108static struct spi_board_info cam60_spi_devices[] = {
 109#if defined(CONFIG_MTD_DATAFLASH)
 110        {       /* DataFlash chip */
 111                .modalias       = "mtd_dataflash",
 112                .chip_select    = 0,
 113                .max_speed_hz   = 15 * 1000 * 1000,
 114                .bus_num        = 0,
 115                .platform_data  = &cam60_spi_flash_platform_data
 116        },
 117#endif
 118};
 119
 120
 121/*
 122 * MACB Ethernet device
 123 */
 124static struct __initdata at91_eth_data cam60_macb_data = {
 125        .phy_irq_pin    = AT91_PIN_PB5,
 126        .is_rmii        = 0,
 127};
 128
 129
 130/*
 131 * NAND Flash
 132 */
 133static struct mtd_partition __initdata cam60_nand_partition[] = {
 134        {
 135                .name   = "nand_fs",
 136                .offset = 0,
 137                .size   = MTDPART_SIZ_FULL,
 138        },
 139};
 140
 141static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
 142{
 143        *num_partitions = ARRAY_SIZE(cam60_nand_partition);
 144        return cam60_nand_partition;
 145}
 146
 147static struct atmel_nand_data __initdata cam60_nand_data = {
 148        .ale            = 21,
 149        .cle            = 22,
 150        // .det_pin     = ... not there
 151        .rdy_pin        = AT91_PIN_PA9,
 152        .enable_pin     = AT91_PIN_PA7,
 153        .partition_info = nand_partitions,
 154};
 155
 156static struct sam9_smc_config __initdata cam60_nand_smc_config = {
 157        .ncs_read_setup         = 0,
 158        .nrd_setup              = 1,
 159        .ncs_write_setup        = 0,
 160        .nwe_setup              = 1,
 161
 162        .ncs_read_pulse         = 3,
 163        .nrd_pulse              = 3,
 164        .ncs_write_pulse        = 3,
 165        .nwe_pulse              = 3,
 166
 167        .read_cycle             = 5,
 168        .write_cycle            = 5,
 169
 170        .mode                   = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
 171        .tdf_cycles             = 2,
 172};
 173
 174static void __init cam60_add_device_nand(void)
 175{
 176        /* configure chip-select 3 (NAND) */
 177        sam9_smc_configure(3, &cam60_nand_smc_config);
 178
 179        at91_add_device_nand(&cam60_nand_data);
 180}
 181
 182
 183static void __init cam60_board_init(void)
 184{
 185        /* Serial */
 186        at91_add_device_serial();
 187        /* SPI */
 188        at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices));
 189        /* Ethernet */
 190        at91_add_device_eth(&cam60_macb_data);
 191        /* USB Host */
 192        /* enable USB power supply circuit */
 193        at91_set_gpio_output(AT91_PIN_PB18, 1);
 194        at91_add_device_usbh(&cam60_usbh_data);
 195        /* NAND */
 196        cam60_add_device_nand();
 197}
 198
 199MACHINE_START(CAM60, "KwikByte CAM60")
 200        /* Maintainer: KwikByte */
 201        .phys_io        = AT91_BASE_SYS,
 202        .io_pg_offst    = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
 203        .boot_params    = AT91_SDRAM_BASE + 0x100,
 204        .timer          = &at91sam926x_timer,
 205        .map_io         = cam60_map_io,
 206        .init_irq       = cam60_init_irq,
 207        .init_machine   = cam60_board_init,
 208MACHINE_END
 209