Commit c8a075ab authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/fix/fsl-ssi', 'asoc/fix/intel',...

Merge remote-tracking branches 'asoc/fix/fsl-ssi', 'asoc/fix/intel', 'asoc/fix/intel-kconfig' and 'asoc/fix/mediatek' into asoc-linus
...@@ -3,11 +3,13 @@ MT8173 with MAX98090 CODEC ...@@ -3,11 +3,13 @@ MT8173 with MAX98090 CODEC
Required properties: Required properties:
- compatible : "mediatek,mt8173-max98090" - compatible : "mediatek,mt8173-max98090"
- mediatek,audio-codec: the phandle of the MAX98090 audio codec - mediatek,audio-codec: the phandle of the MAX98090 audio codec
- mediatek,platform: the phandle of MT8173 ASoC platform
Example: Example:
sound { sound {
compatible = "mediatek,mt8173-max98090"; compatible = "mediatek,mt8173-max98090";
mediatek,audio-codec = <&max98090>; mediatek,audio-codec = <&max98090>;
mediatek,platform = <&afe>;
}; };
...@@ -3,11 +3,13 @@ MT8173 with RT5650 RT5676 CODECS ...@@ -3,11 +3,13 @@ MT8173 with RT5650 RT5676 CODECS
Required properties: Required properties:
- compatible : "mediatek,mt8173-rt5650-rt5676" - compatible : "mediatek,mt8173-rt5650-rt5676"
- mediatek,audio-codec: the phandles of rt5650 and rt5676 codecs - mediatek,audio-codec: the phandles of rt5650 and rt5676 codecs
- mediatek,platform: the phandle of MT8173 ASoC platform
Example: Example:
sound { sound {
compatible = "mediatek,mt8173-rt5650-rt5676"; compatible = "mediatek,mt8173-rt5650-rt5676";
mediatek,audio-codec = <&rt5650 &rt5676>; mediatek,audio-codec = <&rt5650 &rt5676>;
mediatek,platform = <&afe>;
}; };
...@@ -633,7 +633,7 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, ...@@ -633,7 +633,7 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
sub *= 100000; sub *= 100000;
do_div(sub, freq); do_div(sub, freq);
if (sub < savesub) { if (sub < savesub && !(i == 0 && psr == 0 && div2 == 0)) {
baudrate = tmprate; baudrate = tmprate;
savesub = sub; savesub = sub;
pm = i; pm = i;
......
...@@ -7,4 +7,4 @@ obj-$(CONFIG_SND_SOC_INTEL_BAYTRAIL) += baytrail/ ...@@ -7,4 +7,4 @@ obj-$(CONFIG_SND_SOC_INTEL_BAYTRAIL) += baytrail/
obj-$(CONFIG_SND_SST_MFLD_PLATFORM) += atom/ obj-$(CONFIG_SND_SST_MFLD_PLATFORM) += atom/
# Machine support # Machine support
obj-$(CONFIG_SND_SOC_INTEL_SST) += boards/ obj-$(CONFIG_SND_SOC) += boards/
...@@ -42,6 +42,11 @@ ...@@ -42,6 +42,11 @@
#define MIN_FRAGMENT_SIZE (50 * 1024) #define MIN_FRAGMENT_SIZE (50 * 1024)
#define MAX_FRAGMENT_SIZE (1024 * 1024) #define MAX_FRAGMENT_SIZE (1024 * 1024)
#define SST_GET_BYTES_PER_SAMPLE(pcm_wd_sz) (((pcm_wd_sz + 15) >> 4) << 1) #define SST_GET_BYTES_PER_SAMPLE(pcm_wd_sz) (((pcm_wd_sz + 15) >> 4) << 1)
#ifdef CONFIG_PM
#define GET_USAGE_COUNT(dev) (atomic_read(&dev->power.usage_count))
#else
#define GET_USAGE_COUNT(dev) 1
#endif
int free_stream_context(struct intel_sst_drv *ctx, unsigned int str_id) int free_stream_context(struct intel_sst_drv *ctx, unsigned int str_id)
{ {
...@@ -141,15 +146,9 @@ static int sst_power_control(struct device *dev, bool state) ...@@ -141,15 +146,9 @@ static int sst_power_control(struct device *dev, bool state)
int ret = 0; int ret = 0;
int usage_count = 0; int usage_count = 0;
#ifdef CONFIG_PM
usage_count = atomic_read(&dev->power.usage_count);
#else
usage_count = 1;
#endif
if (state == true) { if (state == true) {
ret = pm_runtime_get_sync(dev); ret = pm_runtime_get_sync(dev);
usage_count = GET_USAGE_COUNT(dev);
dev_dbg(ctx->dev, "Enable: pm usage count: %d\n", usage_count); dev_dbg(ctx->dev, "Enable: pm usage count: %d\n", usage_count);
if (ret < 0) { if (ret < 0) {
dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret); dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret);
...@@ -164,6 +163,7 @@ static int sst_power_control(struct device *dev, bool state) ...@@ -164,6 +163,7 @@ static int sst_power_control(struct device *dev, bool state)
} }
} }
} else { } else {
usage_count = GET_USAGE_COUNT(dev);
dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", usage_count); dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", usage_count);
return sst_pm_runtime_put(ctx); return sst_pm_runtime_put(ctx);
} }
......
...@@ -69,12 +69,12 @@ static const struct snd_soc_dapm_route cht_audio_map[] = { ...@@ -69,12 +69,12 @@ static const struct snd_soc_dapm_route cht_audio_map[] = {
{"Headphone", NULL, "HPR"}, {"Headphone", NULL, "HPR"},
{"Ext Spk", NULL, "SPKL"}, {"Ext Spk", NULL, "SPKL"},
{"Ext Spk", NULL, "SPKR"}, {"Ext Spk", NULL, "SPKR"},
{"AIF1 Playback", NULL, "ssp2 Tx"}, {"HiFi Playback", NULL, "ssp2 Tx"},
{"ssp2 Tx", NULL, "codec_out0"}, {"ssp2 Tx", NULL, "codec_out0"},
{"ssp2 Tx", NULL, "codec_out1"}, {"ssp2 Tx", NULL, "codec_out1"},
{"codec_in0", NULL, "ssp2 Rx" }, {"codec_in0", NULL, "ssp2 Rx" },
{"codec_in1", NULL, "ssp2 Rx" }, {"codec_in1", NULL, "ssp2 Rx" },
{"ssp2 Rx", NULL, "AIF1 Capture"}, {"ssp2 Rx", NULL, "HiFi Capture"},
}; };
static const struct snd_kcontrol_new cht_mc_controls[] = { static const struct snd_kcontrol_new cht_mc_controls[] = {
......
...@@ -103,7 +103,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { ...@@ -103,7 +103,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = {
.name = "MAX98090 Playback", .name = "MAX98090 Playback",
.stream_name = "MAX98090 Playback", .stream_name = "MAX98090 Playback",
.cpu_dai_name = "DL1", .cpu_dai_name = "DL1",
.platform_name = "11220000.mt8173-afe-pcm",
.codec_name = "snd-soc-dummy", .codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai", .codec_dai_name = "snd-soc-dummy-dai",
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
...@@ -114,7 +113,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { ...@@ -114,7 +113,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = {
.name = "MAX98090 Capture", .name = "MAX98090 Capture",
.stream_name = "MAX98090 Capture", .stream_name = "MAX98090 Capture",
.cpu_dai_name = "VUL", .cpu_dai_name = "VUL",
.platform_name = "11220000.mt8173-afe-pcm",
.codec_name = "snd-soc-dummy", .codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai", .codec_dai_name = "snd-soc-dummy-dai",
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
...@@ -125,7 +123,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = { ...@@ -125,7 +123,6 @@ static struct snd_soc_dai_link mt8173_max98090_dais[] = {
{ {
.name = "Codec", .name = "Codec",
.cpu_dai_name = "I2S", .cpu_dai_name = "I2S",
.platform_name = "11220000.mt8173-afe-pcm",
.no_pcm = 1, .no_pcm = 1,
.codec_dai_name = "HiFi", .codec_dai_name = "HiFi",
.init = mt8173_max98090_init, .init = mt8173_max98090_init,
...@@ -152,9 +149,21 @@ static struct snd_soc_card mt8173_max98090_card = { ...@@ -152,9 +149,21 @@ static struct snd_soc_card mt8173_max98090_card = {
static int mt8173_max98090_dev_probe(struct platform_device *pdev) static int mt8173_max98090_dev_probe(struct platform_device *pdev)
{ {
struct snd_soc_card *card = &mt8173_max98090_card; struct snd_soc_card *card = &mt8173_max98090_card;
struct device_node *codec_node; struct device_node *codec_node, *platform_node;
int ret, i; int ret, i;
platform_node = of_parse_phandle(pdev->dev.of_node,
"mediatek,platform", 0);
if (!platform_node) {
dev_err(&pdev->dev, "Property 'platform' missing or invalid\n");
return -EINVAL;
}
for (i = 0; i < card->num_links; i++) {
if (mt8173_max98090_dais[i].platform_name)
continue;
mt8173_max98090_dais[i].platform_of_node = platform_node;
}
codec_node = of_parse_phandle(pdev->dev.of_node, codec_node = of_parse_phandle(pdev->dev.of_node,
"mediatek,audio-codec", 0); "mediatek,audio-codec", 0);
if (!codec_node) { if (!codec_node) {
......
...@@ -138,7 +138,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { ...@@ -138,7 +138,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
.name = "rt5650_rt5676 Playback", .name = "rt5650_rt5676 Playback",
.stream_name = "rt5650_rt5676 Playback", .stream_name = "rt5650_rt5676 Playback",
.cpu_dai_name = "DL1", .cpu_dai_name = "DL1",
.platform_name = "11220000.mt8173-afe-pcm",
.codec_name = "snd-soc-dummy", .codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai", .codec_dai_name = "snd-soc-dummy-dai",
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
...@@ -149,7 +148,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { ...@@ -149,7 +148,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
.name = "rt5650_rt5676 Capture", .name = "rt5650_rt5676 Capture",
.stream_name = "rt5650_rt5676 Capture", .stream_name = "rt5650_rt5676 Capture",
.cpu_dai_name = "VUL", .cpu_dai_name = "VUL",
.platform_name = "11220000.mt8173-afe-pcm",
.codec_name = "snd-soc-dummy", .codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai", .codec_dai_name = "snd-soc-dummy-dai",
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
...@@ -161,7 +159,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = { ...@@ -161,7 +159,6 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
{ {
.name = "Codec", .name = "Codec",
.cpu_dai_name = "I2S", .cpu_dai_name = "I2S",
.platform_name = "11220000.mt8173-afe-pcm",
.no_pcm = 1, .no_pcm = 1,
.codecs = mt8173_rt5650_rt5676_codecs, .codecs = mt8173_rt5650_rt5676_codecs,
.num_codecs = 2, .num_codecs = 2,
...@@ -209,7 +206,21 @@ static struct snd_soc_card mt8173_rt5650_rt5676_card = { ...@@ -209,7 +206,21 @@ static struct snd_soc_card mt8173_rt5650_rt5676_card = {
static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev) static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev)
{ {
struct snd_soc_card *card = &mt8173_rt5650_rt5676_card; struct snd_soc_card *card = &mt8173_rt5650_rt5676_card;
int ret; struct device_node *platform_node;
int i, ret;
platform_node = of_parse_phandle(pdev->dev.of_node,
"mediatek,platform", 0);
if (!platform_node) {
dev_err(&pdev->dev, "Property 'platform' missing or invalid\n");
return -EINVAL;
}
for (i = 0; i < card->num_links; i++) {
if (mt8173_rt5650_rt5676_dais[i].platform_name)
continue;
mt8173_rt5650_rt5676_dais[i].platform_of_node = platform_node;
}
mt8173_rt5650_rt5676_codecs[0].of_node = mt8173_rt5650_rt5676_codecs[0].of_node =
of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0); of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0);
......
...@@ -1199,6 +1199,8 @@ static int mtk_afe_pcm_dev_probe(struct platform_device *pdev) ...@@ -1199,6 +1199,8 @@ static int mtk_afe_pcm_dev_probe(struct platform_device *pdev)
static int mtk_afe_pcm_dev_remove(struct platform_device *pdev) static int mtk_afe_pcm_dev_remove(struct platform_device *pdev)
{ {
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
if (!pm_runtime_status_suspended(&pdev->dev))
mtk_afe_runtime_suspend(&pdev->dev);
snd_soc_unregister_component(&pdev->dev); snd_soc_unregister_component(&pdev->dev);
snd_soc_unregister_platform(&pdev->dev); snd_soc_unregister_platform(&pdev->dev);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment