* [PATCH 0/7] Let Atmel use simple-audio-card
@ 2018-01-30 11:06 Ladislav Michl
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
` (6 more replies)
0 siblings, 7 replies; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:06 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Alexandre,
following patchset is sent as a bare minimum I need to use
MAX9867 codec in master mode on AT91SAM9G20 based board.
Codec's MCLK is driven by PCK0 and SSC is wired as follows:
RK0 <-- BCLK
RF0 <-- LRCLK
TD0 --> SDIN
RD0 <-- SDOUT
Following DT framgment was used:
i2c-gpio-0 {
codec: max9867@18 {
compatible = "maxim,max9867";
reg = <0x18>;
#sound-dai-cells = <0>;
};
};
sound {
compatible = "simple-audio-card";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pck0_as_mck>;
simple-audio-card,name = "simear4-max9867";
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&codec_dai>;
simple-audio-card,frame-master = <&codec_dai>;
simple-audio-card,routing =
"LINE_IN", "Line In Jack",
"Speaker", "HPOUT";
simple-audio-card,widgets =
"Line", "Line In Jack",
"Speaker", "Speaker";
cpu_dai: simple-audio-card,cpu {
sound-dai = <&ssc0>;
};
codec_dai: simple-audio-card,codec {
sound-dai = <&codec>;
clocks = <&pck0>;
clock-frequency = <12384000>;
};
};
&ssc0 {
status = "okay";
pinctrl-0 = <&pinctrl_board_ssc0_tx &pinctrl_ssc0_rx>;
atmel,clk-from-rk-pin;
#sound-dai-cells = <0>;
};
Codec code itself seems to be unused since it was merged and I'm
wondering whenever it worked at all. A comment from codec author
would help a lot, just to be sure I did not break anything.
By no means this code is ready to be merged (only except those patches
with commit log and after carefull consideration :)), I'm posting it as
a base for discussion.
Thank you,
ladis
Ladislav Michl (7):
ASoC: atmel: Remove redundant dev_err() call in probe function
ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode
ASoC: simple_card_utils: Set clock frequency
ASoC: max9867: Show Kconfig entry
ASoC: max9867: Calculate LRCLK divider
ASoC: max9867: Fix BSEL value in master mode.
ASoC: max9867: Take chip out of shutdown
sound/soc/atmel/atmel-classd.c | 7 +--
sound/soc/atmel/atmel-pdmic.c | 7 +--
sound/soc/atmel/atmel_ssc_dai.c | 2 +-
sound/soc/codecs/Kconfig | 3 +-
sound/soc/codecs/max9867.c | 110 +++-------------------------------
sound/soc/generic/simple-card-utils.c | 4 ++
6 files changed, 19 insertions(+), 114 deletions(-)
--
2.15.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
@ 2018-01-30 11:06 ` Ladislav Michl
2018-02-27 16:54 ` Alexandre Belloni
2018-03-01 18:06 ` Applied "ASoC: atmel: Remove redundant dev_err() call in probe function" to the asoc tree Mark Brown
2018-01-30 11:08 ` [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode Ladislav Michl
` (5 subsequent siblings)
6 siblings, 2 replies; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:06 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
There is an error message within devm_ioremap_resource already,
so remove the redundant dev_err() call.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
sound/soc/atmel/atmel-classd.c | 7 ++-----
sound/soc/atmel/atmel-pdmic.c | 7 ++-----
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
index ebabed69f0e6..540f0b6a95aa 100644
--- a/sound/soc/atmel/atmel-classd.c
+++ b/sound/soc/atmel/atmel-classd.c
@@ -580,11 +580,8 @@ static int atmel_classd_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
io_base = devm_ioremap_resource(dev, res);
- if (IS_ERR(io_base)) {
- ret = PTR_ERR(io_base);
- dev_err(dev, "failed to remap register memory: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(io_base))
+ return PTR_ERR(io_base);
dd->phy_base = res->start;
diff --git a/sound/soc/atmel/atmel-pdmic.c b/sound/soc/atmel/atmel-pdmic.c
index 8e3d34be9e69..0729f656f7eb 100644
--- a/sound/soc/atmel/atmel-pdmic.c
+++ b/sound/soc/atmel/atmel-pdmic.c
@@ -629,11 +629,8 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
io_base = devm_ioremap_resource(dev, res);
- if (IS_ERR(io_base)) {
- ret = PTR_ERR(io_base);
- dev_err(dev, "failed to remap register memory: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(io_base))
+ return PTR_ERR(io_base);
dd->phy_base = res->start;
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
@ 2018-01-30 11:08 ` Ladislav Michl
2018-02-27 17:09 ` Alexandre Belloni
2018-01-30 11:08 ` [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency Ladislav Michl
` (4 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:08 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
sound/soc/atmel/atmel_ssc_dai.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index a1e2c5682dcd..8e145487cb18 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -647,7 +647,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
tcmr = SSC_BF(TCMR_PERIOD, 0)
| SSC_BF(TCMR_STTDLY, START_DELAY)
- | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
+ | SSC_BF(TCMR_START, SSC_START_TX_RX)
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
| SSC_BF(TCMR_CKO, SSC_CKO_NONE)
| SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
2018-01-30 11:08 ` [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode Ladislav Michl
@ 2018-01-30 11:08 ` Ladislav Michl
2018-02-27 17:19 ` Alexandre Belloni
2018-01-30 11:09 ` [PATCH 4/7] ASoC: max9867: Show Kconfig entry Ladislav Michl
` (3 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:08 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
sound/soc/generic/simple-card-utils.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index 3751a07de6aa..6b0cadc56933 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -185,6 +185,10 @@ int asoc_simple_card_parse_clk(struct device *dev,
*/
clk = devm_get_clk_from_child(dev, node, NULL);
if (!IS_ERR(clk)) {
+ if (!of_property_read_u32(node, "clock-frequency", &val)) {
+ if (clk_set_rate(clk, val))
+ dev_err(dev, "failed to set frequency %d\n", val);
+ }
simple_dai->sysclk = clk_get_rate(clk);
asoc_simple_card_clk_register(simple_dai, clk);
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/7] ASoC: max9867: Show Kconfig entry
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
` (2 preceding siblings ...)
2018-01-30 11:08 ` [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency Ladislav Michl
@ 2018-01-30 11:09 ` Ladislav Michl
2018-03-01 18:06 ` Applied "ASoC: max9867: Show Kconfig entry" to the asoc tree Mark Brown
2018-01-30 11:10 ` [PATCH 5/7] ASoC: max9867: Calculate LRCLK divider Ladislav Michl
` (2 subsequent siblings)
6 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:09 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Allow codec to be selected.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
sound/soc/codecs/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 2b331f7266ab..56542e939a5f 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -615,7 +615,8 @@ config SND_SOC_MAX98504
depends on I2C
config SND_SOC_MAX9867
- tristate
+ tristate "Maxim MAX9867 CODEC"
+ depends on I2C
config SND_SOC_MAX98925
tristate
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/7] ASoC: max9867: Calculate LRCLK divider
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
` (3 preceding siblings ...)
2018-01-30 11:09 ` [PATCH 4/7] ASoC: max9867: Show Kconfig entry Ladislav Michl
@ 2018-01-30 11:10 ` Ladislav Michl
2018-01-30 11:10 ` [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode Ladislav Michl
2018-01-30 11:11 ` [PATCH 7/7] ASoC: max9867: Take chip out of shutdown Ladislav Michl
6 siblings, 0 replies; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:10 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Do not limit sample rate to a few precalculated frequencies
based on "Common NI Values Table" and put the same equation
used to create that table directly in code.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
sound/soc/codecs/max9867.c | 64 +++-------------------------------------------
1 file changed, 4 insertions(+), 60 deletions(-)
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 2f60924fe919..026b7cf94910 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -126,75 +126,19 @@ static const struct snd_soc_dapm_route max9867_audio_map[] = {
{"LINE_IN", NULL, "Right Line"},
};
-enum rates {
- pcm_rate_8, pcm_rate_16, pcm_rate_24,
- pcm_rate_32, pcm_rate_44,
- pcm_rate_48, max_pcm_rate,
-};
-
-static const struct ni_div_rates {
- u32 mclk;
- u16 ni[max_pcm_rate];
-} ni_div[] = {
- {11289600, {0x116A, 0x22D4, 0x343F, 0x45A9, 0x6000, 0x687D} },
- {12000000, {0x1062, 0x20C5, 0x3127, 0x4189, 0x5A51, 0x624E} },
- {12288000, {0x1000, 0x2000, 0x3000, 0x4000, 0x5833, 0x6000} },
- {13000000, {0x0F20, 0x1E3F, 0x2D5F, 0x3C7F, 0x535F, 0x5ABE} },
- {19200000, {0x0A3D, 0x147B, 0x1EB8, 0x28F6, 0x3873, 0x3D71} },
- {24000000, {0x1062, 0x20C5, 0x1893, 0x4189, 0x5A51, 0x624E} },
- {26000000, {0x0F20, 0x1E3F, 0x16AF, 0x3C7F, 0x535F, 0x5ABE} },
- {27000000, {0x0E90, 0x1D21, 0x15D8, 0x3A41, 0x5048, 0x5762} },
-};
-
-static inline int get_ni_value(int mclk, int rate)
-{
- int i, ret = 0;
-
- /* find the closest rate index*/
- for (i = 0; i < ARRAY_SIZE(ni_div); i++) {
- if (ni_div[i].mclk >= mclk)
- break;
- }
- if (i == ARRAY_SIZE(ni_div))
- return -EINVAL;
-
- switch (rate) {
- case 8000:
- return ni_div[i].ni[pcm_rate_8];
- case 16000:
- return ni_div[i].ni[pcm_rate_16];
- case 32000:
- return ni_div[i].ni[pcm_rate_32];
- case 44100:
- return ni_div[i].ni[pcm_rate_44];
- case 48000:
- return ni_div[i].ni[pcm_rate_48];
- default:
- pr_err("%s wrong rate %d\n", __func__, rate);
- ret = -EINVAL;
- }
- return ret;
-}
-
static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
{
struct snd_soc_codec *codec = dai->codec;
struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
- unsigned int ni_h, ni_l;
- int value;
-
- value = get_ni_value(max9867->sysclk, params_rate(params));
- if (value < 0)
- return value;
+ unsigned int ni = DIV_ROUND_CLOSEST_ULL(96 * 0x10000 *
+ (unsigned long long)params_rate(params), max9867->sysclk);
- ni_h = (0xFF00 & value) >> 8;
- ni_l = 0x00FF & value;
/* set up the ni value */
regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
- MAX9867_NI_HIGH_MASK, ni_h);
+ MAX9867_NI_HIGH_MASK, (0xFF00 & ni) >> 8);
regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKLOW,
- MAX9867_NI_LOW_MASK, ni_l);
+ MAX9867_NI_LOW_MASK, 0x00FF & ni);
if (!max9867->master) {
/*
* digital pll locks on to any externally supplied LRCLK signal
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
` (4 preceding siblings ...)
2018-01-30 11:10 ` [PATCH 5/7] ASoC: max9867: Calculate LRCLK divider Ladislav Michl
@ 2018-01-30 11:10 ` Ladislav Michl
2018-02-27 17:23 ` Alexandre Belloni
2018-01-30 11:11 ` [PATCH 7/7] ASoC: max9867: Take chip out of shutdown Ladislav Michl
6 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:10 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
Note: It should be reconsidered where BSEL should be set.
sound/soc/codecs/max9867.c | 43 +++----------------------------------------
1 file changed, 3 insertions(+), 40 deletions(-)
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 026b7cf94910..6272cf5df4a9 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -148,46 +148,6 @@ static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
MAX9867_RAPID_LOCK, MAX9867_RAPID_LOCK);
regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
MAX9867_PLL, MAX9867_PLL);
- } else {
- unsigned long int bclk_rate, pclk_bclk_ratio;
- int bclk_value;
-
- bclk_rate = params_rate(params) * 2 * params_width(params);
- pclk_bclk_ratio = max9867->pclk/bclk_rate;
- switch (params_width(params)) {
- case 8:
- case 16:
- switch (pclk_bclk_ratio) {
- case 2:
- bclk_value = MAX9867_IFC1B_PCLK_2;
- break;
- case 4:
- bclk_value = MAX9867_IFC1B_PCLK_4;
- break;
- case 8:
- bclk_value = MAX9867_IFC1B_PCLK_8;
- break;
- case 16:
- bclk_value = MAX9867_IFC1B_PCLK_16;
- break;
- default:
- dev_err(codec->dev,
- "unsupported sampling rate\n");
- return -EINVAL;
- }
- break;
- case 24:
- bclk_value = MAX9867_IFC1B_24BIT;
- break;
- case 32:
- bclk_value = MAX9867_IFC1B_32BIT;
- break;
- default:
- dev_err(codec->dev, "unsupported sampling rate\n");
- return -EINVAL;
- }
- regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
- MAX9867_IFC1B_BCLK_MASK, bclk_value);
}
return 0;
}
@@ -244,6 +204,9 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
value &= ~MAX9867_FREQ_MASK;
regmap_update_bits(max9867->regmap, MAX9867_SYSCLK,
MAX9867_PSCLK_MASK, value);
+ regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
+ MAX9867_IFC1B_BCLK_MASK, 0x010);
+
return 0;
}
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 7/7] ASoC: max9867: Take chip out of shutdown
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
` (5 preceding siblings ...)
2018-01-30 11:10 ` [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode Ladislav Michl
@ 2018-01-30 11:11 ` Ladislav Michl
6 siblings, 0 replies; 20+ messages in thread
From: Ladislav Michl @ 2018-01-30 11:11 UTC (permalink / raw)
To: alsa-devel
Cc: Charles Keepax, Alexandre Belloni, Nicolas Ferre,
Kuninori Morimoto, anish kumar
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
Note: It would be great to take only used parts of
codec out of shutdown and put them to sleep
again once unused.
sound/soc/codecs/max9867.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 6272cf5df4a9..06d11b9f4286 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -158,8 +158,7 @@ static int max9867_prepare(struct snd_pcm_substream *substream,
struct snd_soc_codec *codec = dai->codec;
struct max9867_priv *max9867 = snd_soc_codec_get_drvdata(codec);
- regmap_update_bits(max9867->regmap, MAX9867_PWRMAN,
- MAX9867_SHTDOWN_MASK, MAX9867_SHTDOWN_MASK);
+ regmap_write(max9867->regmap, MAX9867_PWRMAN, 0xff);
return 0;
}
--
2.15.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
@ 2018-02-27 16:54 ` Alexandre Belloni
2018-02-27 17:13 ` Nicolas Ferre
2018-03-01 18:06 ` Applied "ASoC: atmel: Remove redundant dev_err() call in probe function" to the asoc tree Mark Brown
1 sibling, 1 reply; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-27 16:54 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
Hi,
On 30/01/2018 at 12:06:54 +0100, Ladislav Michl wrote:
> There is an error message within devm_ioremap_resource already,
> so remove the redundant dev_err() call.
>
That one can be sent as-is, don't forget to send to Mark Brown as he is
the asoc maintainer.
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
> sound/soc/atmel/atmel-classd.c | 7 ++-----
> sound/soc/atmel/atmel-pdmic.c | 7 ++-----
> 2 files changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
> index ebabed69f0e6..540f0b6a95aa 100644
> --- a/sound/soc/atmel/atmel-classd.c
> +++ b/sound/soc/atmel/atmel-classd.c
> @@ -580,11 +580,8 @@ static int atmel_classd_probe(struct platform_device *pdev)
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> io_base = devm_ioremap_resource(dev, res);
> - if (IS_ERR(io_base)) {
> - ret = PTR_ERR(io_base);
> - dev_err(dev, "failed to remap register memory: %d\n", ret);
> - return ret;
> - }
> + if (IS_ERR(io_base))
> + return PTR_ERR(io_base);
>
> dd->phy_base = res->start;
>
> diff --git a/sound/soc/atmel/atmel-pdmic.c b/sound/soc/atmel/atmel-pdmic.c
> index 8e3d34be9e69..0729f656f7eb 100644
> --- a/sound/soc/atmel/atmel-pdmic.c
> +++ b/sound/soc/atmel/atmel-pdmic.c
> @@ -629,11 +629,8 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> io_base = devm_ioremap_resource(dev, res);
> - if (IS_ERR(io_base)) {
> - ret = PTR_ERR(io_base);
> - dev_err(dev, "failed to remap register memory: %d\n", ret);
> - return ret;
> - }
> + if (IS_ERR(io_base))
> + return PTR_ERR(io_base);
>
> dd->phy_base = res->start;
>
> --
> 2.15.1
>
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode
2018-01-30 11:08 ` [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode Ladislav Michl
@ 2018-02-27 17:09 ` Alexandre Belloni
2018-02-27 18:50 ` Ladislav Michl
0 siblings, 1 reply; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-27 17:09 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
This one needs a proper git message because it is not obvious what this
is fixing.
Also, this doesn't exactly fix salve mode. Instead it is enabled
synchronous mode. Maybe we need a new DT property to handle sychronous
RX/TX. Probably something like what is done here:
https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/sound/fsl-sai.txt#L39
But our default would be asynchronous.
On 30/01/2018 at 12:08:10 +0100, Ladislav Michl wrote:
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
> sound/soc/atmel/atmel_ssc_dai.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
> index a1e2c5682dcd..8e145487cb18 100644
> --- a/sound/soc/atmel/atmel_ssc_dai.c
> +++ b/sound/soc/atmel/atmel_ssc_dai.c
> @@ -647,7 +647,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
>
> tcmr = SSC_BF(TCMR_PERIOD, 0)
> | SSC_BF(TCMR_STTDLY, START_DELAY)
> - | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
> + | SSC_BF(TCMR_START, SSC_START_TX_RX)
> | SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
> | SSC_BF(TCMR_CKO, SSC_CKO_NONE)
> | SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
> --
> 2.15.1
>
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function
2018-02-27 16:54 ` Alexandre Belloni
@ 2018-02-27 17:13 ` Nicolas Ferre
0 siblings, 0 replies; 20+ messages in thread
From: Nicolas Ferre @ 2018-02-27 17:13 UTC (permalink / raw)
To: Alexandre Belloni, Ladislav Michl
Cc: alsa-devel, Charles Keepax, Kuninori Morimoto, anish kumar
On 27/02/2018 at 17:54, Alexandre Belloni wrote:
> Hi,
>
> On 30/01/2018 at 12:06:54 +0100, Ladislav Michl wrote:
>> There is an error message within devm_ioremap_resource already,
>> so remove the redundant dev_err() call.
>>
>
> That one can be sent as-is, don't forget to send to Mark Brown as he is
> the asoc maintainer.
Good, you can add my:
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
>> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
>> ---
>> sound/soc/atmel/atmel-classd.c | 7 ++-----
>> sound/soc/atmel/atmel-pdmic.c | 7 ++-----
>> 2 files changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
>> index ebabed69f0e6..540f0b6a95aa 100644
>> --- a/sound/soc/atmel/atmel-classd.c
>> +++ b/sound/soc/atmel/atmel-classd.c
>> @@ -580,11 +580,8 @@ static int atmel_classd_probe(struct platform_device *pdev)
>>
>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> io_base = devm_ioremap_resource(dev, res);
>> - if (IS_ERR(io_base)) {
>> - ret = PTR_ERR(io_base);
>> - dev_err(dev, "failed to remap register memory: %d\n", ret);
>> - return ret;
>> - }
>> + if (IS_ERR(io_base))
>> + return PTR_ERR(io_base);
>>
>> dd->phy_base = res->start;
>>
>> diff --git a/sound/soc/atmel/atmel-pdmic.c b/sound/soc/atmel/atmel-pdmic.c
>> index 8e3d34be9e69..0729f656f7eb 100644
>> --- a/sound/soc/atmel/atmel-pdmic.c
>> +++ b/sound/soc/atmel/atmel-pdmic.c
>> @@ -629,11 +629,8 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
>>
>> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> io_base = devm_ioremap_resource(dev, res);
>> - if (IS_ERR(io_base)) {
>> - ret = PTR_ERR(io_base);
>> - dev_err(dev, "failed to remap register memory: %d\n", ret);
>> - return ret;
>> - }
>> + if (IS_ERR(io_base))
>> + return PTR_ERR(io_base);
>>
>> dd->phy_base = res->start;
>>
>> --
>> 2.15.1
>>
>
--
Nicolas Ferre
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency
2018-01-30 11:08 ` [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency Ladislav Michl
@ 2018-02-27 17:19 ` Alexandre Belloni
0 siblings, 0 replies; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-27 17:19 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On 30/01/2018 at 12:08:45 +0100, Ladislav Michl wrote:
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
> sound/soc/generic/simple-card-utils.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
> index 3751a07de6aa..6b0cadc56933 100644
> --- a/sound/soc/generic/simple-card-utils.c
> +++ b/sound/soc/generic/simple-card-utils.c
> @@ -185,6 +185,10 @@ int asoc_simple_card_parse_clk(struct device *dev,
> */
> clk = devm_get_clk_from_child(dev, node, NULL);
> if (!IS_ERR(clk)) {
> + if (!of_property_read_u32(node, "clock-frequency", &val)) {
> + if (clk_set_rate(clk, val))
> + dev_err(dev, "failed to set frequency %d\n", val);
> + }
This would need to be documented in the simple card bindings but I think
you may instead use: assigned-clocks and assigned-clock-rates.
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-01-30 11:10 ` [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode Ladislav Michl
@ 2018-02-27 17:23 ` Alexandre Belloni
2018-02-27 19:03 ` Ladislav Michl
0 siblings, 1 reply; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-27 17:23 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
This also needs a proper commit message.
On 30/01/2018 at 12:10:33 +0100, Ladislav Michl wrote:
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
> Note: It should be reconsidered where BSEL should be set.
>
> sound/soc/codecs/max9867.c | 43 +++----------------------------------------
> 1 file changed, 3 insertions(+), 40 deletions(-)
>
> diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
> index 026b7cf94910..6272cf5df4a9 100644
> --- a/sound/soc/codecs/max9867.c
> +++ b/sound/soc/codecs/max9867.c
> @@ -148,46 +148,6 @@ static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
> MAX9867_RAPID_LOCK, MAX9867_RAPID_LOCK);
> regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
> MAX9867_PLL, MAX9867_PLL);
> - } else {
> - unsigned long int bclk_rate, pclk_bclk_ratio;
> - int bclk_value;
> -
> - bclk_rate = params_rate(params) * 2 * params_width(params);
> - pclk_bclk_ratio = max9867->pclk/bclk_rate;
> - switch (params_width(params)) {
> - case 8:
> - case 16:
> - switch (pclk_bclk_ratio) {
> - case 2:
> - bclk_value = MAX9867_IFC1B_PCLK_2;
> - break;
> - case 4:
> - bclk_value = MAX9867_IFC1B_PCLK_4;
> - break;
> - case 8:
> - bclk_value = MAX9867_IFC1B_PCLK_8;
> - break;
> - case 16:
> - bclk_value = MAX9867_IFC1B_PCLK_16;
> - break;
> - default:
> - dev_err(codec->dev,
> - "unsupported sampling rate\n");
> - return -EINVAL;
> - }
> - break;
> - case 24:
> - bclk_value = MAX9867_IFC1B_24BIT;
> - break;
> - case 32:
> - bclk_value = MAX9867_IFC1B_32BIT;
> - break;
> - default:
> - dev_err(codec->dev, "unsupported sampling rate\n");
> - return -EINVAL;
> - }
> - regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> - MAX9867_IFC1B_BCLK_MASK, bclk_value);
> }
> return 0;
> }
> @@ -244,6 +204,9 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
> value &= ~MAX9867_FREQ_MASK;
> regmap_update_bits(max9867->regmap, MAX9867_SYSCLK,
> MAX9867_PSCLK_MASK, value);
> + regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> + MAX9867_IFC1B_BCLK_MASK, 0x010);
This magic value has to be defined somewhere.
> +
> return 0;
> }
>
> --
> 2.15.1
>
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode
2018-02-27 17:09 ` Alexandre Belloni
@ 2018-02-27 18:50 ` Ladislav Michl
0 siblings, 0 replies; 20+ messages in thread
From: Ladislav Michl @ 2018-02-27 18:50 UTC (permalink / raw)
To: Alexandre Belloni
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On Tue, Feb 27, 2018 at 06:09:21PM +0100, Alexandre Belloni wrote:
> This one needs a proper git message because it is not obvious what this
> is fixing.
And is also incomplete, as all synchronous slave modes need fixing :)
> Also, this doesn't exactly fix salve mode. Instead it is enabled
> synchronous mode. Maybe we need a new DT property to handle sychronous
> RX/TX. Probably something like what is done here:
>
> https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/sound/fsl-sai.txt#L39
Thank you for usefull pointer, will send v2.
> But our default would be asynchronous.
>
> On 30/01/2018 at 12:08:10 +0100, Ladislav Michl wrote:
> > Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> > ---
> > sound/soc/atmel/atmel_ssc_dai.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
> > index a1e2c5682dcd..8e145487cb18 100644
> > --- a/sound/soc/atmel/atmel_ssc_dai.c
> > +++ b/sound/soc/atmel/atmel_ssc_dai.c
> > @@ -647,7 +647,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
> >
> > tcmr = SSC_BF(TCMR_PERIOD, 0)
> > | SSC_BF(TCMR_STTDLY, START_DELAY)
> > - | SSC_BF(TCMR_START, SSC_START_FALLING_RF)
> > + | SSC_BF(TCMR_START, SSC_START_TX_RX)
> > | SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
> > | SSC_BF(TCMR_CKO, SSC_CKO_NONE)
> > | SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
> > --
> > 2.15.1
> >
>
> --
> Alexandre Belloni, Bootlin (formerly Free Electrons)
> Embedded Linux and Kernel engineering
> https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-02-27 17:23 ` Alexandre Belloni
@ 2018-02-27 19:03 ` Ladislav Michl
2018-02-28 10:00 ` Alexandre Belloni
0 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-02-27 19:03 UTC (permalink / raw)
To: Alexandre Belloni
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On Tue, Feb 27, 2018 at 06:23:09PM +0100, Alexandre Belloni wrote:
> This also needs a proper commit message.
Meanwhile more patches for this driver accumulated, so I'll send simple ones
first and those I'm uncertain of later.
Now few questions:
- should hw_params emit any error message when asked to set for example
unsupported sample rate? Many drivers do so, but it seems strange.
- table used in this driver is overkill, frequencies can be calculated
directly (patch ready), but that brings question about
SNDRV_PCM_RATE_CONTINUOUS: what does it exactly mean? What if codec is
able to set "any" rate, but there are rounding errors?
> On 30/01/2018 at 12:10:33 +0100, Ladislav Michl wrote:
> > Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> > ---
> > Note: It should be reconsidered where BSEL should be set.
> >
> > sound/soc/codecs/max9867.c | 43 +++----------------------------------------
> > 1 file changed, 3 insertions(+), 40 deletions(-)
> >
> > diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
> > index 026b7cf94910..6272cf5df4a9 100644
> > --- a/sound/soc/codecs/max9867.c
> > +++ b/sound/soc/codecs/max9867.c
> > @@ -148,46 +148,6 @@ static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
> > MAX9867_RAPID_LOCK, MAX9867_RAPID_LOCK);
> > regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
> > MAX9867_PLL, MAX9867_PLL);
> > - } else {
> > - unsigned long int bclk_rate, pclk_bclk_ratio;
> > - int bclk_value;
> > -
> > - bclk_rate = params_rate(params) * 2 * params_width(params);
> > - pclk_bclk_ratio = max9867->pclk/bclk_rate;
> > - switch (params_width(params)) {
> > - case 8:
> > - case 16:
> > - switch (pclk_bclk_ratio) {
> > - case 2:
> > - bclk_value = MAX9867_IFC1B_PCLK_2;
> > - break;
> > - case 4:
> > - bclk_value = MAX9867_IFC1B_PCLK_4;
> > - break;
> > - case 8:
> > - bclk_value = MAX9867_IFC1B_PCLK_8;
> > - break;
> > - case 16:
> > - bclk_value = MAX9867_IFC1B_PCLK_16;
> > - break;
> > - default:
> > - dev_err(codec->dev,
> > - "unsupported sampling rate\n");
> > - return -EINVAL;
> > - }
> > - break;
> > - case 24:
> > - bclk_value = MAX9867_IFC1B_24BIT;
> > - break;
> > - case 32:
> > - bclk_value = MAX9867_IFC1B_32BIT;
> > - break;
> > - default:
> > - dev_err(codec->dev, "unsupported sampling rate\n");
> > - return -EINVAL;
> > - }
> > - regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> > - MAX9867_IFC1B_BCLK_MASK, bclk_value);
> > }
> > return 0;
> > }
> > @@ -244,6 +204,9 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
> > value &= ~MAX9867_FREQ_MASK;
> > regmap_update_bits(max9867->regmap, MAX9867_SYSCLK,
> > MAX9867_PSCLK_MASK, value);
> > + regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> > + MAX9867_IFC1B_BCLK_MASK, 0x010);
>
> This magic value has to be defined somewhere.
>
> > +
> > return 0;
> > }
> >
> > --
> > 2.15.1
> >
>
> --
> Alexandre Belloni, Bootlin (formerly Free Electrons)
> Embedded Linux and Kernel engineering
> https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-02-27 19:03 ` Ladislav Michl
@ 2018-02-28 10:00 ` Alexandre Belloni
2018-02-28 10:23 ` Ladislav Michl
0 siblings, 1 reply; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-28 10:00 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On 27/02/2018 at 20:03:38 +0100, Ladislav Michl wrote:
> On Tue, Feb 27, 2018 at 06:23:09PM +0100, Alexandre Belloni wrote:
> > This also needs a proper commit message.
>
> Meanwhile more patches for this driver accumulated, so I'll send simple ones
> first and those I'm uncertain of later.
>
> Now few questions:
> - should hw_params emit any error message when asked to set for example
> unsupported sample rate? Many drivers do so, but it seems strange.
I would thin that is correct because then the eror goes up to userspace
and it knows it has to resample.
> - table used in this driver is overkill, frequencies can be calculated
> directly (patch ready), but that brings question about
> SNDRV_PCM_RATE_CONTINUOUS: what does it exactly mean? What if codec is
> able to set "any" rate, but there are rounding errors?
>
That is a good question I can't answer.
> > On 30/01/2018 at 12:10:33 +0100, Ladislav Michl wrote:
> > > Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> > > ---
> > > Note: It should be reconsidered where BSEL should be set.
> > >
> > > sound/soc/codecs/max9867.c | 43 +++----------------------------------------
> > > 1 file changed, 3 insertions(+), 40 deletions(-)
> > >
> > > diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
> > > index 026b7cf94910..6272cf5df4a9 100644
> > > --- a/sound/soc/codecs/max9867.c
> > > +++ b/sound/soc/codecs/max9867.c
> > > @@ -148,46 +148,6 @@ static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
> > > MAX9867_RAPID_LOCK, MAX9867_RAPID_LOCK);
> > > regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
> > > MAX9867_PLL, MAX9867_PLL);
> > > - } else {
> > > - unsigned long int bclk_rate, pclk_bclk_ratio;
> > > - int bclk_value;
> > > -
> > > - bclk_rate = params_rate(params) * 2 * params_width(params);
> > > - pclk_bclk_ratio = max9867->pclk/bclk_rate;
> > > - switch (params_width(params)) {
> > > - case 8:
> > > - case 16:
> > > - switch (pclk_bclk_ratio) {
> > > - case 2:
> > > - bclk_value = MAX9867_IFC1B_PCLK_2;
> > > - break;
> > > - case 4:
> > > - bclk_value = MAX9867_IFC1B_PCLK_4;
> > > - break;
> > > - case 8:
> > > - bclk_value = MAX9867_IFC1B_PCLK_8;
> > > - break;
> > > - case 16:
> > > - bclk_value = MAX9867_IFC1B_PCLK_16;
> > > - break;
> > > - default:
> > > - dev_err(codec->dev,
> > > - "unsupported sampling rate\n");
> > > - return -EINVAL;
> > > - }
> > > - break;
> > > - case 24:
> > > - bclk_value = MAX9867_IFC1B_24BIT;
> > > - break;
> > > - case 32:
> > > - bclk_value = MAX9867_IFC1B_32BIT;
> > > - break;
> > > - default:
> > > - dev_err(codec->dev, "unsupported sampling rate\n");
> > > - return -EINVAL;
> > > - }
> > > - regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> > > - MAX9867_IFC1B_BCLK_MASK, bclk_value);
> > > }
> > > return 0;
> > > }
> > > @@ -244,6 +204,9 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
> > > value &= ~MAX9867_FREQ_MASK;
> > > regmap_update_bits(max9867->regmap, MAX9867_SYSCLK,
> > > MAX9867_PSCLK_MASK, value);
> > > + regmap_update_bits(max9867->regmap, MAX9867_IFC1B,
> > > + MAX9867_IFC1B_BCLK_MASK, 0x010);
> >
> > This magic value has to be defined somewhere.
> >
> > > +
> > > return 0;
> > > }
> > >
> > > --
> > > 2.15.1
> > >
> >
> > --
> > Alexandre Belloni, Bootlin (formerly Free Electrons)
> > Embedded Linux and Kernel engineering
> > https://bootlin.com
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-02-28 10:00 ` Alexandre Belloni
@ 2018-02-28 10:23 ` Ladislav Michl
2018-02-28 10:28 ` Alexandre Belloni
0 siblings, 1 reply; 20+ messages in thread
From: Ladislav Michl @ 2018-02-28 10:23 UTC (permalink / raw)
To: Alexandre Belloni
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On Wed, Feb 28, 2018 at 11:00:54AM +0100, Alexandre Belloni wrote:
> On 27/02/2018 at 20:03:38 +0100, Ladislav Michl wrote:
> > On Tue, Feb 27, 2018 at 06:23:09PM +0100, Alexandre Belloni wrote:
> > > This also needs a proper commit message.
> >
> > Meanwhile more patches for this driver accumulated, so I'll send simple ones
> > first and those I'm uncertain of later.
> >
> > Now few questions:
> > - should hw_params emit any error message when asked to set for example
> > unsupported sample rate? Many drivers do so, but it seems strange.
>
> I would thin that is correct because then the eror goes up to userspace
> and it knows it has to resample.
Perhaps I didn't express it clearly enough. I mean all those
dev_err(dev, "sunsupported rate\n");
Here only human sitting in realspace is able to react somehow, but I'd say
he's only annoyed.
I would expect driver is able to set any rate it is advertising, so returned
-EINVAL is considered to be a programming error (which shouldn't clutter
kernel log).
> > - table used in this driver is overkill, frequencies can be calculated
> > directly (patch ready), but that brings question about
> > SNDRV_PCM_RATE_CONTINUOUS: what does it exactly mean? What if codec is
> > able to set "any" rate, but there are rounding errors?
>
> That is a good question I can't answer.
Thank you anyway, hopefully someone else would be able to answer.
Consider patch bellow - with introduced change codec is able to set any rate
in master mode (it is an example only, it needs more work), but not any rate
will be matched exactly. Of course, for each master clock rate it is possible
to compute exact supported rates and advertise them. Is that way forward or
is there any trick with SNDRV_PCM_RATE_CONTINUOUS?
Subject: ASoC: max9867: Use continuous sample rate
Drop "Common NI Values Table" and calculate LRCLK divider.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 0a6bd9f4d00a..d9b81a95a200 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -126,75 +126,19 @@ static const struct snd_soc_dapm_route max9867_audio_map[] = {
{"LINE_IN", NULL, "Right Line"},
};
-enum rates {
- pcm_rate_8, pcm_rate_16, pcm_rate_24,
- pcm_rate_32, pcm_rate_44,
- pcm_rate_48, max_pcm_rate,
-};
-
-static const struct ni_div_rates {
- u32 mclk;
- u16 ni[max_pcm_rate];
-} ni_div[] = {
- {11289600, {0x116A, 0x22D4, 0x343F, 0x45A9, 0x6000, 0x687D} },
- {12000000, {0x1062, 0x20C5, 0x3127, 0x4189, 0x5A51, 0x624E} },
- {12288000, {0x1000, 0x2000, 0x3000, 0x4000, 0x5833, 0x6000} },
- {13000000, {0x0F20, 0x1E3F, 0x2D5F, 0x3C7F, 0x535F, 0x5ABE} },
- {19200000, {0x0A3D, 0x147B, 0x1EB8, 0x28F6, 0x3873, 0x3D71} },
- {24000000, {0x1062, 0x20C5, 0x1893, 0x4189, 0x5A51, 0x624E} },
- {26000000, {0x0F20, 0x1E3F, 0x16AF, 0x3C7F, 0x535F, 0x5ABE} },
- {27000000, {0x0E90, 0x1D21, 0x15D8, 0x3A41, 0x5048, 0x5762} },
-};
-
-static inline int get_ni_value(int mclk, int rate)
-{
- int i, ret = 0;
-
- /* find the closest rate index*/
- for (i = 0; i < ARRAY_SIZE(ni_div); i++) {
- if (ni_div[i].mclk >= mclk)
- break;
- }
- if (i == ARRAY_SIZE(ni_div))
- return -EINVAL;
-
- switch (rate) {
- case 8000:
- return ni_div[i].ni[pcm_rate_8];
- case 16000:
- return ni_div[i].ni[pcm_rate_16];
- case 32000:
- return ni_div[i].ni[pcm_rate_32];
- case 44100:
- return ni_div[i].ni[pcm_rate_44];
- case 48000:
- return ni_div[i].ni[pcm_rate_48];
- default:
- pr_err("%s wrong rate %d\n", __func__, rate);
- ret = -EINVAL;
- }
- return ret;
-}
-
static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
{
struct snd_soc_component *component = dai->component;
struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
- unsigned int ni_h, ni_l;
- int value;
+ unsigned int ni = DIV_ROUND_CLOSEST_ULL(96ULL * 0x10000 * params_rate(params),
+ max9867->pclk);
- value = get_ni_value(max9867->sysclk, params_rate(params));
- if (value < 0)
- return value;
-
- ni_h = (0xFF00 & value) >> 8;
- ni_l = 0x00FF & value;
/* set up the ni value */
regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
- MAX9867_NI_HIGH_MASK, ni_h);
+ MAX9867_NI_HIGH_MASK, (0xFF00 & ni) >> 8);
regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKLOW,
- MAX9867_NI_LOW_MASK, ni_l);
+ MAX9867_NI_LOW_MASK, 0x00FF & ni);
if (!max9867->master) {
/*
* digital pll locks on to any externally supplied LRCLK signal
@@ -241,13 +185,13 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
/* Set the prescaler based on the master clock frequency*/
if (freq >= 10000000 && freq <= 20000000) {
value |= MAX9867_PSCLK_10_20;
- max9867->pclk = freq;
+ max9867->pclk = freq;
} else if (freq >= 20000000 && freq <= 40000000) {
value |= MAX9867_PSCLK_20_40;
- max9867->pclk = freq/2;
+ max9867->pclk = freq / 2;
} else if (freq >= 40000000 && freq <= 60000000) {
value |= MAX9867_PSCLK_40_60;
- max9867->pclk = freq/4;
+ max9867->pclk = freq / 4;
} else {
dev_err(component->dev,
"Invalid clock frequency %uHz (required 10-60MHz)\n",
@@ -322,10 +266,6 @@ static const struct snd_soc_dai_ops max9867_dai_ops = {
.hw_params = max9867_dai_hw_params,
};
-#define MAX9867_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
- SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
-#define MAX9867_FORMATS (SNDRV_PCM_FMTBIT_S16_LE)
-
static struct snd_soc_dai_driver max9867_dai[] = {
{
.name = "max9867-aif1",
@@ -333,15 +273,19 @@ static struct snd_soc_dai_driver max9867_dai[] = {
.stream_name = "HiFi Playback",
.channels_min = 1,
.channels_max = 2,
- .rates = MAX9867_RATES,
- .formats = MAX9867_FORMATS,
+ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+ .rate_min = 8000,
+ .rate_max = 48000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
},
.capture = {
.stream_name = "HiFi Capture",
.channels_min = 1,
.channels_max = 2,
- .rates = MAX9867_RATES,
- .formats = MAX9867_FORMATS,
+ .rates = SNDRV_PCM_RATE_CONTINUOUS,
+ .rate_min = 8000,
+ .rate_max = 48000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
},
.ops = &max9867_dai_ops,
}
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode.
2018-02-28 10:23 ` Ladislav Michl
@ 2018-02-28 10:28 ` Alexandre Belloni
0 siblings, 0 replies; 20+ messages in thread
From: Alexandre Belloni @ 2018-02-28 10:28 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Nicolas Ferre, Kuninori Morimoto,
anish kumar
On 28/02/2018 at 11:23:13 +0100, Ladislav Michl wrote:
> On Wed, Feb 28, 2018 at 11:00:54AM +0100, Alexandre Belloni wrote:
> > On 27/02/2018 at 20:03:38 +0100, Ladislav Michl wrote:
> > > On Tue, Feb 27, 2018 at 06:23:09PM +0100, Alexandre Belloni wrote:
> > > > This also needs a proper commit message.
> > >
> > > Meanwhile more patches for this driver accumulated, so I'll send simple ones
> > > first and those I'm uncertain of later.
> > >
> > > Now few questions:
> > > - should hw_params emit any error message when asked to set for example
> > > unsupported sample rate? Many drivers do so, but it seems strange.
> >
> > I would thin that is correct because then the eror goes up to userspace
> > and it knows it has to resample.
>
> Perhaps I didn't express it clearly enough. I mean all those
> dev_err(dev, "sunsupported rate\n");
> Here only human sitting in realspace is able to react somehow, but I'd say
> he's only annoyed.
>
> I would expect driver is able to set any rate it is advertising, so returned
> -EINVAL is considered to be a programming error (which shouldn't clutter
> kernel log).
>
Ah yes, please feel free to remove the dev_err messages. I also find
that they clutter the kernel output needlessly.
> > > - table used in this driver is overkill, frequencies can be calculated
> > > directly (patch ready), but that brings question about
> > > SNDRV_PCM_RATE_CONTINUOUS: what does it exactly mean? What if codec is
> > > able to set "any" rate, but there are rounding errors?
> >
> > That is a good question I can't answer.
>
> Thank you anyway, hopefully someone else would be able to answer.
>
Well, Mark is not Cced, you'd have to get his attention somehow ;)
> Consider patch bellow - with introduced change codec is able to set any rate
> in master mode (it is an example only, it needs more work), but not any rate
> will be matched exactly. Of course, for each master clock rate it is possible
> to compute exact supported rates and advertise them. Is that way forward or
> is there any trick with SNDRV_PCM_RATE_CONTINUOUS?
>
> Subject: ASoC: max9867: Use continuous sample rate
>
> Drop "Common NI Values Table" and calculate LRCLK divider.
>
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
>
> diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
> index 0a6bd9f4d00a..d9b81a95a200 100644
> --- a/sound/soc/codecs/max9867.c
> +++ b/sound/soc/codecs/max9867.c
> @@ -126,75 +126,19 @@ static const struct snd_soc_dapm_route max9867_audio_map[] = {
> {"LINE_IN", NULL, "Right Line"},
> };
>
> -enum rates {
> - pcm_rate_8, pcm_rate_16, pcm_rate_24,
> - pcm_rate_32, pcm_rate_44,
> - pcm_rate_48, max_pcm_rate,
> -};
> -
> -static const struct ni_div_rates {
> - u32 mclk;
> - u16 ni[max_pcm_rate];
> -} ni_div[] = {
> - {11289600, {0x116A, 0x22D4, 0x343F, 0x45A9, 0x6000, 0x687D} },
> - {12000000, {0x1062, 0x20C5, 0x3127, 0x4189, 0x5A51, 0x624E} },
> - {12288000, {0x1000, 0x2000, 0x3000, 0x4000, 0x5833, 0x6000} },
> - {13000000, {0x0F20, 0x1E3F, 0x2D5F, 0x3C7F, 0x535F, 0x5ABE} },
> - {19200000, {0x0A3D, 0x147B, 0x1EB8, 0x28F6, 0x3873, 0x3D71} },
> - {24000000, {0x1062, 0x20C5, 0x1893, 0x4189, 0x5A51, 0x624E} },
> - {26000000, {0x0F20, 0x1E3F, 0x16AF, 0x3C7F, 0x535F, 0x5ABE} },
> - {27000000, {0x0E90, 0x1D21, 0x15D8, 0x3A41, 0x5048, 0x5762} },
> -};
> -
> -static inline int get_ni_value(int mclk, int rate)
> -{
> - int i, ret = 0;
> -
> - /* find the closest rate index*/
> - for (i = 0; i < ARRAY_SIZE(ni_div); i++) {
> - if (ni_div[i].mclk >= mclk)
> - break;
> - }
> - if (i == ARRAY_SIZE(ni_div))
> - return -EINVAL;
> -
> - switch (rate) {
> - case 8000:
> - return ni_div[i].ni[pcm_rate_8];
> - case 16000:
> - return ni_div[i].ni[pcm_rate_16];
> - case 32000:
> - return ni_div[i].ni[pcm_rate_32];
> - case 44100:
> - return ni_div[i].ni[pcm_rate_44];
> - case 48000:
> - return ni_div[i].ni[pcm_rate_48];
> - default:
> - pr_err("%s wrong rate %d\n", __func__, rate);
> - ret = -EINVAL;
> - }
> - return ret;
> -}
> -
> static int max9867_dai_hw_params(struct snd_pcm_substream *substream,
> struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
> {
> struct snd_soc_component *component = dai->component;
> struct max9867_priv *max9867 = snd_soc_component_get_drvdata(component);
> - unsigned int ni_h, ni_l;
> - int value;
> + unsigned int ni = DIV_ROUND_CLOSEST_ULL(96ULL * 0x10000 * params_rate(params),
> + max9867->pclk);
>
> - value = get_ni_value(max9867->sysclk, params_rate(params));
> - if (value < 0)
> - return value;
> -
> - ni_h = (0xFF00 & value) >> 8;
> - ni_l = 0x00FF & value;
> /* set up the ni value */
> regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKHIGH,
> - MAX9867_NI_HIGH_MASK, ni_h);
> + MAX9867_NI_HIGH_MASK, (0xFF00 & ni) >> 8);
> regmap_update_bits(max9867->regmap, MAX9867_AUDIOCLKLOW,
> - MAX9867_NI_LOW_MASK, ni_l);
> + MAX9867_NI_LOW_MASK, 0x00FF & ni);
> if (!max9867->master) {
> /*
> * digital pll locks on to any externally supplied LRCLK signal
> @@ -241,13 +185,13 @@ static int max9867_set_dai_sysclk(struct snd_soc_dai *codec_dai,
> /* Set the prescaler based on the master clock frequency*/
> if (freq >= 10000000 && freq <= 20000000) {
> value |= MAX9867_PSCLK_10_20;
> - max9867->pclk = freq;
> + max9867->pclk = freq;
> } else if (freq >= 20000000 && freq <= 40000000) {
> value |= MAX9867_PSCLK_20_40;
> - max9867->pclk = freq/2;
> + max9867->pclk = freq / 2;
> } else if (freq >= 40000000 && freq <= 60000000) {
> value |= MAX9867_PSCLK_40_60;
> - max9867->pclk = freq/4;
> + max9867->pclk = freq / 4;
> } else {
> dev_err(component->dev,
> "Invalid clock frequency %uHz (required 10-60MHz)\n",
> @@ -322,10 +266,6 @@ static const struct snd_soc_dai_ops max9867_dai_ops = {
> .hw_params = max9867_dai_hw_params,
> };
>
> -#define MAX9867_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
> - SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
> -#define MAX9867_FORMATS (SNDRV_PCM_FMTBIT_S16_LE)
> -
> static struct snd_soc_dai_driver max9867_dai[] = {
> {
> .name = "max9867-aif1",
> @@ -333,15 +273,19 @@ static struct snd_soc_dai_driver max9867_dai[] = {
> .stream_name = "HiFi Playback",
> .channels_min = 1,
> .channels_max = 2,
> - .rates = MAX9867_RATES,
> - .formats = MAX9867_FORMATS,
> + .rates = SNDRV_PCM_RATE_CONTINUOUS,
> + .rate_min = 8000,
> + .rate_max = 48000,
> + .formats = SNDRV_PCM_FMTBIT_S16_LE,
> },
> .capture = {
> .stream_name = "HiFi Capture",
> .channels_min = 1,
> .channels_max = 2,
> - .rates = MAX9867_RATES,
> - .formats = MAX9867_FORMATS,
> + .rates = SNDRV_PCM_RATE_CONTINUOUS,
> + .rate_min = 8000,
> + .rate_max = 48000,
> + .formats = SNDRV_PCM_FMTBIT_S16_LE,
> },
> .ops = &max9867_dai_ops,
> }
--
Alexandre Belloni, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 20+ messages in thread
* Applied "ASoC: atmel: Remove redundant dev_err() call in probe function" to the asoc tree
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
2018-02-27 16:54 ` Alexandre Belloni
@ 2018-03-01 18:06 ` Mark Brown
1 sibling, 0 replies; 20+ messages in thread
From: Mark Brown @ 2018-03-01 18:06 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Kuninori Morimoto, anish kumar,
Nicolas Ferre, Mark Brown, Alexandre Belloni
The patch
ASoC: atmel: Remove redundant dev_err() call in probe function
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 1f598e6861ab1d3cc46d6eff155c0a0a6736de38 Mon Sep 17 00:00:00 2001
From: Ladislav Michl <ladis@linux-mips.org>
Date: Thu, 1 Mar 2018 14:37:31 +0100
Subject: [PATCH] ASoC: atmel: Remove redundant dev_err() call in probe
function
There is an error message within devm_ioremap_resource already,
so remove the redundant dev_err() call.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/atmel/atmel-classd.c | 7 ++-----
sound/soc/atmel/atmel-pdmic.c | 7 ++-----
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
index 27bb55ca07ae..709a13221d79 100644
--- a/sound/soc/atmel/atmel-classd.c
+++ b/sound/soc/atmel/atmel-classd.c
@@ -582,11 +582,8 @@ static int atmel_classd_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
io_base = devm_ioremap_resource(dev, res);
- if (IS_ERR(io_base)) {
- ret = PTR_ERR(io_base);
- dev_err(dev, "failed to remap register memory: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(io_base))
+ return PTR_ERR(io_base);
dd->phy_base = res->start;
diff --git a/sound/soc/atmel/atmel-pdmic.c b/sound/soc/atmel/atmel-pdmic.c
index 5f72baa5f5c7..53217dfac5fe 100644
--- a/sound/soc/atmel/atmel-pdmic.c
+++ b/sound/soc/atmel/atmel-pdmic.c
@@ -631,11 +631,8 @@ static int atmel_pdmic_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
io_base = devm_ioremap_resource(dev, res);
- if (IS_ERR(io_base)) {
- ret = PTR_ERR(io_base);
- dev_err(dev, "failed to remap register memory: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(io_base))
+ return PTR_ERR(io_base);
dd->phy_base = res->start;
--
2.16.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Applied "ASoC: max9867: Show Kconfig entry" to the asoc tree
2018-01-30 11:09 ` [PATCH 4/7] ASoC: max9867: Show Kconfig entry Ladislav Michl
@ 2018-03-01 18:06 ` Mark Brown
0 siblings, 0 replies; 20+ messages in thread
From: Mark Brown @ 2018-03-01 18:06 UTC (permalink / raw)
To: Ladislav Michl
Cc: alsa-devel, Charles Keepax, Kuninori Morimoto, anish kumar,
Nicolas Ferre, Mark Brown, Alexandre Belloni
The patch
ASoC: max9867: Show Kconfig entry
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 3ac9ce8858ae3c6fef308692dc4580c164adc96b Mon Sep 17 00:00:00 2001
From: Ladislav Michl <ladis@linux-mips.org>
Date: Thu, 1 Mar 2018 15:19:23 +0100
Subject: [PATCH] ASoC: max9867: Show Kconfig entry
Allow codec to be selected.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/codecs/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 2b331f7266ab..56542e939a5f 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -615,7 +615,8 @@ config SND_SOC_MAX98504
depends on I2C
config SND_SOC_MAX9867
- tristate
+ tristate "Maxim MAX9867 CODEC"
+ depends on I2C
config SND_SOC_MAX98925
tristate
--
2.16.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
end of thread, other threads:[~2018-03-01 18:06 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-30 11:06 [PATCH 0/7] Let Atmel use simple-audio-card Ladislav Michl
2018-01-30 11:06 ` [PATCH 1/7] ASoC: atmel: Remove redundant dev_err() call in probe function Ladislav Michl
2018-02-27 16:54 ` Alexandre Belloni
2018-02-27 17:13 ` Nicolas Ferre
2018-03-01 18:06 ` Applied "ASoC: atmel: Remove redundant dev_err() call in probe function" to the asoc tree Mark Brown
2018-01-30 11:08 ` [PATCH 2/7] ASoC: atmel_ssc_dai: Fix TCMR settings in I2S slave mode Ladislav Michl
2018-02-27 17:09 ` Alexandre Belloni
2018-02-27 18:50 ` Ladislav Michl
2018-01-30 11:08 ` [PATCH 3/7] ASoC: simple_card_utils: Set clock frequency Ladislav Michl
2018-02-27 17:19 ` Alexandre Belloni
2018-01-30 11:09 ` [PATCH 4/7] ASoC: max9867: Show Kconfig entry Ladislav Michl
2018-03-01 18:06 ` Applied "ASoC: max9867: Show Kconfig entry" to the asoc tree Mark Brown
2018-01-30 11:10 ` [PATCH 5/7] ASoC: max9867: Calculate LRCLK divider Ladislav Michl
2018-01-30 11:10 ` [PATCH 6/7] ASoC: max9867: Fix BSEL value in master mode Ladislav Michl
2018-02-27 17:23 ` Alexandre Belloni
2018-02-27 19:03 ` Ladislav Michl
2018-02-28 10:00 ` Alexandre Belloni
2018-02-28 10:23 ` Ladislav Michl
2018-02-28 10:28 ` Alexandre Belloni
2018-01-30 11:11 ` [PATCH 7/7] ASoC: max9867: Take chip out of shutdown Ladislav Michl
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.