diff options
author | Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 2016-05-09 13:22:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-09 14:26:09 -0400 |
commit | 6594f615792a52ccb66c07000ade917e8c8f62fd (patch) | |
tree | b4e2a9ba2533843dc3fa06fac45d057100b9e82e | |
parent | d24645bebce2b13b3c5c49ff392cfb7f3efe0d76 (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>
-rw-r--r-- | drivers/net/dsa/mv88e6123.c | 3 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6131.c | 6 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6171.c | 3 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx.c | 9 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx.h | 22 |
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 | ||
398 | struct mv88e6xxx_info { | 412 | struct mv88e6xxx_info { |
399 | enum mv88e6xxx_family family; | 413 | enum mv88e6xxx_family family; |