diff options
-rw-r--r-- | arch/arm/configs/omap3_evm_defconfig | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap2/board-omap3evm.c | 43 |
2 files changed, 32 insertions, 15 deletions
diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig index da69732dd048..e190fc8b9a7c 100644 --- a/arch/arm/configs/omap3_evm_defconfig +++ b/arch/arm/configs/omap3_evm_defconfig | |||
@@ -617,8 +617,8 @@ CONFIG_MII=y | |||
617 | # CONFIG_DM9000 is not set | 617 | # CONFIG_DM9000 is not set |
618 | # CONFIG_ENC28J60 is not set | 618 | # CONFIG_ENC28J60 is not set |
619 | # CONFIG_ETHOC is not set | 619 | # CONFIG_ETHOC is not set |
620 | CONFIG_SMC911X=y | 620 | # CONFIG_SMC911X is not set |
621 | # CONFIG_SMSC911X is not set | 621 | CONFIG_SMSC911X=y |
622 | # CONFIG_DNET is not set | 622 | # CONFIG_DNET is not set |
623 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 623 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
624 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 624 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index c0336b0cb702..5efc2e9068db 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c | |||
@@ -22,11 +22,13 @@ | |||
22 | #include <linux/input.h> | 22 | #include <linux/input.h> |
23 | #include <linux/input/matrix_keypad.h> | 23 | #include <linux/input/matrix_keypad.h> |
24 | #include <linux/leds.h> | 24 | #include <linux/leds.h> |
25 | #include <linux/interrupt.h> | ||
25 | 26 | ||
26 | #include <linux/spi/spi.h> | 27 | #include <linux/spi/spi.h> |
27 | #include <linux/spi/ads7846.h> | 28 | #include <linux/spi/ads7846.h> |
28 | #include <linux/i2c/twl4030.h> | 29 | #include <linux/i2c/twl4030.h> |
29 | #include <linux/usb/otg.h> | 30 | #include <linux/usb/otg.h> |
31 | #include <linux/smsc911x.h> | ||
30 | 32 | ||
31 | #include <linux/regulator/machine.h> | 33 | #include <linux/regulator/machine.h> |
32 | 34 | ||
@@ -52,7 +54,7 @@ | |||
52 | #define OMAP3EVM_ETHR_SIZE 1024 | 54 | #define OMAP3EVM_ETHR_SIZE 1024 |
53 | #define OMAP3EVM_ETHR_ID_REV 0x50 | 55 | #define OMAP3EVM_ETHR_ID_REV 0x50 |
54 | #define OMAP3EVM_ETHR_GPIO_IRQ 176 | 56 | #define OMAP3EVM_ETHR_GPIO_IRQ 176 |
55 | #define OMAP3EVM_SMC911X_CS 5 | 57 | #define OMAP3EVM_SMSC911X_CS 5 |
56 | 58 | ||
57 | static u8 omap3_evm_version; | 59 | static u8 omap3_evm_version; |
58 | 60 | ||
@@ -86,7 +88,8 @@ static void __init omap3_evm_get_revision(void) | |||
86 | } | 88 | } |
87 | } | 89 | } |
88 | 90 | ||
89 | static struct resource omap3evm_smc911x_resources[] = { | 91 | #if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) |
92 | static struct resource omap3evm_smsc911x_resources[] = { | ||
90 | [0] = { | 93 | [0] = { |
91 | .start = OMAP3EVM_ETHR_START, | 94 | .start = OMAP3EVM_ETHR_START, |
92 | .end = (OMAP3EVM_ETHR_START + OMAP3EVM_ETHR_SIZE - 1), | 95 | .end = (OMAP3EVM_ETHR_START + OMAP3EVM_ETHR_SIZE - 1), |
@@ -95,24 +98,34 @@ static struct resource omap3evm_smc911x_resources[] = { | |||
95 | [1] = { | 98 | [1] = { |
96 | .start = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ), | 99 | .start = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ), |
97 | .end = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ), | 100 | .end = OMAP_GPIO_IRQ(OMAP3EVM_ETHR_GPIO_IRQ), |
98 | .flags = IORESOURCE_IRQ, | 101 | .flags = (IORESOURCE_IRQ | IRQF_TRIGGER_LOW), |
99 | }, | 102 | }, |
100 | }; | 103 | }; |
101 | 104 | ||
102 | static struct platform_device omap3evm_smc911x_device = { | 105 | static struct smsc911x_platform_config smsc911x_config = { |
103 | .name = "smc911x", | 106 | .phy_interface = PHY_INTERFACE_MODE_MII, |
107 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | ||
108 | .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, | ||
109 | .flags = (SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS), | ||
110 | }; | ||
111 | |||
112 | static struct platform_device omap3evm_smsc911x_device = { | ||
113 | .name = "smsc911x", | ||
104 | .id = -1, | 114 | .id = -1, |
105 | .num_resources = ARRAY_SIZE(omap3evm_smc911x_resources), | 115 | .num_resources = ARRAY_SIZE(omap3evm_smsc911x_resources), |
106 | .resource = &omap3evm_smc911x_resources[0], | 116 | .resource = &omap3evm_smsc911x_resources[0], |
117 | .dev = { | ||
118 | .platform_data = &smsc911x_config, | ||
119 | }, | ||
107 | }; | 120 | }; |
108 | 121 | ||
109 | static inline void __init omap3evm_init_smc911x(void) | 122 | static inline void __init omap3evm_init_smsc911x(void) |
110 | { | 123 | { |
111 | int eth_cs; | 124 | int eth_cs; |
112 | struct clk *l3ck; | 125 | struct clk *l3ck; |
113 | unsigned int rate; | 126 | unsigned int rate; |
114 | 127 | ||
115 | eth_cs = OMAP3EVM_SMC911X_CS; | 128 | eth_cs = OMAP3EVM_SMSC911X_CS; |
116 | 129 | ||
117 | l3ck = clk_get(NULL, "l3_ck"); | 130 | l3ck = clk_get(NULL, "l3_ck"); |
118 | if (IS_ERR(l3ck)) | 131 | if (IS_ERR(l3ck)) |
@@ -120,15 +133,20 @@ static inline void __init omap3evm_init_smc911x(void) | |||
120 | else | 133 | else |
121 | rate = clk_get_rate(l3ck); | 134 | rate = clk_get_rate(l3ck); |
122 | 135 | ||
123 | if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMC911x irq") < 0) { | 136 | if (gpio_request(OMAP3EVM_ETHR_GPIO_IRQ, "SMSC911x irq") < 0) { |
124 | printk(KERN_ERR "Failed to request GPIO%d for smc911x IRQ\n", | 137 | printk(KERN_ERR "Failed to request GPIO%d for smsc911x IRQ\n", |
125 | OMAP3EVM_ETHR_GPIO_IRQ); | 138 | OMAP3EVM_ETHR_GPIO_IRQ); |
126 | return; | 139 | return; |
127 | } | 140 | } |
128 | 141 | ||
129 | gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ); | 142 | gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ); |
143 | platform_device_register(&omap3evm_smsc911x_device); | ||
130 | } | 144 | } |
131 | 145 | ||
146 | #else | ||
147 | static inline void __init omap3evm_init_smsc911x(void) { return; } | ||
148 | #endif | ||
149 | |||
132 | static struct regulator_consumer_supply omap3evm_vmmc1_supply = { | 150 | static struct regulator_consumer_supply omap3evm_vmmc1_supply = { |
133 | .supply = "vmmc", | 151 | .supply = "vmmc", |
134 | }; | 152 | }; |
@@ -385,12 +403,10 @@ static void __init omap3_evm_init_irq(void) | |||
385 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL); | 403 | omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL); |
386 | omap_init_irq(); | 404 | omap_init_irq(); |
387 | omap_gpio_init(); | 405 | omap_gpio_init(); |
388 | omap3evm_init_smc911x(); | ||
389 | } | 406 | } |
390 | 407 | ||
391 | static struct platform_device *omap3_evm_devices[] __initdata = { | 408 | static struct platform_device *omap3_evm_devices[] __initdata = { |
392 | &omap3_evm_lcd_device, | 409 | &omap3_evm_lcd_device, |
393 | &omap3evm_smc911x_device, | ||
394 | }; | 410 | }; |
395 | 411 | ||
396 | static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { | 412 | static struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { |
@@ -447,6 +463,7 @@ static void __init omap3_evm_init(void) | |||
447 | usb_musb_init(); | 463 | usb_musb_init(); |
448 | usb_ehci_init(&ehci_pdata); | 464 | usb_ehci_init(&ehci_pdata); |
449 | ads7846_dev_init(); | 465 | ads7846_dev_init(); |
466 | omap3evm_init_smsc911x(); | ||
450 | } | 467 | } |
451 | 468 | ||
452 | static void __init omap3_evm_map_io(void) | 469 | static void __init omap3_evm_map_io(void) |