Hi Jeremy Please don't add forward references. Move the function earlier in the file.
> static inline u32 __smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) > { > if (pdata->config.flags & SMSC911X_USE_32BIT) > @@ -1514,6 +1516,7 @@ static int smsc911x_open(struct net_device *dev) > unsigned int temp; > unsigned int intcfg; > int retval; > + int irq_flags; > > /* find and start the given phy */ > if (!dev->phydev) { > @@ -1584,6 +1587,14 @@ static int smsc911x_open(struct net_device *dev) > pdata->software_irq_signal = 0; > smp_wmb(); > > + irq_flags = irq_get_trigger_type(dev->irq); > + if (request_irq(dev->irq, smsc911x_irqhandler, > + irq_flags | IRQF_SHARED, dev->name, dev)) { > + SMSC_WARN(pdata, probe, > + "Unable to claim requested irq: %d", dev->irq); > + goto mii_free_out; > + } > + > temp = smsc911x_reg_read(pdata, INT_EN); > temp |= INT_EN_SW_INT_EN_; > smsc911x_reg_write(pdata, INT_EN, temp); > @@ -1599,7 +1610,7 @@ static int smsc911x_open(struct net_device *dev) > netdev_warn(dev, "ISR failed signaling test (IRQ %d)\n", > dev->irq); > retval = -ENODEV; > - goto mii_free_out; > + goto irq_stop_out; > } > SMSC_TRACE(pdata, ifup, "IRQ handler passed test using IRQ %d", > dev->irq); > @@ -1645,7 +1656,8 @@ static int smsc911x_open(struct net_device *dev) > > netif_start_queue(dev); > return 0; > - > +irq_stop_out: > + free_irq(dev->irq, dev); > mii_free_out: > phy_disconnect(dev->phydev); > dev->phydev = NULL; > @@ -1672,12 +1684,15 @@ static int smsc911x_stop(struct net_device *dev) > dev->stats.rx_dropped += smsc911x_reg_read(pdata, RX_DROP); > smsc911x_tx_update_txcounters(dev); > > + free_irq(dev->irq, dev); > + > /* Bring the PHY down */ > if (dev->phydev) { > phy_stop(dev->phydev); > phy_disconnect(dev->phydev); > dev->phydev = NULL; > } > + netif_carrier_off(dev); What has this change got to do with interrupt handling? > @@ -2479,38 +2491,18 @@ static int smsc911x_drv_probe(struct platform_device > *pdev) > if (retval < 0) > goto out_disable_resources; > > - /* configure irq polarity and type before connecting isr */ > - if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH) > - intcfg |= INT_CFG_IRQ_POL_; > - > - if (pdata->config.irq_type == SMSC911X_IRQ_TYPE_PUSH_PULL) > - intcfg |= INT_CFG_IRQ_TYPE_; > - > - smsc911x_reg_write(pdata, INT_CFG, intcfg); I see these removes, but where are the adds? Andrew