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)
 {
        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;
 
                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;
        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,
                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);
 }
 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)
 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