diff options
author | Eric Miao <eric.miao@marvell.com> | 2008-06-06 05:13:02 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-07-12 16:52:40 -0400 |
commit | d280eadc4fba0bf99fb1c3b60e8c5e007f7da02c (patch) | |
tree | 3545255c30bf5cfc61b9c86b1f7f7d6313395575 | |
parent | 37d7035da5b1f184c610b038b376c0c647d8d72b (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.c | 3 | ||||
-rw-r--r-- | drivers/net/smc91x.c | 9 | ||||
-rw-r--r-- | include/linux/smc91x.h | 1 |
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 | ||
31 | static struct smc91x_platdata smc91x_info = { | 31 | static 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 | ||
36 | static struct resource smc91x_eth_resources[] = { | 35 | static 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 | ||
8 | struct smc91x_platdata { | 8 | struct 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__ */ |