add feature gpio
[lede.git] / target / linux / ramips / files / drivers / net / ethernet / ramips / ramips_esw.c
index 309efdeb78dbcafba8c2f8626b522e336c241590..d3150d7a6fc898e42fdfe8b9b555372d2ce255ad 100644 (file)
@@ -498,6 +498,10 @@ rt305x_esw_hw_init(struct rt305x_esw *esw)
                       RT305X_ESW_SGC2_LAN_PMAP_M << RT305X_ESW_SGC2_LAN_PMAP_S,
                       port_map << RT305X_ESW_SGC2_LAN_PMAP_S);
 
+       /* make the switch leds blink */
+       for (i = 0; i < RT305X_ESW_NUM_LEDS; i++)
+               esw->ports[i].led = 0x05;
+
        /* Apply the empty config. */
        rt305x_esw_apply_config(&esw->swdev);
 }
@@ -534,7 +538,7 @@ rt305x_esw_apply_config(struct switch_dev *dev)
                        untag     |= esw->ports[i].untag     << i;
                        pvid       = esw->ports[i].pvid;
                } else {
-                       int x = esw->alt_vlan_disable ? 1 : 0;
+                       int x = esw->alt_vlan_disable ? 0 : 1;
                        doubletag |= x << i;
                        en_vlan   |= x << i;
                        untag     |= x << i;
@@ -750,11 +754,13 @@ rt305x_esw_get_port_recv_badgood(struct switch_dev *dev,
        struct rt305x_esw *esw = container_of(dev, struct rt305x_esw, swdev);
        int idx = val->port_vlan;
        int shift = attr->id == RT305X_ESW_ATTR_PORT_RECV_GOOD ? 0 : 16;
+       u32 reg;
 
        if (idx < 0 || idx >= RT305X_ESW_NUM_LANWAN)
                return -EINVAL;
 
-       val->value.i = rt305x_esw_rr(esw, RT305X_ESW_REG_P0PC + 4*idx) >> shift;
+       reg = rt305x_esw_rr(esw, RT305X_ESW_REG_P0PC + 4*idx);
+       val->value.i = (reg >> shift) & 0xffff;
 
        return 0;
 }