1ea0aac1eSPaul Mundt /* 2ea0aac1eSPaul Mundt * Renesas Technology Europe RSK+ 7203 Support. 3ea0aac1eSPaul Mundt * 4ea0aac1eSPaul Mundt * Copyright (C) 2008 Paul Mundt 5ea0aac1eSPaul Mundt * 6ea0aac1eSPaul Mundt * This file is subject to the terms and conditions of the GNU General Public 7ea0aac1eSPaul Mundt * License. See the file "COPYING" in the main directory of this archive 8ea0aac1eSPaul Mundt * for more details. 9ea0aac1eSPaul Mundt */ 10ea0aac1eSPaul Mundt #include <linux/init.h> 11ea0aac1eSPaul Mundt #include <linux/types.h> 12ea0aac1eSPaul Mundt #include <linux/platform_device.h> 13ea0aac1eSPaul Mundt #include <linux/interrupt.h> 14ea0aac1eSPaul Mundt #include <linux/mtd/mtd.h> 15ea0aac1eSPaul Mundt #include <linux/mtd/partitions.h> 16ea0aac1eSPaul Mundt #include <linux/mtd/physmap.h> 17ea0aac1eSPaul Mundt #include <linux/mtd/map.h> 188ed3592eSSteve Glendinning #include <linux/smsc911x.h> 19ea0aac1eSPaul Mundt #include <linux/gpio.h> 20ea0aac1eSPaul Mundt #include <linux/leds.h> 21ea0aac1eSPaul Mundt #include <asm/machvec.h> 22ea0aac1eSPaul Mundt #include <asm/io.h> 23ea0aac1eSPaul Mundt #include <cpu/sh7203.h> 24ea0aac1eSPaul Mundt 258ed3592eSSteve Glendinning static struct smsc911x_platform_config smsc911x_config = { 268ed3592eSSteve Glendinning .phy_interface = PHY_INTERFACE_MODE_MII, 278ed3592eSSteve Glendinning .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, 288ed3592eSSteve Glendinning .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, 298ed3592eSSteve Glendinning .flags = SMSC911X_USE_16BIT, 30ea0aac1eSPaul Mundt }; 31ea0aac1eSPaul Mundt 328ed3592eSSteve Glendinning static struct resource smsc911x_resources[] = { 33ea0aac1eSPaul Mundt [0] = { 34ea0aac1eSPaul Mundt .start = 0x24000000, 35ea0aac1eSPaul Mundt .end = 0x24000000 + 0x100, 36ea0aac1eSPaul Mundt .flags = IORESOURCE_MEM, 37ea0aac1eSPaul Mundt }, 38ea0aac1eSPaul Mundt [1] = { 39ea0aac1eSPaul Mundt .start = 64, 40ea0aac1eSPaul Mundt .end = 64, 41ea0aac1eSPaul Mundt .flags = IORESOURCE_IRQ, 42ea0aac1eSPaul Mundt }, 43ea0aac1eSPaul Mundt }; 44ea0aac1eSPaul Mundt 458ed3592eSSteve Glendinning static struct platform_device smsc911x_device = { 468ed3592eSSteve Glendinning .name = "smsc911x", 47ea0aac1eSPaul Mundt .id = -1, 488ed3592eSSteve Glendinning .num_resources = ARRAY_SIZE(smsc911x_resources), 498ed3592eSSteve Glendinning .resource = smsc911x_resources, 50ea0aac1eSPaul Mundt .dev = { 518ed3592eSSteve Glendinning .platform_data = &smsc911x_config, 52ea0aac1eSPaul Mundt }, 53ea0aac1eSPaul Mundt }; 54ea0aac1eSPaul Mundt 55ea0aac1eSPaul Mundt static struct gpio_led rsk7203_gpio_leds[] = { 56ea0aac1eSPaul Mundt { 57ea0aac1eSPaul Mundt .name = "green", 58ea0aac1eSPaul Mundt .gpio = GPIO_PE10, 59ea0aac1eSPaul Mundt .active_low = 1, 60ea0aac1eSPaul Mundt }, { 61ea0aac1eSPaul Mundt .name = "orange", 62ea0aac1eSPaul Mundt .default_trigger = "nand-disk", 63ea0aac1eSPaul Mundt .gpio = GPIO_PE12, 64ea0aac1eSPaul Mundt .active_low = 1, 65ea0aac1eSPaul Mundt }, { 66ea0aac1eSPaul Mundt .name = "red:timer", 67ea0aac1eSPaul Mundt .default_trigger = "timer", 68ea0aac1eSPaul Mundt .gpio = GPIO_PC14, 69ea0aac1eSPaul Mundt .active_low = 1, 70ea0aac1eSPaul Mundt }, { 71ea0aac1eSPaul Mundt .name = "red:heartbeat", 72ea0aac1eSPaul Mundt .default_trigger = "heartbeat", 73ea0aac1eSPaul Mundt .gpio = GPIO_PE11, 74ea0aac1eSPaul Mundt .active_low = 1, 75ea0aac1eSPaul Mundt }, 76ea0aac1eSPaul Mundt }; 77ea0aac1eSPaul Mundt 78ea0aac1eSPaul Mundt static struct gpio_led_platform_data rsk7203_gpio_leds_info = { 79ea0aac1eSPaul Mundt .leds = rsk7203_gpio_leds, 80ea0aac1eSPaul Mundt .num_leds = ARRAY_SIZE(rsk7203_gpio_leds), 81ea0aac1eSPaul Mundt }; 82ea0aac1eSPaul Mundt 83ea0aac1eSPaul Mundt static struct platform_device led_device = { 84ea0aac1eSPaul Mundt .name = "leds-gpio", 85ea0aac1eSPaul Mundt .id = -1, 86ea0aac1eSPaul Mundt .dev = { 87ea0aac1eSPaul Mundt .platform_data = &rsk7203_gpio_leds_info, 88ea0aac1eSPaul Mundt }, 89ea0aac1eSPaul Mundt }; 90ea0aac1eSPaul Mundt 91ea0aac1eSPaul Mundt static struct platform_device *rsk7203_devices[] __initdata = { 928ed3592eSSteve Glendinning &smsc911x_device, 93ea0aac1eSPaul Mundt &led_device, 94ea0aac1eSPaul Mundt }; 95ea0aac1eSPaul Mundt 96ea0aac1eSPaul Mundt static int __init rsk7203_devices_setup(void) 97ea0aac1eSPaul Mundt { 98ea0aac1eSPaul Mundt /* Select pins for SCIF0 */ 99ea0aac1eSPaul Mundt gpio_request(GPIO_FN_TXD0, NULL); 100ea0aac1eSPaul Mundt gpio_request(GPIO_FN_RXD0, NULL); 101ea0aac1eSPaul Mundt 102ea0aac1eSPaul Mundt return platform_add_devices(rsk7203_devices, 103ea0aac1eSPaul Mundt ARRAY_SIZE(rsk7203_devices)); 104ea0aac1eSPaul Mundt } 105ea0aac1eSPaul Mundt device_initcall(rsk7203_devices_setup); 106