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