summaryrefslogtreecommitdiff
path: root/drivers/input/misc/abx500-accdet.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/misc/abx500-accdet.c')
-rw-r--r--drivers/input/misc/abx500-accdet.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/drivers/input/misc/abx500-accdet.c b/drivers/input/misc/abx500-accdet.c
index c0d1cb04a0e..5c4e96c73d6 100644
--- a/drivers/input/misc/abx500-accdet.c
+++ b/drivers/input/misc/abx500-accdet.c
@@ -786,7 +786,25 @@ static int abx500_accessory_init(struct platform_device *pdev)
}
}
- (ret = create_btn_input_dev(dd));
+ if (dd->pdata->mic_ctrl) {
+ ret = gpio_is_valid(dd->pdata->mic_ctrl);
+ if (!ret) {
+ dev_err(&pdev->dev,
+ "%s: Mic ctrl GPIO invalid (%d).\n", __func__,
+ dd->pdata->mic_ctrl);
+
+ goto mic_ctrl_fail;
+ }
+ ret = gpio_request(dd->pdata->mic_ctrl,
+ "Mic Control");
+ if (ret) {
+ dev_err(&pdev->dev, "%s: Get mic ctrl GPIO"
+ "failed.\n", __func__);
+ goto mic_ctrl_fail;
+ }
+ }
+
+ ret = create_btn_input_dev(dd);
if (ret < 0) {
dev_err(&pdev->dev, "%s: create_button_input_dev failed.\n",
__func__);
@@ -827,6 +845,9 @@ fail_no_mem_for_wq:
fail_no_regulators:
input_unregister_device(dd->btn_input_dev);
fail_no_btn_input_dev:
+ if (dd->pdata->mic_ctrl)
+ gpio_free(dd->pdata->mic_ctrl);
+mic_ctrl_fail:
if (dd->pdata->video_ctrl_gpio)
gpio_free(dd->pdata->video_ctrl_gpio);
return ret;
@@ -842,7 +863,12 @@ static void abx500_accessory_cleanup(struct abx500_ad *dd)
dd->jack_type = JACK_TYPE_UNSPECIFIED;
config_accdetect(dd);
- gpio_free(dd->pdata->video_ctrl_gpio);
+ if (dd->pdata->mic_ctrl)
+ gpio_free(dd->pdata->mic_ctrl);
+
+ if (dd->pdata->video_ctrl_gpio)
+ gpio_free(dd->pdata->video_ctrl_gpio);
+
input_unregister_device(dd->btn_input_dev);
free_regulators(dd);