Skip to contentSkip to conversation

ASoC: sst_platform: initialize module_name properly

PATCH Applied Lu Guanqun 2 participants 5 messages Apr 6, 2011

Subsystems (3)
lore
Share & tools
lore

Lu Guanqun

author
#0 lore raw

PATCH 1/4 ASoC: sst_platform: initialize module_name properly

module_name will be checked in register_sst_card. It will fail to register sst card if it's not initialized.

---
 sound/soc/mid-x86/sst_platform.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +1 -0
index ee2c224..bd9d928 100644
@@ -247,6 +247,7 @@ static int sst_platform_open(struct snd_pcm_substream *substream)
 		return -ENOMEM;
 	}
 	stream->sstdrv_ops->vendor_id = MSIC_VENDOR_ID;
+	stream->sstdrv_ops->module_name = SST_CARD_NAMES;
 	/* registering with SST driver to get access to SST APIs to use */
 	ret_val = register_sst_card(stream->sstdrv_ops);
 	if (ret_val) {
author
#1 lore raw

PATCH 2/4 ASoC: sst_platform: free the resources on fail path

---
 sound/soc/mid-x86/sst_platform.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +2 -0
index bd9d928..848ad3c 100644
@@ -252,6 +252,8 @@ static int sst_platform_open(struct snd_pcm_substream *substream)
 	ret_val = register_sst_card(stream->sstdrv_ops);
 	if (ret_val) {
 		pr_err("sst: sst card registration failed\n");
+		kfree(stream->sstdrv_ops);
+		kfree(stream);
 		return ret_val;
 	}
 	runtime->private_data = stream;
author
#2 lore raw

PATCH 3/4 ASoC: sst_platform: unregister sst card when being closed

In reply to Lu Guanqun
---
 sound/soc/mid-x86/sst_platform.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +1 -0
index 848ad3c..9ba9414 100644
@@ -271,6 +271,7 @@ static int sst_platform_close(struct snd_pcm_substream *substream)
 	str_id = stream->stream_info.str_id;
 	if (str_id)
 		ret_val = stream->sstdrv_ops->pcm_control->close(str_id);
+	unregister_sst_card(stream->sstdrv_ops);
 	kfree(stream->sstdrv_ops);
 	kfree(stream);
 	return ret_val;
author
#3 lore raw

PATCH 4/4 sst: make register_sst_card more self-contained

In reply to Lu Guanqun

From: Lu Guanqun <[email protected]>

register_sst_card is used in ASoC code with field scard_ops being NULL. Without this patch, there will be NULL dereference.

---
 .../staging/intel_sst/intel_sst_drv_interface.c    |    1 -
 drivers/staging/intel_sst/intelmid.c               |    1 +
 2 files changed, 1 insertions(+), 1 deletions(-)
drivers/staging/intel_sst/intel_sst_drv_interface.c +0 -1
index ea8e251..cf10dd6 100644
@@ -508,7 +508,6 @@ int register_sst_card(struct intel_sst_card_ops *card)
 			sst_drv_ctx->pmic_state = SND_MAD_INIT_DONE;
 			sst_drv_ctx->rx_time_slot_status = 0; /*default AMIC*/
 			card->pcm_control = sst_pmic_ops.pcm_control;
-			sst_drv_ctx->scard_ops->card_status = SND_CARD_UN_INIT;
 			return 0;
 		} else {
 			pr_err("strcmp fail %s\n", card->module_name);
drivers/staging/intel_sst/intelmid.c +1 -0
index fb22921..1fb39d4 100644
@@ -802,6 +802,7 @@ static int __devinit snd_intelmad_sst_register(
 		pr_err("sst card registration failed\n");
 		return ret_val;
 	}
+	sst_drv_ctx->scard_ops->card_status = SND_CARD_UN_INIT;
 
 	sst_card_vendor_id = intelmaddata->sstdrv_ops->vendor_id;
 	intelmaddata->pmic_status = PMIC_UNINIT;