All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: Alisa-Dariana Roman <alisadariana@gmail.com>,
	Alisa-Dariana Roman <alisa.roman@analog.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	 Michael Hennerich <michael.hennerich@analog.com>,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	 linux-kernel@vger.kernel.org
Cc: Lars-Peter Clausen <lars@metafoo.de>,
	Jonathan Cameron <jic23@kernel.org>,
	 Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>
Subject: Re: [PATCH v7 4/4] iio: adc: ad7192: Add clock provider
Date: Thu, 18 Jul 2024 16:11:29 +0200	[thread overview]
Message-ID: <5cf5e7d388813fca604b7fc5bdb3bb7296255217.camel@gmail.com> (raw)
In-Reply-To: <20240717212535.8348-5-alisa.roman@analog.com>

On Thu, 2024-07-18 at 00:25 +0300, Alisa-Dariana Roman wrote:
> Internal clock of AD719X devices can be made available on MCLK2 pin. Add
> clock provider to support this functionality when clock cells property
> is present.
> 
> Signed-off-by: Alisa-Dariana Roman <alisa.roman@analog.com>
> ---

minor thing below you may consider if a re-spin is needed...

Reviewed-by: Nuno Sa <nuno.sa@analog.com>

>  drivers/iio/adc/ad7192.c | 92 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/drivers/iio/adc/ad7192.c b/drivers/iio/adc/ad7192.c
> index 042319f0c641..3f803b1eefcc 100644
> --- a/drivers/iio/adc/ad7192.c
> +++ b/drivers/iio/adc/ad7192.c
> @@ -8,6 +8,7 @@
>  #include <linux/interrupt.h>
>  #include <linux/bitfield.h>
>  #include <linux/clk.h>
> +#include <linux/clk-provider.h>
>  #include <linux/device.h>
>  #include <linux/kernel.h>
>  #include <linux/slab.h>
> @@ -201,6 +202,7 @@ struct ad7192_chip_info {
>  struct ad7192_state {
>  	const struct ad7192_chip_info	*chip_info;
>  	struct clk			*mclk;
> +	struct clk_hw			int_clk_hw;
>  	u16				int_vref_mv;
>  	u32				aincom_mv;
>  	u32				fclk;
> @@ -406,6 +408,91 @@ static const char *const ad7192_clock_names[] = {
>  	"mclk"
>  };
>  
> +static struct ad7192_state *clk_hw_to_ad7192(struct clk_hw *hw)
> +{
> +	return container_of(hw, struct ad7192_state, int_clk_hw);
> +}
> +
> +static unsigned long ad7192_clk_recalc_rate(struct clk_hw *hw,
> +					    unsigned long parent_rate)
> +{
> +	return AD7192_INT_FREQ_MHZ;
> +}
> +
> +static int ad7192_clk_output_is_enabled(struct clk_hw *hw)
> +{
> +	struct ad7192_state *st = clk_hw_to_ad7192(hw);
> +
> +	return st->clock_sel == AD7192_CLK_INT_CO;
> +}
> +
> +static int ad7192_clk_prepare(struct clk_hw *hw)
> +{
> +	struct ad7192_state *st = clk_hw_to_ad7192(hw);
> +	int ret;
> +
> +	st->mode &= ~AD7192_MODE_CLKSRC_MASK;
> +	st->mode |= AD7192_CLK_INT_CO;
> +
> +	ret = ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
> +	if (ret)
> +		return ret;
> +
> +	st->clock_sel = AD7192_CLK_INT_CO;
> +
> +	return 0;
> +}
> +
> +static void ad7192_clk_unprepare(struct clk_hw *hw)
> +{
> +	struct ad7192_state *st = clk_hw_to_ad7192(hw);
> +	int ret;
> +
> +	st->mode &= ~AD7192_MODE_CLKSRC_MASK;
> +	st->mode |= AD7192_CLK_INT;
> +
> +	ret = ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
> +	if (ret)
> +		return;
> +
> +	st->clock_sel = AD7192_CLK_INT;
> +}
> +
> +static const struct clk_ops ad7192_int_clk_ops = {
> +	.recalc_rate = ad7192_clk_recalc_rate,
> +	.is_enabled = ad7192_clk_output_is_enabled,
> +	.prepare = ad7192_clk_prepare,
> +	.unprepare = ad7192_clk_unprepare,
> +};
> +
> +static int ad7192_register_clk_provider(struct ad7192_state *st)
> +{
> +	struct device *dev = &st->sd.spi->dev;
> +	struct clk_init_data init = {};
> +	int ret;
> +
> +	if (!device_property_present(dev, "#clock-cells"))
> +		return 0;
> +
> +	if (!IS_ENABLED(CONFIG_COMMON_CLK))
> +		return 0;
> 

nit: This could be the first test to do. No point in calling
device_property_present() if CONFIG_COMMON_CLK is disabled. FWIW, the compiler should
be smart enough to sort things out but it would still be better (for readability) to
have this first.

- Nuno Sá



  reply	other threads:[~2024-07-18 14:11 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-17 21:25 [PATCH v7 0/4] iio: adc: adc7192: Improvements Alisa-Dariana Roman
2024-07-17 21:25 ` [PATCH v7 1/4] dt-bindings: iio: adc: ad7192: Update clock config Alisa-Dariana Roman
2024-07-17 21:25 ` [PATCH v7 2/4] " Alisa-Dariana Roman
2024-07-18 14:08   ` Nuno Sá
2024-07-17 21:25 ` [PATCH v7 3/4] dt-bindings: iio: adc: ad7192: Add clock provider Alisa-Dariana Roman
2024-07-18 15:14   ` Conor Dooley
2024-07-20 13:42     ` Jonathan Cameron
2024-07-21 13:35       ` Alisa-Dariana Roman
2024-07-22 19:46         ` Jonathan Cameron
2024-07-17 21:25 ` [PATCH v7 4/4] " Alisa-Dariana Roman
2024-07-18 14:11   ` Nuno Sá [this message]
2024-07-20 13:44     ` Jonathan Cameron
2024-07-17 21:36 ` [PATCH v7 0/4] iio: adc: adc7192: Improvements Alisa-Dariana Roman
2024-07-20 13:45   ` Jonathan Cameron

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=5cf5e7d388813fca604b7fc5bdb3bb7296255217.camel@gmail.com \
    --to=noname.nuno@gmail.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=alisa.roman@analog.com \
    --cc=alisadariana@gmail.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jic23@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.hennerich@analog.com \
    --cc=robh@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.