]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - sound/soc/mid-x86/sst_platform.c
Merge commit 'v2.6.39-rc3' into for-2.6.39
[karo-tx-linux.git] / sound / soc / mid-x86 / sst_platform.c
index 96e6e9c9c5f47cb65fae734946f484fe4eefc654..d567c322a2fb471788d7b8f47345a6b9fd6d5aed 100644 (file)
@@ -116,18 +116,20 @@ struct snd_soc_dai_driver sst_platform_dai[] = {
 static inline void sst_set_stream_status(struct sst_runtime_stream *stream,
                                        int state)
 {
-       spin_lock(&stream->status_lock);
+       unsigned long flags;
+       spin_lock_irqsave(&stream->status_lock, flags);
        stream->stream_status = state;
-       spin_unlock(&stream->status_lock);
+       spin_unlock_irqrestore(&stream->status_lock, flags);
 }
 
 static inline int sst_get_stream_status(struct sst_runtime_stream *stream)
 {
        int state;
+       unsigned long flags;
 
-       spin_lock(&stream->status_lock);
+       spin_lock_irqsave(&stream->status_lock, flags);
        state = stream->stream_status;
-       spin_unlock(&stream->status_lock);
+       spin_unlock_irqrestore(&stream->status_lock, flags);
        return state;
 }
 
@@ -365,6 +367,14 @@ static snd_pcm_uframes_t sst_platform_pcm_pointer
        return stream->stream_info.buffer_ptr;
 }
 
+static int sst_platform_pcm_hw_params(struct snd_pcm_substream *substream,
+               struct snd_pcm_hw_params *params)
+{
+       snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
+       memset(substream->runtime->dma_area, 0, params_buffer_bytes(params));
+
+       return 0;
+}
 
 static struct snd_pcm_ops sst_platform_ops = {
        .open = sst_platform_open,
@@ -373,6 +383,7 @@ static struct snd_pcm_ops sst_platform_ops = {
        .prepare = sst_platform_pcm_prepare,
        .trigger = sst_platform_pcm_trigger,
        .pointer = sst_platform_pcm_pointer,
+       .hw_params = sst_platform_pcm_hw_params,
 };
 
 static void sst_pcm_free(struct snd_pcm *pcm)
@@ -431,7 +442,7 @@ static int sst_platform_remove(struct platform_device *pdev)
 
        snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(sst_platform_dai));
        snd_soc_unregister_platform(&pdev->dev);
-       pr_debug("sst_platform_remove sucess\n");
+       pr_debug("sst_platform_remove success\n");
        return 0;
 }
 
@@ -454,7 +465,7 @@ module_init(sst_soc_platform_init);
 static void __exit sst_soc_platform_exit(void)
 {
        platform_driver_unregister(&sst_platform_driver);
-       pr_debug("sst_soc_platform_exit sucess\n");
+       pr_debug("sst_soc_platform_exit success\n");
 }
 module_exit(sst_soc_platform_exit);