• Akira Shimahara's avatar
    w1_therm: adding resolution sysfs entry · 308bdb94
    Akira Shimahara authored
    Adding resolution sysfs entry (RW) to get or set the device resolution
    Write values are managed as follow:
    	* '9..12': resolution to set in bit
    	* Anything else: do nothing
    Read values are :
    	* '9..12': device resolution in bit
    	* '-xx': xx is kernel error when reading the resolution
    
    Only supported devices will show the sysfs entry. A new family has been
    created for DS18S20 devices as they do not implement resolution feature.
    
    The resolution of each device is check when the device is
    discover by the bus master, in 'w1_therm_add_slave(struct w1_slave *)'.
    The status is stored in the device structure w1_therm_family_data so
    that the driver always knows the resolution of each device, which could
    be used later to determine the required conversion duration (resolution
    dependent).
    
    The resolution is re evaluate each time a user read or write the sysfs
    entry.
    
    To avoid looping through the w1_therm_families at run time, the pointer
    'specific_functions' is set up to the correct 'w1_therm_family_converter'
    when the slave is added (which mean when it is discovered by the master).
    This initialization is done by a helper function
    'device_family(struct w1_slave *sl)', and a dedicated macro
    'SLAVE_SPECIFIC_FUNC(sl)' allow the access to the specific function of the
    slave device.
    
    'read_scratchpad' and 'write_scratchpad' are the hardware functions to
    access the device RAM, as per protocol specification.
    
    It cancel the former 'precision' functions, which was only set and never
    read (so not stored in the device struct).
    
    Updating Documentation/ABI/testing/sysfs-driver-w1_therm accordingly.
    Signed-off-by: default avatarAkira Shimahara <akira215corp@gmail.com>
    Link: https://lore.kernel.org/r/20200511203708.410649-1-akira215corp@gmail.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    308bdb94
w1_therm.c 30.7 KB