Merge tag 'pci-v6.9-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci
[linux-2.6-microblaze.git] / drivers / pwm / pwm-rockchip.c
index a7c647e..0fa7575 100644 (file)
@@ -30,7 +30,6 @@
 #define PWM_LP_DISABLE         (0 << 8)
 
 struct rockchip_pwm_chip {
-       struct pwm_chip chip;
        struct clk *clk;
        struct clk *pclk;
        const struct rockchip_pwm_data *data;
@@ -54,7 +53,7 @@ struct rockchip_pwm_data {
 
 static inline struct rockchip_pwm_chip *to_rockchip_pwm_chip(struct pwm_chip *chip)
 {
-       return container_of(chip, struct rockchip_pwm_chip, chip);
+       return pwmchip_get_drvdata(chip);
 }
 
 static int rockchip_pwm_get_state(struct pwm_chip *chip,
@@ -296,14 +295,16 @@ MODULE_DEVICE_TABLE(of, rockchip_pwm_dt_ids);
 
 static int rockchip_pwm_probe(struct platform_device *pdev)
 {
+       struct pwm_chip *chip;
        struct rockchip_pwm_chip *pc;
        u32 enable_conf, ctrl;
        bool enabled;
        int ret, count;
 
-       pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL);
-       if (!pc)
-               return -ENOMEM;
+       chip = devm_pwmchip_alloc(&pdev->dev, 1, sizeof(*pc));
+       if (IS_ERR(chip))
+               return PTR_ERR(chip);
+       pc = to_rockchip_pwm_chip(chip);
 
        pc->base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(pc->base))
@@ -337,18 +338,16 @@ static int rockchip_pwm_probe(struct platform_device *pdev)
                goto err_clk;
        }
 
-       platform_set_drvdata(pdev, pc);
+       platform_set_drvdata(pdev, chip);
 
        pc->data = device_get_match_data(&pdev->dev);
-       pc->chip.dev = &pdev->dev;
-       pc->chip.ops = &rockchip_pwm_ops;
-       pc->chip.npwm = 1;
+       chip->ops = &rockchip_pwm_ops;
 
        enable_conf = pc->data->enable_conf;
        ctrl = readl_relaxed(pc->base + pc->data->regs.ctrl);
        enabled = (ctrl & enable_conf) == enable_conf;
 
-       ret = pwmchip_add(&pc->chip);
+       ret = pwmchip_add(chip);
        if (ret < 0) {
                dev_err_probe(&pdev->dev, ret, "pwmchip_add() failed\n");
                goto err_pclk;
@@ -372,9 +371,10 @@ err_clk:
 
 static void rockchip_pwm_remove(struct platform_device *pdev)
 {
-       struct rockchip_pwm_chip *pc = platform_get_drvdata(pdev);
+       struct pwm_chip *chip = platform_get_drvdata(pdev);
+       struct rockchip_pwm_chip *pc = to_rockchip_pwm_chip(chip);
 
-       pwmchip_remove(&pc->chip);
+       pwmchip_remove(chip);
 
        clk_unprepare(pc->pclk);
        clk_unprepare(pc->clk);