mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
ASoC: SSM2602: Model power supply for the digital core as a DAPM widget
Model the power supply for the digital core as a DAPM_SUPPLY widget. This allows to cleanup the code a bit. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
7dcf2760bf
commit
2a43801a76
1 changed files with 6 additions and 19 deletions
|
@ -126,6 +126,8 @@ SND_SOC_DAPM_DAC("DAC", "HiFi Playback", SSM2602_PWR, 3, 1),
|
||||||
SND_SOC_DAPM_ADC("ADC", "HiFi Capture", SSM2602_PWR, 2, 1),
|
SND_SOC_DAPM_ADC("ADC", "HiFi Capture", SSM2602_PWR, 2, 1),
|
||||||
SND_SOC_DAPM_PGA("Line Input", SSM2602_PWR, 0, 1, NULL, 0),
|
SND_SOC_DAPM_PGA("Line Input", SSM2602_PWR, 0, 1, NULL, 0),
|
||||||
|
|
||||||
|
SND_SOC_DAPM_SUPPLY("Digital Core Power", SSM2602_ACTIVE, 0, 0, 0, 0),
|
||||||
|
|
||||||
SND_SOC_DAPM_OUTPUT("LOUT"),
|
SND_SOC_DAPM_OUTPUT("LOUT"),
|
||||||
SND_SOC_DAPM_OUTPUT("ROUT"),
|
SND_SOC_DAPM_OUTPUT("ROUT"),
|
||||||
SND_SOC_DAPM_INPUT("RLINEIN"),
|
SND_SOC_DAPM_INPUT("RLINEIN"),
|
||||||
|
@ -152,6 +154,9 @@ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_soc_dapm_route ssm260x_routes[] = {
|
static const struct snd_soc_dapm_route ssm260x_routes[] = {
|
||||||
|
{"DAC", NULL, "Digital Core Power"},
|
||||||
|
{"ADC", NULL, "Digital Core Power"},
|
||||||
|
|
||||||
{"Output Mixer", "Line Bypass Switch", "Line Input"},
|
{"Output Mixer", "Line Bypass Switch", "Line Input"},
|
||||||
{"Output Mixer", "HiFi Playback Switch", "DAC"},
|
{"Output Mixer", "HiFi Playback Switch", "DAC"},
|
||||||
|
|
||||||
|
@ -252,7 +257,6 @@ static int ssm2602_hw_params(struct snd_pcm_substream *substream,
|
||||||
if (srate < 0)
|
if (srate < 0)
|
||||||
return srate;
|
return srate;
|
||||||
|
|
||||||
snd_soc_write(codec, SSM2602_ACTIVE, 0);
|
|
||||||
snd_soc_write(codec, SSM2602_SRATE, srate);
|
snd_soc_write(codec, SSM2602_SRATE, srate);
|
||||||
|
|
||||||
/* bit size */
|
/* bit size */
|
||||||
|
@ -270,7 +274,6 @@ static int ssm2602_hw_params(struct snd_pcm_substream *substream,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
snd_soc_write(codec, SSM2602_IFACE, iface);
|
snd_soc_write(codec, SSM2602_IFACE, iface);
|
||||||
snd_soc_write(codec, SSM2602_ACTIVE, ACTIVE_ACTIVATE_CODEC);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,17 +315,6 @@ static int ssm2602_startup(struct snd_pcm_substream *substream,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ssm2602_pcm_prepare(struct snd_pcm_substream *substream,
|
|
||||||
struct snd_soc_dai *dai)
|
|
||||||
{
|
|
||||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
||||||
struct snd_soc_codec *codec = rtd->codec;
|
|
||||||
/* set active */
|
|
||||||
snd_soc_write(codec, SSM2602_ACTIVE, ACTIVE_ACTIVATE_CODEC);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ssm2602_shutdown(struct snd_pcm_substream *substream,
|
static void ssm2602_shutdown(struct snd_pcm_substream *substream,
|
||||||
struct snd_soc_dai *dai)
|
struct snd_soc_dai *dai)
|
||||||
{
|
{
|
||||||
|
@ -330,16 +322,13 @@ static void ssm2602_shutdown(struct snd_pcm_substream *substream,
|
||||||
struct snd_soc_codec *codec = rtd->codec;
|
struct snd_soc_codec *codec = rtd->codec;
|
||||||
struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
|
struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
/* deactivate */
|
|
||||||
if (!codec->active)
|
|
||||||
snd_soc_write(codec, SSM2602_ACTIVE, 0);
|
|
||||||
|
|
||||||
if (ssm2602->master_substream == substream)
|
if (ssm2602->master_substream == substream)
|
||||||
ssm2602->master_substream = ssm2602->slave_substream;
|
ssm2602->master_substream = ssm2602->slave_substream;
|
||||||
|
|
||||||
ssm2602->slave_substream = NULL;
|
ssm2602->slave_substream = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int ssm2602_mute(struct snd_soc_dai *dai, int mute)
|
static int ssm2602_mute(struct snd_soc_dai *dai, int mute)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = dai->codec;
|
struct snd_soc_codec *codec = dai->codec;
|
||||||
|
@ -446,7 +435,6 @@ static int ssm2602_set_bias_level(struct snd_soc_codec *codec,
|
||||||
break;
|
break;
|
||||||
case SND_SOC_BIAS_OFF:
|
case SND_SOC_BIAS_OFF:
|
||||||
/* everything off, dac mute, inactive */
|
/* everything off, dac mute, inactive */
|
||||||
snd_soc_write(codec, SSM2602_ACTIVE, 0);
|
|
||||||
snd_soc_write(codec, SSM2602_PWR, 0xffff);
|
snd_soc_write(codec, SSM2602_PWR, 0xffff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -464,7 +452,6 @@ static int ssm2602_set_bias_level(struct snd_soc_codec *codec,
|
||||||
|
|
||||||
static struct snd_soc_dai_ops ssm2602_dai_ops = {
|
static struct snd_soc_dai_ops ssm2602_dai_ops = {
|
||||||
.startup = ssm2602_startup,
|
.startup = ssm2602_startup,
|
||||||
.prepare = ssm2602_pcm_prepare,
|
|
||||||
.hw_params = ssm2602_hw_params,
|
.hw_params = ssm2602_hw_params,
|
||||||
.shutdown = ssm2602_shutdown,
|
.shutdown = ssm2602_shutdown,
|
||||||
.digital_mute = ssm2602_mute,
|
.digital_mute = ssm2602_mute,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue