All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neil Armstrong <narmstrong@baylibre.com>
To: Jerome Brunet <jbrunet@baylibre.com>,
	Carlo Caione <carlo@caione.org>,
	Kevin Hilman <khilman@baylibre.com>
Cc: Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>,
	linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/7] clk: meson: add triple phase clock driver
Date: Thu, 26 Apr 2018 10:47:04 +0200	[thread overview]
Message-ID: <bc770c22-f0b9-ed1f-bba7-631b9cd42436@baylibre.com> (raw)
In-Reply-To: <20180425163304.10852-4-jbrunet@baylibre.com>

On 25/04/2018 18:33, Jerome Brunet wrote:
> Add a driver to control the output of the sample clock generator found
> in the axg audio clock controller.
> 
> The goal of this driver is to coherently control the phase provided to
> the different element using the sample clock generator. This simplify
> the usage of the sample clock generator a lot, without comprising the
> ability of the SoC.
> 
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> ---
>  drivers/clk/meson/Kconfig        |  5 +++
>  drivers/clk/meson/Makefile       |  1 +
>  drivers/clk/meson/clk-triphase.c | 68 ++++++++++++++++++++++++++++++++++++++++
>  drivers/clk/meson/clkc-audio.h   | 20 ++++++++++++
>  4 files changed, 94 insertions(+)
>  create mode 100644 drivers/clk/meson/clk-triphase.c
>  create mode 100644 drivers/clk/meson/clkc-audio.h
> 
> diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
> index 87d69573e172..7f7fd6fb3809 100644
> --- a/drivers/clk/meson/Kconfig
> +++ b/drivers/clk/meson/Kconfig
> @@ -3,6 +3,11 @@ config COMMON_CLK_AMLOGIC
>  	depends on ARCH_MESON || COMPILE_TEST
>  	select COMMON_CLK_REGMAP_MESON
>  
> +config COMMON_CLK_AMLOGIC_AUDIO
> +	bool
> +	depends on ARCH_MESON || COMPILE_TEST
> +	select COMMON_CLK_AMLOGIC
> +
>  config COMMON_CLK_REGMAP_MESON
>  	bool
>  	select REGMAP
> diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile
> index 352fb848c406..64bb917fe1f0 100644
> --- a/drivers/clk/meson/Makefile
> +++ b/drivers/clk/meson/Makefile
> @@ -4,6 +4,7 @@
>  
>  obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-pll.o clk-mpll.o clk-audio-divider.o
>  obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-phase.o
> +obj-$(CONFIG_COMMON_CLK_AMLOGIC_AUDIO)	+= clk-triphase.o
>  obj-$(CONFIG_COMMON_CLK_MESON8B) += meson8b.o
>  obj-$(CONFIG_COMMON_CLK_GXBB)	 += gxbb.o gxbb-aoclk.o gxbb-aoclk-32k.o
>  obj-$(CONFIG_COMMON_CLK_AXG)	 += axg.o
> diff --git a/drivers/clk/meson/clk-triphase.c b/drivers/clk/meson/clk-triphase.c
> new file mode 100644
> index 000000000000..9508c03c73c1
> --- /dev/null
> +++ b/drivers/clk/meson/clk-triphase.c
> @@ -0,0 +1,68 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2018 BayLibre, SAS.
> + * Author: Jerome Brunet <jbrunet@baylibre.com>
> + */
> +
> +#include <linux/clk-provider.h>
> +#include "clkc-audio.h"
> +
> +/*
> + * This is a special clock for the audio controller.
> + * The phase of mst_sclk clock output can be controlled independently
> + * for the outside world (ph0), the tdmout (ph1) and tdmin (ph2).
> + * Controlling these 3 phases as just one makes things simpler and
> + * give the same clock view to all the element on the i2s bus.
> + * If necessary, we can still control the phase in the tdm block
> + * which makes these independent control redundant.
> + */
> +static inline struct meson_clk_triphase_data *
> +meson_clk_triphase_data(struct clk_regmap *clk)
> +{
> +	return (struct meson_clk_triphase_data *)clk->data;
> +}
> +
> +static void meson_clk_triphase_sync(struct clk_hw *hw)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	/* Get phase 0 and sync it to phase 1 and 2 */
> +	val = meson_parm_read(clk->map, &tph->ph0);
> +	meson_parm_write(clk->map, &tph->ph1, val);
> +	meson_parm_write(clk->map, &tph->ph2, val);
> +}
> +
> +static int meson_clk_triphase_get_phase(struct clk_hw *hw)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	/* Phase are in sync, reading phase 0 is enough */
> +	val = meson_parm_read(clk->map, &tph->ph0);
> +
> +	return meson_clk_degrees_from_val(val, tph->ph0.width);
> +}
> +
> +static int meson_clk_triphase_set_phase(struct clk_hw *hw, int degrees)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	val = meson_clk_degrees_to_val(degrees, tph->ph0.width);
> +	meson_parm_write(clk->map, &tph->ph0, val);
> +	meson_parm_write(clk->map, &tph->ph1, val);
> +	meson_parm_write(clk->map, &tph->ph2, val);
> +
> +	return 0;
> +}
> +
> +const struct clk_ops meson_clk_triphase_ops = {
> +	.init		= meson_clk_triphase_sync,
> +	.get_phase	= meson_clk_triphase_get_phase,
> +	.set_phase	= meson_clk_triphase_set_phase,
> +};
> +EXPORT_SYMBOL_GPL(meson_clk_triphase_ops);
> diff --git a/drivers/clk/meson/clkc-audio.h b/drivers/clk/meson/clkc-audio.h
> new file mode 100644
> index 000000000000..286ff1201258
> --- /dev/null
> +++ b/drivers/clk/meson/clkc-audio.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: GPL-2.0 */

// SPDX-License-Identifier: GPL-2.0

Checkpatch should have warned about this !

> +/*
> + * Copyright (c) 2018 BayLibre, SAS.
> + * Author: Jerome Brunet <jbrunet@baylibre.com>
> + */
> +
> +#ifndef __MESON_CLKC_AUDIO_H
> +#define __MESON_CLKC_AUDIO_H
> +
> +#include "clkc.h"
> +
> +struct meson_clk_triphase_data {
> +	struct parm ph0;
> +	struct parm ph1;
> +	struct parm ph2;
> +};
> +
> +extern const struct clk_ops meson_clk_triphase_ops;
> +
> +#endif /* __MESON_CLKC_AUDIO_H */
> 

Apart that :

Acked-by: Neil Armstrong <narmstrong@baylibre.com>

WARNING: multiple messages have this Message-ID (diff)
From: narmstrong@baylibre.com (Neil Armstrong)
To: linus-amlogic@lists.infradead.org
Subject: [PATCH 3/7] clk: meson: add triple phase clock driver
Date: Thu, 26 Apr 2018 10:47:04 +0200	[thread overview]
Message-ID: <bc770c22-f0b9-ed1f-bba7-631b9cd42436@baylibre.com> (raw)
In-Reply-To: <20180425163304.10852-4-jbrunet@baylibre.com>

On 25/04/2018 18:33, Jerome Brunet wrote:
> Add a driver to control the output of the sample clock generator found
> in the axg audio clock controller.
> 
> The goal of this driver is to coherently control the phase provided to
> the different element using the sample clock generator. This simplify
> the usage of the sample clock generator a lot, without comprising the
> ability of the SoC.
> 
> Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
> ---
>  drivers/clk/meson/Kconfig        |  5 +++
>  drivers/clk/meson/Makefile       |  1 +
>  drivers/clk/meson/clk-triphase.c | 68 ++++++++++++++++++++++++++++++++++++++++
>  drivers/clk/meson/clkc-audio.h   | 20 ++++++++++++
>  4 files changed, 94 insertions(+)
>  create mode 100644 drivers/clk/meson/clk-triphase.c
>  create mode 100644 drivers/clk/meson/clkc-audio.h
> 
> diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
> index 87d69573e172..7f7fd6fb3809 100644
> --- a/drivers/clk/meson/Kconfig
> +++ b/drivers/clk/meson/Kconfig
> @@ -3,6 +3,11 @@ config COMMON_CLK_AMLOGIC
>  	depends on ARCH_MESON || COMPILE_TEST
>  	select COMMON_CLK_REGMAP_MESON
>  
> +config COMMON_CLK_AMLOGIC_AUDIO
> +	bool
> +	depends on ARCH_MESON || COMPILE_TEST
> +	select COMMON_CLK_AMLOGIC
> +
>  config COMMON_CLK_REGMAP_MESON
>  	bool
>  	select REGMAP
> diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile
> index 352fb848c406..64bb917fe1f0 100644
> --- a/drivers/clk/meson/Makefile
> +++ b/drivers/clk/meson/Makefile
> @@ -4,6 +4,7 @@
>  
>  obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-pll.o clk-mpll.o clk-audio-divider.o
>  obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-phase.o
> +obj-$(CONFIG_COMMON_CLK_AMLOGIC_AUDIO)	+= clk-triphase.o
>  obj-$(CONFIG_COMMON_CLK_MESON8B) += meson8b.o
>  obj-$(CONFIG_COMMON_CLK_GXBB)	 += gxbb.o gxbb-aoclk.o gxbb-aoclk-32k.o
>  obj-$(CONFIG_COMMON_CLK_AXG)	 += axg.o
> diff --git a/drivers/clk/meson/clk-triphase.c b/drivers/clk/meson/clk-triphase.c
> new file mode 100644
> index 000000000000..9508c03c73c1
> --- /dev/null
> +++ b/drivers/clk/meson/clk-triphase.c
> @@ -0,0 +1,68 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2018 BayLibre, SAS.
> + * Author: Jerome Brunet <jbrunet@baylibre.com>
> + */
> +
> +#include <linux/clk-provider.h>
> +#include "clkc-audio.h"
> +
> +/*
> + * This is a special clock for the audio controller.
> + * The phase of mst_sclk clock output can be controlled independently
> + * for the outside world (ph0), the tdmout (ph1) and tdmin (ph2).
> + * Controlling these 3 phases as just one makes things simpler and
> + * give the same clock view to all the element on the i2s bus.
> + * If necessary, we can still control the phase in the tdm block
> + * which makes these independent control redundant.
> + */
> +static inline struct meson_clk_triphase_data *
> +meson_clk_triphase_data(struct clk_regmap *clk)
> +{
> +	return (struct meson_clk_triphase_data *)clk->data;
> +}
> +
> +static void meson_clk_triphase_sync(struct clk_hw *hw)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	/* Get phase 0 and sync it to phase 1 and 2 */
> +	val = meson_parm_read(clk->map, &tph->ph0);
> +	meson_parm_write(clk->map, &tph->ph1, val);
> +	meson_parm_write(clk->map, &tph->ph2, val);
> +}
> +
> +static int meson_clk_triphase_get_phase(struct clk_hw *hw)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	/* Phase are in sync, reading phase 0 is enough */
> +	val = meson_parm_read(clk->map, &tph->ph0);
> +
> +	return meson_clk_degrees_from_val(val, tph->ph0.width);
> +}
> +
> +static int meson_clk_triphase_set_phase(struct clk_hw *hw, int degrees)
> +{
> +	struct clk_regmap *clk = to_clk_regmap(hw);
> +	struct meson_clk_triphase_data *tph = meson_clk_triphase_data(clk);
> +	unsigned int val;
> +
> +	val = meson_clk_degrees_to_val(degrees, tph->ph0.width);
> +	meson_parm_write(clk->map, &tph->ph0, val);
> +	meson_parm_write(clk->map, &tph->ph1, val);
> +	meson_parm_write(clk->map, &tph->ph2, val);
> +
> +	return 0;
> +}
> +
> +const struct clk_ops meson_clk_triphase_ops = {
> +	.init		= meson_clk_triphase_sync,
> +	.get_phase	= meson_clk_triphase_get_phase,
> +	.set_phase	= meson_clk_triphase_set_phase,
> +};
> +EXPORT_SYMBOL_GPL(meson_clk_triphase_ops);
> diff --git a/drivers/clk/meson/clkc-audio.h b/drivers/clk/meson/clkc-audio.h
> new file mode 100644
> index 000000000000..286ff1201258
> --- /dev/null
> +++ b/drivers/clk/meson/clkc-audio.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: GPL-2.0 */

// SPDX-License-Identifier: GPL-2.0

Checkpatch should have warned about this !

> +/*
> + * Copyright (c) 2018 BayLibre, SAS.
> + * Author: Jerome Brunet <jbrunet@baylibre.com>
> + */
> +
> +#ifndef __MESON_CLKC_AUDIO_H
> +#define __MESON_CLKC_AUDIO_H
> +
> +#include "clkc.h"
> +
> +struct meson_clk_triphase_data {
> +	struct parm ph0;
> +	struct parm ph1;
> +	struct parm ph2;
> +};
> +
> +extern const struct clk_ops meson_clk_triphase_ops;
> +
> +#endif /* __MESON_CLKC_AUDIO_H */
> 

Apart that :

Acked-by: Neil Armstrong <narmstrong@baylibre.com>

  reply	other threads:[~2018-04-26  8:47 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-25 16:32 [PATCH 0/7] clk: meson: axg: add audio clock controller support Jerome Brunet
2018-04-25 16:32 ` Jerome Brunet
2018-04-25 16:32 ` [PATCH 1/7] clk: meson: clean-up meson clock configuration Jerome Brunet
2018-04-25 16:32   ` Jerome Brunet
2018-04-26  8:46   ` Neil Armstrong
2018-04-26  8:46     ` Neil Armstrong
2018-04-25 16:32 ` [PATCH 2/7] clk: meson: add clk-phase clock driver Jerome Brunet
2018-04-25 16:32   ` Jerome Brunet
2018-04-26  8:46   ` Neil Armstrong
2018-04-26  8:46     ` Neil Armstrong
2018-04-25 16:33 ` [PATCH 3/7] clk: meson: add triple phase " Jerome Brunet
2018-04-25 16:33   ` Jerome Brunet
2018-04-26  8:47   ` Neil Armstrong [this message]
2018-04-26  8:47     ` Neil Armstrong
2018-04-26  8:50     ` Neil Armstrong
2018-04-26  8:50       ` Neil Armstrong
2018-04-25 16:33 ` [PATCH 4/7] clk: meson: add axg audio sclk divider driver Jerome Brunet
2018-04-25 16:33   ` Jerome Brunet
2018-04-26  8:47   ` Neil Armstrong
2018-04-26  8:47     ` Neil Armstrong
2018-04-25 16:33 ` [PATCH 5/7] clk: meson: axg: export audio clock controller id bindings Jerome Brunet
2018-04-25 16:33   ` Jerome Brunet
2018-04-26  8:48   ` Neil Armstrong
2018-04-26  8:48     ` Neil Armstrong
2018-05-01 14:31   ` Rob Herring
2018-05-01 14:31     ` Rob Herring
2018-04-25 16:33 ` [PATCH 6/7] clk: meson: axg: document bindings for the audio clock controller Jerome Brunet
2018-04-25 16:33   ` Jerome Brunet
2018-05-01 14:37   ` Rob Herring
2018-05-01 14:37     ` Rob Herring
2018-05-14 14:16     ` Jerome Brunet
2018-05-14 14:16       ` Jerome Brunet
2018-05-14 14:16       ` Jerome Brunet
2018-04-25 16:33 ` [PATCH 7/7] clk: meson: axg: add the audio clock controller driver Jerome Brunet
2018-04-25 16:33   ` Jerome Brunet
2018-04-26  8:49   ` Neil Armstrong
2018-04-26  8:49     ` Neil Armstrong
2018-05-15 23:41     ` Stephen Boyd
2018-05-15 23:41       ` Stephen Boyd
2018-05-15 23:41       ` Stephen Boyd
2018-04-27  1:13   ` kbuild test robot
2018-04-27  1:13     ` kbuild test robot
2018-04-27  1:13     ` kbuild test robot

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=bc770c22-f0b9-ed1f-bba7-631b9cd42436@baylibre.com \
    --to=narmstrong@baylibre.com \
    --cc=carlo@caione.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jbrunet@baylibre.com \
    --cc=khilman@baylibre.com \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=sboyd@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.