Loading sound/soc/codecs/ab8500-codec.c +1 −0 Original line number Diff line number Diff line Loading @@ -2129,6 +2129,7 @@ static int ab8500_codec_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) dev_err(dai->component->dev, "%s: ERROR: The device is either a master or a slave.\n", __func__); /* fall through */ default: dev_err(dai->component->dev, "%s: ERROR: Unsupporter master mask 0x%x\n", Loading sound/soc/codecs/hdac_hda.c +39 −14 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ static void hdac_hda_dai_close(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai); static int hdac_hda_dai_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_set_tdm_slot(struct snd_soc_dai *dai, Loading @@ -50,6 +53,7 @@ static const struct snd_soc_dai_ops hdac_hda_dai_ops = { .startup = hdac_hda_dai_open, .shutdown = hdac_hda_dai_close, .prepare = hdac_hda_dai_prepare, .hw_params = hdac_hda_dai_hw_params, .hw_free = hdac_hda_dai_hw_free, .set_tdm_slot = hdac_hda_dai_set_tdm_slot, }; Loading Loading @@ -139,6 +143,39 @@ static int hdac_hda_dai_set_tdm_slot(struct snd_soc_dai *dai, return 0; } static int hdac_hda_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 hdac_hda_priv *hda_pvt; unsigned int format_val; unsigned int maxbps; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) maxbps = dai->driver->playback.sig_bits; else maxbps = dai->driver->capture.sig_bits; hda_pvt = snd_soc_component_get_drvdata(component); format_val = snd_hdac_calc_stream_format(params_rate(params), params_channels(params), params_format(params), maxbps, 0); if (!format_val) { dev_err(dai->dev, "invalid format_val, rate=%d, ch=%d, format=%d, maxbps=%d\n", params_rate(params), params_channels(params), params_format(params), maxbps); return -EINVAL; } hda_pvt->pcm[dai->id].format_val[substream->stream] = format_val; return 0; } static int hdac_hda_dai_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { Loading @@ -162,10 +199,9 @@ static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_component *component = dai->component; struct hda_pcm_stream *hda_stream; struct hdac_hda_priv *hda_pvt; struct snd_pcm_runtime *runtime = substream->runtime; struct hdac_device *hdev; struct hda_pcm_stream *hda_stream; unsigned int format_val; struct hda_pcm *pcm; unsigned int stream; Loading @@ -179,19 +215,8 @@ static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, hda_stream = &pcm->stream[substream->stream]; format_val = snd_hdac_calc_stream_format(runtime->rate, runtime->channels, runtime->format, hda_stream->maxbps, 0); if (!format_val) { dev_err(&hdev->dev, "invalid format_val, rate=%d, ch=%d, format=%d\n", runtime->rate, runtime->channels, runtime->format); return -EINVAL; } stream = hda_pvt->pcm[dai->id].stream_tag[substream->stream]; format_val = hda_pvt->pcm[dai->id].format_val[substream->stream]; ret = snd_hda_codec_prepare(&hda_pvt->codec, hda_stream, stream, format_val, substream); Loading sound/soc/codecs/hdac_hda.h +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ struct hdac_hda_pcm { int stream_tag[2]; unsigned int format_val[2]; }; struct hdac_hda_priv { Loading sound/soc/codecs/hdmi-codec.c +59 −62 Original line number Diff line number Diff line Loading @@ -484,9 +484,6 @@ static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, params_width(params), params_rate(params), params_channels(params)); if (params_width(params) > 24) params->msbits = 24; ret = snd_pcm_create_iec958_consumer_hw_params(params, hp.iec.status, sizeof(hp.iec.status)); if (ret < 0) { Loading Loading @@ -529,13 +526,12 @@ static int hdmi_codec_set_fmt(struct snd_soc_dai *dai, { struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); struct hdmi_codec_daifmt cf = { 0 }; int ret = 0; dev_dbg(dai->dev, "%s()\n", __func__); if (dai->id == DAI_ID_SPDIF) { cf.fmt = HDMI_SPDIF; } else { if (dai->id == DAI_ID_SPDIF) return 0; switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { case SND_SOC_DAIFMT_CBM_CFM: cf.bit_clk_master = 1; Loading Loading @@ -591,11 +587,10 @@ static int hdmi_codec_set_fmt(struct snd_soc_dai *dai, dev_err(dai->dev, "Invalid DAI interface format\n"); return -EINVAL; } } hcp->daifmt[dai->id] = cf; return ret; return 0; } static int hdmi_codec_digital_mute(struct snd_soc_dai *dai, int mute) Loading Loading @@ -792,8 +787,10 @@ static int hdmi_codec_probe(struct platform_device *pdev) i++; } if (hcd->spdif) if (hcd->spdif) { hcp->daidrv[i] = hdmi_spdif_dai; hcp->daifmt[DAI_ID_SPDIF].fmt = HDMI_SPDIF; } dev_set_drvdata(dev, hcp); Loading sound/soc/codecs/nau8810.c +2 −2 Original line number Diff line number Diff line Loading @@ -411,9 +411,9 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Mono Mixer", NAU8810_REG_POWER3, NAU8810_MOUTMX_EN_SFT, 0, &nau8810_mono_mixer_controls[0], ARRAY_SIZE(nau8810_mono_mixer_controls)), SND_SOC_DAPM_DAC("DAC", "HiFi Playback", NAU8810_REG_POWER3, SND_SOC_DAPM_DAC("DAC", "Playback", NAU8810_REG_POWER3, NAU8810_DAC_EN_SFT, 0), SND_SOC_DAPM_ADC("ADC", "HiFi Capture", NAU8810_REG_POWER2, SND_SOC_DAPM_ADC("ADC", "Capture", NAU8810_REG_POWER2, NAU8810_ADC_EN_SFT, 0), SND_SOC_DAPM_PGA("SpkN Out", NAU8810_REG_POWER3, NAU8810_NSPK_EN_SFT, 0, NULL, 0), Loading Loading
sound/soc/codecs/ab8500-codec.c +1 −0 Original line number Diff line number Diff line Loading @@ -2129,6 +2129,7 @@ static int ab8500_codec_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) dev_err(dai->component->dev, "%s: ERROR: The device is either a master or a slave.\n", __func__); /* fall through */ default: dev_err(dai->component->dev, "%s: ERROR: Unsupporter master mask 0x%x\n", Loading
sound/soc/codecs/hdac_hda.c +39 −14 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ static void hdac_hda_dai_close(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai); static int hdac_hda_dai_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai); static int hdac_hda_dai_set_tdm_slot(struct snd_soc_dai *dai, Loading @@ -50,6 +53,7 @@ static const struct snd_soc_dai_ops hdac_hda_dai_ops = { .startup = hdac_hda_dai_open, .shutdown = hdac_hda_dai_close, .prepare = hdac_hda_dai_prepare, .hw_params = hdac_hda_dai_hw_params, .hw_free = hdac_hda_dai_hw_free, .set_tdm_slot = hdac_hda_dai_set_tdm_slot, }; Loading Loading @@ -139,6 +143,39 @@ static int hdac_hda_dai_set_tdm_slot(struct snd_soc_dai *dai, return 0; } static int hdac_hda_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 hdac_hda_priv *hda_pvt; unsigned int format_val; unsigned int maxbps; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) maxbps = dai->driver->playback.sig_bits; else maxbps = dai->driver->capture.sig_bits; hda_pvt = snd_soc_component_get_drvdata(component); format_val = snd_hdac_calc_stream_format(params_rate(params), params_channels(params), params_format(params), maxbps, 0); if (!format_val) { dev_err(dai->dev, "invalid format_val, rate=%d, ch=%d, format=%d, maxbps=%d\n", params_rate(params), params_channels(params), params_format(params), maxbps); return -EINVAL; } hda_pvt->pcm[dai->id].format_val[substream->stream] = format_val; return 0; } static int hdac_hda_dai_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { Loading @@ -162,10 +199,9 @@ static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_component *component = dai->component; struct hda_pcm_stream *hda_stream; struct hdac_hda_priv *hda_pvt; struct snd_pcm_runtime *runtime = substream->runtime; struct hdac_device *hdev; struct hda_pcm_stream *hda_stream; unsigned int format_val; struct hda_pcm *pcm; unsigned int stream; Loading @@ -179,19 +215,8 @@ static int hdac_hda_dai_prepare(struct snd_pcm_substream *substream, hda_stream = &pcm->stream[substream->stream]; format_val = snd_hdac_calc_stream_format(runtime->rate, runtime->channels, runtime->format, hda_stream->maxbps, 0); if (!format_val) { dev_err(&hdev->dev, "invalid format_val, rate=%d, ch=%d, format=%d\n", runtime->rate, runtime->channels, runtime->format); return -EINVAL; } stream = hda_pvt->pcm[dai->id].stream_tag[substream->stream]; format_val = hda_pvt->pcm[dai->id].format_val[substream->stream]; ret = snd_hda_codec_prepare(&hda_pvt->codec, hda_stream, stream, format_val, substream); Loading
sound/soc/codecs/hdac_hda.h +1 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ struct hdac_hda_pcm { int stream_tag[2]; unsigned int format_val[2]; }; struct hdac_hda_priv { Loading
sound/soc/codecs/hdmi-codec.c +59 −62 Original line number Diff line number Diff line Loading @@ -484,9 +484,6 @@ static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, params_width(params), params_rate(params), params_channels(params)); if (params_width(params) > 24) params->msbits = 24; ret = snd_pcm_create_iec958_consumer_hw_params(params, hp.iec.status, sizeof(hp.iec.status)); if (ret < 0) { Loading Loading @@ -529,13 +526,12 @@ static int hdmi_codec_set_fmt(struct snd_soc_dai *dai, { struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); struct hdmi_codec_daifmt cf = { 0 }; int ret = 0; dev_dbg(dai->dev, "%s()\n", __func__); if (dai->id == DAI_ID_SPDIF) { cf.fmt = HDMI_SPDIF; } else { if (dai->id == DAI_ID_SPDIF) return 0; switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { case SND_SOC_DAIFMT_CBM_CFM: cf.bit_clk_master = 1; Loading Loading @@ -591,11 +587,10 @@ static int hdmi_codec_set_fmt(struct snd_soc_dai *dai, dev_err(dai->dev, "Invalid DAI interface format\n"); return -EINVAL; } } hcp->daifmt[dai->id] = cf; return ret; return 0; } static int hdmi_codec_digital_mute(struct snd_soc_dai *dai, int mute) Loading Loading @@ -792,8 +787,10 @@ static int hdmi_codec_probe(struct platform_device *pdev) i++; } if (hcd->spdif) if (hcd->spdif) { hcp->daidrv[i] = hdmi_spdif_dai; hcp->daifmt[DAI_ID_SPDIF].fmt = HDMI_SPDIF; } dev_set_drvdata(dev, hcp); Loading
sound/soc/codecs/nau8810.c +2 −2 Original line number Diff line number Diff line Loading @@ -411,9 +411,9 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Mono Mixer", NAU8810_REG_POWER3, NAU8810_MOUTMX_EN_SFT, 0, &nau8810_mono_mixer_controls[0], ARRAY_SIZE(nau8810_mono_mixer_controls)), SND_SOC_DAPM_DAC("DAC", "HiFi Playback", NAU8810_REG_POWER3, SND_SOC_DAPM_DAC("DAC", "Playback", NAU8810_REG_POWER3, NAU8810_DAC_EN_SFT, 0), SND_SOC_DAPM_ADC("ADC", "HiFi Capture", NAU8810_REG_POWER2, SND_SOC_DAPM_ADC("ADC", "Capture", NAU8810_REG_POWER2, NAU8810_ADC_EN_SFT, 0), SND_SOC_DAPM_PGA("SpkN Out", NAU8810_REG_POWER3, NAU8810_NSPK_EN_SFT, 0, NULL, 0), Loading