linux/drivers/net
Andrew Lunn 1323061a01 net: phy: sfp: Add HWMON support for module sensors
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: Andrew Lunn <andrew@lunn.ch>
Acked-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-07-18 10:02:02 +09:00
..
appletalk
arcnet
bonding net: allow ndo_select_queue to pass netdev 2018-07-09 13:41:34 -07:00
caif
can treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
dsa net: dsa: vsc73xx: Make some functions static 2018-07-05 19:29:29 +09:00
ethernet r8169: don't read chip phy status register 2018-07-18 09:46:32 +09:00
fddi net: fddi: fix a possible null-ptr-deref 2018-06-08 18:47:46 -04:00
fjes fjes: use currently unused variable my_epid and max_epid 2018-07-05 19:34:21 +09:00
hamradio net/hamradio/6pack: remove redundant variable channel 2018-07-05 19:34:45 +09:00
hippi treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
hyperv net: allow fallback function to pass netdev 2018-07-09 13:57:25 -07:00
ieee802154 net: ieee802154: mcr20a: do not leak resources on error path 2018-04-23 20:56:23 +02:00
ipvlan ipvlan: call dev_change_flags when ipvlan mode is reset 2018-07-02 20:38:09 +09:00
netdevsim netdevsim: add support for simultaneous driver and hw XDP 2018-07-13 20:26:35 +02:00
phy net: phy: sfp: Add HWMON support for module sensors 2018-07-18 10:02:02 +09:00
plip
ppp Revert changes to convert to ->poll_mask() and aio IOCB_CMD_POLL 2018-06-28 10:40:47 -07:00
slip treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
team team: Publish team_port_get_rcu() 2018-07-11 23:10:19 -07:00
usb net: usb: hso: use swap macro in hso_kick_transmit 2018-07-16 13:35:47 -07:00
vmxnet3 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-05-21 16:01:54 -04:00
wan drivers: net: lmc: remove redundant variable next_rx 2018-07-07 22:07:21 +09:00
wimax wimax/i2400m: remove redundant variables ack_status, bcf and protocol 2018-07-11 22:54:25 -07:00
wireless net: allow ndo_select_queue to pass netdev 2018-07-09 13:41:34 -07:00
xen-netback net: allow fallback function to pass netdev 2018-07-09 13:57:25 -07:00
dummy.c
eql.c
geneve.c Merge ra.kernel.org:/pub/scm/linux/kernel/git/davem/net 2018-07-03 10:29:26 +09:00
gtp.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
ifb.c ifb: fix packets checksum 2018-05-28 23:02:22 -04:00
Kconfig virtio_net: Extend virtio to use VF datapath when available 2018-05-28 22:59:54 -04:00
LICENSE.SRC
loopback.c
macsec.c
macvlan.c macvlan: Change status when lower device goes down 2018-07-11 23:07:22 -07:00
macvtap.c
Makefile net: Introduce net_failover driver 2018-05-28 22:59:54 -04:00
mdio.c
mii.c
net_failover.c net: allow fallback function to pass netdev 2018-07-09 13:57:25 -07:00
netconsole.c
nlmon.c
ntb_netdev.c net: drivers/net: Convert random_ether_addr to eth_random_addr 2018-06-23 10:49:14 +09:00
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c net: in virtio_net_hdr only add VLAN_HLEN to csum_start if payload holds vlan 2018-06-07 16:15:38 -04:00
thunderbolt.c
tun.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2018-07-14 18:47:44 -07:00
veth.c
virtio_net.c xdp: don't make drivers report attachment mode 2018-07-13 20:26:35 +02:00
vrf.c vrf: add CRC32c offload to device features 2018-05-28 22:55:13 -04:00
vsockmon.c
vxlan.c vxlan: fix default fdb entry netlink notify ordering during netdev create 2018-07-07 20:20:46 +09:00
xen-netfront.c net: allow ndo_select_queue to pass netdev 2018-07-09 13:41:34 -07:00