X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=drivers%2Fpwm%2Fcore.c;h=29d7c947db0503c5d7eebe02eb0c124854eca94e;hb=2d03bf0f98987735fcfa8c977e5a0ba46252d5a6;hp=d24ca5f281b4bbd98e5ce86e8f454c270d86fe10;hpb=f3996e6ac6e2bd739d8a82cc9acae0653c2d5dca;p=karo-tx-linux.git diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index d24ca5f281b4..29d7c947db05 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -136,7 +136,7 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) { struct pwm_device *pwm; - if (pc->of_pwm_n_cells < 3) + if (args->args_count != 3) return ERR_PTR(-EINVAL); if (args->args[0] >= pc->npwm) @@ -162,12 +162,15 @@ of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) { struct pwm_device *pwm; - if (pc->of_pwm_n_cells < 2) + if (args->args_count < 2) return ERR_PTR(-EINVAL); if (args->args[0] >= pc->npwm) return ERR_PTR(-EINVAL); + if (args->args_count > 2) + return of_pwm_xlate_with_flags(pc, args); + pwm = pwm_request_from_chip(pc, args->args[0], NULL); if (IS_ERR(pwm)) return pwm; @@ -182,10 +185,8 @@ static void of_pwmchip_add(struct pwm_chip *chip) if (!chip->dev || !chip->dev->of_node) return; - if (!chip->of_xlate) { + if (!chip->of_xlate) chip->of_xlate = of_pwm_simple_xlate; - chip->of_pwm_n_cells = 2; - } of_node_get(chip->dev->of_node); } @@ -584,24 +585,17 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id) err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, &args); if (err) { - pr_debug("%s(): can't parse \"pwms\" property\n", __func__); + pr_err("%s(): can't parse \"pwms\" property\n", __func__); return ERR_PTR(err); } pc = of_node_to_pwmchip(args.np); if (IS_ERR(pc)) { - pr_debug("%s(): PWM chip not found\n", __func__); + pr_err("%s(): PWM chip not found\n", __func__); pwm = ERR_CAST(pc); goto put; } - if (args.args_count != pc->of_pwm_n_cells) { - pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name, - args.np->full_name); - pwm = ERR_PTR(-EINVAL); - goto put; - } - pwm = pc->of_xlate(pc, &args); if (IS_ERR(pwm)) goto put;