diff options
-rw-r--r-- | drivers/net/phy/sfp.c | 73 |
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 | ||
994 | static const char *const sfp_hwmon_power_labels[] = { | ||
995 | "TX_power", | ||
996 | "RX_power", | ||
997 | }; | ||
998 | |||
999 | static 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 | |||
990 | static const struct hwmon_ops sfp_hwmon_ops = { | 1047 | static 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 | ||
995 | static u32 sfp_hwmon_chip_config[] = { | 1053 | static 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 | ||