public inbox for alsa-devel@alsa-project.org
 help / color / mirror / Atom feed
* [PATCH 0/3] ASoC: fsi: SPDIF support
@ 2010-07-28  2:56 Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 1/3] ASoC: fsi: remove unnecessary clock processing Kuninori Morimoto
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Kuninori Morimoto @ 2010-07-28  2:56 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood


Dear Mark, Liam

These are FSI driver patches

Kuninori Morimoto (3):
      ASoC: fsi: remove unnecessary clock processing
      ASoC: fsi: remove device id check
      ASoC: fsi: Add new funtion for SPDIF

These patches are based on Mark's "for-2.6.36" tree.
These are needed for FSI2 device and HDMI support.

Best regards
--
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] ASoC: fsi: remove unnecessary clock processing
  2010-07-28  2:56 [PATCH 0/3] ASoC: fsi: SPDIF support Kuninori Morimoto
@ 2010-07-28  2:57 ` Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 2/3] ASoC: fsi: remove device id check Kuninori Morimoto
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Kuninori Morimoto @ 2010-07-28  2:57 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sh/fsi.c |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index a1ce608..24c378c 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -803,10 +803,6 @@ static int fsi_dai_hw_params(struct snd_pcm_substream *substream,
 	if (!set_rate)
 		return -EIO;
 
-	/* clock stop */
-	pm_runtime_put_sync(dai->dev);
-	fsi_clk_ctrl(fsi, 0);
-
 	ret = set_rate(fsi_is_port_a(fsi), params_rate(params));
 	if (ret > 0) {
 		u32 data = 0;
@@ -865,7 +861,6 @@ static int fsi_dai_hw_params(struct snd_pcm_substream *substream,
 		fsi_clk_ctrl(fsi, 1);
 		ret = 0;
 	}
-	pm_runtime_get_sync(dai->dev);
 
 	return ret;
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] ASoC: fsi: remove device id check
  2010-07-28  2:56 [PATCH 0/3] ASoC: fsi: SPDIF support Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 1/3] ASoC: fsi: remove unnecessary clock processing Kuninori Morimoto
@ 2010-07-28  2:57 ` Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF Kuninori Morimoto
  2010-07-29 17:29 ` [PATCH 0/3] ASoC: fsi: SPDIF support Mark Brown
  3 siblings, 0 replies; 7+ messages in thread
From: Kuninori Morimoto @ 2010-07-28  2:57 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood

Current FSI driver id is not only 0

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/sh/fsi.c |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 24c378c..4b09b3d 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -1043,11 +1043,6 @@ static int fsi_probe(struct platform_device *pdev)
 	unsigned int irq;
 	int ret;
 
-	if (0 != pdev->id) {
-		dev_err(&pdev->dev, "current fsi support id 0 only now\n");
-		return -ENODEV;
-	}
-
 	id_entry = pdev->id_entry;
 	if (!id_entry) {
 		dev_err(&pdev->dev, "unknown fsi device\n");
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF
  2010-07-28  2:56 [PATCH 0/3] ASoC: fsi: SPDIF support Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 1/3] ASoC: fsi: remove unnecessary clock processing Kuninori Morimoto
  2010-07-28  2:57 ` [PATCH 2/3] ASoC: fsi: remove device id check Kuninori Morimoto
@ 2010-07-28  2:57 ` Kuninori Morimoto
  2010-07-28 10:16   ` Liam Girdwood
  2010-07-29 17:29 ` [PATCH 0/3] ASoC: fsi: SPDIF support Mark Brown
  3 siblings, 1 reply; 7+ messages in thread
From: Kuninori Morimoto @ 2010-07-28  2:57 UTC (permalink / raw)
  To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 include/sound/sh_fsi.h |    2 +
 sound/soc/sh/fsi.c     |   60 ++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
index 6ac7186..9d51d6f 100644
--- a/include/sound/sh_fsi.h
+++ b/include/sound/sh_fsi.h
@@ -64,6 +64,8 @@
 #define SH_FSI_FMT_I2S		3
 #define SH_FSI_FMT_TDM		4
 #define SH_FSI_FMT_TDM_DELAY	5
+#define SH_FSI_FMT_SPDIF	6
+
 
 #define SH_FSI_IFMT_TDM_CH(x) \
 	(SH_FSI_IFMT(TDM)	| SH_FSI_SET_CH_I(x))
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 4b09b3d..0bcdfcc 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -30,9 +30,11 @@
 #define DIDT		0x0020
 #define DODT		0x0024
 #define MUTE_ST		0x0028
-#define REG_END		MUTE_ST
-
+#define OUT_SEL		0x0030
+#define REG_END		OUT_SEL
 
+#define A_MST_CTLR	0x0180
+#define B_MST_CTLR	0x01A0
 #define CPU_INT_ST	0x01F4
 #define CPU_IEMSK	0x01F8
 #define CPU_IMSK	0x01FC
@@ -43,7 +45,7 @@
 #define CLK_RST		0x0210
 #define SOFT_RST	0x0214
 #define FIFO_SZ		0x0218
-#define MREG_START	CPU_INT_ST
+#define MREG_START	A_MST_CTLR
 #define MREG_END	FIFO_SZ
 
 /* DO_FMT */
@@ -54,6 +56,7 @@
 #define CR_I2S		(0x3 << 4)
 #define CR_TDM		(0x4 << 4)
 #define CR_TDM_D	(0x5 << 4)
+#define CR_SPDIF	(0x00100120)
 
 /* DOFF_CTL */
 /* DIFF_CTL */
@@ -69,6 +72,10 @@
 #define ACKMD_MASK	0x00007000
 #define BPFMD_MASK	0x00000700
 
+/* A/B MST_CTLR */
+#define BP	(1 << 4)	/* Fix the signal of Biphase output */
+#define SE	(1 << 0)	/* Fix the master clock */
+
 /* CLK_RST */
 #define B_CLK		0x00000010
 #define A_CLK		0x00000001
@@ -113,6 +120,8 @@ struct fsi_priv {
 	int period_len;
 	int buffer_len;
 	int periods;
+
+	u32 mst_ctrl;
 };
 
 struct fsi_core {
@@ -395,6 +404,29 @@ static void fsi_irq_clear_status(struct fsi_priv *fsi)
 /************************************************************************
 
 
+		SPDIF master clock function
+
+These functions are used later FSI2
+************************************************************************/
+static void fsi_spdif_clk_ctrl(struct fsi_priv *fsi, int enable)
+{
+	struct fsi_master *master = fsi_get_master(fsi);
+	u32 val = BP | SE;
+
+	if (master->core->ver < 2) {
+		pr_err("fsi: register access err (%s)\n", __func__);
+		return;
+	}
+
+	if (enable)
+		fsi_master_mask_set(master, fsi->mst_ctrl, val, val);
+	else
+		fsi_master_mask_set(master, fsi->mst_ctrl, val, 0);
+}
+
+/************************************************************************
+
+
 		ctrl function
 
 
@@ -671,6 +703,7 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
 {
 	struct fsi_priv *fsi = fsi_get_priv(substream);
 	u32 flags = fsi_get_info_flags(fsi);
+	struct fsi_master *master = fsi_get_master(fsi);
 	u32 fmt;
 	u32 reg;
 	u32 data;
@@ -732,6 +765,16 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
 			SH_FSI_GET_CH_O(flags) : SH_FSI_GET_CH_I(flags);
 		data = CR_TDM_D | (fsi->chan - 1);
 		break;
+	case SH_FSI_FMT_SPDIF:
+		if (master->core->ver < 2) {
+			dev_err(dai->dev, "This FSI can not use SPDIF\n");
+			return -EINVAL;
+		}
+		data = CR_SPDIF;
+		fsi->chan = 2;
+		fsi_spdif_clk_ctrl(fsi, 1);
+		fsi_reg_mask_set(fsi, OUT_SEL, 0x0010, 0x0010);
+		break;
 	default:
 		dev_err(dai->dev, "unknown format.\n");
 		return -EINVAL;
@@ -1071,14 +1114,21 @@ static int fsi_probe(struct platform_device *pdev)
 		goto exit_kfree;
 	}
 
+	/* master setting */
 	master->irq		= irq;
 	master->info		= pdev->dev.platform_data;
+	master->core		= (struct fsi_core *)id_entry->driver_data;
+	spin_lock_init(&master->lock);
+
+	/* FSI A setting */
 	master->fsia.base	= master->base;
 	master->fsia.master	= master;
+	master->fsia.mst_ctrl	= A_MST_CTLR;
+
+	/* FSI B setting */
 	master->fsib.base	= master->base + 0x40;
 	master->fsib.master	= master;
-	master->core		= (struct fsi_core *)id_entry->driver_data;
-	spin_lock_init(&master->lock);
+	master->fsib.mst_ctrl	= B_MST_CTLR;
 
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_resume(&pdev->dev);
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF
  2010-07-28  2:57 ` [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF Kuninori Morimoto
@ 2010-07-28 10:16   ` Liam Girdwood
  2010-07-29  7:48     ` [PATCH 3/3 v2] " Kuninori Morimoto
  0 siblings, 1 reply; 7+ messages in thread
From: Liam Girdwood @ 2010-07-28 10:16 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-ALSA, Mark Brown

On Wed, 2010-07-28 at 11:57 +0900, Kuninori Morimoto wrote:
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>  include/sound/sh_fsi.h |    2 +
>  sound/soc/sh/fsi.c     |   60 ++++++++++++++++++++++++++++++++++++++++++++----
>  2 files changed, 57 insertions(+), 5 deletions(-)
> 
> diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
> index 6ac7186..9d51d6f 100644
> --- a/include/sound/sh_fsi.h
> +++ b/include/sound/sh_fsi.h
> @@ -64,6 +64,8 @@
>  #define SH_FSI_FMT_I2S		3
>  #define SH_FSI_FMT_TDM		4
>  #define SH_FSI_FMT_TDM_DELAY	5
> +#define SH_FSI_FMT_SPDIF	6
> +
>  
>  #define SH_FSI_IFMT_TDM_CH(x) \
>  	(SH_FSI_IFMT(TDM)	| SH_FSI_SET_CH_I(x))
> diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
> index 4b09b3d..0bcdfcc 100644
> --- a/sound/soc/sh/fsi.c
> +++ b/sound/soc/sh/fsi.c
> @@ -30,9 +30,11 @@
>  #define DIDT		0x0020
>  #define DODT		0x0024
>  #define MUTE_ST		0x0028
> -#define REG_END		MUTE_ST
> -
> +#define OUT_SEL		0x0030
> +#define REG_END		OUT_SEL
>  
> +#define A_MST_CTLR	0x0180
> +#define B_MST_CTLR	0x01A0
>  #define CPU_INT_ST	0x01F4
>  #define CPU_IEMSK	0x01F8
>  #define CPU_IMSK	0x01FC
> @@ -43,7 +45,7 @@
>  #define CLK_RST		0x0210
>  #define SOFT_RST	0x0214
>  #define FIFO_SZ		0x0218
> -#define MREG_START	CPU_INT_ST
> +#define MREG_START	A_MST_CTLR
>  #define MREG_END	FIFO_SZ
>  
>  /* DO_FMT */
> @@ -54,6 +56,7 @@
>  #define CR_I2S		(0x3 << 4)
>  #define CR_TDM		(0x4 << 4)
>  #define CR_TDM_D	(0x5 << 4)
> +#define CR_SPDIF	(0x00100120)

Parenthesis not required here.


All Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
-- 
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 3/3 v2] ASoC: fsi: Add new funtion for SPDIF
  2010-07-28 10:16   ` Liam Girdwood
@ 2010-07-29  7:48     ` Kuninori Morimoto
  0 siblings, 0 replies; 7+ messages in thread
From: Kuninori Morimoto @ 2010-07-29  7:48 UTC (permalink / raw)
  To: Liam Girdwood; +Cc: Linux-ALSA, Mark Brown

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
v1 -> v2

o remove parenthesis from CR_SPDIF

 include/sound/sh_fsi.h |    2 +
 sound/soc/sh/fsi.c     |   60 ++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/include/sound/sh_fsi.h b/include/sound/sh_fsi.h
index 6ac7186..9d51d6f 100644
--- a/include/sound/sh_fsi.h
+++ b/include/sound/sh_fsi.h
@@ -64,6 +64,8 @@
 #define SH_FSI_FMT_I2S		3
 #define SH_FSI_FMT_TDM		4
 #define SH_FSI_FMT_TDM_DELAY	5
+#define SH_FSI_FMT_SPDIF	6
+
 
 #define SH_FSI_IFMT_TDM_CH(x) \
 	(SH_FSI_IFMT(TDM)	| SH_FSI_SET_CH_I(x))
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 4b09b3d..58c6bec 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -30,9 +30,11 @@
 #define DIDT		0x0020
 #define DODT		0x0024
 #define MUTE_ST		0x0028
-#define REG_END		MUTE_ST
-
+#define OUT_SEL		0x0030
+#define REG_END		OUT_SEL
 
+#define A_MST_CTLR	0x0180
+#define B_MST_CTLR	0x01A0
 #define CPU_INT_ST	0x01F4
 #define CPU_IEMSK	0x01F8
 #define CPU_IMSK	0x01FC
@@ -43,7 +45,7 @@
 #define CLK_RST		0x0210
 #define SOFT_RST	0x0214
 #define FIFO_SZ		0x0218
-#define MREG_START	CPU_INT_ST
+#define MREG_START	A_MST_CTLR
 #define MREG_END	FIFO_SZ
 
 /* DO_FMT */
@@ -54,6 +56,7 @@
 #define CR_I2S		(0x3 << 4)
 #define CR_TDM		(0x4 << 4)
 #define CR_TDM_D	(0x5 << 4)
+#define CR_SPDIF	0x00100120
 
 /* DOFF_CTL */
 /* DIFF_CTL */
@@ -69,6 +72,10 @@
 #define ACKMD_MASK	0x00007000
 #define BPFMD_MASK	0x00000700
 
+/* A/B MST_CTLR */
+#define BP	(1 << 4)	/* Fix the signal of Biphase output */
+#define SE	(1 << 0)	/* Fix the master clock */
+
 /* CLK_RST */
 #define B_CLK		0x00000010
 #define A_CLK		0x00000001
@@ -113,6 +120,8 @@ struct fsi_priv {
 	int period_len;
 	int buffer_len;
 	int periods;
+
+	u32 mst_ctrl;
 };
 
 struct fsi_core {
@@ -395,6 +404,29 @@ static void fsi_irq_clear_status(struct fsi_priv *fsi)
 /************************************************************************
 
 
+		SPDIF master clock function
+
+These functions are used later FSI2
+************************************************************************/
+static void fsi_spdif_clk_ctrl(struct fsi_priv *fsi, int enable)
+{
+	struct fsi_master *master = fsi_get_master(fsi);
+	u32 val = BP | SE;
+
+	if (master->core->ver < 2) {
+		pr_err("fsi: register access err (%s)\n", __func__);
+		return;
+	}
+
+	if (enable)
+		fsi_master_mask_set(master, fsi->mst_ctrl, val, val);
+	else
+		fsi_master_mask_set(master, fsi->mst_ctrl, val, 0);
+}
+
+/************************************************************************
+
+
 		ctrl function
 
 
@@ -671,6 +703,7 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
 {
 	struct fsi_priv *fsi = fsi_get_priv(substream);
 	u32 flags = fsi_get_info_flags(fsi);
+	struct fsi_master *master = fsi_get_master(fsi);
 	u32 fmt;
 	u32 reg;
 	u32 data;
@@ -732,6 +765,16 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
 			SH_FSI_GET_CH_O(flags) : SH_FSI_GET_CH_I(flags);
 		data = CR_TDM_D | (fsi->chan - 1);
 		break;
+	case SH_FSI_FMT_SPDIF:
+		if (master->core->ver < 2) {
+			dev_err(dai->dev, "This FSI can not use SPDIF\n");
+			return -EINVAL;
+		}
+		data = CR_SPDIF;
+		fsi->chan = 2;
+		fsi_spdif_clk_ctrl(fsi, 1);
+		fsi_reg_mask_set(fsi, OUT_SEL, 0x0010, 0x0010);
+		break;
 	default:
 		dev_err(dai->dev, "unknown format.\n");
 		return -EINVAL;
@@ -1071,14 +1114,21 @@ static int fsi_probe(struct platform_device *pdev)
 		goto exit_kfree;
 	}
 
+	/* master setting */
 	master->irq		= irq;
 	master->info		= pdev->dev.platform_data;
+	master->core		= (struct fsi_core *)id_entry->driver_data;
+	spin_lock_init(&master->lock);
+
+	/* FSI A setting */
 	master->fsia.base	= master->base;
 	master->fsia.master	= master;
+	master->fsia.mst_ctrl	= A_MST_CTLR;
+
+	/* FSI B setting */
 	master->fsib.base	= master->base + 0x40;
 	master->fsib.master	= master;
-	master->core		= (struct fsi_core *)id_entry->driver_data;
-	spin_lock_init(&master->lock);
+	master->fsib.mst_ctrl	= B_MST_CTLR;
 
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_resume(&pdev->dev);
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] ASoC: fsi: SPDIF support
  2010-07-28  2:56 [PATCH 0/3] ASoC: fsi: SPDIF support Kuninori Morimoto
                   ` (2 preceding siblings ...)
  2010-07-28  2:57 ` [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF Kuninori Morimoto
@ 2010-07-29 17:29 ` Mark Brown
  3 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2010-07-29 17:29 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-ALSA, Liam Girdwood

On Wed, Jul 28, 2010 at 11:56:44AM +0900, Kuninori Morimoto wrote:
> 
> Dear Mark, Liam
> 
> These are FSI driver patches
> 
> Kuninori Morimoto (3):
>       ASoC: fsi: remove unnecessary clock processing
>       ASoC: fsi: remove device id check
>       ASoC: fsi: Add new funtion for SPDIF

All applied, thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-07-29 17:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-28  2:56 [PATCH 0/3] ASoC: fsi: SPDIF support Kuninori Morimoto
2010-07-28  2:57 ` [PATCH 1/3] ASoC: fsi: remove unnecessary clock processing Kuninori Morimoto
2010-07-28  2:57 ` [PATCH 2/3] ASoC: fsi: remove device id check Kuninori Morimoto
2010-07-28  2:57 ` [PATCH 3/3] ASoC: fsi: Add new funtion for SPDIF Kuninori Morimoto
2010-07-28 10:16   ` Liam Girdwood
2010-07-29  7:48     ` [PATCH 3/3 v2] " Kuninori Morimoto
2010-07-29 17:29 ` [PATCH 0/3] ASoC: fsi: SPDIF support Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox