asoc: tegra: Protect against invalid gpio writes
Scott Peterson [Sat, 9 Feb 2013 01:14:17 +0000 (17:14 -0800)]
Protect against calling gpio_direction_output()
with an innvalid gpio handle.

Bug 1233665

Change-Id: I00dc7a2a254c7f57ba2894328abd52324bcb304d
Signed-off-by: Scott Peterson <speterson@nvidia.com>
Reviewed-on: http://git-master/r/198978
Reviewed-by: Anshul Jain (SW) <anshulj@nvidia.com>
Reviewed-by: Matt Wagner <mwagner@nvidia.com>
GVS: Gerrit_Virtual_Submit

sound/soc/tegra/tegra_rt5640.c

index a66b4c6..16bfa42 100644 (file)
@@ -354,7 +354,8 @@ static int tegra_rt5640_jack_notifier(struct notifier_block *self,
        if (jack == &tegra_rt5640_hp_jack) {
                if (action) {
                        /* Enable ext mic; enable signal is active-low */
-                       gpio_direction_output(pdata->gpio_ext_mic_en, 0);
+                       if (gpio_is_valid(pdata->gpio_ext_mic_en))
+                               gpio_direction_output(pdata->gpio_ext_mic_en, 0);
                        if (!strncmp(machine->pdata->codec_name, "rt5639", 6))
                                status_jack = rt5639_headset_detect(codec, 1);
                        else if (!strncmp(machine->pdata->codec_name, "rt5640",
@@ -376,7 +377,8 @@ static int tegra_rt5640_jack_notifier(struct notifier_block *self,
                        }
                } else {
                        /* Disable ext mic; enable signal is active-low */
-                       gpio_direction_output(pdata->gpio_ext_mic_en, 1);
+                       if (gpio_is_valid(pdata->gpio_ext_mic_en))
+                               gpio_direction_output(pdata->gpio_ext_mic_en, 1);
                        if (!strncmp(machine->pdata->codec_name, "rt5639", 6))
                                rt5639_headset_detect(codec, 0);
                        else if (!strncmp(machine->pdata->codec_name, "rt5640",