adm5120: fix promiscuous mode handling (patch from #8581)
[openwrt/staging/mkresin.git] / target / linux / adm5120 / files / drivers / net / adm5120sw.c
index 06a69fd50e5ee56a8ee56c2c3d57c745bda3aeae..9adbf6cbefd286e67a9d3351ddf9b52e0d297479 100644 (file)
@@ -808,8 +808,8 @@ static int adm5120_if_open(struct net_device *dev)
 
        adm5120_if_napi_enable(dev);
 
-       err = request_irq(dev->irq, adm5120_switch_irq,
-               (IRQF_SHARED | IRQF_DISABLED), dev->name, dev);
+       err = request_irq(dev->irq, adm5120_switch_irq, IRQF_SHARED,
+                         dev->name, dev);
        if (err) {
                SW_ERR("unable to get irq for %s\n", dev->name);
                goto err;
@@ -962,10 +962,10 @@ static void adm5120_if_set_multicast_list(struct net_device *dev)
        /* to the CPU, the Bridge Test Mode has to be activated.               */
 
        /* Check if there is any vlan in promisc mode. */
-       if (t & (SWITCH_PORTS_NOCPU << CPUP_CONF_DUNP_SHIFT))
-               t &= ~CPUP_CONF_BTM; /* Disable Bridge Testing Mode */
-       else
+       if (~t & (SWITCH_PORTS_NOCPU << CPUP_CONF_DUNP_SHIFT))
                t |= CPUP_CONF_BTM;  /* Enable Bridge Testing Mode */
+       else
+               t &= ~CPUP_CONF_BTM; /* Disable Bridge Testing Mode */
 
        sw_write_reg(SWITCH_REG_CPUP_CONF, t);