net: dsa: mv88e6171: Add support for reading the temperature
authorAndrew Lunn <andrew@lunn.ch>
Sat, 15 Nov 2014 21:24:52 +0000 (22:24 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 16 Nov 2014 20:47:26 +0000 (15:47 -0500)
This chip also has a temperature sensor which can be read using the
common code. In order to use it, add the needed mutex protection for
accessing registers via the shared code.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6171.c

index 537eeedece2167bd865cc567fdc18345063f13a8..ed4c79778823c7988134f1a78cea2e18843622e9 100644 (file)
@@ -316,6 +316,8 @@ static int mv88e6171_setup(struct dsa_switch *ds)
                        return ret;
        }
 
+       mutex_init(&ps->phy_mutex);
+
        return 0;
 }
 
@@ -329,18 +331,28 @@ static int mv88e6171_port_to_phy_addr(int port)
 static int
 mv88e6171_phy_read(struct dsa_switch *ds, int port, int regnum)
 {
+       struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
        int addr = mv88e6171_port_to_phy_addr(port);
+       int ret;
 
-       return mv88e6xxx_phy_read(ds, addr, regnum);
+       mutex_lock(&ps->phy_mutex);
+       ret = mv88e6xxx_phy_read(ds, addr, regnum);
+       mutex_unlock(&ps->phy_mutex);
+       return ret;
 }
 
 static int
 mv88e6171_phy_write(struct dsa_switch *ds,
                    int port, int regnum, u16 val)
 {
+       struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
        int addr = mv88e6171_port_to_phy_addr(port);
+       int ret;
 
-       return mv88e6xxx_phy_write(ds, addr, regnum, val);
+       mutex_lock(&ps->phy_mutex);
+       ret = mv88e6xxx_phy_write(ds, addr, regnum, val);
+       mutex_unlock(&ps->phy_mutex);
+       return ret;
 }
 
 static struct mv88e6xxx_hw_stat mv88e6171_hw_stats[] = {
@@ -408,6 +420,9 @@ struct dsa_switch_driver mv88e6171_switch_driver = {
        .get_strings            = mv88e6171_get_strings,
        .get_ethtool_stats      = mv88e6171_get_ethtool_stats,
        .get_sset_count         = mv88e6171_get_sset_count,
+#ifdef CONFIG_NET_DSA_HWMON
+       .get_temp               = mv88e6xxx_get_temp,
+#endif
 };
 
 MODULE_ALIAS("platform:mv88e6171");