>Четверг, 17 января 2019, 10:49 +03:00 от Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>: ... >> >> >> >On Sat, Dec 22, 2018 at 06:54:34PM +0300, Alexander Shiyan wrote: >> >> >> >> As mentioned in the patch bdb0066df96e ("mfd: syscon: Decouple syscon >> >> >> >> interface from platform devices"), we need to switch to using the >> >> >> >> syscon_regmap_lookup_by_phandle() function. This patch makes this change. >> >> >> >> >> >> >> >> Signed-off-by: Alexander Shiyan < shc_work@xxxxxxx > >> >> >> >> --- >> >> >> >> drivers/input/keyboard/clps711x-keypad.c | 3 +-- >> >> >> >> 1 file changed, 1 insertion(+), 2 deletions(-) >> >> >> >> >> >> >> >> diff --git a/drivers/input/keyboard/clps711x-keypad.c b/drivers/input/keyboard/clps711x-keypad.c >> >> >> >> index e319f74..f7f49da 100644 >> >> >> >> --- a/drivers/input/keyboard/clps711x-keypad.c >> >> >> >> +++ b/drivers/input/keyboard/clps711x-keypad.c >> >> >> >> @@ -100,8 +100,7 @@ static int clps711x_keypad_probe(struct platform_device *pdev) >> >> >> >> if (!priv) >> >> >> >> return -ENOMEM; >> >> >> >> >> >> >> >> -priv->syscon = >> >> >> >> -syscon_regmap_lookup_by_compatible("cirrus,ep7209-syscon1"); >> >> >> >> +priv->syscon = syscon_regmap_lookup_by_phandle(np, "syscon"); >> ... >> >> >I would love to just apply the patch as is, but I am afraid we need to >> >> >keep compatibility with older DTSes. >> >> >> >> Ok, will it be better if we keep the syscon_regmap_lookup_by_compatible() >> >> call as a fallback method for getting syscon phandle? >> > >> >Yes, please. Just make sure you do not try to fall back if >> >syscon_regmap_lookup_by_phandle() returns -EPROBE_DEFER, but for all >> >other errors we should try old syscon_regmap_lookup_by_compatible(). >> >> This check is no longer needed after the patch mentioned in the description. > >Why exactly? As far as I understand, syscon_regmap_lookup_by_phandle() calls syscon_node_to_regmap(), where it tries to find already registered syscon devices, then, if absent, of_syscon_register() is called, so we always get a syscon device or get an -ENODEV error. The code below works fine for me. priv->syscon = syscon_regmap_lookup_by_phandle(np, "syscon"); if (IS_ERR(priv->syscon)) { /* falling back to old bindings */ priv->syscon = syscon_regmap_lookup_by_compatible("cirrus,ep7209-syscon1"); if (IS_ERR(priv->syscon)) return PTR_ERR(priv->syscon); else dev_warn(dev, "Please migrate driver bindings" " to use syscon phandle.\n"); } ---