Hi Andrew,

        Thanks for taking a look at this!

On 09/01/2016 12:06 PM, Andrew Lunn wrote:
Hi Jeremy

Please don't add forward references. Move the function earlier in the
file.

Ok, but I thought it was a fairly large move due to further dependent functions..


 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?

        This is a whoops, it should be in the previous patch..


@@ -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?


        The functionality is duplicated in open, when the IRQ handler is tested.

Reply via email to