2007-07-12 22:41:45 +08:00
/*
* File : arch / blackfin / mach - bf548 / boards / ezkit . c
* Based on : arch / blackfin / mach - bf537 / boards / ezkit . c
* Author : Aidan Williams < aidan @ nicta . com . au >
*
* Created :
* Description :
*
* Modified :
* Copyright 2005 National ICT Australia ( NICTA )
* Copyright 2004 - 2007 Analog Devices Inc .
*
* Bugs : Enter bugs at http : //blackfin.uclinux.org/
*
* 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 , see the file COPYING , or write
* to the Free Software Foundation , Inc . ,
* 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
# include <linux/device.h>
# include <linux/platform_device.h>
# include <linux/mtd/mtd.h>
# include <linux/mtd/partitions.h>
2008-01-24 17:14:04 +08:00
# include <linux/mtd/physmap.h>
2007-07-12 22:41:45 +08:00
# include <linux/spi/spi.h>
# include <linux/spi/flash.h>
2007-07-12 22:58:21 +08:00
# include <linux/irq.h>
2008-03-26 10:02:13 +08:00
# include <linux/i2c.h>
2007-07-12 22:41:45 +08:00
# include <linux/interrupt.h>
2007-10-11 01:20:06 +08:00
# include <linux/usb/musb.h>
2007-07-12 22:41:45 +08:00
# include <asm/bfin5xx_spi.h>
2007-10-11 01:20:06 +08:00
# include <asm/dma.h>
# include <asm/gpio.h>
# include <asm/nand.h>
2008-05-07 11:41:26 +08:00
# include <asm/dpmc.h>
2007-11-12 23:24:42 +08:00
# include <asm/portmux.h>
2008-08-27 10:51:02 +08:00
# include <mach/bf54x_keys.h>
2007-10-11 01:20:06 +08:00
# include <linux/input.h>
# include <linux/spi/ad7877.h>
2007-07-12 22:41:45 +08:00
/*
* Name the Board for the / proc / cpuinfo
*/
2007-10-21 22:36:06 +08:00
const char bfin_board_name [ ] = " ADSP-BF548-EZKIT " ;
2007-07-12 22:41:45 +08:00
/*
* Driver needs to know address , irq and flag pin .
*/
2008-07-26 16:14:57 +08:00
# if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
static struct resource bfin_isp1761_resources [ ] = {
[ 0 ] = {
. name = " isp1761-regs " ,
. start = 0x2C0C0000 ,
. end = 0x2C0C0000 + 0xfffff ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_PG7 ,
. end = IRQ_PG7 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_isp1761_device = {
. name = " isp1761 " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_isp1761_resources ) ,
. resource = bfin_isp1761_resources ,
} ;
static struct platform_device * bfin_isp1761_devices [ ] = {
& bfin_isp1761_device ,
} ;
int __init bfin_isp1761_init ( void )
{
unsigned int num_devices = ARRAY_SIZE ( bfin_isp1761_devices ) ;
printk ( KERN_INFO " %s(): registering device resources \n " , __func__ ) ;
set_irq_type ( bfin_isp1761_resources [ 1 ] . start , IRQF_TRIGGER_FALLING ) ;
return platform_add_devices ( bfin_isp1761_devices , num_devices ) ;
}
void __exit bfin_isp1761_exit ( void )
{
platform_device_unregister ( & bfin_isp1761_device ) ;
}
arch_initcall ( bfin_isp1761_init ) ;
# endif
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_FB_BF54X_LQ043) || defined(CONFIG_FB_BF54X_LQ043_MODULE)
2008-08-27 10:51:02 +08:00
# include <mach/bf54x-lq043.h>
2007-10-11 01:20:06 +08:00
static struct bfin_bf54xfb_mach_info bf54x_lq043_data = {
. width = 480 ,
. height = 272 ,
. xres = { 480 , 480 , 480 } ,
. yres = { 272 , 272 , 272 } ,
. bpp = { 24 , 24 , 24 } ,
. disp = GPIO_PE3 ,
} ;
static struct resource bf54x_lq043_resources [ ] = {
{
. start = IRQ_EPPI0_ERR ,
. end = IRQ_EPPI0_ERR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bf54x_lq043_device = {
. name = " bf54x-lq043 " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( bf54x_lq043_resources ) ,
. resource = bf54x_lq043_resources ,
. dev = {
. platform_data = & bf54x_lq043_data ,
} ,
} ;
# endif
# if defined(CONFIG_KEYBOARD_BFIN) || defined(CONFIG_KEYBOARD_BFIN_MODULE)
2007-10-13 00:36:46 -04:00
static const unsigned int bf548_keymap [ ] = {
2007-10-11 01:20:06 +08:00
KEYVAL ( 0 , 0 , KEY_ENTER ) ,
KEYVAL ( 0 , 1 , KEY_HELP ) ,
KEYVAL ( 0 , 2 , KEY_0 ) ,
KEYVAL ( 0 , 3 , KEY_BACKSPACE ) ,
KEYVAL ( 1 , 0 , KEY_TAB ) ,
KEYVAL ( 1 , 1 , KEY_9 ) ,
KEYVAL ( 1 , 2 , KEY_8 ) ,
KEYVAL ( 1 , 3 , KEY_7 ) ,
KEYVAL ( 2 , 0 , KEY_DOWN ) ,
KEYVAL ( 2 , 1 , KEY_6 ) ,
KEYVAL ( 2 , 2 , KEY_5 ) ,
KEYVAL ( 2 , 3 , KEY_4 ) ,
KEYVAL ( 3 , 0 , KEY_UP ) ,
KEYVAL ( 3 , 1 , KEY_3 ) ,
KEYVAL ( 3 , 2 , KEY_2 ) ,
KEYVAL ( 3 , 3 , KEY_1 ) ,
} ;
static struct bfin_kpad_platform_data bf54x_kpad_data = {
. rows = 4 ,
. cols = 4 ,
2007-10-13 00:36:46 -04:00
. keymap = bf548_keymap ,
. keymapsize = ARRAY_SIZE ( bf548_keymap ) ,
2007-10-11 01:20:06 +08:00
. repeat = 0 ,
. debounce_time = 5000 , /* ns (5ms) */
. coldrive_time = 1000 , /* ns (1ms) */
. keyup_test_interval = 50 , /* ms (50ms) */
} ;
static struct resource bf54x_kpad_resources [ ] = {
{
. start = IRQ_KEY ,
. end = IRQ_KEY ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bf54x_kpad_device = {
. name = " bf54x-keys " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( bf54x_kpad_resources ) ,
. resource = bf54x_kpad_resources ,
. dev = {
. platform_data = & bf54x_kpad_data ,
} ,
} ;
# endif
2007-07-12 22:41:45 +08:00
# if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
static struct platform_device rtc_device = {
. name = " rtc-bfin " ,
. id = - 1 ,
} ;
# endif
# if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
static struct resource bfin_uart_resources [ ] = {
# ifdef CONFIG_SERIAL_BFIN_UART0
{
. start = 0xFFC00400 ,
. end = 0xFFC004FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART1
{
. start = 0xFFC02000 ,
. end = 0xFFC020FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART2
{
. start = 0xFFC02100 ,
. end = 0xFFC021FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART3
{
. start = 0xFFC03100 ,
. end = 0xFFC031FF ,
2008-07-19 16:43:51 +08:00
. flags = IORESOURCE_MEM ,
2007-07-12 22:41:45 +08:00
} ,
# endif
} ;
static struct platform_device bfin_uart_device = {
. name = " bfin-uart " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_uart_resources ) ,
. resource = bfin_uart_resources ,
} ;
# endif
2008-04-25 03:09:15 +08:00
# if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
static struct resource bfin_sir_resources [ ] = {
# ifdef CONFIG_BFIN_SIR0
{
. start = 0xFFC00400 ,
. end = 0xFFC004FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_BFIN_SIR1
{
. start = 0xFFC02000 ,
. end = 0xFFC020FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_BFIN_SIR2
{
. start = 0xFFC02100 ,
. end = 0xFFC021FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
# ifdef CONFIG_BFIN_SIR3
{
. start = 0xFFC03100 ,
. end = 0xFFC031FF ,
. flags = IORESOURCE_MEM ,
} ,
# endif
} ;
static struct platform_device bfin_sir_device = {
. name = " bfin_sir " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_sir_resources ) ,
. resource = bfin_sir_resources ,
} ;
# endif
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
static struct resource smsc911x_resources [ ] = {
{
. name = " smsc911x-memory " ,
. start = 0x24000000 ,
. end = 0x24000000 + 0xFF ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PE8 ,
. end = IRQ_PE8 ,
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL ,
} ,
} ;
static struct platform_device smsc911x_device = {
. name = " smsc911x " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( smsc911x_resources ) ,
. resource = smsc911x_resources ,
} ;
# endif
# if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
static struct resource musb_resources [ ] = {
[ 0 ] = {
. start = 0xFFC03C00 ,
. end = 0xFFC040FF ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = { /* general IRQ */
. start = IRQ_USB_INT0 ,
. end = IRQ_USB_INT0 ,
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL ,
} ,
[ 2 ] = { /* DMA IRQ */
. start = IRQ_USB_DMA ,
. end = IRQ_USB_DMA ,
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL ,
} ,
} ;
2008-10-08 13:39:40 +08:00
static struct musb_hdrc_config musb_config = {
. multipoint = 0 ,
. dyn_fifo = 0 ,
. soft_con = 1 ,
. dma = 1 ,
. num_eps = 7 ,
. dma_channels = 7 ,
. gpio_vrsel = GPIO_PE7 ,
} ;
2007-10-11 01:20:06 +08:00
static struct musb_hdrc_platform_data musb_plat = {
2007-12-24 12:20:19 +08:00
# if defined(CONFIG_USB_MUSB_OTG)
2007-10-11 01:20:06 +08:00
. mode = MUSB_OTG ,
2007-12-24 12:20:19 +08:00
# elif defined(CONFIG_USB_MUSB_HDRC_HCD)
2007-10-11 01:20:06 +08:00
. mode = MUSB_HOST ,
2007-12-24 12:20:19 +08:00
# elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
2007-10-11 01:20:06 +08:00
. mode = MUSB_PERIPHERAL ,
# endif
2008-10-08 13:39:40 +08:00
. config = & musb_config ,
2007-10-11 01:20:06 +08:00
} ;
static u64 musb_dmamask = ~ ( u32 ) 0 ;
static struct platform_device musb_device = {
. name = " musb_hdrc " ,
. id = 0 ,
. dev = {
. dma_mask = & musb_dmamask ,
. coherent_dma_mask = 0xffffffff ,
. platform_data = & musb_plat ,
} ,
. num_resources = ARRAY_SIZE ( musb_resources ) ,
. resource = musb_resources ,
} ;
# endif
# if defined(CONFIG_PATA_BF54X) || defined(CONFIG_PATA_BF54X_MODULE)
static struct resource bfin_atapi_resources [ ] = {
{
. start = 0xFFC03800 ,
. end = 0xFFC0386F ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_ATAPI_ERR ,
. end = IRQ_ATAPI_ERR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_atapi_device = {
. name = " pata-bf54x " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( bfin_atapi_resources ) ,
. resource = bfin_atapi_resources ,
} ;
# endif
# if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
static struct mtd_partition partition_info [ ] = {
{
2008-08-05 17:47:29 +08:00
. name = " linux kernel(nand) " ,
2007-10-11 01:20:06 +08:00
. offset = 0 ,
2008-10-13 14:45:21 +08:00
. size = 4 * 1024 * 1024 ,
2007-10-11 01:20:06 +08:00
} ,
{
2008-08-05 17:47:29 +08:00
. name = " file system(nand) " ,
2008-02-25 11:38:11 +08:00
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
2007-10-11 01:20:06 +08:00
} ,
} ;
static struct bf5xx_nand_platform bf5xx_nand_platform = {
. page_size = NFC_PG_SIZE_256 ,
. data_width = NFC_NWIDTH_8 ,
. partitions = partition_info ,
. nr_partitions = ARRAY_SIZE ( partition_info ) ,
. rd_dly = 3 ,
. wr_dly = 3 ,
} ;
static struct resource bf5xx_nand_resources [ ] = {
{
. start = 0xFFC03B00 ,
. end = 0xFFC03B4F ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = CH_NFC ,
. end = CH_NFC ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bf5xx_nand_device = {
. name = " bf5xx-nand " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bf5xx_nand_resources ) ,
. resource = bf5xx_nand_resources ,
. dev = {
. platform_data = & bf5xx_nand_platform ,
} ,
} ;
# endif
2008-03-03 17:40:28 -07:00
# if defined(CONFIG_SDH_BFIN) || defined(CONFIG_SDH_BFIN_MODULE)
2007-10-11 01:20:06 +08:00
static struct platform_device bf54x_sdh_device = {
. name = " bfin-sdh " ,
. id = 0 ,
} ;
# endif
2008-03-26 08:09:12 +08:00
# if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
2008-01-24 17:14:04 +08:00
static struct mtd_partition ezkit_partitions [ ] = {
{
2008-08-05 17:47:29 +08:00
. name = " bootloader(nor) " ,
2008-02-25 11:38:11 +08:00
. size = 0x40000 ,
2008-01-24 17:14:04 +08:00
. offset = 0 ,
} , {
2008-08-05 17:47:29 +08:00
. name = " linux kernel(nor) " ,
2008-04-24 06:33:56 +08:00
. size = 0x1C0000 ,
2008-01-24 17:14:04 +08:00
. offset = MTDPART_OFS_APPEND ,
} , {
2008-08-05 17:47:29 +08:00
. name = " file system(nor) " ,
2008-01-24 17:14:04 +08:00
. size = MTDPART_SIZ_FULL ,
. offset = MTDPART_OFS_APPEND ,
}
} ;
static struct physmap_flash_data ezkit_flash_data = {
. width = 2 ,
. parts = ezkit_partitions ,
. nr_parts = ARRAY_SIZE ( ezkit_partitions ) ,
} ;
static struct resource ezkit_flash_resource = {
. start = 0x20000000 ,
. end = 0x20ffffff ,
. flags = IORESOURCE_MEM ,
} ;
static struct platform_device ezkit_flash_device = {
. name = " physmap-flash " ,
. id = 0 ,
. dev = {
. platform_data = & ezkit_flash_data ,
} ,
. num_resources = 1 ,
. resource = & ezkit_flash_resource ,
} ;
2008-03-26 08:09:12 +08:00
# endif
2008-01-24 17:14:04 +08:00
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_MTD_M25P80) \
| | defined ( CONFIG_MTD_M25P80_MODULE )
/* SPI flash chip (m25p16) */
static struct mtd_partition bfin_spi_flash_partitions [ ] = {
{
2008-08-05 17:47:29 +08:00
. name = " bootloader(spi) " ,
2007-10-11 01:20:06 +08:00
. size = 0x00040000 ,
. offset = 0 ,
. mask_flags = MTD_CAP_ROM
} , {
2008-08-05 17:47:29 +08:00
. name = " linux kernel(spi) " ,
2008-02-25 11:38:11 +08:00
. size = MTDPART_SIZ_FULL ,
. offset = MTDPART_OFS_APPEND ,
2007-10-11 01:20:06 +08:00
}
} ;
static struct flash_platform_data bfin_spi_flash_data = {
. name = " m25p80 " ,
. parts = bfin_spi_flash_partitions ,
. nr_parts = ARRAY_SIZE ( bfin_spi_flash_partitions ) ,
. type = " m25p16 " ,
} ;
static struct bfin5xx_spi_chip spi_flash_chip_info = {
. enable_dma = 0 , /* use dma transfer with this chip*/
. bits_per_word = 8 ,
. cs_change_per_word = 0 ,
} ;
# endif
2008-04-24 05:19:02 +08:00
# if defined(CONFIG_SND_BLACKFIN_AD1836) \
| | defined ( CONFIG_SND_BLACKFIN_AD1836_MODULE )
static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
. enable_dma = 0 ,
. bits_per_word = 16 ,
} ;
# endif
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
2007-11-15 21:33:31 +08:00
. cs_change_per_word = 0 ,
2007-10-11 01:20:06 +08:00
. enable_dma = 0 ,
. bits_per_word = 16 ,
} ;
static const struct ad7877_platform_data bfin_ad7877_ts_info = {
. model = 7877 ,
. vref_delay_usecs = 50 , /* internal, no capacitor */
. x_plate_ohms = 419 ,
. y_plate_ohms = 486 ,
. pressure_max = 1000 ,
. pressure_min = 0 ,
. stopacq_polarity = 1 ,
. first_conversion_delay = 3 ,
. acquisition_time = 1 ,
. averaging = 1 ,
. pen_down_acc_interval = 1 ,
} ;
# endif
2008-02-09 01:54:09 +08:00
# if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
static struct bfin5xx_spi_chip spidev_chip_info = {
. enable_dma = 0 ,
. bits_per_word = 8 ,
} ;
# endif
2008-06-07 15:03:01 +08:00
static struct spi_board_info bfin_spi_board_info [ ] __initdata = {
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_MTD_M25P80) \
| | defined ( CONFIG_MTD_M25P80_MODULE )
{
/* the modalias must be the same as spi device driver name */
. modalias = " m25p80 " , /* Name of spi_driver for this device */
. max_speed_hz = 25000000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 0 , /* Framework bus number */
. chip_select = 1 , /* SPI_SSEL1*/
. platform_data = & bfin_spi_flash_data ,
. controller_data = & spi_flash_chip_info ,
. mode = SPI_MODE_3 ,
} ,
# endif
2008-04-24 05:19:02 +08:00
# if defined(CONFIG_SND_BLACKFIN_AD1836) \
| | defined ( CONFIG_SND_BLACKFIN_AD1836_MODULE )
{
. modalias = " ad1836-spi " ,
. max_speed_hz = 3125000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 1 ,
. chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT ,
. controller_data = & ad1836_spi_chip_info ,
} ,
# endif
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
{
. modalias = " ad7877 " ,
. platform_data = & bfin_ad7877_ts_info ,
2008-10-07 16:06:27 +08:00
. irq = IRQ_PJ11 , /* newer boards (Rev 1.4+) use IRQ_PB4 */
2007-10-11 01:20:06 +08:00
. max_speed_hz = 12500000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 0 ,
. chip_select = 2 ,
. controller_data = & spi_ad7877_chip_info ,
} ,
# endif
2008-02-09 01:54:09 +08:00
# if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
{
. modalias = " spidev " ,
. max_speed_hz = 3125000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 0 ,
. chip_select = 1 ,
. controller_data = & spidev_chip_info ,
} ,
# endif
2007-10-11 01:20:06 +08:00
} ;
2008-06-07 15:03:01 +08:00
# if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
2007-10-11 01:20:06 +08:00
/* SPI (0) */
static struct resource bfin_spi0_resource [ ] = {
[ 0 ] = {
. start = SPI0_REGBASE ,
. end = SPI0_REGBASE + 0xFF ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = CH_SPI0 ,
. end = CH_SPI0 ,
. flags = IORESOURCE_IRQ ,
}
} ;
/* SPI (1) */
static struct resource bfin_spi1_resource [ ] = {
[ 0 ] = {
. start = SPI1_REGBASE ,
. end = SPI1_REGBASE + 0xFF ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = CH_SPI1 ,
. end = CH_SPI1 ,
. flags = IORESOURCE_IRQ ,
}
} ;
/* SPI controller data */
2007-11-12 23:24:42 +08:00
static struct bfin5xx_spi_master bf54x_spi_master_info0 = {
2007-10-11 01:20:06 +08:00
. num_chipselect = 8 ,
. enable_dma = 1 , /* master has the ability to do dma transfer */
2007-11-12 23:24:42 +08:00
. pin_req = { P_SPI0_SCK , P_SPI0_MISO , P_SPI0_MOSI , 0 } ,
2007-10-11 01:20:06 +08:00
} ;
static struct platform_device bf54x_spi_master0 = {
. name = " bfin-spi " ,
. id = 0 , /* Bus number */
. num_resources = ARRAY_SIZE ( bfin_spi0_resource ) ,
. resource = bfin_spi0_resource ,
. dev = {
2007-11-12 23:24:42 +08:00
. platform_data = & bf54x_spi_master_info0 , /* Passed to driver */
2007-10-11 01:20:06 +08:00
} ,
} ;
2007-11-12 23:24:42 +08:00
static struct bfin5xx_spi_master bf54x_spi_master_info1 = {
. num_chipselect = 8 ,
. enable_dma = 1 , /* master has the ability to do dma transfer */
. pin_req = { P_SPI1_SCK , P_SPI1_MISO , P_SPI1_MOSI , 0 } ,
} ;
2007-10-11 01:20:06 +08:00
static struct platform_device bf54x_spi_master1 = {
. name = " bfin-spi " ,
. id = 1 , /* Bus number */
. num_resources = ARRAY_SIZE ( bfin_spi1_resource ) ,
. resource = bfin_spi1_resource ,
. dev = {
2007-11-12 23:24:42 +08:00
. platform_data = & bf54x_spi_master_info1 , /* Passed to driver */
2007-10-11 01:20:06 +08:00
} ,
} ;
# endif /* spi master and devices */
# if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
static struct resource bfin_twi0_resource [ ] = {
[ 0 ] = {
. start = TWI0_REGBASE ,
. end = TWI0_REGBASE + 0xFF ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_TWI0 ,
. end = IRQ_TWI0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device i2c_bfin_twi0_device = {
. name = " i2c-bfin-twi " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_twi0_resource ) ,
. resource = bfin_twi0_resource ,
} ;
2007-11-21 16:03:07 +08:00
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
2007-10-11 01:20:06 +08:00
static struct resource bfin_twi1_resource [ ] = {
[ 0 ] = {
. start = TWI1_REGBASE ,
. end = TWI1_REGBASE + 0xFF ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_TWI1 ,
. end = IRQ_TWI1 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device i2c_bfin_twi1_device = {
. name = " i2c-bfin-twi " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_twi1_resource ) ,
. resource = bfin_twi1_resource ,
} ;
# endif
2007-11-21 16:03:07 +08:00
# endif
2007-10-11 01:20:06 +08:00
2008-03-26 10:02:13 +08:00
# ifdef CONFIG_I2C_BOARDINFO
static struct i2c_board_info __initdata bfin_i2c_board_info0 [ ] = {
} ;
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
static struct i2c_board_info __initdata bfin_i2c_board_info1 [ ] = {
# if defined(CONFIG_TWI_LCD) || defined(CONFIG_TWI_LCD_MODULE)
{
I2C_BOARD_INFO ( " pcf8574_lcd " , 0x22 ) ,
} ,
# endif
# if defined(CONFIG_TWI_KEYPAD) || defined(CONFIG_TWI_KEYPAD_MODULE)
{
I2C_BOARD_INFO ( " pcf8574_keypad " , 0x27 ) ,
. irq = 212 ,
} ,
# endif
} ;
# endif
# endif
2008-01-27 16:49:48 +08:00
# if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
# include <linux/gpio_keys.h>
static struct gpio_keys_button bfin_gpio_keys_table [ ] = {
{ BTN_0 , GPIO_PB8 , 1 , " gpio-keys: BTN0 " } ,
{ BTN_1 , GPIO_PB9 , 1 , " gpio-keys: BTN1 " } ,
{ BTN_2 , GPIO_PB10 , 1 , " gpio-keys: BTN2 " } ,
{ BTN_3 , GPIO_PB11 , 1 , " gpio-keys: BTN3 " } ,
} ;
static struct gpio_keys_platform_data bfin_gpio_keys_data = {
. buttons = bfin_gpio_keys_table ,
. nbuttons = ARRAY_SIZE ( bfin_gpio_keys_table ) ,
} ;
static struct platform_device bfin_device_gpiokeys = {
. name = " gpio-keys " ,
. dev = {
. platform_data = & bfin_gpio_keys_data ,
} ,
} ;
# endif
2008-02-22 17:01:31 +08:00
static struct resource bfin_gpios_resources = {
. start = 0 ,
. end = MAX_BLACKFIN_GPIOS - 1 ,
. flags = IORESOURCE_IRQ ,
} ;
static struct platform_device bfin_gpios_device = {
. name = " simple-gpio " ,
. id = - 1 ,
. num_resources = 1 ,
. resource = & bfin_gpios_resources ,
} ;
2008-05-07 11:41:26 +08:00
static const unsigned int cclk_vlev_datasheet [ ] =
{
/*
* Internal VLEV BF54XSBBC1533
* * * * temporarily using these values until data sheet is updated
*/
VRPAIR ( VLEV_085 , 150000000 ) ,
VRPAIR ( VLEV_090 , 250000000 ) ,
VRPAIR ( VLEV_110 , 276000000 ) ,
VRPAIR ( VLEV_115 , 301000000 ) ,
VRPAIR ( VLEV_120 , 525000000 ) ,
VRPAIR ( VLEV_125 , 550000000 ) ,
VRPAIR ( VLEV_130 , 600000000 ) ,
} ;
static struct bfin_dpmc_platform_data bfin_dmpc_vreg_data = {
. tuple_tab = cclk_vlev_datasheet ,
. tabsize = ARRAY_SIZE ( cclk_vlev_datasheet ) ,
. vr_settling_time = 25 /* us */ ,
} ;
static struct platform_device bfin_dpmc = {
. name = " bfin dpmc " ,
. dev = {
. platform_data = & bfin_dmpc_vreg_data ,
} ,
} ;
2007-07-12 22:41:45 +08:00
static struct platform_device * ezkit_devices [ ] __initdata = {
2008-05-07 11:41:26 +08:00
& bfin_dpmc ,
2007-07-12 22:41:45 +08:00
# if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
& rtc_device ,
# endif
# if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
& bfin_uart_device ,
# endif
2007-10-11 01:20:06 +08:00
2008-04-25 03:09:15 +08:00
# if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
& bfin_sir_device ,
# endif
2007-10-11 01:20:06 +08:00
# if defined(CONFIG_FB_BF54X_LQ043) || defined(CONFIG_FB_BF54X_LQ043_MODULE)
& bf54x_lq043_device ,
# endif
# if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
& smsc911x_device ,
# endif
# if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
& musb_device ,
# endif
# if defined(CONFIG_PATA_BF54X) || defined(CONFIG_PATA_BF54X_MODULE)
& bfin_atapi_device ,
# endif
# if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
& bf5xx_nand_device ,
# endif
2008-03-03 17:40:28 -07:00
# if defined(CONFIG_SDH_BFIN) || defined(CONFIG_SDH_BFIN_MODULE)
2007-10-11 01:20:06 +08:00
& bf54x_sdh_device ,
# endif
# if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
& bf54x_spi_master0 ,
2007-10-21 17:03:55 +08:00
& bf54x_spi_master1 ,
2007-10-11 01:20:06 +08:00
# endif
# if defined(CONFIG_KEYBOARD_BFIN) || defined(CONFIG_KEYBOARD_BFIN_MODULE)
& bf54x_kpad_device ,
# endif
# if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
& i2c_bfin_twi0_device ,
2007-11-21 16:03:07 +08:00
# if !defined(CONFIG_BF542)
2007-10-11 01:20:06 +08:00
& i2c_bfin_twi1_device ,
# endif
2007-11-21 16:03:07 +08:00
# endif
2008-01-27 16:49:48 +08:00
# if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
& bfin_device_gpiokeys ,
# endif
2008-02-22 17:01:31 +08:00
& bfin_gpios_device ,
2008-03-26 08:09:12 +08:00
# if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
2008-01-24 17:14:04 +08:00
& ezkit_flash_device ,
2008-03-26 08:09:12 +08:00
# endif
2007-07-12 22:41:45 +08:00
} ;
2008-02-02 15:34:56 +08:00
static int __init ezkit_init ( void )
2007-07-12 22:41:45 +08:00
{
2008-04-23 09:39:01 +08:00
printk ( KERN_INFO " %s(): registering device resources \n " , __func__ ) ;
2008-03-26 10:02:13 +08:00
# ifdef CONFIG_I2C_BOARDINFO
i2c_register_board_info ( 0 , bfin_i2c_board_info0 ,
ARRAY_SIZE ( bfin_i2c_board_info0 ) ) ;
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
i2c_register_board_info ( 1 , bfin_i2c_board_info1 ,
ARRAY_SIZE ( bfin_i2c_board_info1 ) ) ;
# endif
# endif
2007-07-12 22:41:45 +08:00
platform_add_devices ( ezkit_devices , ARRAY_SIZE ( ezkit_devices ) ) ;
2007-10-11 01:20:06 +08:00
2008-06-07 15:03:01 +08:00
spi_register_board_info ( bfin_spi_board_info , ARRAY_SIZE ( bfin_spi_board_info ) ) ;
2007-10-11 01:20:06 +08:00
2007-07-12 22:41:45 +08:00
return 0 ;
}
2008-02-02 15:34:56 +08:00
arch_initcall ( ezkit_init ) ;