mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
ASoC: Fixes for v6.10
A bunch of fixes that came in during the merge window, all driver specific and none of them especially remarkable. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmZPJ10ACgkQJNaLcl1U h9AN7wf/bR1oUfxqVRkkeWDJrKevWsXNN5LlWXar8D/yBzGp9ZzlliGKdm58O+7j G0iPkMGT0tD5oSxEXVWoYSRLwq8c+jvW5nNiNXPAITeSzXnW4LwSnfUNs52dAmAN MnNqzhSJbsXYH8JH5/JEco5seKC5/ijOOqIxcAhwrrdYnpjPkFXtlU4TQvSZeY7w i7BeEO1NmvYrgxT1oT+Nm8PFYANsyf9hCgANuZQv5p9iHvjsPzIC2LuW0exy7oiC k6X8uWiy+ETK3a9p288QZfO9AFrYm9KX3L18ha/C21ljw7DMv5xbgWm5xWnJQGsV n59T+C5kM0V5luSjXZxQ2/hE1Ueu1Q== =lhUd -----END PGP SIGNATURE----- Merge tag 'asoc-fix-v6.10-merge-window' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus ASoC: Fixes for v6.10 A bunch of fixes that came in during the merge window, all driver specific and none of them especially remarkable.
This commit is contained in:
commit
d001e978c1
@ -68,7 +68,7 @@ patternProperties:
|
||||
properties:
|
||||
compatible:
|
||||
description: Compatible for SAI sub-block A or B.
|
||||
pattern: "st,stm32-sai-sub-[ab]"
|
||||
pattern: "^st,stm32-sai-sub-[ab]$"
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// ALSA SoC Texas Instruments TAS2781 Audio Smart Amplifier
|
||||
//
|
||||
// Copyright (C) 2022 - 2023 Texas Instruments Incorporated
|
||||
// Copyright (C) 2022 - 2024 Texas Instruments Incorporated
|
||||
// https://www.ti.com
|
||||
//
|
||||
// The TAS2781 driver implements a flexible and configurable
|
||||
@ -13,8 +13,8 @@
|
||||
// Author: Kevin Lu <kevin-lu@ti.com>
|
||||
//
|
||||
|
||||
#ifndef __TASDEVICE_DSP_H__
|
||||
#define __TASDEVICE_DSP_H__
|
||||
#ifndef __TAS2781_DSP_H__
|
||||
#define __TAS2781_DSP_H__
|
||||
|
||||
#define MAIN_ALL_DEVICES 0x0d
|
||||
#define MAIN_DEVICE_A 0x01
|
||||
@ -180,7 +180,6 @@ void tasdevice_calbin_remove(void *context);
|
||||
int tasdevice_select_tuningprm_cfg(void *context, int prm,
|
||||
int cfg_no, int rca_conf_no);
|
||||
int tasdevice_prmg_load(void *context, int prm_no);
|
||||
int tasdevice_prmg_calibdata_load(void *context, int prm_no);
|
||||
void tasdevice_tuning_switch(void *context, int state);
|
||||
int tas2781_load_calibration(void *context, char *file_name,
|
||||
unsigned short i);
|
||||
|
@ -829,8 +829,8 @@ static void es8326_jack_detect_handler(struct work_struct *work)
|
||||
/* mute adc when mic path switch */
|
||||
regmap_write(es8326->regmap, ES8326_ADC1_SRC, 0x44);
|
||||
regmap_write(es8326->regmap, ES8326_ADC2_SRC, 0x66);
|
||||
es8326->hp = 0;
|
||||
}
|
||||
es8326->hp = 0;
|
||||
regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x01);
|
||||
regmap_write(es8326->regmap, ES8326_SYS_BIAS, 0x0a);
|
||||
regmap_update_bits(es8326->regmap, ES8326_HP_DRIVER_REF, 0x0f, 0x03);
|
||||
@ -981,7 +981,7 @@ static int es8326_resume(struct snd_soc_component *component)
|
||||
regmap_write(es8326->regmap, ES8326_ANA_LP, 0xf0);
|
||||
usleep_range(10000, 15000);
|
||||
regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0xd9);
|
||||
regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0xcb);
|
||||
regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0xd8);
|
||||
/* set headphone default type and detect pin */
|
||||
regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x83);
|
||||
regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE, 0x05);
|
||||
@ -1018,7 +1018,7 @@ static int es8326_resume(struct snd_soc_component *component)
|
||||
|
||||
regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7F);
|
||||
/* select vdda as micbias source */
|
||||
regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x23);
|
||||
regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x03);
|
||||
/* set dac dsmclip = 1 */
|
||||
regmap_write(es8326->regmap, ES8326_DAC_DSM, 0x08);
|
||||
regmap_write(es8326->regmap, ES8326_DAC_VPPSCALE, 0x15);
|
||||
|
@ -81,6 +81,7 @@ static const struct reg_sequence init_list[] = {
|
||||
static const struct reg_sequence rt5650_init_list[] = {
|
||||
{0xf6, 0x0100},
|
||||
{RT5645_PWR_ANLG1, 0x02},
|
||||
{RT5645_IL_CMD3, 0x0018},
|
||||
};
|
||||
|
||||
static const struct reg_default rt5645_reg[] = {
|
||||
|
@ -2,7 +2,8 @@
|
||||
/*
|
||||
* tas2552.c - ALSA SoC Texas Instruments TAS2552 Mono Audio Amplifier
|
||||
*
|
||||
* Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com
|
||||
* Copyright (C) 2014 - 2024 Texas Instruments Incorporated -
|
||||
* https://www.ti.com
|
||||
*
|
||||
* Author: Dan Murphy <dmurphy@ti.com>
|
||||
*/
|
||||
@ -119,12 +120,14 @@ static const struct snd_soc_dapm_widget tas2552_dapm_widgets[] =
|
||||
&tas2552_input_mux_control),
|
||||
|
||||
SND_SOC_DAPM_AIF_IN("DAC IN", "DAC Playback", 0, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_AIF_OUT("ASI OUT", "DAC Capture", 0, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_DAC("DAC", NULL, SND_SOC_NOPM, 0, 0),
|
||||
SND_SOC_DAPM_OUT_DRV("ClassD", TAS2552_CFG_2, 7, 0, NULL, 0),
|
||||
SND_SOC_DAPM_SUPPLY("PLL", TAS2552_CFG_2, 3, 0, NULL, 0),
|
||||
SND_SOC_DAPM_POST("Post Event", tas2552_post_event),
|
||||
|
||||
SND_SOC_DAPM_OUTPUT("OUT")
|
||||
SND_SOC_DAPM_OUTPUT("OUT"),
|
||||
SND_SOC_DAPM_INPUT("DMIC")
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route tas2552_audio_map[] = {
|
||||
@ -134,6 +137,7 @@ static const struct snd_soc_dapm_route tas2552_audio_map[] = {
|
||||
{"ClassD", NULL, "Input selection"},
|
||||
{"OUT", NULL, "ClassD"},
|
||||
{"ClassD", NULL, "PLL"},
|
||||
{"ASI OUT", NULL, "DMIC"}
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
@ -538,6 +542,13 @@ static struct snd_soc_dai_driver tas2552_dai[] = {
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = TAS2552_FORMATS,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Capture",
|
||||
.channels_min = 2,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_192000,
|
||||
.formats = TAS2552_FORMATS,
|
||||
},
|
||||
.ops = &tas2552_speaker_dai_ops,
|
||||
},
|
||||
};
|
||||
|
@ -2151,6 +2151,24 @@ static int tasdevice_load_data(struct tasdevice_priv *tas_priv,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void tasdev_load_calibrated_data(struct tasdevice_priv *priv, int i)
|
||||
{
|
||||
struct tasdevice_calibration *cal;
|
||||
struct tasdevice_fw *cal_fmw;
|
||||
|
||||
cal_fmw = priv->tasdevice[i].cali_data_fmw;
|
||||
|
||||
/* No calibrated data for current devices, playback will go ahead. */
|
||||
if (!cal_fmw)
|
||||
return;
|
||||
|
||||
cal = cal_fmw->calibrations;
|
||||
if (cal)
|
||||
return;
|
||||
|
||||
load_calib_data(priv, &cal->dev_data);
|
||||
}
|
||||
|
||||
int tasdevice_select_tuningprm_cfg(void *context, int prm_no,
|
||||
int cfg_no, int rca_conf_no)
|
||||
{
|
||||
@ -2210,21 +2228,9 @@ int tasdevice_select_tuningprm_cfg(void *context, int prm_no,
|
||||
for (i = 0; i < tas_priv->ndev; i++) {
|
||||
if (tas_priv->tasdevice[i].is_loaderr == true)
|
||||
continue;
|
||||
else if (tas_priv->tasdevice[i].is_loaderr == false
|
||||
&& tas_priv->tasdevice[i].is_loading == true) {
|
||||
struct tasdevice_fw *cal_fmw =
|
||||
tas_priv->tasdevice[i].cali_data_fmw;
|
||||
|
||||
if (cal_fmw) {
|
||||
struct tasdevice_calibration
|
||||
*cal = cal_fmw->calibrations;
|
||||
|
||||
if (cal)
|
||||
load_calib_data(tas_priv,
|
||||
&(cal->dev_data));
|
||||
}
|
||||
if (tas_priv->tasdevice[i].is_loaderr == false &&
|
||||
tas_priv->tasdevice[i].is_loading == true)
|
||||
tas_priv->tasdevice[i].cur_prog = prm_no;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2245,11 +2251,15 @@ int tasdevice_select_tuningprm_cfg(void *context, int prm_no,
|
||||
tasdevice_load_data(tas_priv, &(conf->dev_data));
|
||||
for (i = 0; i < tas_priv->ndev; i++) {
|
||||
if (tas_priv->tasdevice[i].is_loaderr == true) {
|
||||
status |= 1 << (i + 4);
|
||||
status |= BIT(i + 4);
|
||||
continue;
|
||||
} else if (tas_priv->tasdevice[i].is_loaderr == false
|
||||
&& tas_priv->tasdevice[i].is_loading == true)
|
||||
}
|
||||
|
||||
if (tas_priv->tasdevice[i].is_loaderr == false &&
|
||||
tas_priv->tasdevice[i].is_loading == true) {
|
||||
tasdev_load_calibrated_data(tas_priv, i);
|
||||
tas_priv->tasdevice[i].cur_conf = cfg_no;
|
||||
}
|
||||
}
|
||||
} else
|
||||
dev_dbg(tas_priv->dev, "%s: Unneeded loading dsp conf %d\n",
|
||||
@ -2308,65 +2318,6 @@ int tasdevice_prmg_load(void *context, int prm_no)
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(tasdevice_prmg_load, SND_SOC_TAS2781_FMWLIB);
|
||||
|
||||
int tasdevice_prmg_calibdata_load(void *context, int prm_no)
|
||||
{
|
||||
struct tasdevice_priv *tas_priv = (struct tasdevice_priv *) context;
|
||||
struct tasdevice_fw *tas_fmw = tas_priv->fmw;
|
||||
struct tasdevice_prog *program;
|
||||
int prog_status = 0;
|
||||
int i;
|
||||
|
||||
if (!tas_fmw) {
|
||||
dev_err(tas_priv->dev, "%s: Firmware is NULL\n", __func__);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (prm_no >= tas_fmw->nr_programs) {
|
||||
dev_err(tas_priv->dev,
|
||||
"%s: prm(%d) is not in range of Programs %u\n",
|
||||
__func__, prm_no, tas_fmw->nr_programs);
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0, prog_status = 0; i < tas_priv->ndev; i++) {
|
||||
if (prm_no >= 0 && tas_priv->tasdevice[i].cur_prog != prm_no) {
|
||||
tas_priv->tasdevice[i].cur_conf = -1;
|
||||
tas_priv->tasdevice[i].is_loading = true;
|
||||
prog_status++;
|
||||
}
|
||||
tas_priv->tasdevice[i].is_loaderr = false;
|
||||
}
|
||||
|
||||
if (prog_status) {
|
||||
program = &(tas_fmw->programs[prm_no]);
|
||||
tasdevice_load_data(tas_priv, &(program->dev_data));
|
||||
for (i = 0; i < tas_priv->ndev; i++) {
|
||||
if (tas_priv->tasdevice[i].is_loaderr == true)
|
||||
continue;
|
||||
else if (tas_priv->tasdevice[i].is_loaderr == false
|
||||
&& tas_priv->tasdevice[i].is_loading == true) {
|
||||
struct tasdevice_fw *cal_fmw =
|
||||
tas_priv->tasdevice[i].cali_data_fmw;
|
||||
|
||||
if (cal_fmw) {
|
||||
struct tasdevice_calibration *cal =
|
||||
cal_fmw->calibrations;
|
||||
|
||||
if (cal)
|
||||
load_calib_data(tas_priv,
|
||||
&(cal->dev_data));
|
||||
}
|
||||
tas_priv->tasdevice[i].cur_prog = prm_no;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
return prog_status;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(tasdevice_prmg_calibdata_load,
|
||||
SND_SOC_TAS2781_FMWLIB);
|
||||
|
||||
void tasdevice_tuning_switch(void *context, int state)
|
||||
{
|
||||
struct tasdevice_priv *tas_priv = (struct tasdevice_priv *) context;
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// ALSA SoC Texas Instruments TAS2563/TAS2781 Audio Smart Amplifier
|
||||
//
|
||||
// Copyright (C) 2022 - 2023 Texas Instruments Incorporated
|
||||
// Copyright (C) 2022 - 2024 Texas Instruments Incorporated
|
||||
// https://www.ti.com
|
||||
//
|
||||
// The TAS2563/TAS2781 driver implements a flexible and configurable
|
||||
@ -414,7 +414,7 @@ static void tasdevice_fw_ready(const struct firmware *fmw,
|
||||
__func__, tas_priv->cal_binaryname[i]);
|
||||
}
|
||||
|
||||
tasdevice_prmg_calibdata_load(tas_priv, 0);
|
||||
tasdevice_prmg_load(tas_priv, 0);
|
||||
tas_priv->cur_prog = 0;
|
||||
out:
|
||||
if (tas_priv->fw_state == TASDEVICE_DSP_FW_FAIL) {
|
||||
|
@ -109,7 +109,7 @@ int rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *d
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(need_sdca_suffix); i++) {
|
||||
if (strstr(codec_dai->name, need_sdca_suffix[i])) {
|
||||
if (strstr(component->name_prefix, need_sdca_suffix[i])) {
|
||||
/* Add -sdca suffix for existing UCMs */
|
||||
card->components = devm_kasprintf(card->dev, GFP_KERNEL,
|
||||
"%s-sdca", card->components);
|
||||
|
Loading…
Reference in New Issue
Block a user