• Andrew Jeffery's avatar
    hwmon: (pmbus/max31785) Add dual tachometer support · cf583b42
    Andrew Jeffery authored
    The dual tachometer feature is implemented in hardware with a TACHSEL
    input to indicate the rotor under measurement, and exposed on the device
    by extending the READ_FAN_SPEED_1 word with two extra bytes*. The need
    to read the non-standard four-byte response leads to a cut-down
    implementation of i2c_smbus_xfer_emulated() included in the driver.
    Further, to expose the second rotor tachometer value to userspace the
    values are exposed through virtual pages. We re-route accesses to
    FAN_CONFIG_1_2 and READ_FAN_SPEED_1 on pages 23-28 (not defined by the
    hardware) to the same registers on pages 0-5, and with the latter command
    we extract the value from the second word of the four-byte response.
    
    * The documentation recommends the slower rotor be associated with
    TACHSEL=0, which corresponds to the first word of the response. The
    TACHSEL=0 measurement is used by the controller's closed-loop fan
    management to judge target fan rate.
    Signed-off-by: default avatarAndrew Jeffery <andrew@aj.id.au>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    cf583b42
max31785.c 8.92 KB