2008-05-19 16:47:56 +09:00
/*
* Renesas Technology Europe RSK + 7203 Support .
*
* Copyright ( C ) 2008 Paul Mundt
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*/
# include <linux/init.h>
# include <linux/types.h>
# include <linux/platform_device.h>
2008-07-28 22:31:02 +09:00
# include <linux/interrupt.h>
2009-01-07 17:22:24 +09:00
# include <linux/smsc911x.h>
2008-10-08 20:42:38 +09:00
# include <linux/gpio.h>
2008-10-21 14:27:51 +09:00
# include <linux/leds.h>
2008-05-19 16:47:56 +09:00
# include <asm/machvec.h>
# include <asm/io.h>
2008-10-21 09:52:02 +09:00
# include <cpu/sh7203.h>
2008-05-19 16:47:56 +09:00
2009-01-07 17:22:24 +09:00
static struct smsc911x_platform_config smsc911x_config = {
. phy_interface = PHY_INTERFACE_MODE_MII ,
. irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW ,
. irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN ,
2009-04-28 08:02:13 +00:00
. flags = SMSC911X_USE_32BIT | SMSC911X_SWAP_FIFO ,
2008-07-28 22:31:02 +09:00
} ;
2009-01-07 17:22:24 +09:00
static struct resource smsc911x_resources [ ] = {
2008-05-19 16:47:56 +09:00
[ 0 ] = {
. start = 0x24000000 ,
2009-04-28 08:02:13 +00:00
. end = 0x240000ff ,
2008-05-19 16:47:56 +09:00
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = 64 ,
. end = 64 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
2009-01-07 17:22:24 +09:00
static struct platform_device smsc911x_device = {
. name = " smsc911x " ,
2008-05-19 16:47:56 +09:00
. id = - 1 ,
2009-01-07 17:22:24 +09:00
. num_resources = ARRAY_SIZE ( smsc911x_resources ) ,
. resource = smsc911x_resources ,
2008-07-28 22:31:02 +09:00
. dev = {
2009-01-07 17:22:24 +09:00
. platform_data = & smsc911x_config ,
2008-07-28 22:31:02 +09:00
} ,
2008-05-19 16:47:56 +09:00
} ;
2008-10-21 14:27:51 +09:00
static struct gpio_led rsk7203_gpio_leds [ ] = {
{
. name = " green " ,
. gpio = GPIO_PE10 ,
. active_low = 1 ,
} , {
. name = " orange " ,
. default_trigger = " nand-disk " ,
. gpio = GPIO_PE12 ,
. active_low = 1 ,
} , {
. name = " red:timer " ,
. default_trigger = " timer " ,
. gpio = GPIO_PC14 ,
. active_low = 1 ,
} , {
. name = " red:heartbeat " ,
. default_trigger = " heartbeat " ,
. gpio = GPIO_PE11 ,
. active_low = 1 ,
} ,
} ;
static struct gpio_led_platform_data rsk7203_gpio_leds_info = {
. leds = rsk7203_gpio_leds ,
. num_leds = ARRAY_SIZE ( rsk7203_gpio_leds ) ,
} ;
static struct platform_device led_device = {
. name = " leds-gpio " ,
. id = - 1 ,
. dev = {
. platform_data = & rsk7203_gpio_leds_info ,
} ,
} ;
2008-05-19 16:47:56 +09:00
static struct platform_device * rsk7203_devices [ ] __initdata = {
2009-01-07 17:22:24 +09:00
& smsc911x_device ,
2008-10-21 14:27:51 +09:00
& led_device ,
2008-05-19 16:47:56 +09:00
} ;
static int __init rsk7203_devices_setup ( void )
{
2008-10-08 20:42:38 +09:00
/* Select pins for SCIF0 */
gpio_request ( GPIO_FN_TXD0 , NULL ) ;
gpio_request ( GPIO_FN_RXD0 , NULL ) ;
2009-04-28 08:02:13 +00:00
/* Setup LAN9118: CS1 in 16-bit Big Endian Mode, IRQ0 at Port B */
2010-01-26 12:58:40 +09:00
__raw_writel ( 0x36db0400 , 0xfffc0008 ) ; /* CS1BCR */
2009-04-28 08:02:13 +00:00
gpio_request ( GPIO_FN_IRQ0_PB , NULL ) ;
2008-05-19 16:47:56 +09:00
return platform_add_devices ( rsk7203_devices ,
ARRAY_SIZE ( rsk7203_devices ) ) ;
}
device_initcall ( rsk7203_devices_setup ) ;