Input: soc_button_array - get rid of MAX_NBUTTONS
authorHans de Goede <hdegoede@redhat.com>
Fri, 17 Mar 2017 21:03:28 +0000 (14:03 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 17 Mar 2017 21:09:22 +0000 (14:09 -0700)
Count how much gpio_keys we actually need, this is a preparation patch
for adding support for the new Win10 / ACPI-6.0 "Generic Buttons Device"
support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/misc/soc_button_array.c

index 0cd2cac47660289d72eeb334f279e6199a07c5c1..b8769f6e3601245e20c79aee5ee397f44fae515c 100644 (file)
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
 
-/*
- * Definition of buttons on the tablet. The ACPI index of each button
- * is defined in section 2.8.7.2 of "Windows ACPI Design Guide for SoC
- * Platforms"
- */
-#define MAX_NBUTTONS   5
-
 struct soc_button_info {
        const char *name;
        int acpi_index;
@@ -79,14 +72,19 @@ soc_button_device_create(struct platform_device *pdev,
        int gpio;
        int error;
 
+       for (info = button_info; info->name; info++)
+               if (info->autorepeat == autorepeat)
+                       n_buttons++;
+
        gpio_keys_pdata = devm_kzalloc(&pdev->dev,
                                       sizeof(*gpio_keys_pdata) +
-                                       sizeof(*gpio_keys) * MAX_NBUTTONS,
+                                       sizeof(*gpio_keys) * n_buttons,
                                       GFP_KERNEL);
        if (!gpio_keys_pdata)
                return ERR_PTR(-ENOMEM);
 
        gpio_keys = (void *)(gpio_keys_pdata + 1);
+       n_buttons = 0;
 
        for (info = button_info; info->name; info++) {
                if (info->autorepeat != autorepeat)
@@ -200,6 +198,11 @@ static int soc_button_probe(struct platform_device *pdev)
        return 0;
 }
 
+/*
+ * Definition of buttons on the tablet. The ACPI index of each button
+ * is defined in section 2.8.7.2 of "Windows ACPI Design Guide for SoC
+ * Platforms"
+ */
 static struct soc_button_info soc_button_PNP0C40[] = {
        { "power", 0, EV_KEY, KEY_POWER, false, true },
        { "home", 1, EV_KEY, KEY_LEFTMETA, false, true },