diff options
Diffstat (limited to 'drivers/input/input-leds.c')
-rw-r--r-- | drivers/input/input-leds.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/input/input-leds.c b/drivers/input/input-leds.c index 074a65ed17bb..766bf2660116 100644 --- a/drivers/input/input-leds.c +++ b/drivers/input/input-leds.c | |||
@@ -71,6 +71,18 @@ static void input_leds_event(struct input_handle *handle, unsigned int type, | |||
71 | { | 71 | { |
72 | } | 72 | } |
73 | 73 | ||
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 | |||
74 | static int input_leds_connect(struct input_handler *handler, | 86 | static int input_leds_connect(struct input_handler *handler, |
75 | struct input_dev *dev, | 87 | struct input_dev *dev, |
76 | const struct input_device_id *id) | 88 | const struct input_device_id *id) |
@@ -81,7 +93,7 @@ static int input_leds_connect(struct input_handler *handler, | |||
81 | int led_no; | 93 | int led_no; |
82 | int error; | 94 | int error; |
83 | 95 | ||
84 | num_leds = bitmap_weight(dev->ledbit, LED_CNT); | 96 | num_leds = input_leds_get_count(dev); |
85 | if (!num_leds) | 97 | if (!num_leds) |
86 | return -ENXIO; | 98 | return -ENXIO; |
87 | 99 | ||
@@ -112,7 +124,7 @@ static int input_leds_connect(struct input_handler *handler, | |||
112 | led->handle = &leds->handle; | 124 | led->handle = &leds->handle; |
113 | led->code = led_code; | 125 | led->code = led_code; |
114 | 126 | ||
115 | if (WARN_ON(!input_led_info[led_code].name)) | 127 | if (!input_led_info[led_code].name) |
116 | continue; | 128 | continue; |
117 | 129 | ||
118 | led->cdev.name = kasprintf(GFP_KERNEL, "%s::%s", | 130 | led->cdev.name = kasprintf(GFP_KERNEL, "%s::%s", |