diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-01-02 03:13:29 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-01-02 03:13:29 -0800 |
| commit | d45e9ffef1a2ee84d043f54ed5eaf42ffeb8e838 (patch) | |
| tree | 610a4e5d7584eb9f8b8c22fe941bee3b98164283 | |
| parent | f75ba71580c7e829adf4f9a66ed0a3554386f312 (diff) | |
| parent | 63356bead316211f6686a435e1a4d85aae602ad8 (diff) | |
Merge "msm: sps: Enable the clocks when BAMDMA available"
| -rw-r--r-- | drivers/platform/msm/sps/sps.c | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/drivers/platform/msm/sps/sps.c b/drivers/platform/msm/sps/sps.c index 62f3a5e54e3..97cdb28cab4 100644 --- a/drivers/platform/msm/sps/sps.c +++ b/drivers/platform/msm/sps/sps.c @@ -2534,20 +2534,8 @@ static int msm_sps_probe(struct platform_device *pdev) goto device_create_err; } - sps->dfab_clk = clk_get(sps->dev, "dfab_clk"); - if (IS_ERR(sps->dfab_clk)) { - if (PTR_ERR(sps->dfab_clk) == -EPROBE_DEFER) - ret = -EPROBE_DEFER; - else - SPS_ERR("sps:fail to get dfab_clk."); - goto dfab_clk_err; - } else { - ret = clk_set_rate(sps->dfab_clk, 64000000); - if (ret) { - SPS_ERR("sps:failed to set dfab_clk rate."); - goto dfab_clk_set_err; - } - } + if (pdev->dev.of_node) + sps->dev->of_node = pdev->dev.of_node; if (!d_type) { sps->pmem_clk = clk_get(sps->dev, "mem_clk"); @@ -2556,38 +2544,58 @@ static int msm_sps_probe(struct platform_device *pdev) ret = -EPROBE_DEFER; else SPS_ERR("sps:fail to get pmem_clk."); - goto dfab_clk_set_err; + goto pmem_clk_err; } else { ret = clk_prepare_enable(sps->pmem_clk); if (ret) { SPS_ERR("sps:failed to enable pmem_clk."); - goto pmem_clk_set_err; + goto pmem_clk_en_err; } } } #ifdef CONFIG_SPS_SUPPORT_BAMDMA + sps->dfab_clk = clk_get(sps->dev, "dfab_clk"); + if (IS_ERR(sps->dfab_clk)) { + if (PTR_ERR(sps->dfab_clk) == -EPROBE_DEFER) + ret = -EPROBE_DEFER; + else + SPS_ERR("sps:fail to get dfab_clk."); + goto dfab_clk_err; + } else { + ret = clk_set_rate(sps->dfab_clk, 64000000); + if (ret) { + SPS_ERR("sps:failed to set dfab_clk rate."); + clk_put(sps->dfab_clk); + goto dfab_clk_err; + } + } + sps->bamdma_clk = clk_get(sps->dev, "dma_bam_pclk"); if (IS_ERR(sps->bamdma_clk)) { if (PTR_ERR(sps->bamdma_clk) == -EPROBE_DEFER) ret = -EPROBE_DEFER; else SPS_ERR("sps:fail to get bamdma_clk."); - goto pmem_clk_set_err; + clk_put(sps->dfab_clk); + goto dfab_clk_err; } else { ret = clk_prepare_enable(sps->bamdma_clk); if (ret) { SPS_ERR("sps:failed to enable bamdma_clk. ret=%d", ret); clk_put(sps->bamdma_clk); - goto pmem_clk_set_err; + clk_put(sps->dfab_clk); + goto dfab_clk_err; } } ret = clk_prepare_enable(sps->dfab_clk); if (ret) { SPS_ERR("sps:failed to enable dfab_clk. ret=%d", ret); + clk_disable_unprepare(sps->bamdma_clk); clk_put(sps->bamdma_clk); - goto pmem_clk_set_err; + clk_put(sps->dfab_clk); + goto dfab_clk_err; } #endif ret = sps_device_init(); @@ -2597,8 +2605,9 @@ static int msm_sps_probe(struct platform_device *pdev) clk_disable_unprepare(sps->dfab_clk); clk_disable_unprepare(sps->bamdma_clk); clk_put(sps->bamdma_clk); + clk_put(sps->dfab_clk); #endif - goto pmem_clk_set_err; + goto dfab_clk_err; } #ifdef CONFIG_SPS_SUPPORT_BAMDMA clk_disable_unprepare(sps->dfab_clk); @@ -2609,12 +2618,13 @@ static int msm_sps_probe(struct platform_device *pdev) SPS_INFO("sps:sps is ready."); return 0; -pmem_clk_set_err: +dfab_clk_err: + if (!d_type) + clk_disable_unprepare(sps->pmem_clk); +pmem_clk_en_err: if (!d_type) clk_put(sps->pmem_clk); -dfab_clk_set_err: - clk_put(sps->dfab_clk); -dfab_clk_err: +pmem_clk_err: device_destroy(sps->dev_class, sps->dev_num); device_create_err: unregister_chrdev_region(sps->dev_num, 1); |
