Skip to content

Commit

Permalink
pwm: sti: It's now valid for number of PWM channels to be zero
Browse files Browse the repository at this point in the history
Setting up the STI PWM IP as capture only, with zero PWM output devices
is a perfectly valid configuration. It is no longer okay to assume that
there must be at least 1 PWM output device. In this patch we make the
default number of PWM output devices zero and only configure channels
explicitly requested.

Reported-by: Peter Griffin <peter.griffin@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Lee Jones authored and Thierry Reding committed Sep 8, 2016
1 parent c97267a commit 85a834c
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion drivers/pwm/pwm-sti.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,11 @@ static int sti_pwm_probe_dt(struct sti_pwm_chip *pc)
if (!ret)
cdata->cpt_num_devs = num_devs;

if (!cdata->pwm_num_devs && !cdata->cpt_num_devs) {
dev_err(dev, "No channels configured\n");
return -EINVAL;
}

reg_fields = cdata->reg_fields;

pc->prescale_low = devm_regmap_field_alloc(dev, pc->regmap,
Expand Down Expand Up @@ -573,7 +578,7 @@ static int sti_pwm_probe(struct platform_device *pdev)
cdata->reg_fields = &sti_pwm_regfields[0];
cdata->max_prescale = 0xff;
cdata->max_pwm_cnt = 255;
cdata->pwm_num_devs = 1;
cdata->pwm_num_devs = 0;
cdata->cpt_num_devs = 0;

pc->cdata = cdata;
Expand All @@ -585,6 +590,9 @@ static int sti_pwm_probe(struct platform_device *pdev)
if (ret)
return ret;

if (!cdata->pwm_num_devs)
goto skip_pwm;

pc->pwm_clk = of_clk_get_by_name(dev->of_node, "pwm");
if (IS_ERR(pc->pwm_clk)) {
dev_err(dev, "failed to get PWM clock\n");
Expand All @@ -597,6 +605,10 @@ static int sti_pwm_probe(struct platform_device *pdev)
return ret;
}

skip_pwm:
if (!cdata->cpt_num_devs)
goto skip_cpt;

pc->cpt_clk = of_clk_get_by_name(dev->of_node, "capture");
if (IS_ERR(pc->cpt_clk)) {
dev_err(dev, "failed to get PWM capture clock\n");
Expand All @@ -609,6 +621,7 @@ static int sti_pwm_probe(struct platform_device *pdev)
return ret;
}

skip_cpt:
pc->chip.dev = dev;
pc->chip.ops = &sti_pwm_ops;
pc->chip.base = -1;
Expand Down

0 comments on commit 85a834c

Please sign in to comment.