From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752233AbdAMQCy (ORCPT ); Fri, 13 Jan 2017 11:02:54 -0500 Received: from mail-wm0-f44.google.com ([74.125.82.44]:36723 "EHLO mail-wm0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751010AbdAMQCw (ORCPT ); Fri, 13 Jan 2017 11:02:52 -0500 Date: Fri, 13 Jan 2017 16:06:20 +0000 From: Lee Jones To: Linus Walleij Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] mfd: ab8500-sysctrl: Handle probe deferral Message-ID: <20170113160620.GH6864@dell> References: <20170113095355.5406-1-linus.walleij@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170113095355.5406-1-linus.walleij@linaro.org> User-Agent: Mutt/1.6.2 (2016-07-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 13 Jan 2017, Linus Walleij wrote: > In the current boot, clients making use of the AB8500 sysctrl > may be probed before the ab8500-sysctrl driver. This gives them > -EINVAL, but should rather give -EPROBE_DEFER. > > Before this, the abx500 clock driver didn't probe properly, > and as a result the codec driver in turn using the clocks did > not probe properly. After this patch, everything probes > properly. > > Also add OF compatible-string probing. This driver is all > device tree, so let's just make a drive-by-fix of that as > well. Sneaky! I usually ask for separate patches for this kind of stuff. But hey, it's (just after) Christmas. Applied, thanks. > Signed-off-by: Linus Walleij > --- > drivers/mfd/ab8500-sysctrl.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/drivers/mfd/ab8500-sysctrl.c b/drivers/mfd/ab8500-sysctrl.c > index 80c0efa66ac1..5b0a0850ef69 100644 > --- a/drivers/mfd/ab8500-sysctrl.c > +++ b/drivers/mfd/ab8500-sysctrl.c > @@ -101,7 +101,7 @@ int ab8500_sysctrl_read(u16 reg, u8 *value) > u8 bank; > > if (sysctrl_dev == NULL) > - return -EINVAL; > + return -EPROBE_DEFER; > > bank = (reg >> 8); > if (!valid_bank(bank)) > @@ -117,11 +117,13 @@ int ab8500_sysctrl_write(u16 reg, u8 mask, u8 value) > u8 bank; > > if (sysctrl_dev == NULL) > - return -EINVAL; > + return -EPROBE_DEFER; > > bank = (reg >> 8); > - if (!valid_bank(bank)) > + if (!valid_bank(bank)) { > + pr_err("invalid bank\n"); > return -EINVAL; > + } > > return abx500_mask_and_set_register_interruptible(sysctrl_dev, bank, > (u8)(reg & 0xFF), mask, value); > @@ -148,9 +150,15 @@ static int ab8500_sysctrl_remove(struct platform_device *pdev) > return 0; > } > > +static const struct of_device_id ab8500_sysctrl_match[] = { > + { .compatible = "stericsson,ab8500-sysctrl", }, > + {} > +}; > + > static struct platform_driver ab8500_sysctrl_driver = { > .driver = { > .name = "ab8500-sysctrl", > + .of_match_table = ab8500_sysctrl_match, > }, > .probe = ab8500_sysctrl_probe, > .remove = ab8500_sysctrl_remove, -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog