On 15/05/2023 21:19, Andrew Davis wrote: > The DT binding for the reg-mux compatible states it can be used when the > "parent device of mux controller is not syscon device". It also allows > for a reg property. When the parent device is indeed not a syscon device, > nor is it a regmap provider, we should fallback to using that reg > property to identify the address space to use for this mux. > > Signed-off-by: Andrew Davis <afd@xxxxxx> > --- > drivers/mux/mmio.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/mux/mmio.c b/drivers/mux/mmio.c > index 44a7a0e885b8..42e00b9fd0a9 100644 > --- a/drivers/mux/mmio.c > +++ b/drivers/mux/mmio.c > @@ -44,10 +44,13 @@ static int mux_mmio_probe(struct platform_device *pdev) > int ret; > int i; > > - if (of_device_is_compatible(np, "mmio-mux")) > + if (of_device_is_compatible(np, "mmio-mux")) { > regmap = syscon_node_to_regmap(np->parent); > - else > - regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV); > + } else { > + regmap = dev_get_regmap(dev->parent, NULL); > + if (!regmap) > + regmap = device_node_to_regmap(np) ?: ERR_PTR(-ENODEV); Unless I miss something obvious, the original code is simply bogus and wrong. I would like to give here Rb tag... but maybe I miss something obvious. Why mux cannot be a device with MMIO itself? Binding allows it which would be perfectly proper description of hardware. Best regards, Krzysztof