Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / drivers / pwm / pwm-tiehrpwm.c
index 6a41e66..b5c6b06 100644 (file)
@@ -27,8 +27,6 @@
 #include <linux/pm_runtime.h>
 #include <linux/of_device.h>
 
-#include "pwm-tipwmss.h"
-
 /* EHRPWM registers and bits definitions */
 
 /* Time base module registers */
@@ -426,6 +424,7 @@ static const struct pwm_ops ehrpwm_pwm_ops = {
 };
 
 static const struct of_device_id ehrpwm_of_match[] = {
+       { .compatible   = "ti,am3352-ehrpwm" },
        { .compatible   = "ti,am33xx-ehrpwm" },
        {},
 };
@@ -433,17 +432,24 @@ MODULE_DEVICE_TABLE(of, ehrpwm_of_match);
 
 static int ehrpwm_pwm_probe(struct platform_device *pdev)
 {
+       struct device_node *np = pdev->dev.of_node;
        int ret;
        struct resource *r;
        struct clk *clk;
        struct ehrpwm_pwm_chip *pc;
-       u16 status;
 
        pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL);
        if (!pc)
                return -ENOMEM;
 
        clk = devm_clk_get(&pdev->dev, "fck");
+       if (IS_ERR(clk)) {
+               if (of_device_is_compatible(np, "ti,am33xx-ecap")) {
+                       dev_warn(&pdev->dev, "Binding is obsolete.\n");
+                       clk = devm_clk_get(pdev->dev.parent, "fck");
+               }
+       }
+
        if (IS_ERR(clk)) {
                dev_err(&pdev->dev, "failed to get clock\n");
                return PTR_ERR(clk);
@@ -487,27 +493,9 @@ static int ehrpwm_pwm_probe(struct platform_device *pdev)
        }
 
        pm_runtime_enable(&pdev->dev);
-       pm_runtime_get_sync(&pdev->dev);
-
-       status = pwmss_submodule_state_change(pdev->dev.parent,
-                       PWMSS_EPWMCLK_EN);
-       if (!(status & PWMSS_EPWMCLK_EN_ACK)) {
-               dev_err(&pdev->dev, "PWMSS config space clock enable failed\n");
-               ret = -EINVAL;
-               goto pwmss_clk_failure;
-       }
-
-       pm_runtime_put_sync(&pdev->dev);
 
        platform_set_drvdata(pdev, pc);
        return 0;
-
-pwmss_clk_failure:
-       pm_runtime_put_sync(&pdev->dev);
-       pm_runtime_disable(&pdev->dev);
-       pwmchip_remove(&pc->chip);
-       clk_unprepare(pc->tbclk);
-       return ret;
 }
 
 static int ehrpwm_pwm_remove(struct platform_device *pdev)
@@ -516,14 +504,6 @@ static int ehrpwm_pwm_remove(struct platform_device *pdev)
 
        clk_unprepare(pc->tbclk);
 
-       pm_runtime_get_sync(&pdev->dev);
-       /*
-        * Due to hardware misbehaviour, acknowledge of the stop_req
-        * is missing. Hence checking of the status bit skipped.
-        */
-       pwmss_submodule_state_change(pdev->dev.parent, PWMSS_EPWMCLK_STOP_REQ);
-       pm_runtime_put_sync(&pdev->dev);
-
        pm_runtime_put_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
        return pwmchip_remove(&pc->chip);