Message ID | 20190220021429.4910-1-andrew.smirnov@gmail.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Commit | 8217a7a2c76259ff1f2623b60c3bcede052cdb49 |
Headers | show |
Series | soc: imx: gpcv2: Make use of regmap_read_poll_timeout() | expand |
Am Dienstag, den 19.02.2019, 18:14 -0800 schrieb Andrey Smirnov: > Replace explicit polling loop with a call to > regmap_read_poll_timeout() to avoid code repetition. Also fix > misspelled "failed" while at it. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Chris Healy <cphealy@gmail.com> > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org Reviewed-by: Lucas Stach <l.stach@pengutronix.de> > --- > drivers/soc/imx/gpcv2.c | 39 ++++++++++++++------------------------- > 1 file changed, 14 insertions(+), 25 deletions(-) > > diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c > index 176f473127b6..e06bf12a1e4b 100644 > --- a/drivers/soc/imx/gpcv2.c > +++ b/drivers/soc/imx/gpcv2.c > @@ -136,8 +136,8 @@ static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, > GPC_PU_PGC_SW_PUP_REQ : GPC_PU_PGC_SW_PDN_REQ; > const bool enable_power_control = !on; > const bool has_regulator = !IS_ERR(domain->regulator); > - unsigned long deadline; > int i, ret = 0; > + u32 pxx_req; > > regmap_update_bits(domain->regmap, GPC_PGC_CPU_MAPPING, > domain->bits.map, domain->bits.map); > @@ -169,30 +169,19 @@ static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, > * As per "5.5.9.4 Example Code 4" in IMX7DRM.pdf wait > * for PUP_REQ/PDN_REQ bit to be cleared > */ > - deadline = jiffies + msecs_to_jiffies(1); > - while (true) { > - u32 pxx_req; > - > - regmap_read(domain->regmap, offset, &pxx_req); > - > - if (!(pxx_req & domain->bits.pxx)) > - break; > - > - if (time_after(jiffies, deadline)) { > - dev_err(domain->dev, "falied to command PGC\n"); > - ret = -ETIMEDOUT; > - /* > - * If we were in a process of enabling a > - * domain and failed we might as well disable > - * the regulator we just enabled. And if it > - * was the opposite situation and we failed to > - * power down -- keep the regulator on > - */ > - on = !on; > - break; > - } > - > - cpu_relax(); > + ret = regmap_read_poll_timeout(domain->regmap, offset, pxx_req, > + !(pxx_req & domain->bits.pxx), > + 0, USEC_PER_MSEC); > + if (ret) { > + dev_err(domain->dev, "failed to command PGC\n"); > + /* > + * If we were in a process of enabling a > + * domain and failed we might as well disable > + * the regulator we just enabled. And if it > + * was the opposite situation and we failed to > + * power down -- keep the regulator on > + */ > + on = !on; > } > > if (enable_power_control)
On Tue, Feb 19, 2019 at 06:14:29PM -0800, Andrey Smirnov wrote: > Replace explicit polling loop with a call to > regmap_read_poll_timeout() to avoid code repetition. Also fix > misspelled "failed" while at it. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Chris Healy <cphealy@gmail.com> > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org Applied, thanks.
diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c index 176f473127b6..e06bf12a1e4b 100644 --- a/drivers/soc/imx/gpcv2.c +++ b/drivers/soc/imx/gpcv2.c @@ -136,8 +136,8 @@ static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, GPC_PU_PGC_SW_PUP_REQ : GPC_PU_PGC_SW_PDN_REQ; const bool enable_power_control = !on; const bool has_regulator = !IS_ERR(domain->regulator); - unsigned long deadline; int i, ret = 0; + u32 pxx_req; regmap_update_bits(domain->regmap, GPC_PGC_CPU_MAPPING, domain->bits.map, domain->bits.map); @@ -169,30 +169,19 @@ static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, * As per "5.5.9.4 Example Code 4" in IMX7DRM.pdf wait * for PUP_REQ/PDN_REQ bit to be cleared */ - deadline = jiffies + msecs_to_jiffies(1); - while (true) { - u32 pxx_req; - - regmap_read(domain->regmap, offset, &pxx_req); - - if (!(pxx_req & domain->bits.pxx)) - break; - - if (time_after(jiffies, deadline)) { - dev_err(domain->dev, "falied to command PGC\n"); - ret = -ETIMEDOUT; - /* - * If we were in a process of enabling a - * domain and failed we might as well disable - * the regulator we just enabled. And if it - * was the opposite situation and we failed to - * power down -- keep the regulator on - */ - on = !on; - break; - } - - cpu_relax(); + ret = regmap_read_poll_timeout(domain->regmap, offset, pxx_req, + !(pxx_req & domain->bits.pxx), + 0, USEC_PER_MSEC); + if (ret) { + dev_err(domain->dev, "failed to command PGC\n"); + /* + * If we were in a process of enabling a + * domain and failed we might as well disable + * the regulator we just enabled. And if it + * was the opposite situation and we failed to + * power down -- keep the regulator on + */ + on = !on; } if (enable_power_control)
Replace explicit polling loop with a call to regmap_read_poll_timeout() to avoid code repetition. Also fix misspelled "failed" while at it. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Chris Healy <cphealy@gmail.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org --- drivers/soc/imx/gpcv2.c | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-)