All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonyoung Shim <jy0922.shim@samsung.com>
To: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Cc: '박경민' <kyungmin.park@samsung.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"Mark Brown" <broonie@sirena.org.uk>, 민병호 <bhmin@samsung.com>
Subject: Re: [PATCH 2/2] ASoC: twl4030 - Add VDL path support
Date: Wed, 25 Mar 2009 20:11:41 +0900	[thread overview]
Message-ID: <49CA116D.4090004@samsung.com> (raw)
In-Reply-To: <200903250821.25185.peter.ujfalusi@nokia.com>

Peter Ujfalusi 쓴 글:
> On Tuesday 24 March 2009 14:59:31 ext Joonyoung Shim wrote:
>> Adds DAPMs for VDL(voice down link) path.
>> To support VDL path, we have to change DAPM of outputs(Earpiece,
>> PreDrive Left/Right, Headset Left/Right, Carkit Left/Right) from mux to
>> mixer, also codec mode from option1 to option2.
>>
>> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
>> ---
>>  sound/soc/codecs/twl4030.c |  259
>> +++++++++++++++++++++----------------------- 1 files changed, 126
>> insertions(+), 133 deletions(-)
>>
>> diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
>> index 97738e2..967048a 100644
>> --- a/sound/soc/codecs/twl4030.c
>> +++ b/sound/soc/codecs/twl4030.c
>> @@ -42,8 +42,8 @@
>>   */
>>  static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
>>         0x00, /* this register not used         */
>> -       0x91, /* REG_CODEC_MODE         (0x1)   */
>> -       0xc3, /* REG_OPTION             (0x2)   */
>> +       0x90, /* REG_CODEC_MODE         (0x1)   */
>> +       0xd3, /* REG_OPTION             (0x2)   */
> 
> I think it is better to have user space control over the mode change.
> You can than use normal alsa mixer interface to change between Option1 and 
> Option2. You can also make sure that the Codec mode can not be changed during 
> active playback/capture (to be on the safe side).

I agree. We need the control to change mode.

> 
> I'm also thinking about to make the OPTION register configuration a bit more 
> dynamic or at least configurable.
> 
> 
>>         0x00, /* REG_UNKNOWN            (0x3)   */
>>         0x00, /* REG_MICBIAS_CTL        (0x4)   */
>>         0x20, /* REG_ANAMICL            (0x5)   */
>> @@ -56,7 +56,7 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
>>         0x00, /* REG_AVTXL2PGA          (0xC)   */
>>         0x00, /* REG_AVTXR2PGA          (0xD)   */
>>         0x01, /* REG_AUDIO_IF           (0xE)   */
>> -       0x00, /* REG_VOICE_IF           (0xF)   */
>> +       0xe3, /* REG_VOICE_IF           (0xF)   */
>>         0x00, /* REG_ARXR1PGA           (0x10)  */
>>         0x00, /* REG_ARXL1PGA           (0x11)  */
>>         0x6c, /* REG_ARXR2PGA           (0x12)  */
>> @@ -313,104 +313,60 @@ static void twl4030_power_down(struct snd_soc_codec
>> *codec) }
>>
>>  /* Earpiece */
>> -static const char *twl4030_earpiece_texts[] =
>> -               {"Off", "DACL1", "DACL2", "DACR1"};
>> -
>> -static const unsigned int twl4030_earpiece_values[] =
>> -               {0x0, 0x1, 0x2, 0x4};
>> -
>> -static const struct soc_enum twl4030_earpiece_enum =
>> -       SOC_VALUE_ENUM_SINGLE(TWL4030_REG_EAR_CTL, 1, 0x7,
>> -                       ARRAY_SIZE(twl4030_earpiece_texts),
>> -                       twl4030_earpiece_texts,
>> -                       twl4030_earpiece_values);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_earpiece_control =
>> -SOC_DAPM_VALUE_ENUM("Route", twl4030_earpiece_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_earpiece_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_EAR_CTL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_EAR_CTL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_EAR_CTL, 2, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_EAR_CTL, 3, 1, 0),
>> +};
>>
>>  /* PreDrive Left */
>> -static const char *twl4030_predrivel_texts[] =
>> -               {"Off", "DACL1", "DACL2", "DACR2"};
>> -
>> -static const unsigned int twl4030_predrivel_values[] =
>> -               {0x0, 0x1, 0x2, 0x4};
>> -
>> -static const struct soc_enum twl4030_predrivel_enum =
>> -       SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDL_CTL, 1, 0x7,
>> -                       ARRAY_SIZE(twl4030_predrivel_texts),
>> -                       twl4030_predrivel_texts,
>> -                       twl4030_predrivel_values);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_predrivel_control =
>> -SOC_DAPM_VALUE_ENUM("Route", twl4030_predrivel_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_predrivel_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDL_CTL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PREDL_CTL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDL_CTL, 2, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDL_CTL, 3, 1, 0),
>> +};
>>
>>  /* PreDrive Right */
>> -static const char *twl4030_predriver_texts[] =
>> -               {"Off", "DACR1", "DACR2", "DACL2"};
>> -
>> -static const unsigned int twl4030_predriver_values[] =
>> -               {0x0, 0x1, 0x2, 0x4};
>> -
>> -static const struct soc_enum twl4030_predriver_enum =
>> -       SOC_VALUE_ENUM_SINGLE(TWL4030_REG_PREDR_CTL, 1, 0x7,
>> -                       ARRAY_SIZE(twl4030_predriver_texts),
>> -                       twl4030_predriver_texts,
>> -                       twl4030_predriver_values);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_predriver_control =
>> -SOC_DAPM_VALUE_ENUM("Route", twl4030_predriver_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_predriver_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDR_CTL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PREDR_CTL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDR_CTL, 2, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDR_CTL, 3, 1, 0),
>> +};
>>
>>  /* Headset Left */
>> -static const char *twl4030_hsol_texts[] =
>> -               {"Off", "DACL1", "DACL2"};
>> -
>> -static const struct soc_enum twl4030_hsol_enum =
>> -       SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 1,
>> -                       ARRAY_SIZE(twl4030_hsol_texts),
>> -                       twl4030_hsol_texts);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_hsol_control =
>> -SOC_DAPM_ENUM("Route", twl4030_hsol_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_hsol_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_HS_SEL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_HS_SEL, 2, 1, 0),
>> +};
>>
>>  /* Headset Right */
>> -static const char *twl4030_hsor_texts[] =
>> -               {"Off", "DACR1", "DACR2"};
>> -
>> -static const struct soc_enum twl4030_hsor_enum =
>> -       SOC_ENUM_SINGLE(TWL4030_REG_HS_SEL, 4,
>> -                       ARRAY_SIZE(twl4030_hsor_texts),
>> -                       twl4030_hsor_texts);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_hsor_control =
>> -SOC_DAPM_ENUM("Route", twl4030_hsor_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_hsor_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 3, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_HS_SEL, 4, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_HS_SEL, 5, 1, 0),
>> +};
>>
>>  /* Carkit Left */
>> -static const char *twl4030_carkitl_texts[] =
>> -               {"Off", "DACL1", "DACL2"};
>> -
>> -static const struct soc_enum twl4030_carkitl_enum =
>> -       SOC_ENUM_SINGLE(TWL4030_REG_PRECKL_CTL, 1,
>> -                       ARRAY_SIZE(twl4030_carkitl_texts),
>> -                       twl4030_carkitl_texts);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_carkitl_control =
>> -SOC_DAPM_ENUM("Route", twl4030_carkitl_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_carkitl_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKL_CTL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PRECKL_CTL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PRECKL_CTL, 2, 1, 0),
>> +};
>>
>>  /* Carkit Right */
>> -static const char *twl4030_carkitr_texts[] =
>> -               {"Off", "DACR1", "DACR2"};
>> -
>> -static const struct soc_enum twl4030_carkitr_enum =
>> -       SOC_ENUM_SINGLE(TWL4030_REG_PRECKR_CTL, 1,
>> -                       ARRAY_SIZE(twl4030_carkitr_texts),
>> -                       twl4030_carkitr_texts);
>> -
>> -static const struct snd_kcontrol_new twl4030_dapm_carkitr_control =
>> -SOC_DAPM_ENUM("Route", twl4030_carkitr_enum);
>> +static const struct snd_kcontrol_new twl4030_dapm_carkitr_controls[] = {
>> +       SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKR_CTL, 0, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PRECKR_CTL, 1, 1, 0),
>> +       SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PRECKR_CTL, 2, 1, 0),
>> +};
>>
>>  /* Handsfree Left */
>>  static const char *twl4030_handsfreel_texts[] =
>> -               {"Voice", "DACL1", "DACL2", "DACR2"};
>> +               {"Voice", "AudioL1", "AudioL2", "AudioR2"};
>>
>>  static const struct soc_enum twl4030_handsfreel_enum =
>>         SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0,
>> @@ -422,7 +378,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
>>
>>  /* Handsfree Right */
>>  static const char *twl4030_handsfreer_texts[] =
>> -               {"Voice", "DACR1", "DACR2", "DACL2"};
>> +               {"Voice", "AudioR1", "AudioR2", "AudioL2"};
>>
>>  static const struct soc_enum twl4030_handsfreer_enum =
>>         SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0,
>> @@ -808,6 +764,12 @@ static int snd_soc_put_volsw_r2_twl4030(struct
>> snd_kcontrol *kcontrol, }
>>
>>  /*
>> + * Voice RX GAIN volume control:
>> + * from -37 to 12 dB in 1 dB steps (mute instead of -37 dB)
>> + */
>> +static DECLARE_TLV_DB_SCALE(voice_rx_tlv, -3700, 100, 1);
>> +
>> +/*
>>   * FGAIN volume control:
>>   * from -62 to 0 dB in 1 dB steps (mute instead of -63 dB)
>>   */
>> @@ -856,6 +818,9 @@ static const struct soc_enum twl4030_rampdelay_enum =
>>                         twl4030_rampdelay_texts);
>>
>>  static const struct snd_kcontrol_new twl4030_snd_controls[] = {
>> +       SOC_SINGLE_TLV("DAC Voice RX Volume",
>> +               TWL4030_REG_VRXPGA, 0, 0x31, 0, voice_rx_tlv),
>> +
>>         /* Common playback gain controls */
>>         SOC_DOUBLE_R_TLV("DAC1 Digital Fine Playback Volume",
>>                 TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA,
>> @@ -871,6 +836,11 @@ static const struct snd_kcontrol_new
>> twl4030_snd_controls[] = { TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA,
>>                 6, 0x2, 0, digital_coarse_tlv),
>>
>> +       SOC_SINGLE_TLV("DAC Voice Down Link Analog Volume",
>> +               TWL4030_REG_VDL_APGA_CTL, 3, 0x12, 1, analog_tlv),
>> +       SOC_SINGLE("DAC Voice Down Link Switch",
>> +               TWL4030_REG_VDL_APGA_CTL, 1, 1, 0),
>> +
>>         SOC_DOUBLE_R_TLV("DAC1 Analog Playback Volume",
>>                 TWL4030_REG_ARXL1_APGA_CTL, TWL4030_REG_ARXR1_APGA_CTL,
>>                 3, 0x12, 1, analog_tlv),
>> @@ -940,6 +910,7 @@ static const struct snd_soc_dapm_widget
>> twl4030_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HFR"),
>>
>>         /* DACs */
>> +       SND_SOC_DAPM_DAC_ACTIVE("DAC Voice", TWL4030_REG_AVDAC_CTL, 4, 0),
> 
> As Mark already pointed out, keeping a DAC powered all the time is sub-optimal 
> solution.
> 
> I would probably interpret this situation as some kind of Voice bypass mode 
> (bypass in a sense that the CPU is not involved with the audio stream)...
> Than I would build up the DAPM route between the inputs and the outputs with 
> the Voice DAC and one bypass switch on the way. You might take a look at how 
> the digital (and analog) bypass has been implemented here in TWL4030 codec...
> So user space configures the input and output, than it flips the Voice bypass 
> switch and it should be fine.
> Hackish, but it would work.

I looked the digital and analog bypass implemented in TWL4030 codec, but i
think they are not bypass. The analog bypass seems just "Analog loop" or
"FM Radio loop". Actually the bit name of the related registers has "_FM_EN"
prefix, and for the analog bypass we will need the control about FMLOOP_EN bit
of 0x3e register. After setting FMLOOP_EN bit to 1, I could listen to FM radio
station using the analog bypass.

The analog bypass implemented in TWL4030 codec has following path:

Input... -> Analog Right/Left Capture Route -> Right*/Left* Analog Loopback -> 
Analog R*/L* Playback Mixer -> ARXL*/R*_APGA -> Output...

Analog R*/L* Playback Mixer has the control for power of DACs, but path of the
analog bypass doesn't pass through DACs at block diagram of TWL4030 codec, and
the analog signal from Ampli_L or Ampli_R goes to *Analog PGA. I have been
wordering whether it need to control the power of DACs.

What does mean the digital bypass? I could find only the volume control of
ATX2ARXR_PGA. I think also the digital bypass seems just "Digital loop".

> 
> 
>>         SND_SOC_DAPM_DAC("DAC Right1", "Right Front Playback",
>>                         SND_SOC_NOPM, 0, 0),
>>         SND_SOC_DAPM_DAC("DAC Left1", "Left Front Playback",
>> @@ -950,6 +921,8 @@ static const struct snd_soc_dapm_widget
>> twl4030_dapm_widgets[] = { SND_SOC_NOPM, 0, 0),
>>
>>         /* Analog PGAs */
>> +       SND_SOC_DAPM_PGA("VDL_APGA", TWL4030_REG_VDL_APGA_CTL,
>> +                       0, 0, NULL, 0),
>>         SND_SOC_DAPM_PGA("ARXR1_APGA", TWL4030_REG_ARXR1_APGA_CTL,
>>                         0, 0, NULL, 0),
>>         SND_SOC_DAPM_PGA("ARXL1_APGA", TWL4030_REG_ARXL1_APGA_CTL,
>> @@ -990,26 +963,35 @@ static const struct snd_soc_dapm_widget
>> twl4030_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer",
>> TWL4030_REG_AVDAC_CTL, 3, 0, NULL, 0),
>>
>> -       /* Output MUX controls */
>> +       /* Output MIXER controls */
>>         /* Earpiece */
>> -       SND_SOC_DAPM_VALUE_MUX("Earpiece Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_earpiece_control),
>> +       SND_SOC_DAPM_MIXER("Earpiece Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_earpiece_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_earpiece_controls)),
>>         /* PreDrivL/R */
>> -       SND_SOC_DAPM_VALUE_MUX("PredriveL Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_predrivel_control),
>> -       SND_SOC_DAPM_VALUE_MUX("PredriveR Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_predriver_control),
>> +       SND_SOC_DAPM_MIXER("PredriveL Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_predrivel_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_predrivel_controls)),
>> +       SND_SOC_DAPM_MIXER("PredriveR Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_predriver_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_predriver_controls)),
>>         /* HeadsetL/R */
>> -       SND_SOC_DAPM_MUX_E("HeadsetL Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_hsol_control, headsetl_event,
>> -               SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
>> -       SND_SOC_DAPM_MUX("HeadsetR Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_hsor_control),
>> +       SND_SOC_DAPM_MIXER_E("HeadsetL Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_hsol_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_hsol_controls),
>> headsetl_event, +                      
>> SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD), +      
>> SND_SOC_DAPM_MIXER("HeadsetR Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_hsor_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_hsor_controls)),
>>         /* CarkitL/R */
>> -       SND_SOC_DAPM_MUX("CarkitL Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_carkitl_control),
>> -       SND_SOC_DAPM_MUX("CarkitR Mux", SND_SOC_NOPM, 0, 0,
>> -               &twl4030_dapm_carkitr_control),
>> +       SND_SOC_DAPM_MIXER("CarkitL Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_carkitl_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_carkitl_controls)),
>> +       SND_SOC_DAPM_MIXER("CarkitR Mixer", SND_SOC_NOPM, 0, 0,
>> +                       &twl4030_dapm_carkitr_controls[0],
>> +                       ARRAY_SIZE(twl4030_dapm_carkitr_controls)),
>> +
>> +       /* Output MUX controls */
>>         /* HandsfreeL/R */
>>         SND_SOC_DAPM_MUX_E("HandsfreeL Mux", TWL4030_REG_HFL_CTL, 5, 0,
>>                 &twl4030_dapm_handsfreel_control, handsfree_event,
>> @@ -1064,6 +1046,8 @@ static const struct snd_soc_dapm_widget
>> twl4030_dapm_widgets[] = { };
>>
>>  static const struct snd_soc_dapm_route intercon[] = {
>> +       {"VDL_APGA", NULL, "DAC Voice"},
>> +
>>         {"Analog L1 Playback Mixer", NULL, "DAC Left1"},
>>         {"Analog R1 Playback Mixer", NULL, "DAC Right1"},
>>         {"Analog L2 Playback Mixer", NULL, "DAC Left2"},
>> @@ -1076,48 +1060,57 @@ static const struct snd_soc_dapm_route intercon[] =
>> {
>>
>>         /* Internal playback routings */
>>         /* Earpiece */
>> -       {"Earpiece Mux", "DACL1", "ARXL1_APGA"},
>> -       {"Earpiece Mux", "DACL2", "ARXL2_APGA"},
>> -       {"Earpiece Mux", "DACR1", "ARXR1_APGA"},
>> +       {"Earpiece Mixer", "Voice", "VDL_APGA"},
>> +       {"Earpiece Mixer", "AudioL1", "ARXL1_APGA"},
>> +       {"Earpiece Mixer", "AudioL2", "ARXL2_APGA"},
>> +       {"Earpiece Mixer", "AudioR1", "ARXR1_APGA"},
>>         /* PreDrivL */
>> -       {"PredriveL Mux", "DACL1", "ARXL1_APGA"},
>> -       {"PredriveL Mux", "DACL2", "ARXL2_APGA"},
>> -       {"PredriveL Mux", "DACR2", "ARXR2_APGA"},
>> +       {"PredriveL Mixer", "Voice", "VDL_APGA"},
>> +       {"PredriveL Mixer", "AudioL1", "ARXL1_APGA"},
>> +       {"PredriveL Mixer", "AudioL2", "ARXL2_APGA"},
>> +       {"PredriveL Mixer", "AudioR2", "ARXR2_APGA"},
>>         /* PreDrivR */
>> -       {"PredriveR Mux", "DACR1", "ARXR1_APGA"},
>> -       {"PredriveR Mux", "DACR2", "ARXR2_APGA"},
>> -       {"PredriveR Mux", "DACL2", "ARXL2_APGA"},
>> +       {"PredriveR Mixer", "Voice", "VDL_APGA"},
>> +       {"PredriveR Mixer", "AudioR1", "ARXR1_APGA"},
>> +       {"PredriveR Mixer", "AudioR2", "ARXR2_APGA"},
>> +       {"PredriveR Mixer", "AudioL2", "ARXL2_APGA"},
>>         /* HeadsetL */
>> -       {"HeadsetL Mux", "DACL1", "ARXL1_APGA"},
>> -       {"HeadsetL Mux", "DACL2", "ARXL2_APGA"},
>> +       {"HeadsetL Mixer", "Voice", "VDL_APGA"},
>> +       {"HeadsetL Mixer", "AudioL1", "ARXL1_APGA"},
>> +       {"HeadsetL Mixer", "AudioL2", "ARXL2_APGA"},
>>         /* HeadsetR */
>> -       {"HeadsetR Mux", "DACR1", "ARXR1_APGA"},
>> -       {"HeadsetR Mux", "DACR2", "ARXR2_APGA"},
>> +       {"HeadsetR Mixer", "Voice", "VDL_APGA"},
>> +       {"HeadsetR Mixer", "AudioR1", "ARXR1_APGA"},
>> +       {"HeadsetR Mixer", "AudioR2", "ARXR2_APGA"},
>>         /* CarkitL */
>> -       {"CarkitL Mux", "DACL1", "ARXL1_APGA"},
>> -       {"CarkitL Mux", "DACL2", "ARXL2_APGA"},
>> +       {"CarkitL Mixer", "Voice", "VDL_APGA"},
>> +       {"CarkitL Mixer", "AudioL1", "ARXL1_APGA"},
>> +       {"CarkitL Mixer", "AudioL2", "ARXL2_APGA"},
>>         /* CarkitR */
>> -       {"CarkitR Mux", "DACR1", "ARXR1_APGA"},
>> -       {"CarkitR Mux", "DACR2", "ARXR2_APGA"},
>> +       {"CarkitR Mixer", "Voice", "VDL_APGA"},
>> +       {"CarkitR Mixer", "AudioR1", "ARXR1_APGA"},
>> +       {"CarkitR Mixer", "AudioR2", "ARXR2_APGA"},
>>         /* HandsfreeL */
>> -       {"HandsfreeL Mux", "DACL1", "ARXL1_APGA"},
>> -       {"HandsfreeL Mux", "DACL2", "ARXL2_APGA"},
>> -       {"HandsfreeL Mux", "DACR2", "ARXR2_APGA"},
>> +       {"HandsfreeL Mux", "Voice", "VDL_APGA"},
>> +       {"HandsfreeL Mux", "AudioL1", "ARXL1_APGA"},
>> +       {"HandsfreeL Mux", "AudioL2", "ARXL2_APGA"},
>> +       {"HandsfreeL Mux", "AudioR2", "ARXR2_APGA"},
>>         /* HandsfreeR */
>> -       {"HandsfreeR Mux", "DACR1", "ARXR1_APGA"},
>> -       {"HandsfreeR Mux", "DACR2", "ARXR2_APGA"},
>> -       {"HandsfreeR Mux", "DACL2", "ARXL2_APGA"},
>> +       {"HandsfreeR Mux", "Voice", "VDL_APGA"},
>> +       {"HandsfreeR Mux", "AudioR1", "ARXR1_APGA"},
>> +       {"HandsfreeR Mux", "AudioR2", "ARXR2_APGA"},
>> +       {"HandsfreeR Mux", "AudioL2", "ARXL2_APGA"},
>>
>>         /* outputs */
>>         {"OUTL", NULL, "ARXL2_APGA"},
>>         {"OUTR", NULL, "ARXR2_APGA"},
>> -       {"EARPIECE", NULL, "Earpiece Mux"},
>> -       {"PREDRIVEL", NULL, "PredriveL Mux"},
>> -       {"PREDRIVER", NULL, "PredriveR Mux"},
>> -       {"HSOL", NULL, "HeadsetL Mux"},
>> -       {"HSOR", NULL, "HeadsetR Mux"},
>> -       {"CARKITL", NULL, "CarkitL Mux"},
>> -       {"CARKITR", NULL, "CarkitR Mux"},
>> +       {"EARPIECE", NULL, "Earpiece Mixer"},
>> +       {"PREDRIVEL", NULL, "PredriveL Mixer"},
>> +       {"PREDRIVER", NULL, "PredriveR Mixer"},
>> +       {"HSOL", NULL, "HeadsetL Mixer"},
>> +       {"HSOR", NULL, "HeadsetR Mixer"},
>> +       {"CARKITL", NULL, "CarkitL Mixer"},
>> +       {"CARKITR", NULL, "CarkitR Mixer"},
>>         {"HFL", NULL, "HandsfreeL Mux"},
>>         {"HFR", NULL, "HandsfreeR Mux"},
>>
>> --
>> 1.5.6.3
> 

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2009-03-25 11:11 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-24 12:59 [PATCH 2/2] ASoC: twl4030 - Add VDL path support Joonyoung Shim
2009-03-24 16:21 ` Mark Brown
2009-03-25  6:21 ` Peter Ujfalusi
2009-03-25 11:11   ` Joonyoung Shim [this message]
2009-03-25 11:20     ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49CA116D.4090004@samsung.com \
    --to=jy0922.shim@samsung.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=bhmin@samsung.com \
    --cc=broonie@sirena.org.uk \
    --cc=kyungmin.park@samsung.com \
    --cc=peter.ujfalusi@nokia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.