diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/smc91x.c | 19 | ||||
-rw-r--r-- | drivers/net/smc91x.h | 21 |
2 files changed, 20 insertions, 20 deletions
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 7da7589d45dd..4020e9e955b3 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
@@ -1775,7 +1775,8 @@ static int __init smc_findirq(void __iomem *ioaddr) | |||
1775 | * o actually GRAB the irq. | 1775 | * o actually GRAB the irq. |
1776 | * o GRAB the region | 1776 | * o GRAB the region |
1777 | */ | 1777 | */ |
1778 | static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr) | 1778 | static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr, |
1779 | unsigned long irq_flags) | ||
1779 | { | 1780 | { |
1780 | struct smc_local *lp = netdev_priv(dev); | 1781 | struct smc_local *lp = netdev_priv(dev); |
1781 | static int version_printed = 0; | 1782 | static int version_printed = 0; |
@@ -1941,7 +1942,7 @@ static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr) | |||
1941 | } | 1942 | } |
1942 | 1943 | ||
1943 | /* Grab the IRQ */ | 1944 | /* Grab the IRQ */ |
1944 | retval = request_irq(dev->irq, &smc_interrupt, SMC_IRQ_FLAGS, dev->name, dev); | 1945 | retval = request_irq(dev->irq, &smc_interrupt, irq_flags, dev->name, dev); |
1945 | if (retval) | 1946 | if (retval) |
1946 | goto err_out; | 1947 | goto err_out; |
1947 | 1948 | ||
@@ -2123,8 +2124,9 @@ static void smc_release_datacs(struct platform_device *pdev, struct net_device * | |||
2123 | static int smc_drv_probe(struct platform_device *pdev) | 2124 | static int smc_drv_probe(struct platform_device *pdev) |
2124 | { | 2125 | { |
2125 | struct net_device *ndev; | 2126 | struct net_device *ndev; |
2126 | struct resource *res; | 2127 | struct resource *res, *ires; |
2127 | unsigned int __iomem *addr; | 2128 | unsigned int __iomem *addr; |
2129 | unsigned long irq_flags = SMC_IRQ_FLAGS; | ||
2128 | int ret; | 2130 | int ret; |
2129 | 2131 | ||
2130 | res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); | 2132 | res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); |
@@ -2150,12 +2152,17 @@ static int smc_drv_probe(struct platform_device *pdev) | |||
2150 | SET_NETDEV_DEV(ndev, &pdev->dev); | 2152 | SET_NETDEV_DEV(ndev, &pdev->dev); |
2151 | 2153 | ||
2152 | ndev->dma = (unsigned char)-1; | 2154 | ndev->dma = (unsigned char)-1; |
2153 | ndev->irq = platform_get_irq(pdev, 0); | 2155 | |
2154 | if (ndev->irq < 0) { | 2156 | ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0); |
2157 | if (!ires) { | ||
2155 | ret = -ENODEV; | 2158 | ret = -ENODEV; |
2156 | goto out_free_netdev; | 2159 | goto out_free_netdev; |
2157 | } | 2160 | } |
2158 | 2161 | ||
2162 | ndev->irq = ires->start; | ||
2163 | if (SMC_IRQ_FLAGS == -1) | ||
2164 | irq_flags = ires->flags & IRQF_TRIGGER_MASK; | ||
2165 | |||
2159 | ret = smc_request_attrib(pdev); | 2166 | ret = smc_request_attrib(pdev); |
2160 | if (ret) | 2167 | if (ret) |
2161 | goto out_free_netdev; | 2168 | goto out_free_netdev; |
@@ -2181,7 +2188,7 @@ static int smc_drv_probe(struct platform_device *pdev) | |||
2181 | #endif | 2188 | #endif |
2182 | 2189 | ||
2183 | platform_set_drvdata(pdev, ndev); | 2190 | platform_set_drvdata(pdev, ndev); |
2184 | ret = smc_probe(ndev, addr); | 2191 | ret = smc_probe(ndev, addr, irq_flags); |
2185 | if (ret != 0) | 2192 | if (ret != 0) |
2186 | goto out_iounmap; | 2193 | goto out_iounmap; |
2187 | 2194 | ||
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h index 07b7f7120e37..1d97eaeb02bd 100644 --- a/drivers/net/smc91x.h +++ b/drivers/net/smc91x.h | |||
@@ -54,6 +54,7 @@ | |||
54 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) | 54 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) |
55 | #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) | 55 | #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) |
56 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) | 56 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) |
57 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | ||
57 | 58 | ||
58 | #elif defined(CONFIG_BLACKFIN) | 59 | #elif defined(CONFIG_BLACKFIN) |
59 | 60 | ||
@@ -158,7 +159,7 @@ | |||
158 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) | 159 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) |
159 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) | 160 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) |
160 | 161 | ||
161 | #define SMC_IRQ_FLAGS (0) | 162 | #define SMC_IRQ_FLAGS (-1) |
162 | 163 | ||
163 | #elif defined(CONFIG_SA1100_ASSABET) | 164 | #elif defined(CONFIG_SA1100_ASSABET) |
164 | 165 | ||
@@ -177,6 +178,7 @@ | |||
177 | #define SMC_outb(v, a, r) writeb(v, (a) + (r)) | 178 | #define SMC_outb(v, a, r) writeb(v, (a) + (r)) |
178 | #define SMC_insb(a, r, p, l) readsb((a) + (r), p, (l)) | 179 | #define SMC_insb(a, r, p, l) readsb((a) + (r), p, (l)) |
179 | #define SMC_outsb(a, r, p, l) writesb((a) + (r), p, (l)) | 180 | #define SMC_outsb(a, r, p, l) writesb((a) + (r), p, (l)) |
181 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | ||
180 | 182 | ||
181 | #elif defined(CONFIG_MACH_LOGICPD_PXA270) | 183 | #elif defined(CONFIG_MACH_LOGICPD_PXA270) |
182 | 184 | ||
@@ -210,6 +212,7 @@ | |||
210 | #define SMC_outl(v, a, r) writel(v, (a) + (r)) | 212 | #define SMC_outl(v, a, r) writel(v, (a) + (r)) |
211 | #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l) | 213 | #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l) |
212 | #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l) | 214 | #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l) |
215 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | ||
213 | 216 | ||
214 | /* We actually can't write halfwords properly if not word aligned */ | 217 | /* We actually can't write halfwords properly if not word aligned */ |
215 | static inline void | 218 | static inline void |
@@ -238,6 +241,7 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg) | |||
238 | #define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l) | 241 | #define SMC_outsw(a, r, p, l) outsw((a) + (r), p, l) |
239 | #define SMC_outb(v, a, r) writeb(v, (a) + (r)) | 242 | #define SMC_outb(v, a, r) writeb(v, (a) + (r)) |
240 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) | 243 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) |
244 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | ||
241 | 245 | ||
242 | #elif defined(CONFIG_ARCH_OMAP) | 246 | #elif defined(CONFIG_ARCH_OMAP) |
243 | 247 | ||
@@ -252,17 +256,7 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg) | |||
252 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) | 256 | #define SMC_outw(v, a, r) writew(v, (a) + (r)) |
253 | #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) | 257 | #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) |
254 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) | 258 | #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) |
255 | 259 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | |
256 | #include <asm/mach-types.h> | ||
257 | #include <asm/arch/cpu.h> | ||
258 | |||
259 | #define SMC_IRQ_FLAGS (( \ | ||
260 | machine_is_omap_h2() \ | ||
261 | || machine_is_omap_h3() \ | ||
262 | || machine_is_omap_h4() \ | ||
263 | || (machine_is_omap_innovator() && !cpu_is_omap1510()) \ | ||
264 | ) ? IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING) | ||
265 | |||
266 | 260 | ||
267 | #elif defined(CONFIG_SH_SH4202_MICRODEV) | 261 | #elif defined(CONFIG_SH_SH4202_MICRODEV) |
268 | 262 | ||
@@ -453,8 +447,7 @@ static inline void LPD7_SMC_outsw (unsigned char* a, int r, | |||
453 | #define SMC_outl(v, a, r) writel(v, (a) + (r)) | 447 | #define SMC_outl(v, a, r) writel(v, (a) + (r)) |
454 | #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l) | 448 | #define SMC_insl(a, r, p, l) readsl((a) + (r), p, l) |
455 | #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l) | 449 | #define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l) |
456 | 450 | #define SMC_IRQ_FLAGS (-1) /* from resource */ | |
457 | #define SMC_IRQ_FLAGS (0) | ||
458 | 451 | ||
459 | #else | 452 | #else |
460 | 453 | ||