Skip to content

Commit b38ebd1

Browse files
committed
Input: LEDs - skip unnamed LEDs
Devices may declare more LEDs than what is known to input-leds (HID does this for some devices). Instead of showing ugly warnings on connect and, even worse, oopsing on disconnect, let's simply ignore LEDs that are not known to us. Reported-and-tested-by: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent 9684917 commit b38ebd1

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

drivers/input/input-leds.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ static void input_leds_event(struct input_handle *handle, unsigned int type,
7171
{
7272
}
7373

74+
static int input_leds_get_count(struct input_dev *dev)
75+
{
76+
unsigned int led_code;
77+
int count = 0;
78+
79+
for_each_set_bit(led_code, dev->ledbit, LED_CNT)
80+
if (input_led_info[led_code].name)
81+
count++;
82+
83+
return count;
84+
}
85+
7486
static int input_leds_connect(struct input_handler *handler,
7587
struct input_dev *dev,
7688
const struct input_device_id *id)
@@ -81,7 +93,7 @@ static int input_leds_connect(struct input_handler *handler,
8193
int led_no;
8294
int error;
8395

84-
num_leds = bitmap_weight(dev->ledbit, LED_CNT);
96+
num_leds = input_leds_get_count(dev);
8597
if (!num_leds)
8698
return -ENXIO;
8799

@@ -112,7 +124,7 @@ static int input_leds_connect(struct input_handler *handler,
112124
led->handle = &leds->handle;
113125
led->code = led_code;
114126

115-
if (WARN_ON(!input_led_info[led_code].name))
127+
if (!input_led_info[led_code].name)
116128
continue;
117129

118130
led->cdev.name = kasprintf(GFP_KERNEL, "%s::%s",

0 commit comments

Comments
 (0)