mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'sound-5.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "The majority of changes are various ASoC device/platform-specific small fixes (including a removal of stale file) while the only common change is a clk management fix in ASoC simple-card driver. The rest are the usual HD-audio quirks" * tag 'sound-5.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (44 commits) ALSA: usb-audio: Fix unintentional sign extension issue ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8 ASoC: dt-bindings: fsl_spdif: Add compatible string for new platforms ASoC: rt711: add snd_soc_component remove callback ASoC: rt5659: Update MCLK rate in set_sysclk() ASoC: simple-card-utils: Do not handle device clock ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8 ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8 ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air ASoC: mediatek: mt8192: fix tdm out data is valid on rising edge ALSA: dice: fix null pointer dereference when node is disconnected ALSA: hda: generic: Fix the micmute led init state ASoC: qcom: lpass-cpu: Fix lpass dai ids parse spi: cadence: set cqspi to the driver_data field of struct device ASoC: SOF: intel: fix wrong poll bits in dsp power down ASoC: codecs: wcd934x: add a sanity check in set channel map ASoC: qcom: sdm845: Fix array out of range on rx slim channels ASoC: qcom: sdm845: Fix array out of bounds access ASoC: remove remnants of sirf prima/atlas audio codec ...
This commit is contained in:
@@ -21,6 +21,10 @@ properties:
|
||||
- fsl,vf610-spdif
|
||||
- fsl,imx6sx-spdif
|
||||
- fsl,imx8qm-spdif
|
||||
- fsl,imx8qxp-spdif
|
||||
- fsl,imx8mq-spdif
|
||||
- fsl,imx8mm-spdif
|
||||
- fsl,imx8mn-spdif
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
@@ -1433,6 +1433,7 @@ static int cqspi_probe(struct platform_device *pdev)
|
||||
cqspi = spi_master_get_devdata(master);
|
||||
|
||||
cqspi->pdev = pdev;
|
||||
platform_set_drvdata(pdev, cqspi);
|
||||
|
||||
/* Obtain configuration from OF. */
|
||||
ret = cqspi_of_get_pdata(cqspi);
|
||||
|
||||
@@ -493,11 +493,10 @@ void snd_dice_stream_stop_duplex(struct snd_dice *dice)
|
||||
struct reg_params tx_params, rx_params;
|
||||
|
||||
if (dice->substreams_counter == 0) {
|
||||
if (get_register_params(dice, &tx_params, &rx_params) >= 0) {
|
||||
amdtp_domain_stop(&dice->domain);
|
||||
if (get_register_params(dice, &tx_params, &rx_params) >= 0)
|
||||
finish_session(dice, &tx_params, &rx_params);
|
||||
}
|
||||
|
||||
amdtp_domain_stop(&dice->domain);
|
||||
release_resources(dice);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4065,7 +4065,7 @@ static int add_micmute_led_hook(struct hda_codec *codec)
|
||||
|
||||
spec->micmute_led.led_mode = MICMUTE_LED_FOLLOW_MUTE;
|
||||
spec->micmute_led.capture = 0;
|
||||
spec->micmute_led.led_value = 0;
|
||||
spec->micmute_led.led_value = -1;
|
||||
spec->micmute_led.old_hook = spec->cap_sync_hook;
|
||||
spec->cap_sync_hook = update_micmute_led;
|
||||
if (!snd_hda_gen_add_kctl(spec, NULL, &micmute_led_mode_ctl))
|
||||
|
||||
@@ -4225,6 +4225,12 @@ static void alc_fixup_hp_gpio_led(struct hda_codec *codec,
|
||||
}
|
||||
}
|
||||
|
||||
static void alc236_fixup_hp_gpio_led(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
alc_fixup_hp_gpio_led(codec, action, 0x02, 0x01);
|
||||
}
|
||||
|
||||
static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -6381,6 +6387,7 @@ enum {
|
||||
ALC294_FIXUP_ASUS_GX502_VERBS,
|
||||
ALC285_FIXUP_HP_GPIO_LED,
|
||||
ALC285_FIXUP_HP_MUTE_LED,
|
||||
ALC236_FIXUP_HP_GPIO_LED,
|
||||
ALC236_FIXUP_HP_MUTE_LED,
|
||||
ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
|
||||
ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
|
||||
@@ -7616,6 +7623,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc285_fixup_hp_mute_led,
|
||||
},
|
||||
[ALC236_FIXUP_HP_GPIO_LED] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc236_fixup_hp_gpio_led,
|
||||
},
|
||||
[ALC236_FIXUP_HP_MUTE_LED] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc236_fixup_hp_mute_led,
|
||||
@@ -8045,9 +8056,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8783, "HP ZBook Fury 15 G7 Mobile Workstation",
|
||||
ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
|
||||
SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
||||
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
@@ -8242,7 +8256,9 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
|
||||
SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
|
||||
SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
|
||||
SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
|
||||
|
||||
@@ -186,7 +186,6 @@ config SND_SOC_ALL_CODECS
|
||||
imply SND_SOC_SI476X
|
||||
imply SND_SOC_SIMPLE_AMPLIFIER
|
||||
imply SND_SOC_SIMPLE_MUX
|
||||
imply SND_SOC_SIRF_AUDIO_CODEC
|
||||
imply SND_SOC_SPDIF
|
||||
imply SND_SOC_SSM2305
|
||||
imply SND_SOC_SSM2518
|
||||
@@ -1279,10 +1278,6 @@ config SND_SOC_SIMPLE_MUX
|
||||
tristate "Simple Audio Mux"
|
||||
select GPIOLIB
|
||||
|
||||
config SND_SOC_SIRF_AUDIO_CODEC
|
||||
tristate "SiRF SoC internal audio codec"
|
||||
select REGMAP_MMIO
|
||||
|
||||
config SND_SOC_SPDIF
|
||||
tristate "S/PDIF CODEC"
|
||||
|
||||
|
||||
@@ -812,6 +812,7 @@ static const struct of_device_id ak4458_of_match[] = {
|
||||
{ .compatible = "asahi-kasei,ak4497", .data = &ak4497_drvdata},
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ak4458_of_match);
|
||||
|
||||
static struct i2c_driver ak4458_i2c_driver = {
|
||||
.driver = {
|
||||
|
||||
@@ -419,6 +419,7 @@ static const struct of_device_id ak5558_i2c_dt_ids[] __maybe_unused = {
|
||||
{ .compatible = "asahi-kasei,ak5558"},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ak5558_i2c_dt_ids);
|
||||
|
||||
static struct i2c_driver ak5558_i2c_driver = {
|
||||
.driver = {
|
||||
|
||||
@@ -401,7 +401,7 @@ static const struct regmap_config cs42l42_regmap = {
|
||||
};
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(adc_tlv, -9600, 100, false);
|
||||
static DECLARE_TLV_DB_SCALE(mixer_tlv, -6200, 100, false);
|
||||
static DECLARE_TLV_DB_SCALE(mixer_tlv, -6300, 100, true);
|
||||
|
||||
static const char * const cs42l42_hpf_freq_text[] = {
|
||||
"1.86Hz", "120Hz", "235Hz", "466Hz"
|
||||
@@ -458,7 +458,7 @@ static const struct snd_kcontrol_new cs42l42_snd_controls[] = {
|
||||
CS42L42_DAC_HPF_EN_SHIFT, true, false),
|
||||
SOC_DOUBLE_R_TLV("Mixer Volume", CS42L42_MIXER_CHA_VOL,
|
||||
CS42L42_MIXER_CHB_VOL, CS42L42_MIXER_CH_VOL_SHIFT,
|
||||
0x3e, 1, mixer_tlv)
|
||||
0x3f, 1, mixer_tlv)
|
||||
};
|
||||
|
||||
static int cs42l42_hpdrv_evt(struct snd_soc_dapm_widget *w,
|
||||
@@ -511,43 +511,6 @@ static const struct snd_soc_dapm_route cs42l42_audio_map[] = {
|
||||
{"HP", NULL, "HPDRV"}
|
||||
};
|
||||
|
||||
static int cs42l42_set_bias_level(struct snd_soc_component *component,
|
||||
enum snd_soc_bias_level level)
|
||||
{
|
||||
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
|
||||
int ret;
|
||||
|
||||
switch (level) {
|
||||
case SND_SOC_BIAS_ON:
|
||||
break;
|
||||
case SND_SOC_BIAS_PREPARE:
|
||||
break;
|
||||
case SND_SOC_BIAS_STANDBY:
|
||||
if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
|
||||
regcache_cache_only(cs42l42->regmap, false);
|
||||
regcache_sync(cs42l42->regmap);
|
||||
ret = regulator_bulk_enable(
|
||||
ARRAY_SIZE(cs42l42->supplies),
|
||||
cs42l42->supplies);
|
||||
if (ret != 0) {
|
||||
dev_err(component->dev,
|
||||
"Failed to enable regulators: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SND_SOC_BIAS_OFF:
|
||||
|
||||
regcache_cache_only(cs42l42->regmap, true);
|
||||
regulator_bulk_disable(ARRAY_SIZE(cs42l42->supplies),
|
||||
cs42l42->supplies);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cs42l42_component_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct cs42l42_private *cs42l42 =
|
||||
@@ -560,7 +523,6 @@ static int cs42l42_component_probe(struct snd_soc_component *component)
|
||||
|
||||
static const struct snd_soc_component_driver soc_component_dev_cs42l42 = {
|
||||
.probe = cs42l42_component_probe,
|
||||
.set_bias_level = cs42l42_set_bias_level,
|
||||
.dapm_widgets = cs42l42_dapm_widgets,
|
||||
.num_dapm_widgets = ARRAY_SIZE(cs42l42_dapm_widgets),
|
||||
.dapm_routes = cs42l42_audio_map,
|
||||
@@ -691,24 +653,6 @@ static int cs42l42_pll_config(struct snd_soc_component *component)
|
||||
CS42L42_CLK_OASRC_SEL_MASK,
|
||||
CS42L42_CLK_OASRC_SEL_12 <<
|
||||
CS42L42_CLK_OASRC_SEL_SHIFT);
|
||||
/* channel 1 on low LRCLK, 32 bit */
|
||||
snd_soc_component_update_bits(component,
|
||||
CS42L42_ASP_RX_DAI0_CH1_AP_RES,
|
||||
CS42L42_ASP_RX_CH_AP_MASK |
|
||||
CS42L42_ASP_RX_CH_RES_MASK,
|
||||
(CS42L42_ASP_RX_CH_AP_LOW <<
|
||||
CS42L42_ASP_RX_CH_AP_SHIFT) |
|
||||
(CS42L42_ASP_RX_CH_RES_32 <<
|
||||
CS42L42_ASP_RX_CH_RES_SHIFT));
|
||||
/* Channel 2 on high LRCLK, 32 bit */
|
||||
snd_soc_component_update_bits(component,
|
||||
CS42L42_ASP_RX_DAI0_CH2_AP_RES,
|
||||
CS42L42_ASP_RX_CH_AP_MASK |
|
||||
CS42L42_ASP_RX_CH_RES_MASK,
|
||||
(CS42L42_ASP_RX_CH_AP_HI <<
|
||||
CS42L42_ASP_RX_CH_AP_SHIFT) |
|
||||
(CS42L42_ASP_RX_CH_RES_32 <<
|
||||
CS42L42_ASP_RX_CH_RES_SHIFT));
|
||||
if (pll_ratio_table[i].mclk_src_sel == 0) {
|
||||
/* Pass the clock straight through */
|
||||
snd_soc_component_update_bits(component,
|
||||
@@ -797,27 +741,23 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
|
||||
/* Bitclock/frame inversion */
|
||||
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||
case SND_SOC_DAIFMT_NB_NF:
|
||||
asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_NB_IF:
|
||||
asp_cfg_val |= CS42L42_ASP_POL_INV <<
|
||||
CS42L42_ASP_LCPOL_IN_SHIFT;
|
||||
asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT;
|
||||
asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_IB_NF:
|
||||
asp_cfg_val |= CS42L42_ASP_POL_INV <<
|
||||
CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_IB_IF:
|
||||
asp_cfg_val |= CS42L42_ASP_POL_INV <<
|
||||
CS42L42_ASP_LCPOL_IN_SHIFT;
|
||||
asp_cfg_val |= CS42L42_ASP_POL_INV <<
|
||||
CS42L42_ASP_SCPOL_IN_DAC_SHIFT;
|
||||
asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG,
|
||||
CS42L42_ASP_MODE_MASK |
|
||||
CS42L42_ASP_SCPOL_IN_DAC_MASK |
|
||||
CS42L42_ASP_LCPOL_IN_MASK, asp_cfg_val);
|
||||
snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG, CS42L42_ASP_MODE_MASK |
|
||||
CS42L42_ASP_SCPOL_MASK |
|
||||
CS42L42_ASP_LCPOL_MASK,
|
||||
asp_cfg_val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -828,14 +768,29 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
{
|
||||
struct snd_soc_component *component = dai->component;
|
||||
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
|
||||
int retval;
|
||||
unsigned int width = (params_width(params) / 8) - 1;
|
||||
unsigned int val = 0;
|
||||
|
||||
cs42l42->srate = params_rate(params);
|
||||
cs42l42->swidth = params_width(params);
|
||||
|
||||
retval = cs42l42_pll_config(component);
|
||||
switch(substream->stream) {
|
||||
case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
val |= width << CS42L42_ASP_RX_CH_RES_SHIFT;
|
||||
/* channel 1 on low LRCLK */
|
||||
snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH1_AP_RES,
|
||||
CS42L42_ASP_RX_CH_AP_MASK |
|
||||
CS42L42_ASP_RX_CH_RES_MASK, val);
|
||||
/* Channel 2 on high LRCLK */
|
||||
val |= CS42L42_ASP_RX_CH_AP_HI << CS42L42_ASP_RX_CH_AP_SHIFT;
|
||||
snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH2_AP_RES,
|
||||
CS42L42_ASP_RX_CH_AP_MASK |
|
||||
CS42L42_ASP_RX_CH_RES_MASK, val);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return retval;
|
||||
return cs42l42_pll_config(component);
|
||||
}
|
||||
|
||||
static int cs42l42_set_sysclk(struct snd_soc_dai *dai,
|
||||
@@ -900,9 +855,9 @@ static int cs42l42_mute(struct snd_soc_dai *dai, int mute, int direction)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \
|
||||
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE | \
|
||||
SNDRV_PCM_FMTBIT_S32_LE)
|
||||
#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
|
||||
SNDRV_PCM_FMTBIT_S24_LE |\
|
||||
SNDRV_PCM_FMTBIT_S32_LE )
|
||||
|
||||
|
||||
static const struct snd_soc_dai_ops cs42l42_ops = {
|
||||
@@ -1801,7 +1756,7 @@ static int cs42l42_i2c_probe(struct i2c_client *i2c_client,
|
||||
dev_dbg(&i2c_client->dev, "Found reset GPIO\n");
|
||||
gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
|
||||
}
|
||||
mdelay(3);
|
||||
usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
|
||||
|
||||
/* Request IRQ */
|
||||
ret = devm_request_threaded_irq(&i2c_client->dev,
|
||||
@@ -1926,6 +1881,7 @@ static int cs42l42_runtime_resume(struct device *dev)
|
||||
}
|
||||
|
||||
gpiod_set_value_cansleep(cs42l42->reset_gpio, 1);
|
||||
usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2);
|
||||
|
||||
regcache_cache_only(cs42l42->regmap, false);
|
||||
regcache_sync(cs42l42->regmap);
|
||||
|
||||
@@ -258,11 +258,12 @@
|
||||
#define CS42L42_ASP_SLAVE_MODE 0x00
|
||||
#define CS42L42_ASP_MODE_SHIFT 4
|
||||
#define CS42L42_ASP_MODE_MASK (1 << CS42L42_ASP_MODE_SHIFT)
|
||||
#define CS42L42_ASP_SCPOL_IN_DAC_SHIFT 2
|
||||
#define CS42L42_ASP_SCPOL_IN_DAC_MASK (1 << CS42L42_ASP_SCPOL_IN_DAC_SHIFT)
|
||||
#define CS42L42_ASP_LCPOL_IN_SHIFT 0
|
||||
#define CS42L42_ASP_LCPOL_IN_MASK (1 << CS42L42_ASP_LCPOL_IN_SHIFT)
|
||||
#define CS42L42_ASP_POL_INV 1
|
||||
#define CS42L42_ASP_SCPOL_SHIFT 2
|
||||
#define CS42L42_ASP_SCPOL_MASK (3 << CS42L42_ASP_SCPOL_SHIFT)
|
||||
#define CS42L42_ASP_SCPOL_NOR 3
|
||||
#define CS42L42_ASP_LCPOL_SHIFT 0
|
||||
#define CS42L42_ASP_LCPOL_MASK (3 << CS42L42_ASP_LCPOL_SHIFT)
|
||||
#define CS42L42_ASP_LCPOL_INV 3
|
||||
|
||||
#define CS42L42_ASP_FRM_CFG (CS42L42_PAGE_12 + 0x08)
|
||||
#define CS42L42_ASP_STP_SHIFT 4
|
||||
@@ -739,6 +740,7 @@
|
||||
#define CS42L42_FRAC2_VAL(val) (((val) & 0xff0000) >> 16)
|
||||
|
||||
#define CS42L42_NUM_SUPPLIES 5
|
||||
#define CS42L42_BOOT_TIME_US 3000
|
||||
|
||||
static const char *const cs42l42_supply_names[CS42L42_NUM_SUPPLIES] = {
|
||||
"VA",
|
||||
@@ -756,7 +758,6 @@ struct cs42l42_private {
|
||||
struct completion pdn_done;
|
||||
u32 sclk;
|
||||
u32 srate;
|
||||
u32 swidth;
|
||||
u8 plug_state;
|
||||
u8 hs_type;
|
||||
u8 ts_inv;
|
||||
|
||||
@@ -63,13 +63,8 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv,
|
||||
1, 1, TLV_DB_SCALE_ITEM(0, 0, 0),
|
||||
2, 2, TLV_DB_SCALE_ITEM(250, 0, 0),
|
||||
3, 3, TLV_DB_SCALE_ITEM(450, 0, 0),
|
||||
4, 4, TLV_DB_SCALE_ITEM(700, 0, 0),
|
||||
5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0),
|
||||
6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0),
|
||||
7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0),
|
||||
8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0),
|
||||
9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0),
|
||||
10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0),
|
||||
4, 7, TLV_DB_SCALE_ITEM(700, 300, 0),
|
||||
8, 10, TLV_DB_SCALE_ITEM(1800, 300, 0),
|
||||
);
|
||||
|
||||
static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpout_vol_tlv,
|
||||
|
||||
@@ -2895,7 +2895,7 @@ static int rx_macro_enable_echo(struct snd_soc_dapm_widget *w,
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
u16 val, ec_hq_reg;
|
||||
int ec_tx;
|
||||
int ec_tx = -1;
|
||||
|
||||
val = snd_soc_component_read(component,
|
||||
CDC_RX_INP_MUX_RX_MIX_CFG4);
|
||||
|
||||
@@ -189,7 +189,6 @@ struct va_macro {
|
||||
struct device *dev;
|
||||
unsigned long active_ch_mask[VA_MACRO_MAX_DAIS];
|
||||
unsigned long active_ch_cnt[VA_MACRO_MAX_DAIS];
|
||||
unsigned long active_decimator[VA_MACRO_MAX_DAIS];
|
||||
u16 dmic_clk_div;
|
||||
|
||||
int dec_mode[VA_MACRO_NUM_DECIMATORS];
|
||||
@@ -549,11 +548,9 @@ static int va_macro_tx_mixer_put(struct snd_kcontrol *kcontrol,
|
||||
if (enable) {
|
||||
set_bit(dec_id, &va->active_ch_mask[dai_id]);
|
||||
va->active_ch_cnt[dai_id]++;
|
||||
va->active_decimator[dai_id] = dec_id;
|
||||
} else {
|
||||
clear_bit(dec_id, &va->active_ch_mask[dai_id]);
|
||||
va->active_ch_cnt[dai_id]--;
|
||||
va->active_decimator[dai_id] = -1;
|
||||
}
|
||||
|
||||
snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, enable, update);
|
||||
@@ -880,18 +877,19 @@ static int va_macro_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
|
||||
struct va_macro *va = snd_soc_component_get_drvdata(component);
|
||||
u16 tx_vol_ctl_reg, decimator;
|
||||
|
||||
decimator = va->active_decimator[dai->id];
|
||||
|
||||
tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL +
|
||||
VA_MACRO_TX_PATH_OFFSET * decimator;
|
||||
if (mute)
|
||||
snd_soc_component_update_bits(component, tx_vol_ctl_reg,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN);
|
||||
else
|
||||
snd_soc_component_update_bits(component, tx_vol_ctl_reg,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_DISABLE);
|
||||
for_each_set_bit(decimator, &va->active_ch_mask[dai->id],
|
||||
VA_MACRO_DEC_MAX) {
|
||||
tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL +
|
||||
VA_MACRO_TX_PATH_OFFSET * decimator;
|
||||
if (mute)
|
||||
snd_soc_component_update_bits(component, tx_vol_ctl_reg,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN);
|
||||
else
|
||||
snd_soc_component_update_bits(component, tx_vol_ctl_reg,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
|
||||
CDC_VA_TX_PATH_PGA_MUTE_DISABLE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1211,14 +1211,16 @@ static int wsa_macro_enable_mix_path(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
u16 gain_reg;
|
||||
u16 path_reg, gain_reg;
|
||||
int val;
|
||||
|
||||
switch (w->reg) {
|
||||
case CDC_WSA_RX0_RX_PATH_MIX_CTL:
|
||||
switch (w->shift) {
|
||||
case WSA_MACRO_RX_MIX0:
|
||||
path_reg = CDC_WSA_RX0_RX_PATH_MIX_CTL;
|
||||
gain_reg = CDC_WSA_RX0_RX_VOL_MIX_CTL;
|
||||
break;
|
||||
case CDC_WSA_RX1_RX_PATH_MIX_CTL:
|
||||
case WSA_MACRO_RX_MIX1:
|
||||
path_reg = CDC_WSA_RX1_RX_PATH_MIX_CTL;
|
||||
gain_reg = CDC_WSA_RX1_RX_VOL_MIX_CTL;
|
||||
break;
|
||||
default:
|
||||
@@ -1231,7 +1233,7 @@ static int wsa_macro_enable_mix_path(struct snd_soc_dapm_widget *w,
|
||||
snd_soc_component_write(component, gain_reg, val);
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
snd_soc_component_update_bits(component, w->reg,
|
||||
snd_soc_component_update_bits(component, path_reg,
|
||||
CDC_WSA_RX_PATH_MIX_CLK_EN_MASK,
|
||||
CDC_WSA_RX_PATH_MIX_CLK_DISABLE);
|
||||
break;
|
||||
@@ -2068,14 +2070,14 @@ static const struct snd_soc_dapm_widget wsa_macro_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_MUX("WSA_RX0 INP0", SND_SOC_NOPM, 0, 0, &rx0_prim_inp0_mux),
|
||||
SND_SOC_DAPM_MUX("WSA_RX0 INP1", SND_SOC_NOPM, 0, 0, &rx0_prim_inp1_mux),
|
||||
SND_SOC_DAPM_MUX("WSA_RX0 INP2", SND_SOC_NOPM, 0, 0, &rx0_prim_inp2_mux),
|
||||
SND_SOC_DAPM_MUX_E("WSA_RX0 MIX INP", CDC_WSA_RX0_RX_PATH_MIX_CTL,
|
||||
0, 0, &rx0_mix_mux, wsa_macro_enable_mix_path,
|
||||
SND_SOC_DAPM_MUX_E("WSA_RX0 MIX INP", SND_SOC_NOPM, WSA_MACRO_RX_MIX0,
|
||||
0, &rx0_mix_mux, wsa_macro_enable_mix_path,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
SND_SOC_DAPM_MUX("WSA_RX1 INP0", SND_SOC_NOPM, 0, 0, &rx1_prim_inp0_mux),
|
||||
SND_SOC_DAPM_MUX("WSA_RX1 INP1", SND_SOC_NOPM, 0, 0, &rx1_prim_inp1_mux),
|
||||
SND_SOC_DAPM_MUX("WSA_RX1 INP2", SND_SOC_NOPM, 0, 0, &rx1_prim_inp2_mux),
|
||||
SND_SOC_DAPM_MUX_E("WSA_RX1 MIX INP", CDC_WSA_RX1_RX_PATH_MIX_CTL,
|
||||
0, 0, &rx1_mix_mux, wsa_macro_enable_mix_path,
|
||||
SND_SOC_DAPM_MUX_E("WSA_RX1 MIX INP", SND_SOC_NOPM, WSA_MACRO_RX_MIX1,
|
||||
0, &rx1_mix_mux, wsa_macro_enable_mix_path,
|
||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||
|
||||
SND_SOC_DAPM_MIXER_E("WSA_RX INT0 MIX", SND_SOC_NOPM, 0, 0, NULL, 0,
|
||||
|
||||
@@ -209,6 +209,7 @@ static bool rt1015_volatile_register(struct device *dev, unsigned int reg)
|
||||
case RT1015_VENDOR_ID:
|
||||
case RT1015_DEVICE_ID:
|
||||
case RT1015_PRO_ALT:
|
||||
case RT1015_MAN_I2C:
|
||||
case RT1015_DAC3:
|
||||
case RT1015_VBAT_TEST_OUT1:
|
||||
case RT1015_VBAT_TEST_OUT2:
|
||||
@@ -513,6 +514,7 @@ static void rt1015_calibrate(struct rt1015_priv *rt1015)
|
||||
msleep(300);
|
||||
regmap_write(regmap, RT1015_PWR_STATE_CTRL, 0x0008);
|
||||
regmap_write(regmap, RT1015_SYS_RST1, 0x05F5);
|
||||
regmap_write(regmap, RT1015_CLK_DET, 0x8000);
|
||||
|
||||
regcache_cache_bypass(regmap, false);
|
||||
regcache_mark_dirty(regmap);
|
||||
|
||||
@@ -339,9 +339,9 @@ static bool rt5640_readable_register(struct device *dev, unsigned int reg)
|
||||
}
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
|
||||
static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
|
||||
static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
|
||||
@@ -285,9 +285,9 @@ static bool rt5651_readable_register(struct device *dev, unsigned int reg)
|
||||
}
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0);
|
||||
static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0);
|
||||
static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000);
|
||||
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||
|
||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||
|
||||
@@ -3426,12 +3426,17 @@ static int rt5659_set_component_sysclk(struct snd_soc_component *component, int
|
||||
{
|
||||
struct rt5659_priv *rt5659 = snd_soc_component_get_drvdata(component);
|
||||
unsigned int reg_val = 0;
|
||||
int ret;
|
||||
|
||||
if (freq == rt5659->sysclk && clk_id == rt5659->sysclk_src)
|
||||
return 0;
|
||||
|
||||
switch (clk_id) {
|
||||
case RT5659_SCLK_S_MCLK:
|
||||
ret = clk_set_rate(rt5659->mclk, freq);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
reg_val |= RT5659_SCLK_SRC_MCLK;
|
||||
break;
|
||||
case RT5659_SCLK_S_PLL1:
|
||||
|
||||
@@ -629,21 +629,69 @@ static SOC_ENUM_SINGLE_DECL(rt5670_if2_dac_enum, RT5670_DIG_INF1_DATA,
|
||||
static SOC_ENUM_SINGLE_DECL(rt5670_if2_adc_enum, RT5670_DIG_INF1_DATA,
|
||||
RT5670_IF2_ADC_SEL_SFT, rt5670_data_select);
|
||||
|
||||
/*
|
||||
* For reliable output-mute LED control we need a "DAC1 Playback Switch" control.
|
||||
* We emulate this by only clearing the RT5670_M_DAC1_L/_R AD_DA_MIXER register
|
||||
* bits when both our emulated DAC1 Playback Switch control and the DAC1 MIXL/R
|
||||
* DAPM-mixer DAC1 input are enabled.
|
||||
*/
|
||||
static void rt5670_update_ad_da_mixer_dac1_m_bits(struct rt5670_priv *rt5670)
|
||||
{
|
||||
int val = RT5670_M_DAC1_L | RT5670_M_DAC1_R;
|
||||
|
||||
if (rt5670->dac1_mixl_dac1_switch && rt5670->dac1_playback_switch_l)
|
||||
val &= ~RT5670_M_DAC1_L;
|
||||
|
||||
if (rt5670->dac1_mixr_dac1_switch && rt5670->dac1_playback_switch_r)
|
||||
val &= ~RT5670_M_DAC1_R;
|
||||
|
||||
regmap_update_bits(rt5670->regmap, RT5670_AD_DA_MIXER,
|
||||
RT5670_M_DAC1_L | RT5670_M_DAC1_R, val);
|
||||
}
|
||||
|
||||
static int rt5670_dac1_playback_switch_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
ucontrol->value.integer.value[0] = rt5670->dac1_playback_switch_l;
|
||||
ucontrol->value.integer.value[1] = rt5670->dac1_playback_switch_r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt5670_dac1_playback_switch_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
if (rt5670->dac1_playback_switch_l == ucontrol->value.integer.value[0] &&
|
||||
rt5670->dac1_playback_switch_r == ucontrol->value.integer.value[1])
|
||||
return 0;
|
||||
|
||||
rt5670->dac1_playback_switch_l = ucontrol->value.integer.value[0];
|
||||
rt5670->dac1_playback_switch_r = ucontrol->value.integer.value[1];
|
||||
|
||||
rt5670_update_ad_da_mixer_dac1_m_bits(rt5670);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const struct snd_kcontrol_new rt5670_snd_controls[] = {
|
||||
/* Headphone Output Volume */
|
||||
SOC_DOUBLE("HP Playback Switch", RT5670_HP_VOL,
|
||||
RT5670_L_MUTE_SFT, RT5670_R_MUTE_SFT, 1, 1),
|
||||
SOC_DOUBLE_TLV("HP Playback Volume", RT5670_HP_VOL,
|
||||
RT5670_L_VOL_SFT, RT5670_R_VOL_SFT,
|
||||
39, 1, out_vol_tlv),
|
||||
/* OUTPUT Control */
|
||||
SOC_DOUBLE("OUT Channel Switch", RT5670_LOUT1,
|
||||
RT5670_VOL_L_SFT, RT5670_VOL_R_SFT, 1, 1),
|
||||
SOC_DOUBLE_TLV("OUT Playback Volume", RT5670_LOUT1,
|
||||
RT5670_L_VOL_SFT, RT5670_R_VOL_SFT, 39, 1, out_vol_tlv),
|
||||
/* DAC Digital Volume */
|
||||
SOC_DOUBLE("DAC2 Playback Switch", RT5670_DAC_CTRL,
|
||||
RT5670_M_DAC_L2_VOL_SFT, RT5670_M_DAC_R2_VOL_SFT, 1, 1),
|
||||
SOC_DOUBLE_EXT("DAC1 Playback Switch", SND_SOC_NOPM, 0, 1, 1, 0,
|
||||
rt5670_dac1_playback_switch_get, rt5670_dac1_playback_switch_put),
|
||||
SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5670_DAC1_DIG_VOL,
|
||||
RT5670_L_VOL_SFT, RT5670_R_VOL_SFT,
|
||||
175, 0, dac_vol_tlv),
|
||||
@@ -913,18 +961,44 @@ static const struct snd_kcontrol_new rt5670_mono_adc_r_mix[] = {
|
||||
RT5670_M_MONO_ADC_R2_SFT, 1, 1),
|
||||
};
|
||||
|
||||
/* See comment above rt5670_update_ad_da_mixer_dac1_m_bits() */
|
||||
static int rt5670_put_dac1_mix_dac1_switch(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value;
|
||||
struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol);
|
||||
struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
|
||||
int ret;
|
||||
|
||||
if (mc->shift == 0)
|
||||
rt5670->dac1_mixl_dac1_switch = ucontrol->value.integer.value[0];
|
||||
else
|
||||
rt5670->dac1_mixr_dac1_switch = ucontrol->value.integer.value[0];
|
||||
|
||||
/* Apply the update (if any) */
|
||||
ret = snd_soc_dapm_put_volsw(kcontrol, ucontrol);
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
|
||||
rt5670_update_ad_da_mixer_dac1_m_bits(rt5670);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define SOC_DAPM_SINGLE_RT5670_DAC1_SW(name, shift) \
|
||||
SOC_SINGLE_EXT(name, SND_SOC_NOPM, shift, 1, 0, \
|
||||
snd_soc_dapm_get_volsw, rt5670_put_dac1_mix_dac1_switch)
|
||||
|
||||
static const struct snd_kcontrol_new rt5670_dac_l_mix[] = {
|
||||
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5670_AD_DA_MIXER,
|
||||
RT5670_M_ADCMIX_L_SFT, 1, 1),
|
||||
SOC_DAPM_SINGLE("DAC1 Switch", RT5670_AD_DA_MIXER,
|
||||
RT5670_M_DAC1_L_SFT, 1, 1),
|
||||
SOC_DAPM_SINGLE_RT5670_DAC1_SW("DAC1 Switch", 0),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new rt5670_dac_r_mix[] = {
|
||||
SOC_DAPM_SINGLE("Stereo ADC Switch", RT5670_AD_DA_MIXER,
|
||||
RT5670_M_ADCMIX_R_SFT, 1, 1),
|
||||
SOC_DAPM_SINGLE("DAC1 Switch", RT5670_AD_DA_MIXER,
|
||||
RT5670_M_DAC1_R_SFT, 1, 1),
|
||||
SOC_DAPM_SINGLE_RT5670_DAC1_SW("DAC1 Switch", 1),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new rt5670_sto_dac_l_mix[] = {
|
||||
@@ -1656,12 +1730,10 @@ static const struct snd_soc_dapm_widget rt5670_dapm_widgets[] = {
|
||||
RT5670_PWR_ADC_S1F_BIT, 0, NULL, 0),
|
||||
SND_SOC_DAPM_SUPPLY("ADC Stereo2 Filter", RT5670_PWR_DIG2,
|
||||
RT5670_PWR_ADC_S2F_BIT, 0, NULL, 0),
|
||||
SND_SOC_DAPM_MIXER("Sto1 ADC MIXL", RT5670_STO1_ADC_DIG_VOL,
|
||||
RT5670_L_MUTE_SFT, 1, rt5670_sto1_adc_l_mix,
|
||||
ARRAY_SIZE(rt5670_sto1_adc_l_mix)),
|
||||
SND_SOC_DAPM_MIXER("Sto1 ADC MIXR", RT5670_STO1_ADC_DIG_VOL,
|
||||
RT5670_R_MUTE_SFT, 1, rt5670_sto1_adc_r_mix,
|
||||
ARRAY_SIZE(rt5670_sto1_adc_r_mix)),
|
||||
SND_SOC_DAPM_MIXER("Sto1 ADC MIXL", SND_SOC_NOPM, 0, 0,
|
||||
rt5670_sto1_adc_l_mix, ARRAY_SIZE(rt5670_sto1_adc_l_mix)),
|
||||
SND_SOC_DAPM_MIXER("Sto1 ADC MIXR", SND_SOC_NOPM, 0, 0,
|
||||
rt5670_sto1_adc_r_mix, ARRAY_SIZE(rt5670_sto1_adc_r_mix)),
|
||||
SND_SOC_DAPM_MIXER("Sto2 ADC MIXL", SND_SOC_NOPM, 0, 0,
|
||||
rt5670_sto2_adc_l_mix,
|
||||
ARRAY_SIZE(rt5670_sto2_adc_l_mix)),
|
||||
@@ -2999,6 +3071,16 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
|
||||
dev_info(&i2c->dev, "quirk JD mode 3\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable the emulated "DAC1 Playback Switch" by default to avoid
|
||||
* muting the output with older UCM profiles.
|
||||
*/
|
||||
rt5670->dac1_playback_switch_l = true;
|
||||
rt5670->dac1_playback_switch_r = true;
|
||||
/* The Power-On-Reset values for the DAC1 mixer have the DAC1 input enabled. */
|
||||
rt5670->dac1_mixl_dac1_switch = true;
|
||||
rt5670->dac1_mixr_dac1_switch = true;
|
||||
|
||||
rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap);
|
||||
if (IS_ERR(rt5670->regmap)) {
|
||||
ret = PTR_ERR(rt5670->regmap);
|
||||
|
||||
@@ -212,12 +212,8 @@
|
||||
/* global definition */
|
||||
#define RT5670_L_MUTE (0x1 << 15)
|
||||
#define RT5670_L_MUTE_SFT 15
|
||||
#define RT5670_VOL_L_MUTE (0x1 << 14)
|
||||
#define RT5670_VOL_L_SFT 14
|
||||
#define RT5670_R_MUTE (0x1 << 7)
|
||||
#define RT5670_R_MUTE_SFT 7
|
||||
#define RT5670_VOL_R_MUTE (0x1 << 6)
|
||||
#define RT5670_VOL_R_SFT 6
|
||||
#define RT5670_L_VOL_MASK (0x3f << 8)
|
||||
#define RT5670_L_VOL_SFT 8
|
||||
#define RT5670_R_VOL_MASK (0x3f)
|
||||
@@ -2017,6 +2013,11 @@ struct rt5670_priv {
|
||||
int dsp_rate;
|
||||
int jack_type;
|
||||
int jack_type_saved;
|
||||
|
||||
bool dac1_mixl_dac1_switch;
|
||||
bool dac1_mixr_dac1_switch;
|
||||
bool dac1_playback_switch_l;
|
||||
bool dac1_playback_switch_r;
|
||||
};
|
||||
|
||||
void rt5670_jack_suspend(struct snd_soc_component *component);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user