aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2008-10-20 13:15:30 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-10-22 07:00:38 -0400
commit319edafef64406c971035c56bd68480e5a82b581 (patch)
treebef9d87129f0ee70ab3df01d7c21bcd7736eca32
parentbd2c4972fff2d621383bc2c3389a7b1ac7eca8f1 (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.c11
-rw-r--r--include/linux/smc911x.h1
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index ec32b5d89c92..2c78229ad04b 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -180,7 +180,7 @@ static void PRINT_PKT(u_char *buf, int length)
180static void smc911x_reset(struct net_device *dev) 180static 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 */
2055static int smc911x_drv_probe(struct platform_device *pdev) 2060static 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 b58f54c24183..521f37143fae 100644
--- a/include/linux/smc911x.h
+++ b/include/linux/smc911x.h
@@ -7,6 +7,7 @@
7struct smc911x_platdata { 7struct 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__ */