diff options
author | Lee Jones <lee.jones@linaro.org> | 2016-08-16 05:35:06 -0400 |
---|---|---|
committer | Thierry Reding <thierry.reding@gmail.com> | 2016-09-08 04:55:11 -0400 |
commit | 85a834c42a491deed9ac5bca549b93b7a5455d84 (patch) | |
tree | 284fe84bd46ad1f5035d6f63862fb8c09af7f2ba | |
parent | c97267ae831da2711e9592398d490dbd1f4d5ddd (diff) |
pwm: sti: It's now valid for number of PWM channels to be zero
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>
-rw-r--r-- | drivers/pwm/pwm-sti.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c index 95014f57a9c6..9a1ca1986c30 100644 --- a/drivers/pwm/pwm-sti.c +++ b/drivers/pwm/pwm-sti.c | |||
@@ -483,6 +483,11 @@ static int sti_pwm_probe_dt(struct sti_pwm_chip *pc) | |||
483 | if (!ret) | 483 | if (!ret) |
484 | cdata->cpt_num_devs = num_devs; | 484 | cdata->cpt_num_devs = num_devs; |
485 | 485 | ||
486 | if (!cdata->pwm_num_devs && !cdata->cpt_num_devs) { | ||
487 | dev_err(dev, "No channels configured\n"); | ||
488 | return -EINVAL; | ||
489 | } | ||
490 | |||
486 | reg_fields = cdata->reg_fields; | 491 | reg_fields = cdata->reg_fields; |
487 | 492 | ||
488 | pc->prescale_low = devm_regmap_field_alloc(dev, pc->regmap, | 493 | pc->prescale_low = devm_regmap_field_alloc(dev, pc->regmap, |
@@ -573,7 +578,7 @@ static int sti_pwm_probe(struct platform_device *pdev) | |||
573 | cdata->reg_fields = &sti_pwm_regfields[0]; | 578 | cdata->reg_fields = &sti_pwm_regfields[0]; |
574 | cdata->max_prescale = 0xff; | 579 | cdata->max_prescale = 0xff; |
575 | cdata->max_pwm_cnt = 255; | 580 | cdata->max_pwm_cnt = 255; |
576 | cdata->pwm_num_devs = 1; | 581 | cdata->pwm_num_devs = 0; |
577 | cdata->cpt_num_devs = 0; | 582 | cdata->cpt_num_devs = 0; |
578 | 583 | ||
579 | pc->cdata = cdata; | 584 | pc->cdata = cdata; |
@@ -585,6 +590,9 @@ static int sti_pwm_probe(struct platform_device *pdev) | |||
585 | if (ret) | 590 | if (ret) |
586 | return ret; | 591 | return ret; |
587 | 592 | ||
593 | if (!cdata->pwm_num_devs) | ||
594 | goto skip_pwm; | ||
595 | |||
588 | pc->pwm_clk = of_clk_get_by_name(dev->of_node, "pwm"); | 596 | pc->pwm_clk = of_clk_get_by_name(dev->of_node, "pwm"); |
589 | if (IS_ERR(pc->pwm_clk)) { | 597 | if (IS_ERR(pc->pwm_clk)) { |
590 | dev_err(dev, "failed to get PWM clock\n"); | 598 | dev_err(dev, "failed to get PWM clock\n"); |
@@ -597,6 +605,10 @@ static int sti_pwm_probe(struct platform_device *pdev) | |||
597 | return ret; | 605 | return ret; |
598 | } | 606 | } |
599 | 607 | ||
608 | skip_pwm: | ||
609 | if (!cdata->cpt_num_devs) | ||
610 | goto skip_cpt; | ||
611 | |||
600 | pc->cpt_clk = of_clk_get_by_name(dev->of_node, "capture"); | 612 | pc->cpt_clk = of_clk_get_by_name(dev->of_node, "capture"); |
601 | if (IS_ERR(pc->cpt_clk)) { | 613 | if (IS_ERR(pc->cpt_clk)) { |
602 | dev_err(dev, "failed to get PWM capture clock\n"); | 614 | dev_err(dev, "failed to get PWM capture clock\n"); |
@@ -609,6 +621,7 @@ static int sti_pwm_probe(struct platform_device *pdev) | |||
609 | return ret; | 621 | return ret; |
610 | } | 622 | } |
611 | 623 | ||
624 | skip_cpt: | ||
612 | pc->chip.dev = dev; | 625 | pc->chip.dev = dev; |
613 | pc->chip.ops = &sti_pwm_ops; | 626 | pc->chip.ops = &sti_pwm_ops; |
614 | pc->chip.base = -1; | 627 | pc->chip.base = -1; |