Merge remote-tracking branch 'origin/develop-3.0-rk2928' into develop-3.0
[firefly-linux-kernel-4.4.55.git] / drivers / regulator / rk30-pwm-regulator.c
index 8b914cd565ccedf4adc23b33250b0c67465dacc3..2019ef5a264c4385341a2faf3931abd9e35a6936 100755 (executable)
@@ -67,6 +67,9 @@ struct rk_pwm_dcdc {
 #elif defined(CONFIG_ARCH_RK29)\r
 #define pwm_write_reg(id, addr, val)        __raw_writel(val, addr+(RK29_PWM_BASE+id*0x10))\r
 #define pwm_read_reg(id, addr)              __raw_readl(addr+(RK29_PWM_BASE+id*0x10))    \r
+#elif defined(CONFIG_ARCH_RK2928)\r
+#define pwm_write_reg(id, addr, val)        __raw_writel(val, addr+(RK2928_PWM_BASE+id*0x10))\r
+#define pwm_read_reg(id, addr)              __raw_readl(addr+(RK2928_PWM_BASE+id*0x10))\r
 #endif\r
 \r
 const static int pwm_voltage_map[] = {\r
@@ -81,19 +84,21 @@ static int pwm_set_rate(struct pwm_platform_data *pdata,int nHz,u32 rate)
        u32 divh,divTotal;\r
        int id = pdata->pwm_id;\r
        unsigned long clkrate;\r
-       \r
-       if ( id >3 || id <0 )\r
-       {\r
+\r
+#if defined(CONFIG_ARCH_RK29) || defined(CONFIG_ARCH_RK2928)\r
+       clkrate = clk_get_rate(pwm_clk[0]);\r
+#elif defined(CONFIG_ARCH_RK30) || defined(CONFIG_ARCH_RK31)\r
+       if (id == 0 || id == 1) {\r
+               clkrate = clk_get_rate(pwm_clk[0]);\r
+       } else if (id== 2 || id == 3) {\r
+               clkrate = clk_get_rate(pwm_clk[1]);\r
+       } else {\r
                printk("%s:pwm id error,id=%d\n",__func__,id);\r
                return -1;\r
        }\r
-\r
-       if((id==0) || (id == 1))\r
-       clkrate = clk_get_rate(pwm_clk[0]);\r
-       else    \r
-       clkrate = clk_get_rate(pwm_clk[1]);\r
+#endif\r
        \r
-       DBG("%s:id=%d,rate=%d,clkrate=%d\n",__func__,id,rate,clkrate);\r
+       DBG("%s:id=%d,rate=%d,clkrate=%d\n",__func__,id,rate,clkrate); \r
 \r
        if(rate == 0)\r
        {\r
@@ -278,15 +283,15 @@ static int __devinit pwm_regulator_probe(struct platform_device *pdev)
                pdata->suspend_voltage = pdata->max_uV;\r
        \r
        dcdc = kzalloc(sizeof(struct rk_pwm_dcdc), GFP_KERNEL);\r
-       if (dcdc == NULL) {
-               dev_err(&pdev->dev, "Unable to allocate private data\n");
-               return -ENOMEM;
+       if (dcdc == NULL) {\r
+               dev_err(&pdev->dev, "Unable to allocate private data\n");\r
+               return -ENOMEM;\r
        }\r
 \r
        snprintf(dcdc->name, sizeof(dcdc->name), "PWM_DCDC%d", id + 1);\r
-       dcdc->desc.name = dcdc->name;
-       dcdc->desc.id = id;
-       dcdc->desc.type = REGULATOR_VOLTAGE;
+       dcdc->desc.name = dcdc->name;\r
+       dcdc->desc.id = id;\r
+       dcdc->desc.type = REGULATOR_VOLTAGE;\r
        dcdc->desc.n_voltages = ARRAY_SIZE(pwm_voltage_map);\r
        dcdc->desc.ops = &pwm_voltage_ops;\r
        dcdc->desc.owner = THIS_MODULE;\r
@@ -294,11 +299,11 @@ static int __devinit pwm_regulator_probe(struct platform_device *pdev)
        printk("%s:n_voltages=%d\n",__func__,dcdc->desc.n_voltages);\r
        dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,\r
                                             pdata->init_data, dcdc);\r
-       if (IS_ERR(dcdc->regulator)) {
-               ret = PTR_ERR(dcdc->regulator);
+       if (IS_ERR(dcdc->regulator)) {\r
+               ret = PTR_ERR(dcdc->regulator);\r
                dev_err(&pdev->dev, "Failed to register PWM_DCDC%d: %d\n",\r
-                       id + 1, ret);
-               goto err;
+                       id + 1, ret);\r
+               goto err;\r
        }\r
 \r
        snprintf(gpio_name, sizeof(gpio_name), "PWM_DCDC%d", id + 1);\r
@@ -321,6 +326,13 @@ static int __devinit pwm_regulator_probe(struct platform_device *pdev)
                        pwm_clk[1] = clk_get(NULL, "pwm23");            \r
                        clk_enable(pwm_clk[1]);\r
                }\r
+#elif defined(CONFIG_ARCH_RK2928)\r
+               pwm_clk[0] = clk_get(NULL, "pwm01");\r
+               if (IS_ERR(pwm_clk[0])) {\r
+                       printk("pwm_clk get error %p\n", pwm_clk[0]);\r
+                       return -EINVAL;\r
+               }\r
+               clk_enable(pwm_clk[0]);\r
 #endif\r
        \r
        g_dcdc  = dcdc;\r