linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: viresh.kumar@st.com (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3 1/8] CLKDEV: Add helper routines to allocate and add clkdevs for given struct clk *
Date: Tue, 1 May 2012 14:15:33 +0530	[thread overview]
Message-ID: <4F9FA2AD.4050904@st.com> (raw)
In-Reply-To: <20120428110635.GQ24211@n2100.arm.linux.org.uk>

On 4/28/2012 4:36 PM, Russell King - ARM Linux wrote:
> diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
> index 6db161f..2000c6b 100644
> --- a/drivers/clk/clkdev.c
> +++ b/drivers/clk/clkdev.c
> @@ -116,8 +116,9 @@ struct clk_lookup_alloc {
>  	char	con_id[MAX_CON_ID];
>  };
>  
> -struct clk_lookup * __init_refok
> -clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
> +static struct clk_lookup * __init_refok
> +vclkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt,
> +	va_list ap)
>  {
>  	struct clk_lookup_alloc *cla;
>  
> @@ -132,16 +133,25 @@ clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
>  	}
>  
>  	if (dev_fmt) {
> -		va_list ap;
> -
> -		va_start(ap, dev_fmt);
>  		vscnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap);
>  		cla->cl.dev_id = cla->dev_id;
> -		va_end(ap);
>  	}
>  
>  	return &cla->cl;
>  }
> +
> +struct clk_lookup * __init_refok
> +clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...)
> +{
> +	struct clk_lookup *cl;
> +	va_list ap;
> +
> +	va_start(ap, dev_fmt);
> +	cl = vclkdev_alloc(clk, con_id, dev_fmt, ap);
> +	va_end(ap);
> +
> +	return cl;
> +}
>  EXPORT_SYMBOL(clkdev_alloc);
>  
>  int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
> @@ -173,3 +183,65 @@ void clkdev_drop(struct clk_lookup *cl)
>  	kfree(cl);
>  }
>  EXPORT_SYMBOL(clkdev_drop);
> +
> +/**
> + * clk_register_clkdev - register one clock lookup for a struct clk
> + * @clk: struct clk to associate with all clk_lookups
> + * @con_id: connection ID string on device
> + * @dev_id: format string describing device name
> + *
> + * con_id or dev_id may be NULL as a wildcard, just as in the rest of
> + * clkdev.
> + *
> + * To make things easier for mass registration, we detect error clks
> + * from a previous clk_register() call, and return the error code for
> + * those.  This is to permit this function to be called immediately after
> + * clk_register().
> + */
> +int clk_register_clkdev(struct clk *clk, const char *con_id,
> +	const char *dev_fmt, ...)
> +{
> +	struct clk_lookup *cl;
> +	va_list ap;
> +
> +	if (IS_ERR(clk))
> +		return PTR_ERR(clk);
> +
> +	va_start(ap, dev_fmt);
> +	cl = vclkdev_alloc(clk, con_id, dev_fmt, ap);
> +	va_end(ap);
> +
> +	if (!cl)
> +		return -ENOMEM;
> +
> +	clkdev_add(cl);
> +
> +	return 0;
> +}
> +
> +/**
> + * clk_register_clkdevs - register a set of clk_lookup for a struct clk
> + * @clk: struct clk to associate with all clk_lookups
> + * @cl: array of clk_lookup structures with con_id and dev_id pre-initialized
> + * @num: number of clk_lookup structures to register
> + *
> + * To make things easier for mass registration, we detect error clks
> + * from a previous clk_register() call, and return the error code for
> + * those.  This is to permit this function to be called immediately after
> + * clk_register().
> + */
> +int clk_register_clkdevs(struct clk *clk, struct clk_lookup *cl, size_t num)
> +{
> +	unsigned i;
> +
> +	if (IS_ERR(clk))
> +		return PTR_ERR(clk);
> +
> +	for (i = 0; i < num; i++) {
> +		cl->clk = clk;
> +		clkdev_add(cl);
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(clk_register_clkdevs);
> diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h
> index d9a4fd0..a6a6f60 100644
> --- a/include/linux/clkdev.h
> +++ b/include/linux/clkdev.h
> @@ -40,4 +40,7 @@ void clkdev_drop(struct clk_lookup *cl);
>  void clkdev_add_table(struct clk_lookup *, size_t);
>  int clk_add_alias(const char *, const char *, char *, struct device *);
>  
> +int clk_register_clkdev(struct clk *, const char *, const char *, ...);
> +int clk_register_clkdevs(struct clk *, struct clk_lookup *, size_t);
> +
>  #endif

Reviewed-by: Viresh Kumar <viresh.kumar@st.com>

-- 
viresh

  reply	other threads:[~2012-05-01  8:45 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-24  6:50 [PATCH V3 0/8] SPEAr: Move to common clock framework Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 1/8] CLKDEV: Add helper routines to allocate and add clkdevs for given struct clk * Viresh Kumar
2012-04-26  7:47   ` Russell King - ARM Linux
2012-04-26 10:28     ` Viresh Kumar
2012-04-28  9:52       ` Russell King - ARM Linux
2012-04-28 11:01         ` Sascha Hauer
2012-04-28 11:06           ` Russell King - ARM Linux
2012-05-01  8:45             ` Viresh Kumar [this message]
2012-05-01 12:31             ` Shawn Guo
2012-05-02  9:54               ` Russell King - ARM Linux
2012-05-02 13:59                 ` Shawn Guo
2012-05-02 14:13                   ` Russell King - ARM Linux
2012-04-30  8:08         ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 2/8] clk: add a fixed factor clock Viresh Kumar
2012-04-27  4:43   ` Viresh Kumar
2012-05-02  9:48   ` Sascha Hauer
2012-05-02 11:56     ` Viresh Kumar
2012-05-02 22:41       ` Mike Turquette
2012-05-02 22:44         ` Mike Turquette
2012-05-02 23:31           ` Russell King - ARM Linux
2012-05-03  5:32         ` Viresh Kumar
2012-05-03  6:37           ` Sascha Hauer
2012-05-03  9:48             ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 3/8] SPEAr: clk: Add VCO-PLL Synthesizer clock Viresh Kumar
2012-04-27  4:44   ` Viresh Kumar
2012-05-03  5:47   ` Viresh Kumar
2012-05-03  9:49   ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 4/8] SPEAr: clk: Add Auxiliary " Viresh Kumar
2012-04-27  4:45   ` Viresh Kumar
2012-05-03  5:47   ` Viresh Kumar
2012-05-03  9:50   ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 5/8] SPEAr: clk: Add Fractional " Viresh Kumar
2012-04-27  4:45   ` Viresh Kumar
2012-05-03  5:46   ` Viresh Kumar
2012-05-03  9:51   ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 6/8] SPEAr: clk: Add General Purpose Timer " Viresh Kumar
2012-04-27  4:46   ` Viresh Kumar
2012-05-03  5:43   ` Viresh Kumar
2012-05-03  9:51   ` Viresh Kumar
2012-04-24  6:50 ` [PATCH V3 7/8] SPEAr: Call clk_prepare() before calling clk_enable Viresh Kumar
2012-04-27  4:42 ` [PATCH V3 0/8] SPEAr: Move to common clock framework Viresh Kumar
2012-04-27 17:50   ` Turquette, Mike

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=4F9FA2AD.4050904@st.com \
    --to=viresh.kumar@st.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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).