hal: fix resource leak issues in platform.c

- fix resource leak issues related to mixer
  controls and file handles

Change-Id: I3675da4504a93a084ad582e5e6eb7c75f38e736e
diff --git a/msm8909/hal/msm8916/platform.c b/msm8909/hal/msm8916/platform.c
index 1235c28..547ecd7 100644
--- a/msm8909/hal/msm8916/platform.c
+++ b/msm8909/hal/msm8916/platform.c
@@ -1033,6 +1033,7 @@
     if (acdb_loader_get_calibration == NULL) {
         ALOGE("%s: ERROR. dlsym Error:%s acdb_loader_get_calibration", __func__,
            dlerror());
+        close(fd);
         return;
     }
     if (send_codec_cal(acdb_loader_get_calibration, fd) < 0)
@@ -1186,6 +1187,7 @@
                 ALOGE("%s: Failed to init audio route controls, aborting.",
                        __func__);
                 free(my_data);
+                mixer_close(adev->mixer);
                 return NULL;
             }
             adev->snd_card = snd_card_num;
@@ -1195,6 +1197,7 @@
         }
         retry_num = 0;
         snd_card_num++;
+        mixer_close(adev->mixer);
     }
 
     if (snd_card_num >= MAX_SND_CARD) {
diff --git a/msm8909/hal/msm8960/platform.c b/msm8909/hal/msm8960/platform.c
index dcb85aa..3eb9b41 100644
--- a/msm8909/hal/msm8960/platform.c
+++ b/msm8909/hal/msm8960/platform.c
@@ -240,6 +240,7 @@
     adev->audio_route = audio_route_init(MIXER_CARD, MIXER_XML_PATH);
     if (!adev->audio_route) {
         ALOGE("%s: Failed to init audio route controls, aborting.", __func__);
+        mixer_close(adev->mixer);
         return NULL;
     }
 
diff --git a/msm8909/hal/msm8974/platform.c b/msm8909/hal/msm8974/platform.c
index cc1f173..cfe5d08 100644
--- a/msm8909/hal/msm8974/platform.c
+++ b/msm8909/hal/msm8974/platform.c
@@ -934,6 +934,7 @@
     if (acdb_loader_get_calibration == NULL) {
         ALOGE("%s: ERROR. dlsym Error:%s acdb_loader_get_calibration", __func__,
            dlerror());
+        close(fd);
         return;
     }
     if (send_codec_cal(acdb_loader_get_calibration, fd) < 0)
@@ -1007,6 +1008,12 @@
         }
 
         snd_card_name = mixer_get_name(adev->mixer);
+        if (!snd_card_name) {
+            ALOGE("failed to allocate memory for snd_card_name\n");
+            free(my_data);
+            mixer_close(adev->mixer);
+            return NULL;
+        }
         ALOGV("%s: snd_card_name: %s", __func__, snd_card_name);
 
         my_data->hw_info = hw_info_init(snd_card_name);
@@ -1027,6 +1034,8 @@
                 ALOGE("%s: Failed to init audio route controls, aborting.",
                        __func__);
                 free(my_data);
+                free(snd_card_name);
+                mixer_close(adev->mixer);
                 return NULL;
             }
             adev->snd_card = snd_card_num;
@@ -1035,6 +1044,7 @@
         }
         retry_num = 0;
         snd_card_num++;
+        mixer_close(adev->mixer);
     }
 
     if (snd_card_num >= MAX_SND_CARD) {