aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Miao <eric.miao@marvell.com>2008-06-06 05:13:02 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-07-12 16:52:40 -0400
commitd280eadc4fba0bf99fb1c3b60e8c5e007f7da02c (patch)
tree3545255c30bf5cfc61b9c86b1f7f7d6313395575
parent37d7035da5b1f184c610b038b376c0c647d8d72b (diff)
[NET] smc91x: remove "irq_flags" from "struct smc91x_platdata"
IRQ trigger type can be specified in the IRQ resource definition by IORESOURCE_IRQ_*, we need only one way to specify this. This also fixes the following small issue: To allow dynamic support for multiple platforms, when those relevant macros are not defined for one specific platform, the default case will be: - SMC_DYNAMIC_BUS_CONFIG defined - and SMC_IRQ_FLAGS = IRQF_TRIGGER_RISING While if "irq_flags" is missing when defining the smc91x_platdata, usually as follows: static struct smc91x_platdata xxxx_smc91x_data = { .flags = SMC91X_USE_XXBIT, }; The lp->cfg.irq_flags will always be overriden by the above structure (due to a memcpy), thus rendering lp->cfg.irq_flags to be "0" always. (regardless of the default SMC_IRQ_FLAGS or IORESOURCE_IRQ_* flags) Fixes this by forcing to use IORESOURCE_IRQ_* flags if present, and make the only user of smc91x_platdata.irq_flags (renesas/migor) to use IORESOURCE_IRQ_*. Signed-off-by: Eric Miao <eric.miao@marvell.com> Acked-by: Nicolas Pitre <nico@cam.org> Acked-by: Jeff Garzik <jgarzik@pobox.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/sh/boards/renesas/migor/setup.c3
-rw-r--r--drivers/net/smc91x.c9
-rw-r--r--include/linux/smc91x.h1
3 files changed, 6 insertions, 7 deletions
diff --git a/arch/sh/boards/renesas/migor/setup.c b/arch/sh/boards/renesas/migor/setup.c
index 01af44245b57..963c99322095 100644
--- a/arch/sh/boards/renesas/migor/setup.c
+++ b/arch/sh/boards/renesas/migor/setup.c
@@ -30,7 +30,6 @@
30 30
31static struct smc91x_platdata smc91x_info = { 31static struct smc91x_platdata smc91x_info = {
32 .flags = SMC91X_USE_16BIT, 32 .flags = SMC91X_USE_16BIT,
33 .irq_flags = IRQF_TRIGGER_HIGH,
34}; 33};
35 34
36static struct resource smc91x_eth_resources[] = { 35static struct resource smc91x_eth_resources[] = {
@@ -42,7 +41,7 @@ static struct resource smc91x_eth_resources[] = {
42 }, 41 },
43 [1] = { 42 [1] = {
44 .start = 32, /* IRQ0 */ 43 .start = 32, /* IRQ0 */
45 .flags = IORESOURCE_IRQ, 44 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
46 }, 45 },
47}; 46};
48 47
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c
index f2051b209da2..e4a6c361995a 100644
--- a/drivers/net/smc91x.c
+++ b/drivers/net/smc91x.c
@@ -2123,6 +2123,7 @@ static int smc_drv_probe(struct platform_device *pdev)
2123 struct net_device *ndev; 2123 struct net_device *ndev;
2124 struct resource *res, *ires; 2124 struct resource *res, *ires;
2125 unsigned int __iomem *addr; 2125 unsigned int __iomem *addr;
2126 unsigned long irq_flags = SMC_IRQ_FLAGS;
2126 int ret; 2127 int ret;
2127 2128
2128 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs"); 2129 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-regs");
@@ -2152,7 +2153,6 @@ static int smc_drv_probe(struct platform_device *pdev)
2152 */ 2153 */
2153 2154
2154 lp = netdev_priv(ndev); 2155 lp = netdev_priv(ndev);
2155 lp->cfg.irq_flags = SMC_IRQ_FLAGS;
2156 2156
2157#ifdef SMC_DYNAMIC_BUS_CONFIG 2157#ifdef SMC_DYNAMIC_BUS_CONFIG
2158 if (pd) 2158 if (pd)
@@ -2177,8 +2177,9 @@ static int smc_drv_probe(struct platform_device *pdev)
2177 } 2177 }
2178 2178
2179 ndev->irq = ires->start; 2179 ndev->irq = ires->start;
2180 if (SMC_IRQ_FLAGS == -1) 2180
2181 lp->cfg.irq_flags = ires->flags & IRQF_TRIGGER_MASK; 2181 if (ires->flags & IRQF_TRIGGER_MASK)
2182 irq_flags = ires->flags & IRQF_TRIGGER_MASK;
2182 2183
2183 ret = smc_request_attrib(pdev); 2184 ret = smc_request_attrib(pdev);
2184 if (ret) 2185 if (ret)
@@ -2205,7 +2206,7 @@ static int smc_drv_probe(struct platform_device *pdev)
2205 } 2206 }
2206#endif 2207#endif
2207 2208
2208 ret = smc_probe(ndev, addr, lp->cfg.irq_flags); 2209 ret = smc_probe(ndev, addr, irq_flags);
2209 if (ret != 0) 2210 if (ret != 0)
2210 goto out_iounmap; 2211 goto out_iounmap;
2211 2212
diff --git a/include/linux/smc91x.h b/include/linux/smc91x.h
index 8e0556b8781c..fc7682f04d89 100644
--- a/include/linux/smc91x.h
+++ b/include/linux/smc91x.h
@@ -7,7 +7,6 @@
7 7
8struct smc91x_platdata { 8struct smc91x_platdata {
9 unsigned long flags; 9 unsigned long flags;
10 unsigned long irq_flags; /* IRQF_... */
11}; 10};
12 11
13#endif /* __SMC91X_H__ */ 12#endif /* __SMC91X_H__ */