Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752104AbdCPNFK (ORCPT ); Thu, 16 Mar 2017 09:05:10 -0400 Received: from mail-vk0-f51.google.com ([209.85.213.51]:36816 "EHLO mail-vk0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751735AbdCPNFI (ORCPT ); Thu, 16 Mar 2017 09:05:08 -0400 MIME-Version: 1.0 In-Reply-To: <20170306141716.19120-3-romain.perier@collabora.com> References: <20170306141716.19120-1-romain.perier@collabora.com> <20170306141716.19120-3-romain.perier@collabora.com> From: Ulf Hansson Date: Thu, 16 Mar 2017 14:05:04 +0100 Message-ID: Subject: Re: [PATCH v2 2/4] mmc: pwrseq-simple: Add optional op. for post_ios_power_on callback To: Romain Perier Cc: "linux-mmc@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "open list:ARM/Rockchip SoC..." , Heiko Stuebner , Sjoerd Simons Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2620 Lines: 68 On 6 March 2017 at 15:17, Romain Perier wrote: > Some devices require to do their entire power sequence after that the > power supply of the MMC has been powered on. This can be done by > only implementing the optional post_ios_power_on() callback that rely on > pre_power_on/post_power_on functions, other functions being NULL. Then > we introduce a new DT property "post_ios_power_on", when this property > is set the driver will use its post_ios_power_on operations, otherwise > it fallbacks to the default operations with pre_power_on/post_power_on. > > Signed-off-by: Romain Perier > --- > > Changes in v2: > - Added missing power_off function in mmc_pwrseq_post_ios_ops > > drivers/mmc/core/pwrseq_simple.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/pwrseq_simple.c b/drivers/mmc/core/pwrseq_simple.c > index 1304160..e27019f 100644 > --- a/drivers/mmc/core/pwrseq_simple.c > +++ b/drivers/mmc/core/pwrseq_simple.c > @@ -84,12 +84,23 @@ static void mmc_pwrseq_simple_power_off(struct mmc_host *host) > } > } > > +static void mmc_pwrseq_simple_post_ios_power_on(struct mmc_host *host) > +{ > + mmc_pwrseq_simple_pre_power_on(host); > + mmc_pwrseq_simple_post_power_on(host); > +} > + > static const struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = { > .pre_power_on = mmc_pwrseq_simple_pre_power_on, > .post_power_on = mmc_pwrseq_simple_post_power_on, > .power_off = mmc_pwrseq_simple_power_off, > }; > > +static const struct mmc_pwrseq_ops mmc_pwrseq_post_ios_ops = { > + .post_ios_power_on = mmc_pwrseq_simple_post_ios_power_on, > + .power_off = mmc_pwrseq_simple_power_off, > +}; > + > static const struct of_device_id mmc_pwrseq_simple_of_match[] = { > { .compatible = "mmc-pwrseq-simple",}, > {/* sentinel */}, > @@ -121,7 +132,10 @@ static int mmc_pwrseq_simple_probe(struct platform_device *pdev) > &pwrseq->post_power_on_delay_ms); > > pwrseq->pwrseq.dev = dev; > - pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; > + if (device_property_read_bool(dev, "post-ios-power-on")) > + pwrseq->pwrseq.ops = &mmc_pwrseq_post_ios_ops; No, this is not going to work "post-ios-power-on" is never going to be accepted as new mmc pwrseq DT binding. > + else > + pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; > pwrseq->pwrseq.owner = THIS_MODULE; > platform_set_drvdata(pdev, pwrseq); > > -- > 2.9.3 > Kind regards Uffe