2021-07-22 15:04:20

by Andy Shevchenko

[permalink] [raw]
Subject: [PATCH v1 1/1] serial: max310x: Use clock-names property matching to recognize XTAL

Dennis reported that on ACPI-based systems the clock frequency
isn't enough to configure device properly. We have to respect
the clock source as well. To achieve this match the clock-names
property against "xtal" to recognize crystal connection.

Reported-by: Dennis Giaya <[email protected]>
Signed-off-by: Andy Shevchenko <[email protected]>
---
drivers/tty/serial/max310x.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
index ef11860cd69e..e2ab8d4eb7ad 100644
--- a/drivers/tty/serial/max310x.c
+++ b/drivers/tty/serial/max310x.c
@@ -1271,18 +1271,13 @@ static int max310x_probe(struct device *dev, const struct max310x_devtype *devty
/* Always ask for fixed clock rate from a property. */
device_property_read_u32(dev, "clock-frequency", &uartclk);

- s->clk = devm_clk_get_optional(dev, "osc");
+ xtal = device_property_match_string(dev, "clock-names", "xtal") >= 0;
+ if (xtal)
+ s->clk = devm_clk_get_optional(dev, "xtal");
+ else
+ s->clk = devm_clk_get_optional(dev, "osc");
if (IS_ERR(s->clk))
return PTR_ERR(s->clk);
- if (s->clk) {
- xtal = false;
- } else {
- s->clk = devm_clk_get_optional(dev, "xtal");
- if (IS_ERR(s->clk))
- return PTR_ERR(s->clk);
-
- xtal = true;
- }

ret = clk_prepare_enable(s->clk);
if (ret)
--
2.30.2


2021-07-22 15:48:05

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] serial: max310x: Use clock-names property matching to recognize XTAL

On Thu, Jul 22, 2021 at 06:02:33PM +0300, Andy Shevchenko wrote:
> Dennis reported that on ACPI-based systems the clock frequency
> isn't enough to configure device properly. We have to respect
> the clock source as well. To achieve this match the clock-names
> property against "xtal" to recognize crystal connection.

Dennis, please test this.

...

> - s->clk = devm_clk_get_optional(dev, "osc");
> + xtal = device_property_match_string(dev, "clock-names", "xtal") >= 0;

Meanwhile I will change this (not affects the testing in your case) to actually
negative one as:

..., "osc") < 0;

to be compatible with the original flow (in case there are two clock names, the
"osc" has a priority).


--
With Best Regards,
Andy Shevchenko


2021-07-22 21:07:20

by Dennis Giaya

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] serial: max310x: Use clock-names property matching to recognize XTAL

Andy,

I've tested this out on my hardware that uses an external oscillator
'osc' (as opposed to external crystal 'xtal').

With the relevant asl
Package () {"compatible", "maxim,max14830"},
Package ()
{"clock-frequency", 19200000},
Package () {"clock-names", "osc"},

Previously, the driver logic would default to 'xtal' and then compare
against the narrower frequency range and throw an error because 19.2MHz
was not allowed. With your patch, it proceeds as 'osc' and appears to
work as intended.

Thanks!
Dennis


On Thu, 2021-07-22 at 18:45 +0300, Andy Shevchenko wrote:
> On Thu, Jul 22, 2021 at 06:02:33PM +0300, Andy Shevchenko wrote:
> > Dennis reported that on ACPI-based systems the clock frequency
> > isn't enough to configure device properly. We have to respect
> > the clock source as well. To achieve this match the clock-names
> > property against "xtal" to recognize crystal connection.
>
> Dennis, please test this.
>
> ...
>
> > - s->clk = devm_clk_get_optional(dev, "osc");
> > + xtal = device_property_match_string(dev, "clock-names", "xtal")
> > >= 0;
>
> Meanwhile I will change this (not affects the testing in your case)
> to actually
> negative one as:
>
> ..., "osc") < 0;
>
> to be compatible with the original flow (in case there are two clock
> names, the
> "osc" has a priority).
>
>


Attachments:
smime.p7s (5.49 kB)

2021-07-23 12:29:57

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] serial: max310x: Use clock-names property matching to recognize XTAL

On Thu, Jul 22, 2021 at 09:05:13PM +0000, Dennis Giaya wrote:
> Andy,
>
> I've tested this out on my hardware that uses an external oscillator
> 'osc' (as opposed to external crystal 'xtal').
>
> With the relevant asl
> Package () {"compatible", "maxim,max14830"},
> Package ()
> {"clock-frequency", 19200000},
> Package () {"clock-names", "osc"},
>
> Previously, the driver logic would default to 'xtal' and then compare
> against the narrower frequency range and throw an error because 19.2MHz
> was not allowed. With your patch, it proceeds as 'osc' and appears to
> work as intended.

Thanks for testing!
I assume I may convert above to the Tested-by: or equivalent tag.

JFYI, in OSS mailing lists we do not top post.


--
With Best Regards,
Andy Shevchenko