* [PATCH v2 1/3] ASoC: atmel_ssc_dai: make option to choose clock
2014-01-27 6:55 [PATCH v2 0/3] ASoC: atmel_ssc_dai: add option to choose clock Bo Shen
@ 2014-01-27 6:55 ` Bo Shen
2014-01-27 7:06 ` [alsa-devel] " Lars-Peter Clausen
2014-01-27 6:55 ` [PATCH v2 2/3] ASoC: atmel_wm8904: make it available " Bo Shen
2014-01-27 6:55 ` [PATCH v2 3/3] Binding: atmel-wm8904: add option " Bo Shen
2 siblings, 1 reply; 6+ messages in thread
From: Bo Shen @ 2014-01-27 6:55 UTC (permalink / raw)
To: linux-arm-kernel
When SSC works in slave mode, according to the hardware design, the
clock can get from TK pin, also can get from RK pin. So, add one
parameter to choose where the clock from.
Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
Changes in v2: None
sound/soc/atmel/atmel_ssc_dai.c | 16 ++++++++++++----
sound/soc/atmel/atmel_ssc_dai.h | 1 +
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index 8697ced..03eb0be 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -340,6 +340,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai)
{
int id = dai->id;
+ struct snd_soc_card *card = dai->card;
struct atmel_ssc_info *ssc_p = &ssc_info[id];
struct atmel_pcm_dma_params *dma_params;
int dir, channels, bits;
@@ -347,6 +348,9 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
int start_event;
int ret;
+ ssc_p->clk_from_rk_pin =
+ ((struct atmel_ssc_info *)(card->drvdata))->clk_from_rk_pin;
+
/*
* Currently, there is only one set of dma params for
* each direction. If more are added, this code will
@@ -466,7 +470,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
| SSC_BF(RCMR_START, start_event)
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
- | SSC_BF(RCMR_CKS, SSC_CKS_CLOCK);
+ | SSC_BF(RCMR_CKS, ssc_p->clk_from_rk_pin ?
+ SSC_CKS_PIN : SSC_CKS_CLOCK);
rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
| SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
@@ -481,7 +486,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
| SSC_BF(TCMR_START, start_event)
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
| SSC_BF(TCMR_CKO, SSC_CKO_NONE)
- | SSC_BF(TCMR_CKS, SSC_CKS_PIN);
+ | SSC_BF(TCMR_CKS, ssc_p->clk_from_rk_pin ?
+ SSC_CKS_CLOCK : SSC_CKS_PIN);
tfmr = SSC_BF(TFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
| SSC_BF(TFMR_FSDEN, 0)
@@ -550,7 +556,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
| SSC_BF(RCMR_START, SSC_START_RISING_RF)
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
- | SSC_BF(RCMR_CKS, SSC_CKS_PIN);
+ | SSC_BF(RCMR_CKS, ssc_p->clk_from_rk_pin ?
+ SSC_CKS_PIN : SSC_CKS_CLOCK);
rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
| SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
@@ -565,7 +572,8 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
| SSC_BF(TCMR_START, SSC_START_RISING_RF)
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
| SSC_BF(TCMR_CKO, SSC_CKO_NONE)
- | SSC_BF(TCMR_CKS, SSC_CKS_PIN);
+ | SSC_BF(RCMR_CKS, ssc_p->clk_from_rk_pin ?
+ SSC_CKS_CLOCK : SSC_CKS_PIN);
tfmr = SSC_BF(TFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
| SSC_BF(TFMR_FSDEN, 0)
diff --git a/sound/soc/atmel/atmel_ssc_dai.h b/sound/soc/atmel/atmel_ssc_dai.h
index b1f08d5..f147895 100644
--- a/sound/soc/atmel/atmel_ssc_dai.h
+++ b/sound/soc/atmel/atmel_ssc_dai.h
@@ -113,6 +113,7 @@ struct atmel_ssc_info {
unsigned short cmr_div;
unsigned short tcmr_period;
unsigned short rcmr_period;
+ bool clk_from_rk_pin;
struct atmel_pcm_dma_params *dma_params[2];
struct atmel_ssc_state ssc_state;
};
--
1.8.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v2 2/3] ASoC: atmel_wm8904: make it available to choose clock
2014-01-27 6:55 [PATCH v2 0/3] ASoC: atmel_ssc_dai: add option to choose clock Bo Shen
2014-01-27 6:55 ` [PATCH v2 1/3] ASoC: atmel_ssc_dai: make " Bo Shen
@ 2014-01-27 6:55 ` Bo Shen
2014-01-27 6:55 ` [PATCH v2 3/3] Binding: atmel-wm8904: add option " Bo Shen
2 siblings, 0 replies; 6+ messages in thread
From: Bo Shen @ 2014-01-27 6:55 UTC (permalink / raw)
To: linux-arm-kernel
Make it available to choose the clock from TK pin or RK pin. This
is hardware design decided.
Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
Changes in v2: None
sound/soc/atmel/atmel_wm8904.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/sound/soc/atmel/atmel_wm8904.c b/sound/soc/atmel/atmel_wm8904.c
index b4e3690..9346410 100644
--- a/sound/soc/atmel/atmel_wm8904.c
+++ b/sound/soc/atmel/atmel_wm8904.c
@@ -108,6 +108,7 @@ static int atmel_asoc_wm8904_dt_init(struct platform_device *pdev)
struct device_node *codec_np, *cpu_np;
struct snd_soc_card *card = &atmel_asoc_wm8904_card;
struct snd_soc_dai_link *dailink = &atmel_asoc_wm8904_dailink;
+ struct atmel_ssc_info *ssc_info;
int ret;
if (!np) {
@@ -115,6 +116,15 @@ static int atmel_asoc_wm8904_dt_init(struct platform_device *pdev)
return -EINVAL;
}
+ ssc_info = devm_kzalloc(&pdev->dev, sizeof(*ssc_info), GFP_KERNEL);
+ if (!ssc_info)
+ return -ENOMEM;
+
+ ssc_info->clk_from_rk_pin =
+ of_property_read_bool(np, "atmel,clk-from-rk-pin");
+
+ card->drvdata = (void *)ssc_info;
+
ret = snd_soc_of_parse_card_name(card, "atmel,model");
if (ret) {
dev_err(&pdev->dev, "failed to parse card name\n");
--
1.8.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v2 3/3] Binding: atmel-wm8904: add option to choose clock
2014-01-27 6:55 [PATCH v2 0/3] ASoC: atmel_ssc_dai: add option to choose clock Bo Shen
2014-01-27 6:55 ` [PATCH v2 1/3] ASoC: atmel_ssc_dai: make " Bo Shen
2014-01-27 6:55 ` [PATCH v2 2/3] ASoC: atmel_wm8904: make it available " Bo Shen
@ 2014-01-27 6:55 ` Bo Shen
2014-01-27 19:31 ` Mark Brown
2 siblings, 1 reply; 6+ messages in thread
From: Bo Shen @ 2014-01-27 6:55 UTC (permalink / raw)
To: linux-arm-kernel
Add the option to choose clock on which pin input to SSC (as slave).
Default is on TK pin to SSC, add "atmel,clk-from-rk-pin" option to
specify the clock is on RK pin to SSC.
Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
Changes in v2:
- using "-" replace "_" in binding document
Documentation/devicetree/bindings/sound/atmel-wm8904.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/atmel-wm8904.txt b/Documentation/devicetree/bindings/sound/atmel-wm8904.txt
index 8bbe50c..2d86e2b 100644
--- a/Documentation/devicetree/bindings/sound/atmel-wm8904.txt
+++ b/Documentation/devicetree/bindings/sound/atmel-wm8904.txt
@@ -33,6 +33,12 @@ Required properties:
Optional properties:
- pinctrl-names, pinctrl-0: Please refer to pinctrl-bindings.txt
+ - atmel,clk-from-rk-pin: bool property.
+ - When SSC works in slave mode, according to the hardware design, the
+ clock can get from TK pin, and also can get from RK pin. So, add
+ this parameter to choose where the clock from.
+ - By default the clock is from TK pin, if the clock from RK pin, this
+ property is needed.
Example:
sound {
--
1.8.5.2
^ permalink raw reply related [flat|nested] 6+ messages in thread