From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753605AbdDDKgV (ORCPT ); Tue, 4 Apr 2017 06:36:21 -0400 Received: from mga05.intel.com ([192.55.52.43]:5808 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752732AbdDDKfv (ORCPT ); Tue, 4 Apr 2017 06:35:51 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,275,1486454400"; d="scan'208";a="68936290" Message-ID: <1491302057.708.113.camel@linux.intel.com> Subject: Re: [PATCH] reset: add exported __reset_control_get, return NULL if optional From: Andy Shevchenko To: Philipp Zabel , linux-kernel@vger.kernel.org Cc: Ramiro Oliveira Date: Tue, 04 Apr 2017 13:34:17 +0300 In-Reply-To: <20170404081808.11975-1-p.zabel@pengutronix.de> References: <20170404081808.11975-1-p.zabel@pengutronix.de> Organization: Intel Finland Oy Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.22.6-1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2017-04-04 at 10:18 +0200, Philipp Zabel wrote: > Rename the internal __reset_control_get/put functions to > __reset_control_get/put_internal and add an exported > __reset_control_get equivalent to __of_reset_control_get > that takes a struct device parameter. > This avoids the confusing call to __of_reset_control_get in > the non-DT case and fixes the devm_reset_control_get_optional > function to return NULL if RESET_CONTROLLER is enabled but > dev->of_node == NULL. > > Fixes: bb475230b8e5 ("reset: make optional functions really optional") > Reported-by: Andy Shevchenko > Cc: Andy Shevchenko > Cc: Ramiro Oliveira > Signed-off-by: Philipp Zabel Tested-by: Andy Shevchenko (At least if fixes serial console on x86 boards with no legacy UART) > --- >  drivers/reset/core.c  | 22 ++++++++++++++++------ >  include/linux/reset.h | 22 ++++++++++++++-------- >  2 files changed, 30 insertions(+), 14 deletions(-) > > diff --git a/drivers/reset/core.c b/drivers/reset/core.c > index f1e5e65388bb5..cd739d2fa1603 100644 > --- a/drivers/reset/core.c > +++ b/drivers/reset/core.c > @@ -275,7 +275,7 @@ int reset_control_status(struct reset_control > *rstc) >  } >  EXPORT_SYMBOL_GPL(reset_control_status); >   > -static struct reset_control *__reset_control_get( > +static struct reset_control *__reset_control_get_internal( >   struct reset_controller_dev *rcdev, >   unsigned int index, bool shared) >  { > @@ -308,7 +308,7 @@ static struct reset_control *__reset_control_get( >   return rstc; >  } >   > -static void __reset_control_put(struct reset_control *rstc) > +static void __reset_control_put_internal(struct reset_control *rstc) >  { >   lockdep_assert_held(&reset_list_mutex); >   > @@ -377,7 +377,7 @@ struct reset_control > *__of_reset_control_get(struct device_node *node, >   } >   >   /* reset_list_mutex also protects the rcdev's reset_control > list */ > - rstc = __reset_control_get(rcdev, rstc_id, shared); > + rstc = __reset_control_get_internal(rcdev, rstc_id, shared); >   >   mutex_unlock(&reset_list_mutex); >   > @@ -385,6 +385,17 @@ struct reset_control > *__of_reset_control_get(struct device_node *node, >  } >  EXPORT_SYMBOL_GPL(__of_reset_control_get); >   > +struct reset_control *__reset_control_get(struct device *dev, const > char *id, > +   int index, bool shared, > bool optional) > +{ > + if (dev->of_node) > + return __of_reset_control_get(dev->of_node, id, > index, shared, > +       optional); > + > + return optional ? NULL : ERR_PTR(-EINVAL); > +} > +EXPORT_SYMBOL_GPL(__reset_control_get); > + >  /** >   * reset_control_put - free the reset controller >   * @rstc: reset controller > @@ -396,7 +407,7 @@ void reset_control_put(struct reset_control *rstc) >   return; >   >   mutex_lock(&reset_list_mutex); > - __reset_control_put(rstc); > + __reset_control_put_internal(rstc); >   mutex_unlock(&reset_list_mutex); >  } >  EXPORT_SYMBOL_GPL(reset_control_put); > @@ -417,8 +428,7 @@ struct reset_control > *__devm_reset_control_get(struct device *dev, >   if (!ptr) >   return ERR_PTR(-ENOMEM); >   > - rstc = __of_reset_control_get(dev ? dev->of_node : NULL, > -       id, index, shared, optional); > + rstc = __reset_control_get(dev, id, index, shared, optional); >   if (!IS_ERR(rstc)) { >   *ptr = rstc; >   devres_add(dev, ptr); > diff --git a/include/linux/reset.h b/include/linux/reset.h > index 96fb139bdd08f..13d8681210d54 100644 > --- a/include/linux/reset.h > +++ b/include/linux/reset.h > @@ -15,6 +15,9 @@ int reset_control_status(struct reset_control > *rstc); >  struct reset_control *__of_reset_control_get(struct device_node > *node, >        const char *id, int index, bool > shared, >        bool optional); > +struct reset_control *__reset_control_get(struct device *dev, const > char *id, > +   int index, bool shared, > +   bool optional); >  void reset_control_put(struct reset_control *rstc); >  struct reset_control *__devm_reset_control_get(struct device *dev, >        const char *id, int index, bool > shared, > @@ -72,6 +75,13 @@ static inline struct reset_control > *__of_reset_control_get( >   return optional ? NULL : ERR_PTR(-ENOTSUPP); >  } >   > +static inline struct reset_control *__reset_control_get( > + struct device *dev, const > char *id, > + int index, bool shared, bool > optional) > +{ > + return optional ? NULL : ERR_PTR(-ENOTSUPP); > +} > + >  static inline struct reset_control *__devm_reset_control_get( >   struct device *dev, const > char *id, >   int index, bool shared, bool > optional) > @@ -102,8 +112,7 @@ __must_check reset_control_get_exclusive(struct > device *dev, const char *id) >  #ifndef CONFIG_RESET_CONTROLLER >   WARN_ON(1); >  #endif > - return __of_reset_control_get(dev ? dev->of_node : NULL, id, > 0, false, > - > false); > + return __reset_control_get(dev, id, 0, false, false); >  } >   >  /** > @@ -131,22 +140,19 @@ __must_check reset_control_get_exclusive(struct > device *dev, const char *id) >  static inline struct reset_control *reset_control_get_shared( >   struct device *dev, const > char *id) >  { > - return __of_reset_control_get(dev ? dev->of_node : NULL, id, > 0, true, > - > false); > + return __reset_control_get(dev, id, 0, true, false); >  } >   >  static inline struct reset_control > *reset_control_get_optional_exclusive( >   struct device *dev, const > char *id) >  { > - return __of_reset_control_get(dev ? dev->of_node : NULL, id, > 0, false, > - > true); > + return __reset_control_get(dev, id, 0, false, true); >  } >   >  static inline struct reset_control > *reset_control_get_optional_shared( >   struct device *dev, const > char *id) >  { > - return __of_reset_control_get(dev ? dev->of_node : NULL, id, > 0, true, > - > true); > + return __reset_control_get(dev, id, 0, true, true); >  } >   >  /** -- Andy Shevchenko Intel Finland Oy