Commit b8d74644 authored by Clément Péron's avatar Clément Péron Committed by Thierry Reding
Browse files

pwm: sun4i: Prefer "mod" clock to unnamed



New device tree bindings called the source clock of the module
"mod" when several clocks are defined.

Try to get a clock called "mod" if nothing is found try to get
an unnamed clock.

Reviewed-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarClément Péron <peron.clem@gmail.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent a7fe9856
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -362,9 +362,34 @@ static int sun4i_pwm_probe(struct platform_device *pdev)
	if (IS_ERR(pwm->base))
		return PTR_ERR(pwm->base);

	/*
	 * All hardware variants need a source clock that is divided and
	 * then feeds the counter that defines the output wave form. In the
	 * device tree this clock is either unnamed or called "mod".
	 * Some variants (e.g. H6) need another clock to access the
	 * hardware registers; this is called "bus".
	 * So we request "mod" first (and ignore the corner case that a
	 * parent provides a "mod" clock while the right one would be the
	 * unnamed one of the PWM device) and if this is not found we fall
	 * back to the first clock of the PWM.
	 */
	pwm->clk = devm_clk_get_optional(&pdev->dev, "mod");
	if (IS_ERR(pwm->clk)) {
		if (PTR_ERR(pwm->rst) != -EPROBE_DEFER)
			dev_err(&pdev->dev, "get mod clock failed %pe\n",
				pwm->clk);
		return PTR_ERR(pwm->clk);
	}

	if (!pwm->clk) {
		pwm->clk = devm_clk_get(&pdev->dev, NULL);
	if (IS_ERR(pwm->clk))
		if (IS_ERR(pwm->clk)) {
			if (PTR_ERR(pwm->rst) != -EPROBE_DEFER)
				dev_err(&pdev->dev, "get unnamed clock failed %pe\n",
					pwm->clk);
			return PTR_ERR(pwm->clk);
		}
	}

	pwm->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
	if (IS_ERR(pwm->rst)) {