static int dss_get_clocks(void)
 {
        struct clk *clk;
-       int r;
 
-       clk = clk_get(&dss.pdev->dev, "fck");
+       clk = devm_clk_get(&dss.pdev->dev, "fck");
        if (IS_ERR(clk)) {
                DSSERR("can't get clock fck\n");
-               r = PTR_ERR(clk);
-               goto err;
+               return PTR_ERR(clk);
        }
 
        dss.dss_clk = clk;
                clk = clk_get(NULL, dss.feat->clk_name);
                if (IS_ERR(clk)) {
                        DSSERR("Failed to get %s\n", dss.feat->clk_name);
-                       r = PTR_ERR(clk);
-                       goto err;
+                       return PTR_ERR(clk);
                }
        } else {
                clk = NULL;
        dss.dpll4_m4_ck = clk;
 
        return 0;
-
-err:
-       if (dss.dss_clk)
-               clk_put(dss.dss_clk);
-       if (dss.dpll4_m4_ck)
-               clk_put(dss.dpll4_m4_ck);
-
-       return r;
 }
 
 static void dss_put_clocks(void)
 {
        if (dss.dpll4_m4_ck)
                clk_put(dss.dpll4_m4_ck);
-       clk_put(dss.dss_clk);
 }
 
 static int dss_runtime_get(void)
 
 {
        struct clk *clk;
 
-       clk = clk_get(&pdev->dev, "sys_clk");
+       clk = devm_clk_get(&pdev->dev, "sys_clk");
        if (IS_ERR(clk)) {
                DSSERR("can't get sys_clk\n");
                return PTR_ERR(clk);
        return 0;
 }
 
-static void hdmi_put_clocks(void)
-{
-       if (hdmi.sys_clk)
-               clk_put(hdmi.sys_clk);
-}
-
 #if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
 int hdmi_compute_acr(u32 sample_freq, u32 *n, u32 *cts)
 {
        r = hdmi_panel_init();
        if (r) {
                DSSERR("can't init panel\n");
-               goto err_panel_init;
+               return r;
        }
 
        dss_debugfs_create_file("hdmi", hdmi_dump_regs);
        hdmi_probe_pdata(pdev);
 
        return 0;
-
-err_panel_init:
-       hdmi_put_clocks();
-       return r;
 }
 
 static int __exit hdmi_remove_child(struct device *dev, void *data)
 
        pm_runtime_disable(&pdev->dev);
 
-       hdmi_put_clocks();
-
        return 0;
 }
 
 
        struct clk *clk;
 
        if (dss_has_feature(FEAT_VENC_REQUIRES_TV_DAC_CLK)) {
-               clk = clk_get(&pdev->dev, "tv_dac_clk");
+               clk = devm_clk_get(&pdev->dev, "tv_dac_clk");
                if (IS_ERR(clk)) {
                        DSSERR("can't get tv_dac_clk\n");
                        return PTR_ERR(clk);
        return 0;
 }
 
-static void venc_put_clocks(void)
-{
-       if (venc.tv_dac_clk)
-               clk_put(venc.tv_dac_clk);
-}
-
 static struct omap_dss_device * __init venc_find_dssdev(struct platform_device *pdev)
 {
        struct omap_dss_board_info *pdata = pdev->dev.platform_data;
 err_panel_init:
 err_runtime_get:
        pm_runtime_disable(&pdev->dev);
-       venc_put_clocks();
        return r;
 }
 
        venc_uninit_output(pdev);
 
        pm_runtime_disable(&pdev->dev);
-       venc_put_clocks();
 
        return 0;
 }