Skip to content
  • Antonio Borneo's avatar
    HID: cp2112: fix gpio value in gpio_direction_output · beb9d007
    Antonio Borneo authored
    
    
    CP2112 does not offer an atomic method to set both gpio
    direction and value.
    Also it does not permit to set gpio value before putting
    gpio in output. In fact, accordingly to Silicon Labs
    AN495, Rev. 0.2, cpt. 4.4, the HID report to set gpio
    values "does not affect any pins that are not configured
    as outputs".
    
    This is confirmed on evaluation board CP2112-EK.
    With current driver, after execute:
    	echo in > /sys/class/gpio/gpio248/direction
    	echo low > /sys/class/gpio/gpio248/direction
    gpio output is still high. Only after a following
    	echo low > /sys/class/gpio/gpio248/direction
    gpio output gets low.
    
    Fix driver by changing order of operations; first set
    direction then set value.
    
    The drawback of this new sequence is that we can have
    a pulse on gpio pin when direction is changed from
    input to output-low, but this cannot be avoided on
    current CP2112.
    
    Signed-off-by: default avatarAntonio Borneo <borneo.antonio@gmail.com>
    Reviewed-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    beb9d007