2008-08-03 05:29:48 +04:00
/*
* linux / arch / arm / mach - at91 / board - afeb - 9260 v1 . c
*
* Copyright ( C ) 2005 SAN People
* Copyright ( C ) 2006 Atmel
* Copyright ( C ) 2008 Sergey Lapin
*
* A custom board designed as open hardware ; PCBs and various information
* is available at http : //groups.google.com/group/arm9fpga-evolution-board/
* Subversion repository : svn : //194.85.238.22/home/users/george/svn/arm9eb
*
* 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
*/
# include <linux/types.h>
2011-07-26 13:53:52 +04:00
# include <linux/gpio.h>
2008-08-03 05:29:48 +04:00
# include <linux/init.h>
# include <linux/mm.h>
# include <linux/module.h>
# include <linux/platform_device.h>
# include <linux/spi/spi.h>
# include <linux/clk.h>
# include <linux/dma-mapping.h>
# include <mach/hardware.h>
# include <asm/setup.h>
# include <asm/mach-types.h>
# include <asm/irq.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
# include <asm/mach/irq.h>
2012-10-30 02:41:28 +04:00
# include "at91_aic.h"
2012-10-30 01:14:17 +04:00
# include "board.h"
2008-08-03 05:29:48 +04:00
# include "generic.h"
2014-03-27 17:18:51 +04:00
# include "gpio.h"
2008-08-03 05:29:48 +04:00
2011-04-28 16:19:32 +04:00
static void __init afeb9260_init_early ( void )
2008-08-03 05:29:48 +04:00
{
/* Initialize processor: 18.432 MHz crystal */
2011-04-23 11:28:34 +04:00
at91_initialize ( 18432000 ) ;
2008-08-03 05:29:48 +04:00
}
/*
* USB Host port
*/
static struct at91_usbh_data __initdata afeb9260_usbh_data = {
. ports = 1 ,
2011-11-24 21:51:06 +04:00
. vbus_pin = { - EINVAL , - EINVAL } ,
. overcurrent_pin = { - EINVAL , - EINVAL } ,
2008-08-03 05:29:48 +04:00
} ;
/*
* USB Device port
*/
static struct at91_udc_data __initdata afeb9260_udc_data = {
. vbus_pin = AT91_PIN_PC5 ,
2011-11-24 21:51:06 +04:00
. pullup_pin = - EINVAL , /* pull-up driven by UDC */
2008-08-03 05:29:48 +04:00
} ;
/*
* SPI devices .
*/
static struct spi_board_info afeb9260_spi_devices [ ] = {
{ /* DataFlash chip */
. modalias = " mtd_dataflash " ,
. chip_select = 1 ,
. max_speed_hz = 15 * 1000 * 1000 ,
. bus_num = 0 ,
} ,
} ;
2008-08-12 16:35:34 +04:00
/*
* MACB Ethernet device
*/
2011-03-08 23:17:06 +03:00
static struct macb_platform_data __initdata afeb9260_macb_data = {
2008-08-12 16:35:34 +04:00
. phy_irq_pin = AT91_PIN_PA9 ,
. is_rmii = 0 ,
} ;
2008-08-03 05:29:48 +04:00
/*
* NAND flash
*/
static struct mtd_partition __initdata afeb9260_nand_partition [ ] = {
{
. name = " bootloader " ,
. offset = 0 ,
. size = ( 640 * SZ_1K ) ,
} ,
{
. name = " kernel " ,
. offset = MTDPART_OFS_NXTBLK ,
. size = SZ_2M ,
} ,
{
. name = " rootfs " ,
. offset = MTDPART_OFS_NXTBLK ,
. size = MTDPART_SIZ_FULL ,
} ,
} ;
static struct atmel_nand_data __initdata afeb9260_nand_data = {
. ale = 21 ,
. cle = 22 ,
. rdy_pin = AT91_PIN_PC13 ,
. enable_pin = AT91_PIN_PC14 ,
. bus_width_16 = 0 ,
2011-12-29 10:43:24 +04:00
. ecc_mode = NAND_ECC_SOFT ,
2011-05-29 17:49:22 +04:00
. parts = afeb9260_nand_partition ,
. num_parts = ARRAY_SIZE ( afeb9260_nand_partition ) ,
2011-11-24 21:51:06 +04:00
. det_pin = - EINVAL ,
2008-08-03 05:29:48 +04:00
} ;
/*
* MCI ( SD / MMC )
*/
2012-05-21 14:23:27 +04:00
static struct mci_platform_data __initdata afeb9260_mci0_data = {
. slot [ 1 ] = {
. bus_width = 4 ,
. detect_pin = AT91_PIN_PC9 ,
. wp_pin = AT91_PIN_PC4 ,
} ,
2008-08-03 05:29:48 +04:00
} ;
static struct i2c_board_info __initdata afeb9260_i2c_devices [ ] = {
{
2009-05-08 18:58:57 +04:00
I2C_BOARD_INFO ( " tlv320aic23 " , 0x1a ) ,
} , {
2008-08-03 05:29:48 +04:00
I2C_BOARD_INFO ( " fm3130 " , 0x68 ) ,
2008-10-27 09:43:45 +03:00
} , {
2008-08-03 05:29:48 +04:00
I2C_BOARD_INFO ( " 24c64 " , 0x50 ) ,
} ,
} ;
2009-07-31 01:29:07 +04:00
/*
* IDE ( CF True IDE mode )
*/
static struct at91_cf_data afeb9260_cf_data = {
. chipselect = 4 ,
. irq_pin = AT91_PIN_PA6 ,
2011-11-24 21:51:06 +04:00
. det_pin = - EINVAL ,
. vcc_pin = - EINVAL ,
2009-07-31 01:29:07 +04:00
. rst_pin = AT91_PIN_PA7 ,
. flags = AT91_CF_TRUE_IDE ,
} ;
2008-08-03 05:29:48 +04:00
static void __init afeb9260_board_init ( void )
{
/* Serial */
2012-04-05 10:14:28 +04:00
/* DBGU on ttyS0. (Rx & Tx only) */
at91_register_uart ( 0 , 0 , 0 ) ;
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
at91_register_uart ( AT91SAM9260_ID_US0 , 1 ,
ATMEL_UART_CTS | ATMEL_UART_RTS
| ATMEL_UART_DTR | ATMEL_UART_DSR
| ATMEL_UART_DCD | ATMEL_UART_RI ) ;
/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
at91_register_uart ( AT91SAM9260_ID_US1 , 2 ,
ATMEL_UART_CTS | ATMEL_UART_RTS ) ;
2008-08-03 05:29:48 +04:00
at91_add_device_serial ( ) ;
/* USB Host */
at91_add_device_usbh ( & afeb9260_usbh_data ) ;
/* USB Device */
at91_add_device_udc ( & afeb9260_udc_data ) ;
/* SPI */
at91_add_device_spi ( afeb9260_spi_devices ,
ARRAY_SIZE ( afeb9260_spi_devices ) ) ;
/* NAND */
at91_add_device_nand ( & afeb9260_nand_data ) ;
2008-08-12 16:35:34 +04:00
/* Ethernet */
at91_add_device_eth ( & afeb9260_macb_data ) ;
/* Standard function's pin assignments are not
* appropriate for us and generic code provide
* no API to configure these pins any other way */
at91_set_B_periph ( AT91_PIN_PA10 , 0 ) ; /* ETX2 */
at91_set_B_periph ( AT91_PIN_PA11 , 0 ) ; /* ETX3 */
2008-08-03 05:29:48 +04:00
/* MMC */
2012-05-21 14:23:27 +04:00
at91_add_device_mci ( 0 , & afeb9260_mci0_data ) ;
2008-08-03 05:29:48 +04:00
/* I2C */
at91_add_device_i2c ( afeb9260_i2c_devices ,
ARRAY_SIZE ( afeb9260_i2c_devices ) ) ;
2009-05-08 18:58:57 +04:00
/* Audio */
at91_add_device_ssc ( AT91SAM9260_ID_SSC , ATMEL_SSC_TX ) ;
2009-07-31 01:29:07 +04:00
/* IDE */
at91_add_device_cf ( & afeb9260_cf_data ) ;
2008-08-03 05:29:48 +04:00
}
MACHINE_START ( AFEB9260 , " Custom afeb9260 board " )
/* Maintainer: Sergey Lapin <slapin@ossfans.org> */
2012-11-08 23:40:59 +04:00
. init_time = at91sam926x_pit_init ,
2011-04-23 11:28:34 +04:00
. map_io = at91_map_io ,
2012-06-11 17:38:03 +04:00
. handle_irq = at91_aic_handle_irq ,
2011-04-28 16:19:32 +04:00
. init_early = afeb9260_init_early ,
2011-04-23 11:28:34 +04:00
. init_irq = at91_init_irq_default ,
2008-08-03 05:29:48 +04:00
. init_machine = afeb9260_board_init ,
MACHINE_END