2007-07-12 18:41:45 +04:00
/*
2009-09-24 18:11:24 +04:00
* Copyright 2004 - 2009 Analog Devices Inc .
* 2005 National ICT Australia ( NICTA )
* Aidan Williams < aidan @ nicta . com . au >
2007-07-12 18:41:45 +04:00
*
2009-09-24 18:11:24 +04:00
* Licensed under the GPL - 2 or later .
2007-07-12 18:41:45 +04:00
*/
# include <linux/device.h>
# include <linux/platform_device.h>
# include <linux/mtd/mtd.h>
# include <linux/mtd/partitions.h>
2008-01-24 12:14:04 +03:00
# include <linux/mtd/physmap.h>
2007-07-12 18:41:45 +04:00
# include <linux/spi/spi.h>
# include <linux/spi/flash.h>
2007-07-12 18:58:21 +04:00
# include <linux/irq.h>
2008-03-26 05:02:13 +03:00
# include <linux/i2c.h>
2007-07-12 18:41:45 +04:00
# include <linux/interrupt.h>
2007-10-10 21:20:06 +04:00
# include <linux/usb/musb.h>
2013-05-30 14:37:28 +04:00
# include <linux/pinctrl/machine.h>
# include <linux/pinctrl/pinconf-generic.h>
# include <linux/platform_data/pinctrl-adi2.h>
2007-07-12 18:41:45 +04:00
# include <asm/bfin5xx_spi.h>
2007-10-10 21:20:06 +04:00
# include <asm/dma.h>
# include <asm/gpio.h>
# include <asm/nand.h>
2008-05-07 07:41:26 +04:00
# include <asm/dpmc.h>
2011-03-01 12:43:50 +03:00
# include <asm/bfin_sport.h>
2007-11-12 18:24:42 +03:00
# include <asm/portmux.h>
2009-01-07 18:14:38 +03:00
# include <asm/bfin_sdh.h>
2008-08-27 06:51:02 +04:00
# include <mach/bf54x_keys.h>
2007-10-10 21:20:06 +04:00
# include <linux/input.h>
# include <linux/spi/ad7877.h>
2007-07-12 18:41:45 +04:00
/*
* Name the Board for the / proc / cpuinfo
*/
2008-11-18 12:48:22 +03:00
const char bfin_board_name [ ] = " ADI BF548-EZKIT " ;
2007-07-12 18:41:45 +04:00
/*
* Driver needs to know address , irq and flag pin .
*/
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_USB_ISP1760_HCD)
2008-11-18 12:48:22 +03:00
# include <linux/usb/isp1760.h>
static struct resource bfin_isp1760_resources [ ] = {
2008-07-26 12:14:57 +04:00
[ 0 ] = {
. start = 0x2C0C0000 ,
. end = 0x2C0C0000 + 0xfffff ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = IRQ_PG7 ,
. end = IRQ_PG7 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2008-11-18 12:48:22 +03:00
static struct isp1760_platform_data isp1760_priv = {
. is_isp1761 = 0 ,
. bus_width_16 = 1 ,
. port1_otg = 0 ,
. analog_oc = 0 ,
. dack_polarity_high = 0 ,
. dreq_polarity_high = 0 ,
2008-07-26 12:14:57 +04:00
} ;
2008-11-18 12:48:22 +03:00
static struct platform_device bfin_isp1760_device = {
2009-10-15 14:37:33 +04:00
. name = " isp1760 " ,
2008-11-18 12:48:22 +03:00
. id = 0 ,
. dev = {
. platform_data = & isp1760_priv ,
} ,
. num_resources = ARRAY_SIZE ( bfin_isp1760_resources ) ,
. resource = bfin_isp1760_resources ,
2008-07-26 12:14:57 +04:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_FB_BF54X_LQ043)
2007-10-10 21:20:06 +04:00
2008-08-27 06:51:02 +04:00
# include <mach/bf54x-lq043.h>
2007-10-10 21:20:06 +04:00
static struct bfin_bf54xfb_mach_info bf54x_lq043_data = {
2009-07-29 12:09:45 +04:00
. width = 95 ,
. height = 54 ,
2007-10-10 21:20:06 +04:00
. 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
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_KEYBOARD_BFIN)
2007-10-13 08:36:46 +04:00
static const unsigned int bf548_keymap [ ] = {
2007-10-10 21:20:06 +04: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 08:36:46 +04:00
. keymap = bf548_keymap ,
. keymapsize = ARRAY_SIZE ( bf548_keymap ) ,
2007-10-10 21:20:06 +04: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
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_BFIN_ROTARY)
2008-10-08 10:27:59 +04:00
# include <asm/bfin_rotary.h>
static struct bfin_rotary_platform_data bfin_rotary_data = {
/*.rotary_up_key = KEY_UP,*/
/*.rotary_down_key = KEY_DOWN,*/
. rotary_rel_code = REL_WHEEL ,
. rotary_button_key = KEY_ENTER ,
. debounce = 10 , /* 0..17 */
. mode = ROT_QUAD_ENC | ROT_DEBE ,
2012-05-08 11:41:18 +04:00
. pm_wakeup = 1 ,
2008-10-08 10:27:59 +04:00
} ;
static struct resource bfin_rotary_resources [ ] = {
{
. start = IRQ_CNT ,
. end = IRQ_CNT ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_rotary_device = {
. name = " bfin-rotary " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( bfin_rotary_resources ) ,
. resource = bfin_rotary_resources ,
. dev = {
. platform_data = & bfin_rotary_data ,
} ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_ADXL34X)
2009-10-16 16:35:20 +04:00
# include <linux/input/adxl34x.h>
2009-05-29 19:41:18 +04:00
static const struct adxl34x_platform_data adxl34x_info = {
. x_axis_offset = 0 ,
. y_axis_offset = 0 ,
. z_axis_offset = 0 ,
. tap_threshold = 0x31 ,
. tap_duration = 0x10 ,
. tap_latency = 0x60 ,
. tap_window = 0xF0 ,
. tap_axis_control = ADXL_TAP_X_EN | ADXL_TAP_Y_EN | ADXL_TAP_Z_EN ,
. act_axis_control = 0xFF ,
. activity_threshold = 5 ,
. inactivity_threshold = 3 ,
. inactivity_time = 4 ,
. free_fall_threshold = 0x7 ,
. free_fall_time = 0x20 ,
. data_rate = 0x8 ,
. data_range = ADXL_FULL_RES ,
. ev_type = EV_ABS ,
. ev_code_x = ABS_X , /* EV_REL */
. ev_code_y = ABS_Y , /* EV_REL */
. ev_code_z = ABS_Z , /* EV_REL */
2009-10-16 16:35:20 +04:00
. ev_code_tap = { BTN_TOUCH , BTN_TOUCH , BTN_TOUCH } , /* EV_KEY x,y,z */
2009-05-29 19:41:18 +04:00
/* .ev_code_ff = KEY_F,*/ /* EV_KEY */
/* .ev_code_act_inactivity = KEY_A,*/ /* EV_KEY */
. power_mode = ADXL_AUTO_SLEEP | ADXL_LINK ,
. fifo_mode = ADXL_FIFO_STREAM ,
2009-10-29 16:48:10 +03:00
. orientation_enable = ADXL_EN_ORIENTATION_3D ,
. deadzone_angle = ADXL_DEADZONE_ANGLE_10p8 ,
. divisor_length = ADXL_LP_FILTER_DIVISOR_16 ,
/* EV_KEY {+Z, +Y, +X, -X, -Y, -Z} */
. ev_codes_orient_3d = { BTN_Z , BTN_Y , BTN_X , BTN_A , BTN_B , BTN_C } ,
2009-05-29 19:41:18 +04:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_RTC_DRV_BFIN)
2007-07-12 18:41:45 +04:00
static struct platform_device rtc_device = {
. name = " rtc-bfin " ,
. id = - 1 ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SERIAL_BFIN)
2007-07-12 18:41:45 +04:00
# ifdef CONFIG_SERIAL_BFIN_UART0
2009-09-09 14:46:19 +04:00
static struct resource bfin_uart0_resources [ ] = {
2007-07-12 18:41:45 +04:00
{
2009-09-09 14:46:19 +04:00
. start = UART0_DLL ,
. end = UART0_RBR + 2 ,
2007-07-12 18:41:45 +04:00
. flags = IORESOURCE_MEM ,
} ,
2013-06-17 12:29:59 +04:00
# ifdef CONFIG_EARLY_PRINTK
{
. start = PORTE_FER ,
. end = PORTE_FER + 2 ,
. flags = IORESOURCE_REG ,
} ,
# endif
2011-08-01 13:53:21 +04:00
{
. start = IRQ_UART0_TX ,
. end = IRQ_UART0_TX ,
. flags = IORESOURCE_IRQ ,
} ,
2009-09-09 14:46:19 +04:00
{
. start = IRQ_UART0_RX ,
2011-08-01 13:53:21 +04:00
. end = IRQ_UART0_RX ,
2009-09-09 14:46:19 +04:00
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_UART0_ERROR ,
. end = IRQ_UART0_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART0_TX ,
. end = CH_UART0_TX ,
. flags = IORESOURCE_DMA ,
} ,
{
. start = CH_UART0_RX ,
. end = CH_UART0_RX ,
. flags = IORESOURCE_DMA ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_uart0_peripherals [ ] = {
2009-09-09 14:46:19 +04:00
P_UART0_TX , P_UART0_RX , 0
} ;
static struct platform_device bfin_uart0_device = {
. name = " bfin-uart " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_uart0_resources ) ,
. resource = bfin_uart0_resources ,
. dev = {
. platform_data = & bfin_uart0_peripherals , /* Passed to driver */
} ,
} ;
2007-07-12 18:41:45 +04:00
# endif
# ifdef CONFIG_SERIAL_BFIN_UART1
2009-09-09 14:46:19 +04:00
static struct resource bfin_uart1_resources [ ] = {
2007-07-12 18:41:45 +04:00
{
2009-09-09 14:46:19 +04:00
. start = UART1_DLL ,
. end = UART1_RBR + 2 ,
2007-07-12 18:41:45 +04:00
. flags = IORESOURCE_MEM ,
} ,
2013-06-17 12:29:59 +04:00
# ifdef CONFIG_EARLY_PRINTK
{
. start = PORTH_FER ,
. end = PORTH_FER + 2 ,
. flags = IORESOURCE_REG ,
} ,
# endif
2011-08-01 13:53:21 +04:00
{
. start = IRQ_UART1_TX ,
. end = IRQ_UART1_TX ,
. flags = IORESOURCE_IRQ ,
} ,
2009-09-09 14:46:19 +04:00
{
. start = IRQ_UART1_RX ,
2011-08-01 13:53:21 +04:00
. end = IRQ_UART1_RX ,
2009-09-09 14:46:19 +04:00
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_UART1_ERROR ,
. end = IRQ_UART1_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART1_TX ,
. end = CH_UART1_TX ,
. flags = IORESOURCE_DMA ,
} ,
{
. start = CH_UART1_RX ,
. end = CH_UART1_RX ,
. flags = IORESOURCE_DMA ,
} ,
# ifdef CONFIG_BFIN_UART1_CTSRTS
{ /* CTS pin -- 0 means not supported */
. start = GPIO_PE10 ,
. end = GPIO_PE10 ,
. flags = IORESOURCE_IO ,
} ,
{ /* RTS pin -- 0 means not supported */
. start = GPIO_PE9 ,
. end = GPIO_PE9 ,
. flags = IORESOURCE_IO ,
} ,
# endif
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_uart1_peripherals [ ] = {
2009-09-09 14:46:19 +04:00
P_UART1_TX , P_UART1_RX ,
# ifdef CONFIG_BFIN_UART1_CTSRTS
P_UART1_RTS , P_UART1_CTS ,
# endif
0
} ;
static struct platform_device bfin_uart1_device = {
. name = " bfin-uart " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_uart1_resources ) ,
. resource = bfin_uart1_resources ,
. dev = {
. platform_data = & bfin_uart1_peripherals , /* Passed to driver */
} ,
} ;
2007-07-12 18:41:45 +04:00
# endif
# ifdef CONFIG_SERIAL_BFIN_UART2
2009-09-09 14:46:19 +04:00
static struct resource bfin_uart2_resources [ ] = {
2007-07-12 18:41:45 +04:00
{
2009-09-09 14:46:19 +04:00
. start = UART2_DLL ,
. end = UART2_RBR + 2 ,
2007-07-12 18:41:45 +04:00
. flags = IORESOURCE_MEM ,
} ,
2013-06-17 12:29:59 +04:00
# ifdef CONFIG_EARLY_PRINTK
{
. start = PORTB_FER ,
. end = PORTB_FER + 2 ,
. flags = IORESOURCE_REG ,
} ,
# endif
2011-08-01 13:53:21 +04:00
{
. start = IRQ_UART2_TX ,
. end = IRQ_UART2_TX ,
. flags = IORESOURCE_IRQ ,
} ,
2009-09-09 14:46:19 +04:00
{
. start = IRQ_UART2_RX ,
2011-08-01 13:53:21 +04:00
. end = IRQ_UART2_RX ,
2009-09-09 14:46:19 +04:00
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_UART2_ERROR ,
. end = IRQ_UART2_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART2_TX ,
. end = CH_UART2_TX ,
. flags = IORESOURCE_DMA ,
} ,
{
. start = CH_UART2_RX ,
. end = CH_UART2_RX ,
. flags = IORESOURCE_DMA ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_uart2_peripherals [ ] = {
2009-09-09 14:46:19 +04:00
P_UART2_TX , P_UART2_RX , 0
} ;
static struct platform_device bfin_uart2_device = {
. name = " bfin-uart " ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( bfin_uart2_resources ) ,
. resource = bfin_uart2_resources ,
. dev = {
. platform_data = & bfin_uart2_peripherals , /* Passed to driver */
} ,
} ;
2007-07-12 18:41:45 +04:00
# endif
# ifdef CONFIG_SERIAL_BFIN_UART3
2009-09-09 14:46:19 +04:00
static struct resource bfin_uart3_resources [ ] = {
2007-07-12 18:41:45 +04:00
{
2009-09-09 14:46:19 +04:00
. start = UART3_DLL ,
. end = UART3_RBR + 2 ,
2008-07-19 12:43:51 +04:00
. flags = IORESOURCE_MEM ,
2007-07-12 18:41:45 +04:00
} ,
2013-06-17 12:29:59 +04:00
# ifdef CONFIG_EARLY_PRINTK
{
. start = PORTB_FER ,
. end = PORTB_FER + 2 ,
. flags = IORESOURCE_REG ,
} ,
# endif
2011-08-01 13:53:21 +04:00
{
. start = IRQ_UART3_TX ,
. end = IRQ_UART3_TX ,
. flags = IORESOURCE_IRQ ,
} ,
2009-09-09 14:46:19 +04:00
{
. start = IRQ_UART3_RX ,
2011-08-01 13:53:21 +04:00
. end = IRQ_UART3_RX ,
2009-09-09 14:46:19 +04:00
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_UART3_ERROR ,
. end = IRQ_UART3_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART3_TX ,
. end = CH_UART3_TX ,
. flags = IORESOURCE_DMA ,
} ,
{
. start = CH_UART3_RX ,
. end = CH_UART3_RX ,
. flags = IORESOURCE_DMA ,
} ,
# ifdef CONFIG_BFIN_UART3_CTSRTS
{ /* CTS pin -- 0 means not supported */
. start = GPIO_PB3 ,
. end = GPIO_PB3 ,
. flags = IORESOURCE_IO ,
} ,
{ /* RTS pin -- 0 means not supported */
. start = GPIO_PB2 ,
. end = GPIO_PB2 ,
. flags = IORESOURCE_IO ,
} ,
2007-07-12 18:41:45 +04:00
# endif
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_uart3_peripherals [ ] = {
2009-09-09 14:46:19 +04:00
P_UART3_TX , P_UART3_RX ,
# ifdef CONFIG_BFIN_UART3_CTSRTS
P_UART3_RTS , P_UART3_CTS ,
# endif
0
} ;
static struct platform_device bfin_uart3_device = {
2007-07-12 18:41:45 +04:00
. name = " bfin-uart " ,
2009-09-09 14:46:19 +04:00
. id = 3 ,
. num_resources = ARRAY_SIZE ( bfin_uart3_resources ) ,
. resource = bfin_uart3_resources ,
. dev = {
. platform_data = & bfin_uart3_peripherals , /* Passed to driver */
} ,
2007-07-12 18:41:45 +04:00
} ;
# endif
2009-09-09 14:46:19 +04:00
# endif
2007-07-12 18:41:45 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_BFIN_SIR)
2008-04-24 23:09:15 +04:00
# ifdef CONFIG_BFIN_SIR0
2009-01-07 18:14:39 +03:00
static struct resource bfin_sir0_resources [ ] = {
2008-04-24 23:09:15 +04:00
{
. start = 0xFFC00400 ,
. end = 0xFFC004FF ,
. flags = IORESOURCE_MEM ,
} ,
2009-01-07 18:14:39 +03:00
{
. start = IRQ_UART0_RX ,
. end = IRQ_UART0_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART0_RX ,
. end = CH_UART0_RX + 1 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct platform_device bfin_sir0_device = {
. name = " bfin_sir " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_sir0_resources ) ,
. resource = bfin_sir0_resources ,
} ;
2008-04-24 23:09:15 +04:00
# endif
# ifdef CONFIG_BFIN_SIR1
2009-01-07 18:14:39 +03:00
static struct resource bfin_sir1_resources [ ] = {
2008-04-24 23:09:15 +04:00
{
. start = 0xFFC02000 ,
. end = 0xFFC020FF ,
. flags = IORESOURCE_MEM ,
} ,
2009-01-07 18:14:39 +03:00
{
. start = IRQ_UART1_RX ,
. end = IRQ_UART1_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART1_RX ,
. end = CH_UART1_RX + 1 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct platform_device bfin_sir1_device = {
. name = " bfin_sir " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_sir1_resources ) ,
. resource = bfin_sir1_resources ,
} ;
2008-04-24 23:09:15 +04:00
# endif
# ifdef CONFIG_BFIN_SIR2
2009-01-07 18:14:39 +03:00
static struct resource bfin_sir2_resources [ ] = {
2008-04-24 23:09:15 +04:00
{
. start = 0xFFC02100 ,
. end = 0xFFC021FF ,
. flags = IORESOURCE_MEM ,
} ,
2009-01-07 18:14:39 +03:00
{
. start = IRQ_UART2_RX ,
. end = IRQ_UART2_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART2_RX ,
. end = CH_UART2_RX + 1 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct platform_device bfin_sir2_device = {
. name = " bfin_sir " ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( bfin_sir2_resources ) ,
. resource = bfin_sir2_resources ,
} ;
2008-04-24 23:09:15 +04:00
# endif
# ifdef CONFIG_BFIN_SIR3
2009-01-07 18:14:39 +03:00
static struct resource bfin_sir3_resources [ ] = {
2008-04-24 23:09:15 +04:00
{
. start = 0xFFC03100 ,
. end = 0xFFC031FF ,
. flags = IORESOURCE_MEM ,
} ,
2009-01-07 18:14:39 +03:00
{
. start = IRQ_UART3_RX ,
. end = IRQ_UART3_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = CH_UART3_RX ,
. end = CH_UART3_RX + 1 ,
. flags = IORESOURCE_DMA ,
} ,
2008-04-24 23:09:15 +04:00
} ;
2009-01-07 18:14:39 +03:00
static struct platform_device bfin_sir3_device = {
2008-04-24 23:09:15 +04:00
. name = " bfin_sir " ,
2009-01-07 18:14:39 +03:00
. id = 3 ,
. num_resources = ARRAY_SIZE ( bfin_sir3_resources ) ,
. resource = bfin_sir3_resources ,
2008-04-24 23:09:15 +04:00
} ;
# endif
2009-01-07 18:14:39 +03:00
# endif
2008-04-24 23:09:15 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SMSC911X)
2009-06-06 04:41:17 +04:00
# include <linux/smsc911x.h>
2007-10-10 21:20:06 +04:00
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 ,
} ,
} ;
2009-06-06 04:41:17 +04:00
static struct smsc911x_platform_config smsc911x_config = {
. flags = SMSC911X_USE_32BIT ,
. irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW ,
. irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN ,
. phy_interface = PHY_INTERFACE_MODE_MII ,
} ;
2007-10-10 21:20:06 +04:00
static struct platform_device smsc911x_device = {
. name = " smsc911x " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( smsc911x_resources ) ,
. resource = smsc911x_resources ,
2009-06-06 04:41:17 +04:00
. dev = {
. platform_data = & smsc911x_config ,
} ,
2007-10-10 21:20:06 +04:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_USB_MUSB_HDRC)
2007-10-10 21:20:06 +04:00
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 ,
2010-09-29 20:26:39 +04:00
. name = " mc "
2007-10-10 21:20:06 +04:00
} ,
[ 2 ] = { /* DMA IRQ */
. start = IRQ_USB_DMA ,
. end = IRQ_USB_DMA ,
. flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL ,
2010-09-29 20:26:39 +04:00
. name = " dma "
2007-10-10 21:20:06 +04:00
} ,
} ;
2008-10-08 09:39:40 +04:00
static struct musb_hdrc_config musb_config = {
. multipoint = 0 ,
. dyn_fifo = 0 ,
. soft_con = 1 ,
. dma = 1 ,
2009-01-07 18:14:39 +03:00
. num_eps = 8 ,
. dma_channels = 8 ,
2008-10-08 09:39:40 +04:00
. gpio_vrsel = GPIO_PE7 ,
2010-01-22 07:02:46 +03:00
/* Some custom boards need to be active low, just set it to "0"
* if it is the case .
*/
. gpio_vrsel_active = 1 ,
2010-09-17 15:09:57 +04:00
. clkin = 24 , /* musb CLKIN in MHZ */
2008-10-08 09:39:40 +04:00
} ;
2007-10-10 21:20:06 +04:00
static struct musb_hdrc_platform_data musb_plat = {
2012-06-18 10:36:07 +04:00
# if defined(CONFIG_USB_MUSB_HDRC) && defined(CONFIG_USB_GADGET_MUSB_HDRC)
2007-10-10 21:20:06 +04:00
. mode = MUSB_OTG ,
2012-06-18 10:36:07 +04:00
# elif defined(CONFIG_USB_MUSB_HDRC)
2007-10-10 21:20:06 +04:00
. mode = MUSB_HOST ,
2007-12-24 07:20:19 +03:00
# elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
2007-10-10 21:20:06 +04:00
. mode = MUSB_PERIPHERAL ,
# endif
2008-10-08 09:39:40 +04:00
. config = & musb_config ,
2007-10-10 21:20:06 +04:00
} ;
static u64 musb_dmamask = ~ ( u32 ) 0 ;
static struct platform_device musb_device = {
2010-12-02 10:21:05 +03:00
. name = " musb-blackfin " ,
2007-10-10 21:20:06 +04:00
. 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
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SERIAL_BFIN_SPORT)
2009-09-23 09:01:56 +04:00
# ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
static struct resource bfin_sport0_uart_resources [ ] = {
{
. start = SPORT0_TCR1 ,
. end = SPORT0_MRCS3 + 4 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_SPORT0_RX ,
. end = IRQ_SPORT0_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_SPORT0_ERROR ,
. end = IRQ_SPORT0_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_sport0_peripherals [ ] = {
2009-09-23 09:01:56 +04:00
P_SPORT0_TFS , P_SPORT0_DTPRI , P_SPORT0_TSCLK , P_SPORT0_RFS ,
2010-11-12 05:45:38 +03:00
P_SPORT0_DRPRI , P_SPORT0_RSCLK , 0
2009-09-23 09:01:56 +04:00
} ;
static struct platform_device bfin_sport0_uart_device = {
. name = " bfin-sport-uart " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_sport0_uart_resources ) ,
. resource = bfin_sport0_uart_resources ,
. dev = {
. platform_data = & bfin_sport0_peripherals , /* Passed to driver */
} ,
} ;
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
static struct resource bfin_sport1_uart_resources [ ] = {
{
. start = SPORT1_TCR1 ,
. end = SPORT1_MRCS3 + 4 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_SPORT1_RX ,
. end = IRQ_SPORT1_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_SPORT1_ERROR ,
. end = IRQ_SPORT1_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_sport1_peripherals [ ] = {
2009-09-23 09:01:56 +04:00
P_SPORT1_TFS , P_SPORT1_DTPRI , P_SPORT1_TSCLK , P_SPORT1_RFS ,
2010-11-12 05:45:38 +03:00
P_SPORT1_DRPRI , P_SPORT1_RSCLK , 0
2009-09-23 09:01:56 +04:00
} ;
static struct platform_device bfin_sport1_uart_device = {
. name = " bfin-sport-uart " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_sport1_uart_resources ) ,
. resource = bfin_sport1_uart_resources ,
. dev = {
. platform_data = & bfin_sport1_peripherals , /* Passed to driver */
} ,
} ;
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT2_UART
static struct resource bfin_sport2_uart_resources [ ] = {
{
. start = SPORT2_TCR1 ,
. end = SPORT2_MRCS3 + 4 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_SPORT2_RX ,
. end = IRQ_SPORT2_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_SPORT2_ERROR ,
. end = IRQ_SPORT2_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_sport2_peripherals [ ] = {
2009-09-23 09:01:56 +04:00
P_SPORT2_TFS , P_SPORT2_DTPRI , P_SPORT2_TSCLK , P_SPORT2_RFS ,
P_SPORT2_DRPRI , P_SPORT2_RSCLK , P_SPORT2_DRSEC , P_SPORT2_DTSEC , 0
} ;
static struct platform_device bfin_sport2_uart_device = {
. name = " bfin-sport-uart " ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( bfin_sport2_uart_resources ) ,
. resource = bfin_sport2_uart_resources ,
. dev = {
. platform_data = & bfin_sport2_peripherals , /* Passed to driver */
} ,
} ;
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT3_UART
static struct resource bfin_sport3_uart_resources [ ] = {
{
. start = SPORT3_TCR1 ,
. end = SPORT3_MRCS3 + 4 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_SPORT3_RX ,
. end = IRQ_SPORT3_RX + 1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_SPORT3_ERROR ,
. end = IRQ_SPORT3_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-11-24 12:23:04 +03:00
static unsigned short bfin_sport3_peripherals [ ] = {
2009-09-23 09:01:56 +04:00
P_SPORT3_TFS , P_SPORT3_DTPRI , P_SPORT3_TSCLK , P_SPORT3_RFS ,
P_SPORT3_DRPRI , P_SPORT3_RSCLK , P_SPORT3_DRSEC , P_SPORT3_DTSEC , 0
} ;
static struct platform_device bfin_sport3_uart_device = {
. name = " bfin-sport-uart " ,
. id = 3 ,
. num_resources = ARRAY_SIZE ( bfin_sport3_uart_resources ) ,
. resource = bfin_sport3_uart_resources ,
. dev = {
. platform_data = & bfin_sport3_peripherals , /* Passed to driver */
} ,
} ;
# endif
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_CAN_BFIN)
2010-12-22 09:21:03 +03:00
static unsigned short bfin_can0_peripherals [ ] = {
2009-11-02 10:29:07 +03:00
P_CAN0_RX , P_CAN0_TX , 0
} ;
2010-12-22 09:21:03 +03:00
static struct resource bfin_can0_resources [ ] = {
2009-11-02 10:29:07 +03:00
{
. start = 0xFFC02A00 ,
. end = 0xFFC02FFF ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_CAN0_RX ,
. end = IRQ_CAN0_RX ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_CAN0_TX ,
. end = IRQ_CAN0_TX ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_CAN0_ERROR ,
. end = IRQ_CAN0_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2010-12-22 09:21:03 +03:00
static struct platform_device bfin_can0_device = {
2009-11-02 10:29:07 +03:00
. name = " bfin_can " ,
2010-12-22 09:21:03 +03:00
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_can0_resources ) ,
. resource = bfin_can0_resources ,
2009-11-02 10:29:07 +03:00
. dev = {
2010-12-22 09:21:03 +03:00
. platform_data = & bfin_can0_peripherals , /* Passed to driver */
2009-11-02 10:29:07 +03:00
} ,
} ;
2010-12-22 09:21:03 +03:00
static unsigned short bfin_can1_peripherals [ ] = {
P_CAN1_RX , P_CAN1_TX , 0
} ;
static struct resource bfin_can1_resources [ ] = {
{
. start = 0xFFC03200 ,
. end = 0xFFC037FF ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_CAN1_RX ,
. end = IRQ_CAN1_RX ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_CAN1_TX ,
. end = IRQ_CAN1_TX ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = IRQ_CAN1_ERROR ,
. end = IRQ_CAN1_ERROR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_can1_device = {
. name = " bfin_can " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_can1_resources ) ,
. resource = bfin_can1_resources ,
. dev = {
. platform_data = & bfin_can1_peripherals , /* Passed to driver */
} ,
} ;
2009-11-02 10:29:07 +03:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_PATA_BF54X)
2007-10-10 21:20:06 +04:00
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
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_NAND_BF5XX)
2007-10-10 21:20:06 +04:00
static struct mtd_partition partition_info [ ] = {
{
2010-08-28 00:43:39 +04:00
. name = " bootloader(nand) " ,
2007-10-10 21:20:06 +04:00
. offset = 0 ,
2010-08-28 00:43:39 +04:00
. size = 0x80000 ,
} , {
. name = " linux kernel(nand) " ,
. offset = MTDPART_OFS_APPEND ,
2008-10-13 10:45:21 +04:00
. size = 4 * 1024 * 1024 ,
2007-10-10 21:20:06 +04:00
} ,
{
2008-08-05 13:47:29 +04:00
. name = " file system(nand) " ,
2008-02-25 06:38:11 +03:00
. offset = MTDPART_OFS_APPEND ,
. size = MTDPART_SIZ_FULL ,
2007-10-10 21:20:06 +04:00
} ,
} ;
static struct bf5xx_nand_platform bf5xx_nand_platform = {
. 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
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SDH_BFIN)
2009-01-07 18:14:38 +03:00
static struct bfin_sd_host bfin_sdh_data = {
. dma_chan = CH_SDH ,
. irq_int0 = IRQ_SDH_MASK0 ,
. pin_req = { P_SD_D0 , P_SD_D1 , P_SD_D2 , P_SD_D3 , P_SD_CLK , P_SD_CMD , 0 } ,
} ;
2007-10-10 21:20:06 +04:00
static struct platform_device bf54x_sdh_device = {
. name = " bfin-sdh " ,
. id = 0 ,
2009-01-07 18:14:38 +03:00
. dev = {
. platform_data = & bfin_sdh_data ,
} ,
2007-10-10 21:20:06 +04:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_PHYSMAP)
2008-01-24 12:14:04 +03:00
static struct mtd_partition ezkit_partitions [ ] = {
{
2008-08-05 13:47:29 +04:00
. name = " bootloader(nor) " ,
2010-08-28 00:43:39 +04:00
. size = 0x80000 ,
2008-01-24 12:14:04 +03:00
. offset = 0 ,
} , {
2008-08-05 13:47:29 +04:00
. name = " linux kernel(nor) " ,
2008-10-09 13:28:36 +04:00
. size = 0x400000 ,
2008-01-24 12:14:04 +03:00
. offset = MTDPART_OFS_APPEND ,
} , {
2008-08-05 13:47:29 +04:00
. name = " file system(nor) " ,
2011-05-10 02:46:17 +04:00
. size = 0x1000000 - 0x80000 - 0x400000 - 0x8000 * 4 ,
. offset = MTDPART_OFS_APPEND ,
} , {
. name = " config(nor) " ,
. size = 0x8000 * 3 ,
. offset = MTDPART_OFS_APPEND ,
} , {
. name = " u-boot env(nor) " ,
. size = 0x8000 ,
2008-01-24 12:14:04 +03:00
. 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 ,
2008-10-09 13:28:36 +04:00
. end = 0x21ffffff ,
2008-01-24 12:14:04 +03:00
. 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 03:09:12 +03:00
# endif
2008-01-24 12:14:04 +03:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_M25P80)
2007-10-10 21:20:06 +04:00
/* SPI flash chip (m25p16) */
static struct mtd_partition bfin_spi_flash_partitions [ ] = {
{
2008-08-05 13:47:29 +04:00
. name = " bootloader(spi) " ,
2010-08-28 00:43:39 +04:00
. size = 0x00080000 ,
2007-10-10 21:20:06 +04:00
. offset = 0 ,
. mask_flags = MTD_CAP_ROM
} , {
2008-08-05 13:47:29 +04:00
. name = " linux kernel(spi) " ,
2008-02-25 06:38:11 +03:00
. size = MTDPART_SIZ_FULL ,
. offset = MTDPART_OFS_APPEND ,
2007-10-10 21:20:06 +04: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*/
2008-04-24 01:19:02 +04:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_TOUCHSCREEN_AD7877)
2007-10-10 21:20:06 +04:00
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
2013-05-30 14:37:28 +04:00
# ifdef CONFIG_PINCTRL_ADI2
# define ADI_PINT_DEVNAME "adi-gpio-pint"
# define ADI_GPIO_DEVNAME "adi-gpio"
# define ADI_PINCTRL_DEVNAME "pinctrl-adi2"
static struct platform_device bfin_pinctrl_device = {
. name = ADI_PINCTRL_DEVNAME ,
. id = 0 ,
} ;
static struct resource bfin_pint0_resources [ ] = {
{
. start = PINT0_MASK_SET ,
. end = PINT0_LATCH + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PINT0 ,
. end = IRQ_PINT0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_pint0_device = {
. name = ADI_PINT_DEVNAME ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_pint0_resources ) ,
. resource = bfin_pint0_resources ,
} ;
static struct resource bfin_pint1_resources [ ] = {
{
. start = PINT1_MASK_SET ,
. end = PINT1_LATCH + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PINT1 ,
. end = IRQ_PINT1 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_pint1_device = {
. name = ADI_PINT_DEVNAME ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_pint1_resources ) ,
. resource = bfin_pint1_resources ,
} ;
static struct resource bfin_pint2_resources [ ] = {
{
. start = PINT2_MASK_SET ,
. end = PINT2_LATCH + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PINT2 ,
. end = IRQ_PINT2 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_pint2_device = {
. name = ADI_PINT_DEVNAME ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( bfin_pint2_resources ) ,
. resource = bfin_pint2_resources ,
} ;
static struct resource bfin_pint3_resources [ ] = {
{
. start = PINT3_MASK_SET ,
. end = PINT3_LATCH + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PINT3 ,
. end = IRQ_PINT3 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device bfin_pint3_device = {
. name = ADI_PINT_DEVNAME ,
. id = 3 ,
. num_resources = ARRAY_SIZE ( bfin_pint3_resources ) ,
. resource = bfin_pint3_resources ,
} ;
static struct resource bfin_gpa_resources [ ] = {
{
. start = PORTA_FER ,
. end = PORTA_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{ /* optional */
. start = IRQ_PA0 ,
. end = IRQ_PA0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpa_pdata = {
. port_gpio_base = GPIO_PA0 , /* Optional */
. port_pin_base = GPIO_PA0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = 0 , /* PINT0 */
. pint_assign = true , /* PINT upper 16 bit */
. pint_map = 0 , /* mapping mask in PINT */
} ;
static struct platform_device bfin_gpa_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( bfin_gpa_resources ) ,
. resource = bfin_gpa_resources ,
. dev = {
. platform_data = & bfin_gpa_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpb_resources [ ] = {
{
. start = PORTB_FER ,
. end = PORTB_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PB0 ,
. end = IRQ_PB0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpb_pdata = {
. port_gpio_base = GPIO_PB0 ,
. port_pin_base = GPIO_PB0 ,
. port_width = 15 ,
. pint_id = 0 ,
. pint_assign = true ,
. pint_map = 1 ,
} ;
static struct platform_device bfin_gpb_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( bfin_gpb_resources ) ,
. resource = bfin_gpb_resources ,
. dev = {
. platform_data = & bfin_gpb_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpc_resources [ ] = {
{
. start = PORTC_FER ,
. end = PORTC_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PC0 ,
. end = IRQ_PC0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpc_pdata = {
. port_gpio_base = GPIO_PC0 ,
. port_pin_base = GPIO_PC0 ,
. port_width = 14 ,
. pint_id = 2 ,
. pint_assign = true ,
. pint_map = 0 ,
} ;
static struct platform_device bfin_gpc_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( bfin_gpc_resources ) ,
. resource = bfin_gpc_resources ,
. dev = {
. platform_data = & bfin_gpc_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpd_resources [ ] = {
{
. start = PORTD_FER ,
. end = PORTD_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PD0 ,
. end = IRQ_PD0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpd_pdata = {
. port_gpio_base = GPIO_PD0 ,
. port_pin_base = GPIO_PD0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = 2 ,
. pint_assign = false ,
. pint_map = 1 ,
} ;
static struct platform_device bfin_gpd_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 3 ,
. num_resources = ARRAY_SIZE ( bfin_gpd_resources ) ,
. resource = bfin_gpd_resources ,
. dev = {
. platform_data = & bfin_gpd_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpe_resources [ ] = {
{
. start = PORTE_FER ,
. end = PORTE_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PE0 ,
. end = IRQ_PE0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpe_pdata = {
. port_gpio_base = GPIO_PE0 ,
. port_pin_base = GPIO_PE0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = 3 ,
. pint_assign = true ,
. pint_map = 2 ,
} ;
static struct platform_device bfin_gpe_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 4 ,
. num_resources = ARRAY_SIZE ( bfin_gpe_resources ) ,
. resource = bfin_gpe_resources ,
. dev = {
. platform_data = & bfin_gpe_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpf_resources [ ] = {
{
. start = PORTF_FER ,
. end = PORTF_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PF0 ,
. end = IRQ_PF0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpf_pdata = {
. port_gpio_base = GPIO_PF0 ,
. port_pin_base = GPIO_PF0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = 3 ,
. pint_assign = false ,
. pint_map = 3 ,
} ;
static struct platform_device bfin_gpf_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 5 ,
. num_resources = ARRAY_SIZE ( bfin_gpf_resources ) ,
. resource = bfin_gpf_resources ,
. dev = {
. platform_data = & bfin_gpf_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpg_resources [ ] = {
{
. start = PORTG_FER ,
. end = PORTG_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PG0 ,
. end = IRQ_PG0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpg_pdata = {
. port_gpio_base = GPIO_PG0 ,
. port_pin_base = GPIO_PG0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = - 1 ,
} ;
static struct platform_device bfin_gpg_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 6 ,
. num_resources = ARRAY_SIZE ( bfin_gpg_resources ) ,
. resource = bfin_gpg_resources ,
. dev = {
. platform_data = & bfin_gpg_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gph_resources [ ] = {
{
. start = PORTH_FER ,
. end = PORTH_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PH0 ,
. end = IRQ_PH0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gph_pdata = {
. port_gpio_base = GPIO_PH0 ,
. port_pin_base = GPIO_PH0 ,
. port_width = 14 ,
. pint_id = - 1 ,
} ;
static struct platform_device bfin_gph_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 7 ,
. num_resources = ARRAY_SIZE ( bfin_gph_resources ) ,
. resource = bfin_gph_resources ,
. dev = {
. platform_data = & bfin_gph_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpi_resources [ ] = {
{
. start = PORTI_FER ,
. end = PORTI_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PI0 ,
. end = IRQ_PI0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpi_pdata = {
. port_gpio_base = GPIO_PI0 ,
. port_pin_base = GPIO_PI0 ,
. port_width = GPIO_BANKSIZE ,
. pint_id = - 1 ,
} ;
static struct platform_device bfin_gpi_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 8 ,
. num_resources = ARRAY_SIZE ( bfin_gpi_resources ) ,
. resource = bfin_gpi_resources ,
. dev = {
. platform_data = & bfin_gpi_pdata , /* Passed to driver */
} ,
} ;
static struct resource bfin_gpj_resources [ ] = {
{
. start = PORTJ_FER ,
. end = PORTJ_MUX + 3 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = IRQ_PJ0 ,
. end = IRQ_PJ0 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct adi_pinctrl_gpio_platform_data bfin_gpj_pdata = {
. port_gpio_base = GPIO_PJ0 ,
. port_pin_base = GPIO_PJ0 ,
. port_width = 14 ,
. pint_id = - 1 ,
} ;
static struct platform_device bfin_gpj_device = {
. name = ADI_GPIO_DEVNAME ,
. id = 9 ,
. num_resources = ARRAY_SIZE ( bfin_gpj_resources ) ,
. resource = bfin_gpj_resources ,
. dev = {
. platform_data = & bfin_gpj_pdata , /* Passed to driver */
} ,
} ;
# endif
2008-06-07 11:03:01 +04:00
static struct spi_board_info bfin_spi_board_info [ ] __initdata = {
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_M25P80)
2007-10-10 21:20:06 +04:00
{
/* 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 */
2013-05-30 14:37:28 +04:00
. chip_select = MAX_CTRL_CS + GPIO_PE4 , /* SPI_SSEL1*/
2007-10-10 21:20:06 +04:00
. platform_data = & bfin_spi_flash_data ,
. controller_data = & spi_flash_chip_info ,
. mode = SPI_MODE_3 ,
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_AD183X)
2008-04-24 01:19:02 +04:00
{
2010-01-28 12:37:21 +03:00
. modalias = " ad183x " ,
2008-04-24 01:19:02 +04:00
. max_speed_hz = 3125000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 1 ,
2013-05-30 14:37:28 +04:00
. chip_select = MAX_CTRL_CS + GPIO_PG6 , /* SPI_SSEL2 */
2008-04-24 01:19:02 +04:00
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_TOUCHSCREEN_AD7877)
2009-05-29 19:41:18 +04:00
{
. modalias = " ad7877 " ,
. platform_data = & bfin_ad7877_ts_info ,
. irq = IRQ_PB4 , /* old boards (<=Rev 1.3) use IRQ_PJ11 */
. max_speed_hz = 12500000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 0 ,
2013-05-30 14:37:28 +04:00
. chip_select = MAX_CTRL_CS + GPIO_PE5 , /* SPI_SSEL2 */
2009-05-29 19:41:18 +04:00
} ,
2007-10-10 21:20:06 +04:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SPI_SPIDEV)
2008-02-08 20:54:09 +03:00
{
. modalias = " spidev " ,
. max_speed_hz = 3125000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 0 ,
2013-05-30 14:37:28 +04:00
. chip_select = MAX_CTRL_CS + GPIO_PE4 , /* SPI_SSEL1 */
2008-02-08 20:54:09 +03:00
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_ADXL34X_SPI)
2009-05-29 19:41:18 +04:00
{
. modalias = " adxl34x " ,
. platform_data = & adxl34x_info ,
. irq = IRQ_PC5 ,
. max_speed_hz = 5000000 , /* max spi clock (SCK) speed in HZ */
. bus_num = 1 ,
2013-05-30 14:37:28 +04:00
. chip_select = MAX_CTRL_CS + GPIO_PG6 , /* SPI_SSEL2 */
2009-05-29 19:41:18 +04:00
. mode = SPI_MODE_3 ,
} ,
# endif
2007-10-10 21:20:06 +04:00
} ;
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SPI_BFIN5XX)
2007-10-10 21:20:06 +04: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 ,
2009-06-05 16:11:11 +04:00
. flags = IORESOURCE_DMA ,
} ,
[ 2 ] = {
. start = IRQ_SPI0 ,
. end = IRQ_SPI0 ,
2007-10-10 21:20:06 +04:00
. 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 ,
2009-06-05 16:11:11 +04:00
. flags = IORESOURCE_DMA ,
} ,
[ 2 ] = {
. start = IRQ_SPI1 ,
. end = IRQ_SPI1 ,
2007-10-10 21:20:06 +04:00
. flags = IORESOURCE_IRQ ,
}
} ;
/* SPI controller data */
2007-11-12 18:24:42 +03:00
static struct bfin5xx_spi_master bf54x_spi_master_info0 = {
2013-05-30 14:37:28 +04:00
. num_chipselect = MAX_CTRL_CS + MAX_BLACKFIN_GPIOS ,
2007-10-10 21:20:06 +04:00
. enable_dma = 1 , /* master has the ability to do dma transfer */
2007-11-12 18:24:42 +03:00
. pin_req = { P_SPI0_SCK , P_SPI0_MISO , P_SPI0_MOSI , 0 } ,
2007-10-10 21:20:06 +04: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 18:24:42 +03:00
. platform_data = & bf54x_spi_master_info0 , /* Passed to driver */
2007-10-10 21:20:06 +04:00
} ,
} ;
2007-11-12 18:24:42 +03:00
static struct bfin5xx_spi_master bf54x_spi_master_info1 = {
2013-05-30 14:37:28 +04:00
. num_chipselect = MAX_CTRL_CS + MAX_BLACKFIN_GPIOS ,
2007-11-12 18:24:42 +03:00
. 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-10 21:20:06 +04: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 18:24:42 +03:00
. platform_data = & bf54x_spi_master_info1 , /* Passed to driver */
2007-10-10 21:20:06 +04:00
} ,
} ;
# endif /* spi master and devices */
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_VIDEO_BLACKFIN_CAPTURE)
2011-12-31 23:08:38 +04:00
# include <linux/videodev2.h>
# include <media/blackfin/bfin_capture.h>
# include <media/blackfin/ppi.h>
static const unsigned short ppi_req [ ] = {
P_PPI1_D0 , P_PPI1_D1 , P_PPI1_D2 , P_PPI1_D3 ,
P_PPI1_D4 , P_PPI1_D5 , P_PPI1_D6 , P_PPI1_D7 ,
P_PPI1_CLK , P_PPI1_FS1 , P_PPI1_FS2 ,
0 ,
} ;
static const struct ppi_info ppi_info = {
. type = PPI_TYPE_EPPI ,
. dma_ch = CH_EPPI1 ,
. irq_err = IRQ_EPPI1_ERROR ,
. base = ( void __iomem * ) EPPI1_STATUS ,
. pin_req = ppi_req ,
} ;
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_VIDEO_VS6624)
2011-12-31 23:08:38 +04:00
static struct v4l2_input vs6624_inputs [ ] = {
{
. index = 0 ,
. name = " Camera " ,
. type = V4L2_INPUT_TYPE_CAMERA ,
. std = V4L2_STD_UNKNOWN ,
} ,
} ;
static struct bcap_route vs6624_routes [ ] = {
{
. input = 0 ,
. output = 0 ,
} ,
} ;
static const unsigned vs6624_ce_pin = GPIO_PG6 ;
static struct bfin_capture_config bfin_capture_data = {
. card_name = " BF548 " ,
. inputs = vs6624_inputs ,
. num_inputs = ARRAY_SIZE ( vs6624_inputs ) ,
. routes = vs6624_routes ,
. i2c_adapter_id = 0 ,
. board_info = {
. type = " vs6624 " ,
. addr = 0x10 ,
. platform_data = ( void * ) & vs6624_ce_pin ,
} ,
. ppi_info = & ppi_info ,
. ppi_control = ( POLC | PACKEN | DLEN_8 | XFR_TYPE | 0x20 ) ,
2012-01-10 02:06:56 +04:00
. int_mask = 0xFFFFFFFF , /* disable error interrupt on eppi */
. blank_clocks = 8 , /* 8 clocks as SAV and EAV */
2011-12-31 23:08:38 +04:00
} ;
# endif
static struct platform_device bfin_capture_device = {
. name = " bfin_capture " ,
. dev = {
. platform_data = & bfin_capture_data ,
} ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_I2C_BLACKFIN_TWI)
2012-05-15 11:25:50 +04:00
static const u16 bfin_twi0_pins [ ] = { P_TWI0_SCL , P_TWI0_SDA , 0 } ;
2007-10-10 21:20:06 +04:00
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 ,
2012-05-15 11:25:50 +04:00
. dev = {
. platform_data = & bfin_twi0_pins ,
} ,
2007-10-10 21:20:06 +04:00
} ;
2007-11-21 11:03:07 +03:00
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
2012-05-15 11:25:50 +04:00
static const u16 bfin_twi1_pins [ ] = { P_TWI1_SCL , P_TWI1_SDA , 0 } ;
2007-10-10 21:20:06 +04: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 ,
2012-05-15 11:25:50 +04:00
. dev = {
. platform_data = & bfin_twi1_pins ,
} ,
2007-10-10 21:20:06 +04:00
} ;
# endif
2007-11-21 11:03:07 +03:00
# endif
2007-10-10 21:20:06 +04:00
2008-03-26 05:02:13 +03:00
static struct i2c_board_info __initdata bfin_i2c_board_info0 [ ] = {
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_SOC_SSM2602)
2012-03-16 08:52:34 +04:00
{
I2C_BOARD_INFO ( " ssm2602 " , 0x1b ) ,
} ,
# endif
2008-03-26 05:02:13 +03:00
} ;
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
static struct i2c_board_info __initdata bfin_i2c_board_info1 [ ] = {
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_BFIN_TWI_LCD)
2008-03-26 05:02:13 +03:00
{
I2C_BOARD_INFO ( " pcf8574_lcd " , 0x22 ) ,
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_PCF8574)
2008-03-26 05:02:13 +03:00
{
I2C_BOARD_INFO ( " pcf8574_keypad " , 0x27 ) ,
. irq = 212 ,
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_ADXL34X_I2C)
2009-05-29 19:41:18 +04:00
{
I2C_BOARD_INFO ( " adxl34x " , 0x53 ) ,
. irq = IRQ_PC5 ,
. platform_data = ( void * ) & adxl34x_info ,
} ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_BFIN_TWI_LCD)
2010-08-26 12:25:13 +04:00
{
I2C_BOARD_INFO ( " ad5252 " , 0x2f ) ,
} ,
# endif
2008-03-26 05:02:13 +03:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_KEYBOARD_GPIO)
2008-01-27 11:49:48 +03:00
# 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-05-07 07:41:26 +04: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 ,
} ,
} ;
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_I2S) || \
IS_ENABLED ( CONFIG_SND_BF5XX_AC97 )
2011-03-01 12:43:50 +03:00
# define SPORT_REQ(x) \
[ x ] = { P_SPORT # # x # # _TFS , P_SPORT # # x # # _DTPRI , P_SPORT # # x # # _TSCLK , \
P_SPORT # # x # # _RFS , P_SPORT # # x # # _DRPRI , P_SPORT # # x # # _RSCLK , 0 }
static const u16 bfin_snd_pin [ ] [ 7 ] = {
SPORT_REQ ( 0 ) ,
SPORT_REQ ( 1 ) ,
2012-03-16 08:52:34 +04:00
SPORT_REQ ( 2 ) ,
SPORT_REQ ( 3 ) ,
2011-03-01 12:43:50 +03:00
} ;
static struct bfin_snd_platform_data bfin_snd_data [ ] = {
{
. pin_req = & bfin_snd_pin [ 0 ] [ 0 ] ,
} ,
{
. pin_req = & bfin_snd_pin [ 1 ] [ 0 ] ,
} ,
2012-03-16 08:52:34 +04:00
{
. pin_req = & bfin_snd_pin [ 2 ] [ 0 ] ,
} ,
{
. pin_req = & bfin_snd_pin [ 3 ] [ 0 ] ,
} ,
2011-03-01 12:43:50 +03:00
} ;
# define BFIN_SND_RES(x) \
[ x ] = { \
{ \
. start = SPORT # # x # # _TCR1 , \
. end = SPORT # # x # # _TCR1 , \
. flags = IORESOURCE_MEM \
} , \
{ \
. start = CH_SPORT # # x # # _RX , \
. end = CH_SPORT # # x # # _RX , \
. flags = IORESOURCE_DMA , \
} , \
{ \
. start = CH_SPORT # # x # # _TX , \
. end = CH_SPORT # # x # # _TX , \
. flags = IORESOURCE_DMA , \
} , \
{ \
. start = IRQ_SPORT # # x # # _ERROR , \
. end = IRQ_SPORT # # x # # _ERROR , \
. flags = IORESOURCE_IRQ , \
} \
}
static struct resource bfin_snd_resources [ ] [ 4 ] = {
BFIN_SND_RES ( 0 ) ,
BFIN_SND_RES ( 1 ) ,
2012-03-16 08:52:34 +04:00
BFIN_SND_RES ( 2 ) ,
BFIN_SND_RES ( 3 ) ,
2011-03-01 12:43:50 +03:00
} ;
2012-03-16 08:52:34 +04:00
# endif
2011-03-01 12:43:50 +03:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_I2S)
2012-03-16 08:52:34 +04:00
static struct platform_device bfin_i2s_pcm = {
. name = " bfin-i2s-pcm-audio " ,
. id = - 1 ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_AC97)
2012-03-16 08:52:34 +04:00
static struct platform_device bfin_ac97_pcm = {
. name = " bfin-ac97-pcm-audio " ,
2011-03-01 12:43:50 +03:00
. id = - 1 ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_AD73311)
2011-03-01 12:43:50 +03:00
static struct platform_device bfin_ad73311_codec_device = {
. name = " ad73311 " ,
. id = - 1 ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_AD1980)
2011-03-01 12:43:50 +03:00
static struct platform_device bfin_ad1980_codec_device = {
. name = " ad1980 " ,
. id = - 1 ,
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_I2S)
2009-11-13 05:41:07 +03:00
static struct platform_device bfin_i2s = {
. name = " bfin-i2s " ,
. id = CONFIG_SND_BF5XX_SPORT_NUM ,
2011-03-01 12:43:50 +03:00
. num_resources = ARRAY_SIZE ( bfin_snd_resources [ CONFIG_SND_BF5XX_SPORT_NUM ] ) ,
. resource = bfin_snd_resources [ CONFIG_SND_BF5XX_SPORT_NUM ] ,
. dev = {
. platform_data = & bfin_snd_data [ CONFIG_SND_BF5XX_SPORT_NUM ] ,
} ,
2009-11-13 05:41:07 +03:00
} ;
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_AC97)
2009-11-13 05:41:07 +03:00
static struct platform_device bfin_ac97 = {
. name = " bfin-ac97 " ,
. id = CONFIG_SND_BF5XX_SPORT_NUM ,
2011-03-01 12:43:50 +03:00
. num_resources = ARRAY_SIZE ( bfin_snd_resources [ CONFIG_SND_BF5XX_SPORT_NUM ] ) ,
. resource = bfin_snd_resources [ CONFIG_SND_BF5XX_SPORT_NUM ] ,
. dev = {
. platform_data = & bfin_snd_data [ CONFIG_SND_BF5XX_SPORT_NUM ] ,
} ,
2009-11-13 05:41:07 +03:00
} ;
# endif
2007-07-12 18:41:45 +04:00
static struct platform_device * ezkit_devices [ ] __initdata = {
2008-05-07 07:41:26 +04:00
& bfin_dpmc ,
2013-05-30 14:37:28 +04:00
# if defined(CONFIG_PINCTRL_ADI2)
& bfin_pinctrl_device ,
& bfin_pint0_device ,
& bfin_pint1_device ,
& bfin_pint2_device ,
& bfin_pint3_device ,
& bfin_gpa_device ,
& bfin_gpb_device ,
& bfin_gpc_device ,
& bfin_gpd_device ,
& bfin_gpe_device ,
& bfin_gpf_device ,
& bfin_gpg_device ,
& bfin_gph_device ,
& bfin_gpi_device ,
& bfin_gpj_device ,
# endif
2008-05-07 07:41:26 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_RTC_DRV_BFIN)
2007-07-12 18:41:45 +04:00
& rtc_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SERIAL_BFIN)
2009-09-09 14:46:19 +04:00
# ifdef CONFIG_SERIAL_BFIN_UART0
& bfin_uart0_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART1
& bfin_uart1_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART2
& bfin_uart2_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART3
& bfin_uart3_device ,
# endif
2007-07-12 18:41:45 +04:00
# endif
2007-10-10 21:20:06 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_BFIN_SIR)
2009-01-07 18:14:39 +03:00
# ifdef CONFIG_BFIN_SIR0
& bfin_sir0_device ,
# endif
# ifdef CONFIG_BFIN_SIR1
& bfin_sir1_device ,
# endif
# ifdef CONFIG_BFIN_SIR2
& bfin_sir2_device ,
# endif
# ifdef CONFIG_BFIN_SIR3
& bfin_sir3_device ,
# endif
2008-04-24 23:09:15 +04:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_FB_BF54X_LQ043)
2007-10-10 21:20:06 +04:00
& bf54x_lq043_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SMSC911X)
2007-10-10 21:20:06 +04:00
& smsc911x_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_USB_MUSB_HDRC)
2007-10-10 21:20:06 +04:00
& musb_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_USB_ISP1760_HCD)
2008-11-18 12:48:22 +03:00
& bfin_isp1760_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SERIAL_BFIN_SPORT)
2009-09-23 09:01:56 +04:00
# ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
& bfin_sport0_uart_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
& bfin_sport1_uart_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT2_UART
& bfin_sport2_uart_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_SPORT3_UART
& bfin_sport3_uart_device ,
# endif
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_CAN_BFIN)
2010-12-22 09:21:03 +03:00
& bfin_can0_device ,
& bfin_can1_device ,
2009-11-02 10:29:07 +03:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_PATA_BF54X)
2007-10-10 21:20:06 +04:00
& bfin_atapi_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_NAND_BF5XX)
2007-10-10 21:20:06 +04:00
& bf5xx_nand_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SDH_BFIN)
2007-10-10 21:20:06 +04:00
& bf54x_sdh_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SPI_BFIN5XX)
2007-10-10 21:20:06 +04:00
& bf54x_spi_master0 ,
2007-10-21 13:03:55 +04:00
& bf54x_spi_master1 ,
2007-10-10 21:20:06 +04:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_VIDEO_BLACKFIN_CAPTURE)
2011-12-31 23:08:38 +04:00
& bfin_capture_device ,
# endif
2007-10-10 21:20:06 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_KEYBOARD_BFIN)
2007-10-10 21:20:06 +04:00
& bf54x_kpad_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_INPUT_BFIN_ROTARY)
2008-10-08 10:27:59 +04:00
& bfin_rotary_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_I2C_BLACKFIN_TWI)
2007-10-10 21:20:06 +04:00
& i2c_bfin_twi0_device ,
2007-11-21 11:03:07 +03:00
# if !defined(CONFIG_BF542)
2007-10-10 21:20:06 +04:00
& i2c_bfin_twi1_device ,
# endif
2007-11-21 11:03:07 +03:00
# endif
2008-01-27 11:49:48 +03:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_KEYBOARD_GPIO)
2008-01-27 11:49:48 +03:00
& bfin_device_gpiokeys ,
# endif
2008-02-22 12:01:31 +03:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_MTD_PHYSMAP)
2008-01-24 12:14:04 +03:00
& ezkit_flash_device ,
2008-03-26 03:09:12 +03:00
# endif
2009-11-13 05:41:07 +03:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_I2S)
2012-03-16 08:52:34 +04:00
& bfin_i2s_pcm ,
# endif
2013-05-28 21:22:18 +04:00
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_AC97)
2012-03-16 08:52:34 +04:00
& bfin_ac97_pcm ,
2011-03-01 12:43:50 +03:00
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_SOC_AD1980)
2011-03-01 12:43:50 +03:00
& bfin_ad1980_codec_device ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_I2S)
2009-11-13 05:41:07 +03:00
& bfin_i2s ,
# endif
2014-04-11 22:07:27 +04:00
# if IS_ENABLED(CONFIG_SND_BF5XX_AC97)
2009-11-13 05:41:07 +03:00
& bfin_ac97 ,
# endif
2007-07-12 18:41:45 +04:00
} ;
2013-05-30 14:37:28 +04:00
/* Pin control settings */
static struct pinctrl_map __initdata bfin_pinmux_map [ ] = {
/* per-device maps */
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.0 " , " pinctrl-adi2.0 " , NULL , " uart0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.1 " , " pinctrl-adi2.0 " , NULL , " uart1 " ) ,
# ifdef CONFIG_BFIN_UART1_CTSRTS
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.1 " , " pinctrl-adi2.0 " , NULL , " uart1_ctsrts " ) ,
# endif
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.2 " , " pinctrl-adi2.0 " , NULL , " uart2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.3 " , " pinctrl-adi2.0 " , NULL , " uart3 " ) ,
# ifdef CONFIG_BFIN_UART3_CTSRTS
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-uart.3 " , " pinctrl-adi2.0 " , NULL , " uart3_ctsrts " ) ,
# endif
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_sir.0 " , " pinctrl-adi2.0 " , NULL , " uart0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_sir.1 " , " pinctrl-adi2.0 " , NULL , " uart1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_sir.2 " , " pinctrl-adi2.0 " , NULL , " uart2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_sir.3 " , " pinctrl-adi2.0 " , NULL , " uart3 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-sdh.0 " , " pinctrl-adi2.0 " , NULL , " rsi0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-spi.0 " , " pinctrl-adi2.0 " , NULL , " spi0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-spi.1 " , " pinctrl-adi2.0 " , NULL , " spi1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " i2c-bfin-twi.0 " , " pinctrl-adi2.0 " , NULL , " twi0 " ) ,
# if !defined(CONFIG_BF542) /* The BF542 only has 1 TWI */
PIN_MAP_MUX_GROUP_DEFAULT ( " i2c-bfin-twi.1 " , " pinctrl-adi2.0 " , NULL , " twi1 " ) ,
# endif
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-rotary " , " pinctrl-adi2.0 " , NULL , " rotary " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_can.0 " , " pinctrl-adi2.0 " , NULL , " can0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin_can.1 " , " pinctrl-adi2.0 " , NULL , " can1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bf54x-lq043 " , " pinctrl-adi2.0 " , NULL , " ppi0_24b " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-i2s.0 " , " pinctrl-adi2.0 " , NULL , " sport0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-tdm.0 " , " pinctrl-adi2.0 " , NULL , " sport0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-ac97.0 " , " pinctrl-adi2.0 " , NULL , " sport0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-i2s.1 " , " pinctrl-adi2.0 " , NULL , " sport1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-tdm.1 " , " pinctrl-adi2.0 " , NULL , " sport1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-ac97.1 " , " pinctrl-adi2.0 " , NULL , " sport1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-i2s.2 " , " pinctrl-adi2.0 " , NULL , " sport2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-tdm.2 " , " pinctrl-adi2.0 " , NULL , " sport2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-ac97.2 " , " pinctrl-adi2.0 " , NULL , " sport2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-i2s.3 " , " pinctrl-adi2.0 " , NULL , " sport3 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-tdm.3 " , " pinctrl-adi2.0 " , NULL , " sport3 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-ac97.3 " , " pinctrl-adi2.0 " , NULL , " sport3 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-sport-uart.0 " , " pinctrl-adi2.0 " , NULL , " sport0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-sport-uart.1 " , " pinctrl-adi2.0 " , NULL , " sport1 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-sport-uart.2 " , " pinctrl-adi2.0 " , NULL , " sport2 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bfin-sport-uart.3 " , " pinctrl-adi2.0 " , NULL , " sport3 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " pata-bf54x " , " pinctrl-adi2.0 " , NULL , " atapi " ) ,
# ifdef CONFIG_BF548_ATAPI_ALTERNATIVE_PORT
PIN_MAP_MUX_GROUP_DEFAULT ( " pata-bf54x " , " pinctrl-adi2.0 " , NULL , " atapi_alter " ) ,
# endif
PIN_MAP_MUX_GROUP_DEFAULT ( " bf5xx-nand.0 " , " pinctrl-adi2.0 " , NULL , " nfc0 " ) ,
PIN_MAP_MUX_GROUP_DEFAULT ( " bf54x-keys " , " pinctrl-adi2.0 " , NULL , " keys_4x4 " ) ,
} ;
2008-02-02 10:34:56 +03:00
static int __init ezkit_init ( void )
2007-07-12 18:41:45 +04:00
{
2008-04-23 05:39:01 +04:00
printk ( KERN_INFO " %s(): registering device resources \n " , __func__ ) ;
2008-03-26 05:02:13 +03:00
2013-05-30 14:37:28 +04:00
/* Initialize pinmuxing */
pinctrl_register_mappings ( bfin_pinmux_map ,
ARRAY_SIZE ( bfin_pinmux_map ) ) ;
2008-03-26 05:02:13 +03:00
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
2007-07-12 18:41:45 +04:00
platform_add_devices ( ezkit_devices , ARRAY_SIZE ( ezkit_devices ) ) ;
2007-10-10 21:20:06 +04:00
2008-06-07 11:03:01 +04:00
spi_register_board_info ( bfin_spi_board_info , ARRAY_SIZE ( bfin_spi_board_info ) ) ;
2007-10-10 21:20:06 +04:00
2007-07-12 18:41:45 +04:00
return 0 ;
}
2008-02-02 10:34:56 +03:00
arch_initcall ( ezkit_init ) ;
2009-09-23 13:37:46 +04:00
static struct platform_device * ezkit_early_devices [ ] __initdata = {
# if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK)
# ifdef CONFIG_SERIAL_BFIN_UART0
& bfin_uart0_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART1
& bfin_uart1_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART2
& bfin_uart2_device ,
# endif
# ifdef CONFIG_SERIAL_BFIN_UART3
& bfin_uart3_device ,
# endif
# endif
} ;
void __init native_machine_early_platform_add_devices ( void )
{
printk ( KERN_INFO " register early platform devices \n " ) ;
early_platform_add_devices ( ezkit_early_devices ,
ARRAY_SIZE ( ezkit_early_devices ) ) ;
}