[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4022372.WfP88Fa4Lu@jernej-laptop>
Date: Mon, 29 Jul 2019 17:48:36 +0200
From: Jernej Škrabec <jernej.skrabec@...l.net>
To: Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>
Cc: thierry.reding@...il.com, mripard@...nel.org, wens@...e.org,
robh+dt@...nel.org, mark.rutland@....com,
linux-pwm@...r.kernel.org, devicetree@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-sunxi@...glegroups.com, kernel@...gutronix.de
Subject: Re: [PATCH 3/6] pwm: sun4i: Add a quirk for bus clock
Hi Uwe,
Dne ponedeljek, 29. julij 2019 ob 08:38:25 CEST je Uwe Kleine-König
napisal(a):
> Hello,
>
> On Fri, Jul 26, 2019 at 08:40:42PM +0200, Jernej Skrabec wrote:
> > H6 PWM core needs bus clock to be enabled in order to work.
> >
> > Add a quirk for it.
> >
> > Signed-off-by: Jernej Skrabec <jernej.skrabec@...l.net>
> > ---
> >
> > drivers/pwm/pwm-sun4i.c | 15 +++++++++++++++
> > 1 file changed, 15 insertions(+)
> >
> > diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
> > index 1b7be8fbde86..7d3ac3f2dc3f 100644
> > --- a/drivers/pwm/pwm-sun4i.c
> > +++ b/drivers/pwm/pwm-sun4i.c
> > @@ -72,6 +72,7 @@ static const u32 prescaler_table[] = {
> >
> > };
> >
> > struct sun4i_pwm_data {
> >
> > + bool has_bus_clock;
> >
> > bool has_prescaler_bypass;
> > bool has_reset;
> > unsigned int npwm;
> >
> > @@ -79,6 +80,7 @@ struct sun4i_pwm_data {
> >
> > struct sun4i_pwm_chip {
> >
> > struct pwm_chip chip;
> >
> > + struct clk *bus_clk;
> >
> > struct clk *clk;
> > struct reset_control *rst;
> > void __iomem *base;
> >
> > @@ -382,6 +384,16 @@ static int sun4i_pwm_probe(struct platform_device
> > *pdev)>
> > reset_control_deassert(pwm->rst);
> >
> > }
> >
> > + if (pwm->data->has_bus_clock) {
> > + pwm->bus_clk = devm_clk_get(&pdev->dev, "bus");
>
> Similar to my suggestion in patch 2: I'd use devm_clk_get_optional() and
> drop struct sun4i_pwm_data::has_bus_clock.
This one is not so simple. This patch has incorrect logic. Correct logic would
be to use "devm_clk_get(&pdev->dev, NULL)" for variants without bus clock as
it is done already and "devm_clk_get(&pdev->dev, "bus")" and
"devm_clk_get(&pdev->dev, "mod")" for variants with bus clock.
You see, DT nodes for other variants don't have clock-names property at all.
If it would be specified, it would be "mod". So, DT nodes for other variants
have "mod" clock specified on first place (the only one), while H6 DT node will
have "mod" clock specified on second place (see one of e-mails from Maxime), so
"NULL" can't be used instead of "mod" in both cases.
So I would say quirk is beneficial to know if you have to look up clocks by
name or you just take first clock specified.
Best regards,
Jernej
>
> Best regards
> Uwe
Powered by blists - more mailing lists