ASoC: omap-mcbsp: Fix use of uninitialised pointer
[linux-2.6-microblaze.git] / sound / soc / ti / omap-mcbsp.c
index 3d41ca2..6025b30 100644 (file)
@@ -77,18 +77,15 @@ static int omap2_mcbsp_set_clks_src(struct omap_mcbsp *mcbsp, u8 fck_src_id)
        pm_runtime_put_sync(mcbsp->dev);
 
        r = clk_set_parent(mcbsp->fclk, fck_src);
-       if (r) {
+       if (r)
                dev_err(mcbsp->dev, "CLKS: could not clk_set_parent() to %s\n",
                        src);
-               clk_put(fck_src);
-               return r;
-       }
 
        pm_runtime_get_sync(mcbsp->dev);
 
        clk_put(fck_src);
 
-       return 0;
+       return r;
 }
 
 static irqreturn_t omap_mcbsp_irq_handler(int irq, void *data)
@@ -686,7 +683,7 @@ static int omap_mcbsp_init(struct platform_device *pdev)
        mcbsp->dma_data[1].addr = omap_mcbsp_dma_reg_params(mcbsp,
                                                SNDRV_PCM_STREAM_CAPTURE);
 
-       mcbsp->fclk = clk_get(&pdev->dev, "fck");
+       mcbsp->fclk = devm_clk_get(&pdev->dev, "fck");
        if (IS_ERR(mcbsp->fclk)) {
                ret = PTR_ERR(mcbsp->fclk);
                dev_err(mcbsp->dev, "unable to get fck: %d\n", ret);
@@ -711,7 +708,7 @@ static int omap_mcbsp_init(struct platform_device *pdev)
                if (ret) {
                        dev_err(mcbsp->dev,
                                "Unable to create additional controls\n");
-                       goto err_thres;
+                       return ret;
                }
        }
 
@@ -724,8 +721,6 @@ static int omap_mcbsp_init(struct platform_device *pdev)
 err_st:
        if (mcbsp->pdata->buffer_size)
                sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group);
-err_thres:
-       clk_put(mcbsp->fclk);
        return ret;
 }
 
@@ -736,7 +731,7 @@ err_thres:
 static void omap_mcbsp_set_threshold(struct snd_pcm_substream *substream,
                unsigned int packet_size)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
        int words;
@@ -788,7 +783,7 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
        struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
        int err = 0;
 
-       if (!cpu_dai->active)
+       if (!snd_soc_dai_active(cpu_dai))
                err = omap_mcbsp_request(mcbsp);
 
        /*
@@ -843,7 +838,7 @@ static void omap_mcbsp_dai_shutdown(struct snd_pcm_substream *substream,
 
        mcbsp->latency[stream1] = 0;
 
-       if (!cpu_dai->active) {
+       if (!snd_soc_dai_active(cpu_dai)) {
                omap_mcbsp_free(mcbsp);
                mcbsp->configured = 0;
        }
@@ -901,7 +896,7 @@ static snd_pcm_sframes_t omap_mcbsp_dai_delay(
                        struct snd_pcm_substream *substream,
                        struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
        u16 fifo_use;
@@ -1185,7 +1180,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
        default:
                return -EINVAL;
        }
-       if (inv_fs == true)
+       if (inv_fs)
                regs->pcr0 ^= FSXP | FSRP;
 
        return 0;
@@ -1442,8 +1437,6 @@ static int asoc_mcbsp_remove(struct platform_device *pdev)
 
        omap_mcbsp_st_cleanup(pdev);
 
-       clk_put(mcbsp->fclk);
-
        return 0;
 }