• Vlad Dogaru's avatar
    iio: sx9500: optimize power usage · 59bd0427
    Vlad Dogaru authored
    In the interest of lowering power usage, we only activate the proximity
    channels and interrupts that we are currently using.
    
    For raw reads, we activate the corresponding channel and the data ready
    interrupt and wait for the interrupt to trigger.  If no interrupt is
    available, we wait for the documented scan period, as specified in the
    datasheet.
    
    The following types of usage patterns may overlap:
    
    * raw proximity reads (need a single data ready interrupt)
    * trigger usage (needs data ready interrupts as long as active)
    * proximity events (need near/far interrupts)
    * triggered buffer reads (don't need any interrupts, but are usually
    coupled with our own trigger.
    
    To mitigate all possible patterns, we implement usage counting for all
    the resources used: data ready interrupts, near/far interrupts and
    individual channels.
    
    The device enters sleep mode as documented in the data sheet when its
    buffer, trigger and events are disabled, and no raw reads are currently
    running.
    
    Because of this new usage pattern, it is important that we give the
    device a chance to perform an initial compensation for all its channels
    at probe time.
    Signed-off-by: default avatarVlad Dogaru <vlad.dogaru@intel.com>
    Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
    59bd0427
sx9500.c 24.5 KB