> +static struct mt7530_priv *lpriv; Hi Sean Why do you need this global variable? What if somebody has two switches connected? > +static void mt7530_port_disable(struct dsa_switch *ds, int port, > + struct phy_device *phy); > +static int mt7530_cpu_port_enable(struct mt7530_priv *priv, > + int port); It is better to move the functions around than have forward declarations. > +static u32 > +_mt7530_read(u32 reg) > +{ > + struct mt7530_priv *priv = lpriv; > + struct mii_bus *bus = priv->bus; > + u32 val; > + > + mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); > + > + val = mt7530_mii_read(priv, reg); > + > + mutex_unlock(&bus->mdio_lock); > + > + return val; > +} > + > +static u32 > +mt7530_read(struct mt7530_priv *priv, u32 reg) > +{ > + return _mt7530_read(reg); > +} So here you would pass priv to _mt7530_read(). > +static int > +mt7530_fdb_cmd(struct mt7530_priv *priv, enum mt7530_fdb_cmd cmd, u32 *rsp) > +{ > + u32 val; > + int ret; > + > + /* Set the command operating upon the MAC address entries */ > + val = ATC_BUSY | ATC_MAT(0) | cmd; > + mt7530_write(priv, MT7530_ATC, val); > + > + ret = readx_poll_timeout(_mt7530_read, MT7530_ATC, val, > + !(val & ATC_BUSY), 20, 20000); This is where your need for lpriv comes, you can only pass a single argument. But you can work around it. readx_poll_timeout is a #define. So there is no type check for _mt7530_read, or the arg passed to it. So pass a struct containing the address and priv. I think you can then kill of your global lpriv. Andrew -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html