@@ -38,6 +38,7 @@ struct gpio_keys_drvdata {
struct input_dev *input;
struct mutex disable_lock;
unsigned int n_buttons;
+ void (*enable)(int state);
struct gpio_button_data data[0];
};
@@ -414,6 +415,24 @@ fail2:
return error;
}
+static int gpio_keys_open(struct input_dev *dev)
+{
+ struct gpio_keys_drvdata *ddata;
+ ddata = input_get_drvdata(dev);
+ if (ddata->enable)
+ ddata->enable(1);
+ return 0;
+}
+
+static void gpio_keys_close(struct input_dev *dev)
+{
+ struct gpio_keys_drvdata *ddata;
+
+ ddata = input_get_drvdata(dev);
+ if (ddata->enable)
+ ddata->enable(0);
+}
+
static int __devinit gpio_keys_probe(struct platform_device *pdev)
{
struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
@@ -435,13 +454,17 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
ddata->input = input;
ddata->n_buttons = pdata->nbuttons;
+ ddata->enable = pdata->enable;
mutex_init(&ddata->disable_lock);
platform_set_drvdata(pdev, ddata);
+ input_set_drvdata(input , ddata);
input->name = pdev->name;
input->phys = "gpio-keys/input0";
input->dev.parent = &pdev->dev;
+ input->open = gpio_keys_open;
+ input->close = gpio_keys_close;
input->id.bustype = BUS_HOST;
input->id.vendor = 0x0001;
@@ -17,6 +17,7 @@ struct gpio_keys_platform_data {
struct gpio_keys_button *buttons;
int nbuttons;
unsigned int rep:1; /* enable input subsystem auto repeat */
+ void (*enable)(int state);
};
#endif