RK30: IPP version 1.001
authorchenli <chenli@rock-chips.com>
Sun, 1 Apr 2012 04:54:32 +0000 (12:54 +0800)
committerchenli <chenli@rock-chips.com>
Sun, 1 Apr 2012 07:23:39 +0000 (15:23 +0800)
add code of enabling/disabling power domain

drivers/staging/rk29/ipp/rk29-ipp.c

index f52081215216d4c1b61f73a4cc9181dc1845c4f3..718bfacb3c6b22487a764fda3014c0450eaf94c4 100644 (file)
 #include <asm/cacheflush.h>\r
 #include <linux/slab.h>\r
 \r
-#define IPP_VERSION "1.000"\r
+#ifdef CONFIG_ARCH_RK29\r
+#define IPP_VERSION "rk29-ipp 1.001"\r
+#endif\r
+\r
+#ifdef CONFIG_ARCH_RK30\r
+#define IPP_VERSION "rk30-ipp 1.001"\r
+#endif\r
+\r
 //#define IPP_TEST\r
 #ifdef IPP_TEST\r
 \r
@@ -70,7 +77,7 @@ struct ipp_drvdata {
        void *ipp_base;\r
        int irq0;\r
 \r
-       struct clk *pd_display;\r
+       struct clk *pd_ipp;\r
        struct clk *aclk_lcdc;\r
        struct clk *hclk_lcdc;\r
        struct clk *aclk_ddr_lcdc;\r
@@ -174,8 +181,8 @@ static void ipp_power_on(void)
        cancel_delayed_work_sync(&drvdata->power_off_work);\r
        if (drvdata->enable)\r
                return;\r
+       clk_enable(drvdata->pd_ipp);\r
 #ifdef CONFIG_ARCH_RK29\r
-       clk_enable(drvdata->pd_display);\r
        clk_enable(drvdata->aclk_lcdc);\r
        clk_enable(drvdata->hclk_lcdc);\r
        clk_enable(drvdata->aclk_ddr_lcdc);\r
@@ -195,8 +202,8 @@ static void ipp_power_off(struct work_struct *work)
        //printk("ipp_power_off\n");\r
        if(!drvdata->enable)\r
                return;\r
+       \r
 #ifdef CONFIG_ARCH_RK29\r
-       clk_disable(drvdata->pd_display);\r
        clk_disable(drvdata->aclk_lcdc);\r
        clk_disable(drvdata->hclk_lcdc);\r
        clk_disable(drvdata->aclk_ddr_lcdc);\r
@@ -206,7 +213,8 @@ static void ipp_power_off(struct work_struct *work)
 #endif\r
        clk_disable(drvdata->axi_clk);\r
        clk_disable(drvdata->ahb_clk);\r
-\r
+       clk_disable(drvdata->pd_ipp);\r
+       \r
        drvdata->enable = false;\r
 }\r
 \r
@@ -1623,10 +1631,9 @@ static int __devinit ipp_drv_probe(struct platform_device *pdev)
        }\r
 \r
        /* get the clock */\r
-    #ifdef CONFIG_ARCH_RK29\r
-\r
-       data->pd_display = clk_get(&pdev->dev, "pd_display");\r
-       if (IS_ERR(data->pd_display))\r
+#ifdef CONFIG_ARCH_RK29\r
+       data->pd_ipp = clk_get(&pdev->dev, "pd_display");\r
+       if (IS_ERR(data->pd_ipp))\r
        {\r
                ERR("failed to find ipp pd_display source\n");\r
                ret = -ENOENT;\r
@@ -1680,7 +1687,18 @@ static int __devinit ipp_drv_probe(struct platform_device *pdev)
                ret = -ENOENT;\r
                goto err_clock;\r
        }\r
-       #endif\r
+#endif\r
+\r
+#ifdef CONFIG_ARCH_RK30\r
+       data->pd_ipp = clk_get(&pdev->dev, "pd_ipp");\r
+       if (IS_ERR(data->pd_ipp))\r
+       {\r
+               ERR("failed to find ipp pd_ipp source\n");\r
+               ret = -ENOENT;\r
+               goto err_clock;\r
+       }\r
+#endif\r
+\r
        data->axi_clk = clk_get(&pdev->dev, "aclk_ipp");\r
        if (IS_ERR(data->axi_clk))\r
        {\r
@@ -1806,11 +1824,11 @@ static int __devexit ipp_drv_remove(struct platform_device *pdev)
        if(data->hclk_cpu_display) {\r
                clk_put(data->hclk_cpu_display);\r
        }\r
-\r
-       if(data->pd_display){\r
-               clk_put(data->pd_display);\r
-       }\r
 #endif\r
+       if(data->pd_ipp){\r
+               clk_put(data->pd_ipp);\r
+       }\r
+\r
 kfree(data);\r
     return 0;\r
 }\r