diff options
| -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", |
