Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: phy: sfp: Add labels to hwmon sensors

SFPs can report two different power values, the transmit power and the
receive power. Add labels to make it clear which is which. Also add
labels to the other sensors, VCC power supply, bias and module
temperature.

sensors(1) now shows:

sff2-isa-0000
Adapter: ISA adapter
VCC: +3.23 V
temperature: +33.4 C
TX_power: 276.00 uW
RX_power: 20.00 uW
bias: +0.01 A

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

authored by

Andrew Lunn and committed by
David S. Miller
c1236979 a914a841

+68 -5
+68 -5
drivers/net/phy/sfp.c
··· 429 429 return 0; 430 430 /* fall through */ 431 431 case hwmon_temp_input: 432 + case hwmon_temp_label: 432 433 return 0444; 433 434 default: 434 435 return 0; ··· 448 447 return 0; 449 448 /* fall through */ 450 449 case hwmon_in_input: 450 + case hwmon_in_label: 451 451 return 0444; 452 452 default: 453 453 return 0; ··· 467 465 return 0; 468 466 /* fall through */ 469 467 case hwmon_curr_input: 468 + case hwmon_curr_label: 470 469 return 0444; 471 470 default: 472 471 return 0; ··· 495 492 return 0; 496 493 /* fall through */ 497 494 case hwmon_power_input: 495 + case hwmon_power_label: 498 496 return 0444; 499 497 default: 500 498 return 0; ··· 991 987 } 992 988 } 993 989 990 + static const char *const sfp_hwmon_power_labels[] = { 991 + "TX_power", 992 + "RX_power", 993 + }; 994 + 995 + static int sfp_hwmon_read_string(struct device *dev, 996 + enum hwmon_sensor_types type, 997 + u32 attr, int channel, const char **str) 998 + { 999 + switch (type) { 1000 + case hwmon_curr: 1001 + switch (attr) { 1002 + case hwmon_curr_label: 1003 + *str = "bias"; 1004 + return 0; 1005 + default: 1006 + return -EOPNOTSUPP; 1007 + } 1008 + break; 1009 + case hwmon_temp: 1010 + switch (attr) { 1011 + case hwmon_temp_label: 1012 + *str = "temperature"; 1013 + return 0; 1014 + default: 1015 + return -EOPNOTSUPP; 1016 + } 1017 + break; 1018 + case hwmon_in: 1019 + switch (attr) { 1020 + case hwmon_in_label: 1021 + *str = "VCC"; 1022 + return 0; 1023 + default: 1024 + return -EOPNOTSUPP; 1025 + } 1026 + break; 1027 + case hwmon_power: 1028 + switch (attr) { 1029 + case hwmon_power_label: 1030 + *str = sfp_hwmon_power_labels[channel]; 1031 + return 0; 1032 + default: 1033 + return -EOPNOTSUPP; 1034 + } 1035 + break; 1036 + default: 1037 + return -EOPNOTSUPP; 1038 + } 1039 + 1040 + return -EOPNOTSUPP; 1041 + } 1042 + 994 1043 static const struct hwmon_ops sfp_hwmon_ops = { 995 1044 .is_visible = sfp_hwmon_is_visible, 996 1045 .read = sfp_hwmon_read, 1046 + .read_string = sfp_hwmon_read_string, 997 1047 }; 998 1048 999 1049 static u32 sfp_hwmon_chip_config[] = { ··· 1065 1007 HWMON_T_MAX | HWMON_T_MIN | 1066 1008 HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM | 1067 1009 HWMON_T_CRIT | HWMON_T_LCRIT | 1068 - HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM, 1010 + HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM | 1011 + HWMON_T_LABEL, 1069 1012 0, 1070 1013 }; 1071 1014 ··· 1080 1021 HWMON_I_MAX | HWMON_I_MIN | 1081 1022 HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM | 1082 1023 HWMON_I_CRIT | HWMON_I_LCRIT | 1083 - HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM, 1024 + HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM | 1025 + HWMON_I_LABEL, 1084 1026 0, 1085 1027 }; 1086 1028 ··· 1095 1035 HWMON_C_MAX | HWMON_C_MIN | 1096 1036 HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM | 1097 1037 HWMON_C_CRIT | HWMON_C_LCRIT | 1098 - HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM, 1038 + HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM | 1039 + HWMON_C_LABEL, 1099 1040 0, 1100 1041 }; 1101 1042 ··· 1111 1050 HWMON_P_MAX | HWMON_P_MIN | 1112 1051 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM | 1113 1052 HWMON_P_CRIT | HWMON_P_LCRIT | 1114 - HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM, 1053 + HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM | 1054 + HWMON_P_LABEL, 1115 1055 /* Receive power */ 1116 1056 HWMON_P_INPUT | 1117 1057 HWMON_P_MAX | HWMON_P_MIN | 1118 1058 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM | 1119 1059 HWMON_P_CRIT | HWMON_P_LCRIT | 1120 - HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM, 1060 + HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM | 1061 + HWMON_P_LABEL, 1121 1062 0, 1122 1063 }; 1123 1064