On 10/14/21 11:09 AM, Simon Glass wrote:
Hi Michal,

On Wed, 6 Oct 2021 at 08:19, Michal Simek <[email protected]> wrote:

When DT node has pwm-cells property it shouldn't be bind as timer driver
but as PWM driver. That's why make sure that this property is checked.

Signed-off-by: Michal Simek <[email protected]>
---

Changes in v3:
- New patch in series

 drivers/timer/cadence-ttc.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)


Why not have two compatible strings?

As I understand it, because the hardware is the same, it should have the
same compatible string.

diff --git a/drivers/timer/cadence-ttc.c b/drivers/timer/cadence-ttc.c
index 2f95d45ecd7a..2eff45060ad6 100644
--- a/drivers/timer/cadence-ttc.c
+++ b/drivers/timer/cadence-ttc.c
@@ -97,6 +97,17 @@ static int cadence_ttc_of_to_plat(struct udevice *dev)
        return 0;
 }

+static int cadence_ttc_bind(struct udevice *dev)
+{
+       const char *cells;
+
+       cells = dev_read_prop(dev, "#pwm-cells", NULL);
+       if (cells)
+               return -ENODEV;

We can read properties in bind() when necessary, but this is very
strange...it seems like the bindings are messed up?

This is the preferred way to select between a PWM and a timer driver.
See e.g. Rob's comment for xlnx,pwm at [1].

--Sean

[1] 
https://lore.kernel.org/linux-pwm/[email protected]/

+
+       return 0;
+}
+
 static const struct timer_ops cadence_ttc_ops = {
        .get_count = cadence_ttc_get_count,
 };
@@ -114,4 +125,5 @@ U_BOOT_DRIVER(cadence_ttc) = {
        .priv_auto      = sizeof(struct cadence_ttc_priv),
        .probe = cadence_ttc_probe,
        .ops = &cadence_ttc_ops,
+       .bind = cadence_ttc_bind,
 };
--
2.33.0


Regards,
Simon

Reply via email to