• Andrew Lunn's avatar
    net: phy: sfp: Add HWMON support for module sensors · 1323061a
    Andrew Lunn authored
    SFP modules can contain a number of sensors. The EEPROM also contains
    recommended alarm and critical values for each sensor, and indications
    of if these have been exceeded. Export this information via
    HWMON. Currently temperature, VCC, bias current, transmit power, and
    possibly receiver power is supported.
    
    The sensors in the modules can either return calibrate or uncalibrated
    values. Uncalibrated values need to be manipulated, using coefficients
    provided in the SFP EEPROM. Uncalibrated receive power values require
    floating point maths in order to calibrate them. Performing this in
    the kernel is hard. So if the SFP module indicates it uses
    uncalibrated values, RX power is not made available.
    
    With this hwmon device, it is possible to view the sensor values using
    lm-sensors programs:
    
    in0:          +3.29 V  (crit min =  +2.90 V, min =  +3.00 V)
                           (max =  +3.60 V, crit max =  +3.70 V)
    temp1:        +33.0°C  (low  =  -5.0°C, high = +80.0°C)
                           (crit low = -10.0°C, crit = +85.0°C)
    power1:      1000.00 nW (max = 794.00 uW, min =  50.00 uW)  ALARM (LCRIT)
                           (lcrit =  40.00 uW, crit = 1000.00 uW)
    curr1:        +0.00 A  (crit min =  +0.00 A, min =  +0.00 A)  ALARM (LCRIT, MIN)
                           (max =  +0.01 A, crit max =  +0.01 A)
    
    The scaling sensors performs on the bias current is not particularly
    good. The raw values are more useful:
    
    curr1:
      curr1_input: 0.000
      curr1_min: 0.002
      curr1_max: 0.010
      curr1_lcrit: 0.000
      curr1_crit: 0.011
      curr1_min_alarm: 1.000
      curr1_max_alarm: 0.000
      curr1_lcrit_alarm: 1.000
      curr1_crit_alarm: 0.000
    
    In order to keep the I2C overhead to a minimum, the constant values,
    such as limits and calibration coefficients are read once at module
    insertion time. Thus only reading *_input and *_alarm properties
    requires i2c read operations.
    Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Acked-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1323061a
sfp.c 41.4 KB