aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/dsa
diff options
context:
space:
mode:
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>2016-05-09 13:22:42 -0400
committerDavid S. Miller <davem@davemloft.net>2016-05-09 14:26:09 -0400
commit6594f615792a52ccb66c07000ade917e8c8f62fd (patch)
treeb4e2a9ba2533843dc3fa06fac45d057100b9e82e /drivers/net/dsa
parentd24645bebce2b13b3c5c49ff392cfb7f3efe0d76 (diff)
net: dsa: mv88e6xxx: factorize temperature access
Add MV88E6XXX_FLAG_TEMP and MV88E6XXX_FLAG_TEMP_LIMIT flags to describe switch models featuring a temperature access. Use them to centralize the access to the temperature feature. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r--drivers/net/dsa/mv88e6123.c3
-rw-r--r--drivers/net/dsa/mv88e6131.c6
-rw-r--r--drivers/net/dsa/mv88e6171.c3
-rw-r--r--drivers/net/dsa/mv88e6xxx.c9
-rw-r--r--drivers/net/dsa/mv88e6xxx.h22
5 files changed, 36 insertions, 7 deletions
diff --git a/drivers/net/dsa/mv88e6123.c b/drivers/net/dsa/mv88e6123.c
index 8330a8e34bff..e234bdbd9b42 100644
--- a/drivers/net/dsa/mv88e6123.c
+++ b/drivers/net/dsa/mv88e6123.c
@@ -123,6 +123,9 @@ struct dsa_switch_driver mv88e6123_switch_driver = {
123 .adjust_link = mv88e6xxx_adjust_link, 123 .adjust_link = mv88e6xxx_adjust_link,
124#ifdef CONFIG_NET_DSA_HWMON 124#ifdef CONFIG_NET_DSA_HWMON
125 .get_temp = mv88e6xxx_get_temp, 125 .get_temp = mv88e6xxx_get_temp,
126 .get_temp_limit = mv88e6xxx_get_temp_limit,
127 .set_temp_limit = mv88e6xxx_set_temp_limit,
128 .get_temp_alarm = mv88e6xxx_get_temp_alarm,
126#endif 129#endif
127 .get_eeprom = mv88e6xxx_get_eeprom, 130 .get_eeprom = mv88e6xxx_get_eeprom,
128 .set_eeprom = mv88e6xxx_set_eeprom, 131 .set_eeprom = mv88e6xxx_set_eeprom,
diff --git a/drivers/net/dsa/mv88e6131.c b/drivers/net/dsa/mv88e6131.c
index ab8c507b8f8c..089f9c05ea38 100644
--- a/drivers/net/dsa/mv88e6131.c
+++ b/drivers/net/dsa/mv88e6131.c
@@ -155,6 +155,12 @@ struct dsa_switch_driver mv88e6131_switch_driver = {
155 .get_sset_count = mv88e6xxx_get_sset_count, 155 .get_sset_count = mv88e6xxx_get_sset_count,
156 .get_eeprom = mv88e6xxx_get_eeprom, 156 .get_eeprom = mv88e6xxx_get_eeprom,
157 .set_eeprom = mv88e6xxx_set_eeprom, 157 .set_eeprom = mv88e6xxx_set_eeprom,
158#ifdef CONFIG_NET_DSA_HWMON
159 .get_temp = mv88e6xxx_get_temp,
160 .get_temp_limit = mv88e6xxx_get_temp_limit,
161 .set_temp_limit = mv88e6xxx_set_temp_limit,
162 .get_temp_alarm = mv88e6xxx_get_temp_alarm,
163#endif
158 .adjust_link = mv88e6xxx_adjust_link, 164 .adjust_link = mv88e6xxx_adjust_link,
159 .port_bridge_join = mv88e6xxx_port_bridge_join, 165 .port_bridge_join = mv88e6xxx_port_bridge_join,
160 .port_bridge_leave = mv88e6xxx_port_bridge_leave, 166 .port_bridge_leave = mv88e6xxx_port_bridge_leave,
diff --git a/drivers/net/dsa/mv88e6171.c b/drivers/net/dsa/mv88e6171.c
index a7afbaa87618..588b48625af7 100644
--- a/drivers/net/dsa/mv88e6171.c
+++ b/drivers/net/dsa/mv88e6171.c
@@ -132,6 +132,9 @@ struct dsa_switch_driver mv88e6171_switch_driver = {
132 .adjust_link = mv88e6xxx_adjust_link, 132 .adjust_link = mv88e6xxx_adjust_link,
133#ifdef CONFIG_NET_DSA_HWMON 133#ifdef CONFIG_NET_DSA_HWMON
134 .get_temp = mv88e6xxx_get_temp, 134 .get_temp = mv88e6xxx_get_temp,
135 .get_temp_limit = mv88e6xxx_get_temp_limit,
136 .set_temp_limit = mv88e6xxx_set_temp_limit,
137 .get_temp_alarm = mv88e6xxx_get_temp_alarm,
135#endif 138#endif
136 .get_eeprom = mv88e6xxx_get_eeprom, 139 .get_eeprom = mv88e6xxx_get_eeprom,
137 .set_eeprom = mv88e6xxx_set_eeprom, 140 .set_eeprom = mv88e6xxx_set_eeprom,
diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c
index d277350069d0..24aea900af35 100644
--- a/drivers/net/dsa/mv88e6xxx.c
+++ b/drivers/net/dsa/mv88e6xxx.c
@@ -3199,6 +3199,9 @@ int mv88e6xxx_get_temp(struct dsa_switch *ds, int *temp)
3199{ 3199{
3200 struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); 3200 struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
3201 3201
3202 if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_TEMP))
3203 return -EOPNOTSUPP;
3204
3202 if (mv88e6xxx_6320_family(ps) || mv88e6xxx_6352_family(ps)) 3205 if (mv88e6xxx_6320_family(ps) || mv88e6xxx_6352_family(ps))
3203 return mv88e63xx_get_temp(ds, temp); 3206 return mv88e63xx_get_temp(ds, temp);
3204 3207
@@ -3211,7 +3214,7 @@ int mv88e6xxx_get_temp_limit(struct dsa_switch *ds, int *temp)
3211 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0; 3214 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0;
3212 int ret; 3215 int ret;
3213 3216
3214 if (!mv88e6xxx_6320_family(ps) && !mv88e6xxx_6352_family(ps)) 3217 if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_TEMP_LIMIT))
3215 return -EOPNOTSUPP; 3218 return -EOPNOTSUPP;
3216 3219
3217 *temp = 0; 3220 *temp = 0;
@@ -3231,7 +3234,7 @@ int mv88e6xxx_set_temp_limit(struct dsa_switch *ds, int temp)
3231 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0; 3234 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0;
3232 int ret; 3235 int ret;
3233 3236
3234 if (!mv88e6xxx_6320_family(ps) && !mv88e6xxx_6352_family(ps)) 3237 if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_TEMP_LIMIT))
3235 return -EOPNOTSUPP; 3238 return -EOPNOTSUPP;
3236 3239
3237 ret = mv88e6xxx_phy_page_read(ds, phy, 6, 26); 3240 ret = mv88e6xxx_phy_page_read(ds, phy, 6, 26);
@@ -3248,7 +3251,7 @@ int mv88e6xxx_get_temp_alarm(struct dsa_switch *ds, bool *alarm)
3248 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0; 3251 int phy = mv88e6xxx_6320_family(ps) ? 3 : 0;
3249 int ret; 3252 int ret;
3250 3253
3251 if (!mv88e6xxx_6320_family(ps) && !mv88e6xxx_6352_family(ps)) 3254 if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_TEMP_LIMIT))
3252 return -EOPNOTSUPP; 3255 return -EOPNOTSUPP;
3253 3256
3254 *alarm = false; 3257 *alarm = false;
diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h
index 0181f6775bfc..9ddb6d04389e 100644
--- a/drivers/net/dsa/mv88e6xxx.h
+++ b/drivers/net/dsa/mv88e6xxx.h
@@ -366,12 +366,20 @@ enum mv88e6xxx_cap {
366 * GLOBAL2_SMI_OP, otherwise direct access to PHY registers is done. 366 * GLOBAL2_SMI_OP, otherwise direct access to PHY registers is done.
367 */ 367 */
368 MV88E6XXX_CAP_SMI_PHY, 368 MV88E6XXX_CAP_SMI_PHY,
369
370 /* Internal temperature sensor.
371 * Available from any enabled port's PHY register 26, page 6.
372 */
373 MV88E6XXX_CAP_TEMP,
374 MV88E6XXX_CAP_TEMP_LIMIT,
369}; 375};
370 376
371/* Bitmask of capabilities */ 377/* Bitmask of capabilities */
372#define MV88E6XXX_FLAG_EEPROM BIT(MV88E6XXX_CAP_EEPROM) 378#define MV88E6XXX_FLAG_EEPROM BIT(MV88E6XXX_CAP_EEPROM)
373#define MV88E6XXX_FLAG_PPU BIT(MV88E6XXX_CAP_PPU) 379#define MV88E6XXX_FLAG_PPU BIT(MV88E6XXX_CAP_PPU)
374#define MV88E6XXX_FLAG_SMI_PHY BIT(MV88E6XXX_CAP_SMI_PHY) 380#define MV88E6XXX_FLAG_SMI_PHY BIT(MV88E6XXX_CAP_SMI_PHY)
381#define MV88E6XXX_FLAG_TEMP BIT(MV88E6XXX_CAP_TEMP)
382#define MV88E6XXX_FLAG_TEMP_LIMIT BIT(MV88E6XXX_CAP_TEMP_LIMIT)
375 383
376#define MV88E6XXX_FLAGS_FAMILY_6095 \ 384#define MV88E6XXX_FLAGS_FAMILY_6095 \
377 MV88E6XXX_FLAG_PPU 385 MV88E6XXX_FLAG_PPU
@@ -379,21 +387,27 @@ enum mv88e6xxx_cap {
379#define MV88E6XXX_FLAGS_FAMILY_6097 \ 387#define MV88E6XXX_FLAGS_FAMILY_6097 \
380 MV88E6XXX_FLAG_PPU 388 MV88E6XXX_FLAG_PPU
381 389
382#define MV88E6XXX_FLAGS_FAMILY_6165 0 390#define MV88E6XXX_FLAGS_FAMILY_6165 \
391 MV88E6XXX_FLAG_TEMP
383 392
384#define MV88E6XXX_FLAGS_FAMILY_6185 \ 393#define MV88E6XXX_FLAGS_FAMILY_6185 \
385 MV88E6XXX_FLAG_PPU 394 MV88E6XXX_FLAG_PPU
386 395
387#define MV88E6XXX_FLAGS_FAMILY_6320 \ 396#define MV88E6XXX_FLAGS_FAMILY_6320 \
388 (MV88E6XXX_FLAG_EEPROM | \ 397 (MV88E6XXX_FLAG_EEPROM | \
389 MV88E6XXX_FLAG_SMI_PHY) 398 MV88E6XXX_FLAG_SMI_PHY | \
399 MV88E6XXX_FLAG_TEMP | \
400 MV88E6XXX_FLAG_TEMP_LIMIT)
390 401
391#define MV88E6XXX_FLAGS_FAMILY_6351 \ 402#define MV88E6XXX_FLAGS_FAMILY_6351 \
392 MV88E6XXX_FLAG_SMI_PHY 403 (MV88E6XXX_FLAG_SMI_PHY | \
404 MV88E6XXX_FLAG_TEMP)
393 405
394#define MV88E6XXX_FLAGS_FAMILY_6352 \ 406#define MV88E6XXX_FLAGS_FAMILY_6352 \
395 (MV88E6XXX_FLAG_EEPROM | \ 407 (MV88E6XXX_FLAG_EEPROM | \
396 MV88E6XXX_FLAG_SMI_PHY) 408 MV88E6XXX_FLAG_SMI_PHY | \
409 MV88E6XXX_FLAG_TEMP | \
410 MV88E6XXX_FLAG_TEMP_LIMIT)
397 411
398struct mv88e6xxx_info { 412struct mv88e6xxx_info {
399 enum mv88e6xxx_family family; 413 enum mv88e6xxx_family family;