• Jeff LaBundy's avatar
    Input: iqs269a - do not poll during ATI · b08134eb
    Jeff LaBundy authored
    After initial start-up, the driver triggers ATI (calibration) with
    the newly loaded register configuration in place. Next, the driver
    polls a register field to ensure ATI completed in a timely fashion
    and that the device is ready to sense.
    
    However, communicating with the device over I2C while ATI is under-
    way may induce noise in the device and cause ATI to fail. As such,
    the vendor recommends not to poll the device during ATI.
    
    To solve this problem, let the device naturally signal to the host
    that ATI is complete by way of an interrupt. A completion prevents
    the device from successfully probing until this happens.
    
    As an added benefit, initial switch states are now reported in the
    interrupt handler at the same time ATI status is checked. As such,
    duplicate code that reports initial switch states has been removed
    from iqs269_input_init().
    
    The former logic that scaled ATI timeout and filter settling delay
    is not carried forward with the new implementation, as it produces
    overly conservative delays at the lower clock rate.
    
    Rather, a single timeout that covers both clock rates is used. The
    filter settling delay does not happen to be necessary and has been
    removed as well.
    
    Fixes: 04e49867 ("Input: add support for Azoteq IQS269A")
    Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
    Reviewed-by: default avatarMattijs Korpershoek <mkorpershoek@baylibre.com>
    Link: https://lore.kernel.org/r/Y7RtB2T7AF9rYMjK@nixie71Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    b08134eb
iqs269a.c 42.9 KB