• Martino Fontana's avatar
    HID: nintendo: cleanup LED code · 92827607
    Martino Fontana authored
    - Support player LED patterns up to 8 players.
      (Note that the behavior still consinsts in increasing the player number
      every time a controller is connected, never decreasing it. It should be
      as is described in https://bugzilla.kernel.org/show_bug.cgi?id=216225.
      However, any implementation here would stop making sense as soon as a
      non-Nintendo controller is connected, which is why I'm not bothering.)
    
    - Split part of `joycon_home_led_brightness_set` (which is called by hid)
      into `joycon_set_home_led` (which is what actually sets the LEDs), for
      consistency with player LEDs.
    
    - `joycon_player_led_brightness_set` won't try it to "determine which
      player led this is" anymore: it's already looking at every LED
      brightness value.
    
    - Instead of first registering the `led_classdev`, then attempting to set
      the LED and unregistering the `led_classdev` if it fails, first attempt
      to set the LED, then register the `led_classdev` only if it succeeds
      (the class is still filled up in either case).
    
    - If setting the player LEDs fails, still attempt setting the home LED.
      (I don't know there's a third party controller where this may actually
      happen, but who knows...)
    
    - Use `JC_NUM_LEDS` where appropriate instead of 4.
    
    - Print return codes in more places.
    
    - Use spinlock instead of mutex for `input_num`. Copy its value to a local
      variable, so that it can be unlocked immediately.
    
    - `input_num` starts counting from 0
    
    - Less holding of mutexes in general.
    Signed-off-by: default avatarMartino Fontana <tinozzo123@gmail.com>
    Reviewed-by: default avatarDaniel J. Ogorchock <djogorchock@gmail.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    92827607
hid-nintendo.c 76 KB