diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2008-10-20 13:15:30 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-10-22 07:00:38 -0400 |
commit | 319edafef64406c971035c56bd68480e5a82b581 (patch) | |
tree | bef9d87129f0ee70ab3df01d7c21bcd7736eca32 | |
parent | bd2c4972fff2d621383bc2c3389a7b1ac7eca8f1 (diff) |
smc911x: Add IRQ polarity configuration
Platforms like ARM Ltd's RealView require the IRQ polarity bit to be set
for the SMC9118 chip. This patch allows the dynamic configuration via
the smc911x_platdata structure.
This patch also changes the smc91x_platdata structure name to the
correct smc911x_platdata in the smc911x_drv_probe() function.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r-- | drivers/net/smc911x.c | 11 | ||||
-rw-r--r-- | include/linux/smc911x.h | 1 |
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index ec32b5d89c9..2c78229ad04 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c | |||
@@ -180,7 +180,7 @@ static void PRINT_PKT(u_char *buf, int length) | |||
180 | static void smc911x_reset(struct net_device *dev) | 180 | static void smc911x_reset(struct net_device *dev) |
181 | { | 181 | { |
182 | struct smc911x_local *lp = netdev_priv(dev); | 182 | struct smc911x_local *lp = netdev_priv(dev); |
183 | unsigned int reg, timeout=0, resets=1; | 183 | unsigned int reg, timeout=0, resets=1, irq_cfg; |
184 | unsigned long flags; | 184 | unsigned long flags; |
185 | 185 | ||
186 | DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __func__); | 186 | DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __func__); |
@@ -252,7 +252,12 @@ static void smc911x_reset(struct net_device *dev) | |||
252 | * Deassert IRQ for 1*10us for edge type interrupts | 252 | * Deassert IRQ for 1*10us for edge type interrupts |
253 | * and drive IRQ pin push-pull | 253 | * and drive IRQ pin push-pull |
254 | */ | 254 | */ |
255 | SMC_SET_IRQ_CFG(lp, (1 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_); | 255 | irq_cfg = (1 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_; |
256 | #ifdef SMC_DYNAMIC_BUS_CONFIG | ||
257 | if (lp->cfg.irq_polarity) | ||
258 | irq_cfg |= INT_CFG_IRQ_POL_; | ||
259 | #endif | ||
260 | SMC_SET_IRQ_CFG(lp, irq_cfg); | ||
256 | 261 | ||
257 | /* clear anything saved */ | 262 | /* clear anything saved */ |
258 | if (lp->pending_tx_skb != NULL) { | 263 | if (lp->pending_tx_skb != NULL) { |
@@ -2054,7 +2059,7 @@ err_out: | |||
2054 | */ | 2059 | */ |
2055 | static int smc911x_drv_probe(struct platform_device *pdev) | 2060 | static int smc911x_drv_probe(struct platform_device *pdev) |
2056 | { | 2061 | { |
2057 | struct smc91x_platdata *pd = pdev->dev.platform_data; | 2062 | struct smc911x_platdata *pd = pdev->dev.platform_data; |
2058 | struct net_device *ndev; | 2063 | struct net_device *ndev; |
2059 | struct resource *res; | 2064 | struct resource *res; |
2060 | struct smc911x_local *lp; | 2065 | struct smc911x_local *lp; |
diff --git a/include/linux/smc911x.h b/include/linux/smc911x.h index b58f54c2418..521f37143fa 100644 --- a/include/linux/smc911x.h +++ b/include/linux/smc911x.h | |||
@@ -7,6 +7,7 @@ | |||
7 | struct smc911x_platdata { | 7 | struct smc911x_platdata { |
8 | unsigned long flags; | 8 | unsigned long flags; |
9 | unsigned long irq_flags; /* IRQF_... */ | 9 | unsigned long irq_flags; /* IRQF_... */ |
10 | int irq_polarity; | ||
10 | }; | 11 | }; |
11 | 12 | ||
12 | #endif /* __SMC911X_H__ */ | 13 | #endif /* __SMC911X_H__ */ |