]> Git Repo - J-linux.git/blobdiff - drivers/pwm/pwm-lp3943.c
Merge tag 'nfsd-6.7-3' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
[J-linux.git] / drivers / pwm / pwm-lp3943.c
index 4b133a17f4be3bea2b070237abaed93d25080ef4..32350a357278df0c1857524480266a95ee24aadc 100644 (file)
@@ -23,6 +23,7 @@ struct lp3943_pwm {
        struct pwm_chip chip;
        struct lp3943 *lp3943;
        struct lp3943_platform_data *pdata;
+       struct lp3943_pwm_map pwm_map[LP3943_NUM_PWMS];
 };
 
 static inline struct lp3943_pwm *to_lp3943_pwm(struct pwm_chip *chip)
@@ -35,13 +36,9 @@ lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
 {
        struct lp3943_platform_data *pdata = lp3943_pwm->pdata;
        struct lp3943 *lp3943 = lp3943_pwm->lp3943;
-       struct lp3943_pwm_map *pwm_map;
+       struct lp3943_pwm_map *pwm_map = &lp3943_pwm->pwm_map[hwpwm];
        int i, offset;
 
-       pwm_map = kzalloc(sizeof(*pwm_map), GFP_KERNEL);
-       if (!pwm_map)
-               return ERR_PTR(-ENOMEM);
-
        pwm_map->output = pdata->pwms[hwpwm]->output;
        pwm_map->num_outputs = pdata->pwms[hwpwm]->num_outputs;
 
@@ -49,10 +46,8 @@ lp3943_pwm_request_map(struct lp3943_pwm *lp3943_pwm, int hwpwm)
                offset = pwm_map->output[i];
 
                /* Return an error if the pin is already assigned */
-               if (test_and_set_bit(offset, &lp3943->pin_used)) {
-                       kfree(pwm_map);
+               if (test_and_set_bit(offset, &lp3943->pin_used))
                        return ERR_PTR(-EBUSY);
-               }
        }
 
        return pwm_map;
@@ -67,7 +62,7 @@ static int lp3943_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
        if (IS_ERR(pwm_map))
                return PTR_ERR(pwm_map);
 
-       return pwm_set_chip_data(pwm, pwm_map);
+       return 0;
 }
 
 static void lp3943_pwm_free_map(struct lp3943_pwm *lp3943_pwm,
@@ -80,14 +75,12 @@ static void lp3943_pwm_free_map(struct lp3943_pwm *lp3943_pwm,
                offset = pwm_map->output[i];
                clear_bit(offset, &lp3943->pin_used);
        }
-
-       kfree(pwm_map);
 }
 
 static void lp3943_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
 {
        struct lp3943_pwm *lp3943_pwm = to_lp3943_pwm(chip);
-       struct lp3943_pwm_map *pwm_map = pwm_get_chip_data(pwm);
+       struct lp3943_pwm_map *pwm_map = &lp3943_pwm->pwm_map[pwm->hwpwm];
 
        lp3943_pwm_free_map(lp3943_pwm, pwm_map);
 }
@@ -159,7 +152,7 @@ static int lp3943_pwm_set_mode(struct lp3943_pwm *lp3943_pwm,
 static int lp3943_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
 {
        struct lp3943_pwm *lp3943_pwm = to_lp3943_pwm(chip);
-       struct lp3943_pwm_map *pwm_map = pwm_get_chip_data(pwm);
+       struct lp3943_pwm_map *pwm_map = &lp3943_pwm->pwm_map[pwm->hwpwm];
        u8 val;
 
        if (pwm->hwpwm == 0)
@@ -178,7 +171,7 @@ static int lp3943_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
 static void lp3943_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
 {
        struct lp3943_pwm *lp3943_pwm = to_lp3943_pwm(chip);
-       struct lp3943_pwm_map *pwm_map = pwm_get_chip_data(pwm);
+       struct lp3943_pwm_map *pwm_map = &lp3943_pwm->pwm_map[pwm->hwpwm];
 
        /*
         * LP3943 outputs are open-drain, so the pin should be configured
@@ -216,7 +209,6 @@ static const struct pwm_ops lp3943_pwm_ops = {
        .request        = lp3943_pwm_request,
        .free           = lp3943_pwm_free,
        .apply          = lp3943_pwm_apply,
-       .owner          = THIS_MODULE,
 };
 
 static int lp3943_pwm_parse_dt(struct device *dev,
This page took 0.02815 seconds and 4 git commands to generate.