* [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