]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/pwm/pwm-ab8500.c
Merge git://git.kvack.org/~bcrl/aio-next
[karo-tx-linux.git] / drivers / pwm / pwm-ab8500.c
index 4248d0418273a5f8589947d97b2dd0dcaaa5a221..4c07a8420b373ddd4322e013a18b1fc7a5902f93 100644 (file)
 #define AB8500_PWM_OUT_CTRL2_REG       0x61
 #define AB8500_PWM_OUT_CTRL7_REG       0x66
 
-/* backlight driver constants */
-#define ENABLE_PWM                     1
-#define DISABLE_PWM                    0
-
 struct ab8500_pwm_chip {
        struct pwm_chip chip;
 };
@@ -64,9 +60,9 @@ static int ab8500_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
 
        ret = abx500_mask_and_set_register_interruptible(chip->dev,
                                AB8500_MISC, AB8500_PWM_OUT_CTRL7_REG,
-                               1 << (chip->base - 1), ENABLE_PWM);
+                               1 << (chip->base - 1), 1 << (chip->base - 1));
        if (ret < 0)
-               dev_err(chip->dev, "%s: Failed to disable PWM, Error %d\n",
+               dev_err(chip->dev, "%s: Failed to enable PWM, Error %d\n",
                                                        pwm->label, ret);
        return ret;
 }
@@ -77,17 +73,17 @@ static void ab8500_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
 
        ret = abx500_mask_and_set_register_interruptible(chip->dev,
                                AB8500_MISC, AB8500_PWM_OUT_CTRL7_REG,
-                               1 << (chip->base - 1), DISABLE_PWM);
+                               1 << (chip->base - 1), 0);
        if (ret < 0)
                dev_err(chip->dev, "%s: Failed to disable PWM, Error %d\n",
                                                        pwm->label, ret);
-       return;
 }
 
 static const struct pwm_ops ab8500_pwm_ops = {
        .config = ab8500_pwm_config,
        .enable = ab8500_pwm_enable,
        .disable = ab8500_pwm_disable,
+       .owner = THIS_MODULE,
 };
 
 static int ab8500_pwm_probe(struct platform_device *pdev)
@@ -99,11 +95,9 @@ static int ab8500_pwm_probe(struct platform_device *pdev)
         * Nothing to be done in probe, this is required to get the
         * device which is required for ab8500 read and write
         */
-       ab8500 = kzalloc(sizeof(*ab8500), GFP_KERNEL);
-       if (ab8500 == NULL) {
-               dev_err(&pdev->dev, "failed to allocate memory\n");
+       ab8500 = devm_kzalloc(&pdev->dev, sizeof(*ab8500), GFP_KERNEL);
+       if (ab8500 == NULL)
                return -ENOMEM;
-       }
 
        ab8500->chip.dev = &pdev->dev;
        ab8500->chip.ops = &ab8500_pwm_ops;
@@ -111,10 +105,8 @@ static int ab8500_pwm_probe(struct platform_device *pdev)
        ab8500->chip.npwm = 1;
 
        err = pwmchip_add(&ab8500->chip);
-       if (err < 0) {
-               kfree(ab8500);
+       if (err < 0)
                return err;
-       }
 
        dev_dbg(&pdev->dev, "pwm probe successful\n");
        platform_set_drvdata(pdev, ab8500);
@@ -132,7 +124,6 @@ static int ab8500_pwm_remove(struct platform_device *pdev)
                return err;
 
        dev_dbg(&pdev->dev, "pwm driver removed\n");
-       kfree(ab8500);
 
        return 0;
 }