linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Philipp Zabel <p.zabel@pengutronix.de>, linux-kernel@vger.kernel.org
Cc: Ramiro Oliveira <Ramiro.Oliveira@synopsys.com>
Subject: Re: [PATCH] reset: add exported __reset_control_get, return NULL if optional
Date: Tue, 04 Apr 2017 13:34:17 +0300	[thread overview]
Message-ID: <1491302057.708.113.camel@linux.intel.com> (raw)
In-Reply-To: <20170404081808.11975-1-p.zabel@pengutronix.de>

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 <andriy.shevchenko@linux.intel.com>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Ramiro Oliveira <Ramiro.Oliveira@synopsys.com>
> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>

Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

(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 <andriy.shevchenko@linux.intel.com>
Intel Finland Oy

      reply	other threads:[~2017-04-04 10:36 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-04  8:18 [PATCH] reset: add exported __reset_control_get, return NULL if optional Philipp Zabel
2017-04-04 10:34 ` Andy Shevchenko [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1491302057.708.113.camel@linux.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=Ramiro.Oliveira@synopsys.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).