Merge tag 'regmap-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-microblaze.git] / drivers / pwm / pwm-mtk-disp.c
index 2401b67..bafd6b6 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/pwm.h>
 #include <linux/slab.h>
@@ -43,7 +42,6 @@ struct mtk_pwm_data {
 };
 
 struct mtk_disp_pwm {
-       struct pwm_chip chip;
        const struct mtk_pwm_data *data;
        struct clk *clk_main;
        struct clk *clk_mm;
@@ -53,7 +51,7 @@ struct mtk_disp_pwm {
 
 static inline struct mtk_disp_pwm *to_mtk_disp_pwm(struct pwm_chip *chip)
 {
-       return container_of(chip, struct mtk_disp_pwm, chip);
+       return pwmchip_get_drvdata(chip);
 }
 
 static void mtk_disp_pwm_update_bits(struct mtk_disp_pwm *mdp, u32 offset,
@@ -92,14 +90,14 @@ static int mtk_disp_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
        if (!mdp->enabled) {
                err = clk_prepare_enable(mdp->clk_main);
                if (err < 0) {
-                       dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n",
+                       dev_err(pwmchip_parent(chip), "Can't enable mdp->clk_main: %pe\n",
                                ERR_PTR(err));
                        return err;
                }
 
                err = clk_prepare_enable(mdp->clk_mm);
                if (err < 0) {
-                       dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n",
+                       dev_err(pwmchip_parent(chip), "Can't enable mdp->clk_mm: %pe\n",
                                ERR_PTR(err));
                        clk_disable_unprepare(mdp->clk_main);
                        return err;
@@ -182,13 +180,13 @@ static int mtk_disp_pwm_get_state(struct pwm_chip *chip,
 
        err = clk_prepare_enable(mdp->clk_main);
        if (err < 0) {
-               dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err));
+               dev_err(pwmchip_parent(chip), "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err));
                return err;
        }
 
        err = clk_prepare_enable(mdp->clk_mm);
        if (err < 0) {
-               dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err));
+               dev_err(pwmchip_parent(chip), "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err));
                clk_disable_unprepare(mdp->clk_main);
                return err;
        }
@@ -228,17 +226,18 @@ static int mtk_disp_pwm_get_state(struct pwm_chip *chip,
 static const struct pwm_ops mtk_disp_pwm_ops = {
        .apply = mtk_disp_pwm_apply,
        .get_state = mtk_disp_pwm_get_state,
-       .owner = THIS_MODULE,
 };
 
 static int mtk_disp_pwm_probe(struct platform_device *pdev)
 {
+       struct pwm_chip *chip;
        struct mtk_disp_pwm *mdp;
        int ret;
 
-       mdp = devm_kzalloc(&pdev->dev, sizeof(*mdp), GFP_KERNEL);
-       if (!mdp)
-               return -ENOMEM;
+       chip = devm_pwmchip_alloc(&pdev->dev, 1, sizeof(*mdp));
+       if (IS_ERR(chip))
+               return PTR_ERR(chip);
+       mdp = to_mtk_disp_pwm(chip);
 
        mdp->data = of_device_get_match_data(&pdev->dev);
 
@@ -248,34 +247,23 @@ static int mtk_disp_pwm_probe(struct platform_device *pdev)
 
        mdp->clk_main = devm_clk_get(&pdev->dev, "main");
        if (IS_ERR(mdp->clk_main))
-               return PTR_ERR(mdp->clk_main);
+               return dev_err_probe(&pdev->dev, PTR_ERR(mdp->clk_main),
+                                    "Failed to get main clock\n");
 
        mdp->clk_mm = devm_clk_get(&pdev->dev, "mm");
        if (IS_ERR(mdp->clk_mm))
-               return PTR_ERR(mdp->clk_mm);
+               return dev_err_probe(&pdev->dev, PTR_ERR(mdp->clk_mm),
+                                    "Failed to get mm clock\n");
 
-       mdp->chip.dev = &pdev->dev;
-       mdp->chip.ops = &mtk_disp_pwm_ops;
-       mdp->chip.npwm = 1;
+       chip->ops = &mtk_disp_pwm_ops;
 
-       ret = pwmchip_add(&mdp->chip);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "pwmchip_add() failed: %pe\n", ERR_PTR(ret));
-               return ret;
-       }
-
-       platform_set_drvdata(pdev, mdp);
+       ret = devm_pwmchip_add(&pdev->dev, chip);
+       if (ret < 0)
+               return dev_err_probe(&pdev->dev, ret, "pwmchip_add() failed\n");
 
        return 0;
 }
 
-static void mtk_disp_pwm_remove(struct platform_device *pdev)
-{
-       struct mtk_disp_pwm *mdp = platform_get_drvdata(pdev);
-
-       pwmchip_remove(&mdp->chip);
-}
-
 static const struct mtk_pwm_data mt2701_pwm_data = {
        .enable_mask = BIT(16),
        .con0 = 0xa8,
@@ -321,7 +309,6 @@ static struct platform_driver mtk_disp_pwm_driver = {
                .of_match_table = mtk_disp_pwm_of_match,
        },
        .probe = mtk_disp_pwm_probe,
-       .remove_new = mtk_disp_pwm_remove,
 };
 module_platform_driver(mtk_disp_pwm_driver);