[PATCH 03/17] ARM: pxa/raumfeld: add SMSC9220 ethernet support

Daniel Mack daniel at caiaq.de
Wed Nov 25 05:42:17 EST 2009


The 'Connector' and 'Speaker S/M' devices have an SMSC9220 ethernet chip
onboard.

Signed-off-by: Daniel Mack <daniel at caiaq.de>
---
 arch/arm/mach-pxa/raumfeld.c |   51 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c
index 075e337..82af0dc 100644
--- a/arch/arm/mach-pxa/raumfeld.c
+++ b/arch/arm/mach-pxa/raumfeld.c
@@ -19,7 +19,10 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/sysdev.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
+#include <linux/gpio.h>
+#include <linux/smsc911x.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -92,6 +95,52 @@ static mfp_cfg_t raumfeld_pin_config[] __initdata = {
 	GPIO110_UART3_RXD,
 };
 
+/*
+ * SMSC LAN9220 Ethernet
+ */
+
+static struct resource smc91x_resources[] = {
+	{
+		.start	= PXA3xx_CS2_PHYS,
+		.end	= PXA3xx_CS2_PHYS + 0xfffff,
+		.flags	= IORESOURCE_MEM,
+	},
+	{
+		.start	= gpio_to_irq(mfp_to_gpio(GPIO_ETH_IRQ)),
+		.end	= gpio_to_irq(mfp_to_gpio(GPIO_ETH_IRQ)),
+		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
+	}
+};
+
+static struct smsc911x_platform_config raumfeld_smsc911x_config = {
+	.phy_interface	= PHY_INTERFACE_MODE_MII,
+	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
+	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN,
+	.flags		= SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
+};
+
+static struct platform_device smc91x_device = {
+	.name		= "smsc911x",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(smc91x_resources),
+	.resource	= smc91x_resources,
+	.dev		= {
+		.platform_data = &raumfeld_smsc911x_config,
+	}
+};
+
+static mfp_cfg_t raumfeld_eth_pin_config[] __initdata = {
+	GPIO1_nCS2,			/* CS */
+	GPIO40_GPIO | MFP_PULL_HIGH,	/* IRQ */
+};
+
+static void __init raumfeld_eth_init(void)
+{
+	pxa3xx_mfp_config(ARRAY_AND_SIZE(raumfeld_eth_pin_config));
+	platform_device_register(&smc91x_device);
+}
+
+
 static void __init raumfeld_common_init(void)
 {
 	enable_irq_wake(IRQ_WAKEUP0);
@@ -118,11 +167,13 @@ static void __init raumfeld_controller_init(void)
 static void __init raumfeld_connector_init(void)
 {
 	raumfeld_common_init();
+	raumfeld_eth_init();
 }
 
 static void __init raumfeld_speaker_init(void)
 {
 	raumfeld_common_init();
+	raumfeld_eth_init();
 }
 
 /* physical memory regions */
-- 
1.6.5.2




More information about the linux-arm-kernel mailing list