forked from Minki/linux
ASoC: Fixes for v5.19
A few more fixes for v5.19 which came in during the second half of the merge window, again nothing that's really remarkable outside of the individual drivers. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmKfPyMACgkQJNaLcl1U h9DWlQf+P5+L2OUpuLLNahRKfDlT/RScEo5+wjJ8HYEIo/3+/KI8YubrlPOHByeI diVIfQhYw/bLW0xZEHxRhDPDzT/00ULjUlbYJ4YgyPy5dREOfO8IDDc1BwImTJqp 67UfEP6eWO8f+IpUJKV7eSng1FvV1vQsMswP1QG7K8wuZRMWzNkrpZIrQ/6vEuUd BFiPMEiGXM/YZIBc055kqrPxD5ZyFlocg2EcHaS09jir006YlVk13DflUDVoaxwg QGQUVhC9GrR72wB+8oRtpuzOiujvaoHlzAtA8iFp8yKY1Zsl0O2vrgLQwX1qhAcZ oLApw1fdqKayMWhpwf2L8Hr6SGgrsA== =zPdk -----END PGP SIGNATURE----- Merge tag 'asoc-fix-v5.19-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus ASoC: Fixes for v5.19 A few more fixes for v5.19 which came in during the second half of the merge window, again nothing that's really remarkable outside of the individual drivers.
This commit is contained in:
commit
53ee5d7b45
@ -444,7 +444,8 @@ static bool cs35l36_volatile_reg(struct device *dev, unsigned int reg)
|
||||
}
|
||||
}
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(dig_vol_tlv, -10200, 25, 0);
|
||||
static const DECLARE_TLV_DB_RANGE(dig_vol_tlv, 0, 912,
|
||||
TLV_DB_MINMAX_ITEM(-10200, 1200));
|
||||
static DECLARE_TLV_DB_SCALE(amp_gain_tlv, 0, 1, 1);
|
||||
|
||||
static const char * const cs35l36_pcm_sftramp_text[] = {
|
||||
|
@ -143,7 +143,7 @@ static const struct snd_kcontrol_new cs42l51_snd_controls[] = {
|
||||
0, 0xA0, 96, adc_att_tlv),
|
||||
SOC_DOUBLE_R_SX_TLV("PGA Volume",
|
||||
CS42L51_ALC_PGA_CTL, CS42L51_ALC_PGB_CTL,
|
||||
0, 0x1A, 30, pga_tlv),
|
||||
0, 0x19, 30, pga_tlv),
|
||||
SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0),
|
||||
SOC_SINGLE("Auto-Mute Switch", CS42L51_DAC_CTL, 2, 1, 0),
|
||||
SOC_SINGLE("Soft Ramp Switch", CS42L51_DAC_CTL, 1, 1, 0),
|
||||
|
@ -137,7 +137,9 @@ static DECLARE_TLV_DB_SCALE(mic_tlv, 1600, 100, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(mix_tlv, -50, 50, 0);
|
||||
static DECLARE_TLV_DB_SCALE(pass_tlv, -6000, 50, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(mix_tlv, -5150, 50, 0);
|
||||
|
||||
static DECLARE_TLV_DB_SCALE(beep_tlv, -56, 200, 0);
|
||||
|
||||
@ -351,7 +353,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
|
||||
CS42L52_SPKB_VOL, 0, 0x40, 0xC0, hl_tlv),
|
||||
|
||||
SOC_DOUBLE_R_SX_TLV("Bypass Volume", CS42L52_PASSTHRUA_VOL,
|
||||
CS42L52_PASSTHRUB_VOL, 0, 0x88, 0x90, pga_tlv),
|
||||
CS42L52_PASSTHRUB_VOL, 0, 0x88, 0x90, pass_tlv),
|
||||
|
||||
SOC_DOUBLE("Bypass Mute", CS42L52_MISC_CTL, 4, 5, 1, 0),
|
||||
|
||||
@ -364,7 +366,7 @@ static const struct snd_kcontrol_new cs42l52_snd_controls[] = {
|
||||
CS42L52_ADCB_VOL, 0, 0xA0, 0x78, ipd_tlv),
|
||||
SOC_DOUBLE_R_SX_TLV("ADC Mixer Volume",
|
||||
CS42L52_ADCA_MIXER_VOL, CS42L52_ADCB_MIXER_VOL,
|
||||
0, 0x19, 0x7F, ipd_tlv),
|
||||
0, 0x19, 0x7F, mix_tlv),
|
||||
|
||||
SOC_DOUBLE("ADC Switch", CS42L52_ADC_MISC_CTL, 0, 1, 1, 0),
|
||||
|
||||
|
@ -391,9 +391,9 @@ static const struct snd_kcontrol_new cs42l56_snd_controls[] = {
|
||||
SOC_DOUBLE("ADC Boost Switch", CS42L56_GAIN_BIAS_CTL, 3, 2, 1, 1),
|
||||
|
||||
SOC_DOUBLE_R_SX_TLV("Headphone Volume", CS42L56_HPA_VOLUME,
|
||||
CS42L56_HPB_VOLUME, 0, 0x84, 0x48, hl_tlv),
|
||||
CS42L56_HPB_VOLUME, 0, 0x44, 0x48, hl_tlv),
|
||||
SOC_DOUBLE_R_SX_TLV("LineOut Volume", CS42L56_LOA_VOLUME,
|
||||
CS42L56_LOB_VOLUME, 0, 0x84, 0x48, hl_tlv),
|
||||
CS42L56_LOB_VOLUME, 0, 0x44, 0x48, hl_tlv),
|
||||
|
||||
SOC_SINGLE_TLV("Bass Shelving Volume", CS42L56_TONE_CTL,
|
||||
0, 0x00, 1, tone_tlv),
|
||||
|
@ -348,22 +348,22 @@ static const struct snd_kcontrol_new cs53l30_snd_controls[] = {
|
||||
SOC_ENUM("ADC2 NG Delay", adc2_ng_delay_enum),
|
||||
|
||||
SOC_SINGLE_SX_TLV("ADC1A PGA Volume",
|
||||
CS53L30_ADC1A_AFE_CTL, 0, 0x34, 0x18, pga_tlv),
|
||||
CS53L30_ADC1A_AFE_CTL, 0, 0x34, 0x24, pga_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC1B PGA Volume",
|
||||
CS53L30_ADC1B_AFE_CTL, 0, 0x34, 0x18, pga_tlv),
|
||||
CS53L30_ADC1B_AFE_CTL, 0, 0x34, 0x24, pga_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC2A PGA Volume",
|
||||
CS53L30_ADC2A_AFE_CTL, 0, 0x34, 0x18, pga_tlv),
|
||||
CS53L30_ADC2A_AFE_CTL, 0, 0x34, 0x24, pga_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC2B PGA Volume",
|
||||
CS53L30_ADC2B_AFE_CTL, 0, 0x34, 0x18, pga_tlv),
|
||||
CS53L30_ADC2B_AFE_CTL, 0, 0x34, 0x24, pga_tlv),
|
||||
|
||||
SOC_SINGLE_SX_TLV("ADC1A Digital Volume",
|
||||
CS53L30_ADC1A_DIG_VOL, 0, 0xA0, 0x0C, dig_tlv),
|
||||
CS53L30_ADC1A_DIG_VOL, 0, 0xA0, 0x6C, dig_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC1B Digital Volume",
|
||||
CS53L30_ADC1B_DIG_VOL, 0, 0xA0, 0x0C, dig_tlv),
|
||||
CS53L30_ADC1B_DIG_VOL, 0, 0xA0, 0x6C, dig_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC2A Digital Volume",
|
||||
CS53L30_ADC2A_DIG_VOL, 0, 0xA0, 0x0C, dig_tlv),
|
||||
CS53L30_ADC2A_DIG_VOL, 0, 0xA0, 0x6C, dig_tlv),
|
||||
SOC_SINGLE_SX_TLV("ADC2B Digital Volume",
|
||||
CS53L30_ADC2B_DIG_VOL, 0, 0xA0, 0x0C, dig_tlv),
|
||||
CS53L30_ADC2B_DIG_VOL, 0, 0xA0, 0x6C, dig_tlv),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_widget cs53l30_dapm_widgets[] = {
|
||||
|
@ -161,13 +161,16 @@ static int es8328_put_deemph(struct snd_kcontrol *kcontrol,
|
||||
if (deemph > 1)
|
||||
return -EINVAL;
|
||||
|
||||
if (es8328->deemph == deemph)
|
||||
return 0;
|
||||
|
||||
ret = es8328_set_deemph(component);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
es8328->deemph = deemph;
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -740,6 +740,8 @@ static int nau8822_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
|
||||
pll_param->pll_int, pll_param->pll_frac,
|
||||
pll_param->mclk_scaler, pll_param->pre_factor);
|
||||
|
||||
snd_soc_component_update_bits(component,
|
||||
NAU8822_REG_POWER_MANAGEMENT_1, NAU8822_PLL_EN_MASK, NAU8822_PLL_OFF);
|
||||
snd_soc_component_update_bits(component,
|
||||
NAU8822_REG_PLL_N, NAU8822_PLLMCLK_DIV2 | NAU8822_PLLN_MASK,
|
||||
(pll_param->pre_factor ? NAU8822_PLLMCLK_DIV2 : 0) |
|
||||
@ -757,6 +759,8 @@ static int nau8822_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
|
||||
pll_param->mclk_scaler << NAU8822_MCLKSEL_SFT);
|
||||
snd_soc_component_update_bits(component,
|
||||
NAU8822_REG_CLOCKING, NAU8822_CLKM_MASK, NAU8822_CLKM_PLL);
|
||||
snd_soc_component_update_bits(component,
|
||||
NAU8822_REG_POWER_MANAGEMENT_1, NAU8822_PLL_EN_MASK, NAU8822_PLL_ON);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -90,6 +90,9 @@
|
||||
#define NAU8822_REFIMP_3K 0x3
|
||||
#define NAU8822_IOBUF_EN (0x1 << 2)
|
||||
#define NAU8822_ABIAS_EN (0x1 << 3)
|
||||
#define NAU8822_PLL_EN_MASK (0x1 << 5)
|
||||
#define NAU8822_PLL_ON (0x1 << 5)
|
||||
#define NAU8822_PLL_OFF (0x0 << 5)
|
||||
|
||||
/* NAU8822_REG_AUDIO_INTERFACE (0x4) */
|
||||
#define NAU8822_AIFMT_MASK (0x3 << 3)
|
||||
|
@ -3868,6 +3868,7 @@ static int wm8962_runtime_suspend(struct device *dev)
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops wm8962_pm = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
|
||||
SET_RUNTIME_PM_OPS(wm8962_runtime_suspend, wm8962_runtime_resume, NULL)
|
||||
};
|
||||
|
||||
|
@ -333,7 +333,7 @@ int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
|
||||
struct wm_adsp *dsp = snd_soc_component_get_drvdata(component);
|
||||
int ret = 0;
|
||||
int ret = 1;
|
||||
|
||||
if (ucontrol->value.enumerated.item[0] == dsp[e->shift_l].fw)
|
||||
return 0;
|
||||
|
@ -1293,6 +1293,7 @@ static const struct of_device_id fsl_sai_ids[] = {
|
||||
{ .compatible = "fsl,imx8mm-sai", .data = &fsl_sai_imx8mm_data },
|
||||
{ .compatible = "fsl,imx8mp-sai", .data = &fsl_sai_imx8mp_data },
|
||||
{ .compatible = "fsl,imx8ulp-sai", .data = &fsl_sai_imx8ulp_data },
|
||||
{ .compatible = "fsl,imx8mn-sai", .data = &fsl_sai_imx8mp_data },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fsl_sai_ids);
|
||||
|
@ -54,23 +54,30 @@ static struct snd_soc_dai_link_component cs35l41_components[] = {
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Mapping between ACPI instance id and speaker position.
|
||||
*
|
||||
* Four speakers:
|
||||
* 0: Tweeter left, 1: Woofer left
|
||||
* 2: Tweeter right, 3: Woofer right
|
||||
*/
|
||||
static struct snd_soc_codec_conf cs35l41_codec_conf[] = {
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV0_NAME),
|
||||
.name_prefix = "WL",
|
||||
},
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV1_NAME),
|
||||
.name_prefix = "WR",
|
||||
},
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV2_NAME),
|
||||
.name_prefix = "TL",
|
||||
},
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV3_NAME),
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV1_NAME),
|
||||
.name_prefix = "WL",
|
||||
},
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV2_NAME),
|
||||
.name_prefix = "TR",
|
||||
},
|
||||
{
|
||||
.dlc = COMP_CODEC_CONF(CS35L41_DEV3_NAME),
|
||||
.name_prefix = "WR",
|
||||
},
|
||||
};
|
||||
|
||||
static int cs35l41_init(struct snd_soc_pcm_runtime *rtd)
|
||||
@ -101,6 +108,21 @@ static int cs35l41_init(struct snd_soc_pcm_runtime *rtd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Channel map:
|
||||
*
|
||||
* TL/WL: ASPRX1 on slot 0, ASPRX2 on slot 1 (default)
|
||||
* TR/WR: ASPRX1 on slot 1, ASPRX2 on slot 0
|
||||
*/
|
||||
static const struct {
|
||||
unsigned int rx[2];
|
||||
} cs35l41_channel_map[] = {
|
||||
{.rx = {0, 1}}, /* TL */
|
||||
{.rx = {0, 1}}, /* WL */
|
||||
{.rx = {1, 0}}, /* TR */
|
||||
{.rx = {1, 0}}, /* WR */
|
||||
};
|
||||
|
||||
static int cs35l41_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
@ -134,6 +156,16 @@ static int cs35l41_hw_params(struct snd_pcm_substream *substream,
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setup channel map */
|
||||
ret = snd_soc_dai_set_channel_map(codec_dai, 0, NULL,
|
||||
ARRAY_SIZE(cs35l41_channel_map[i].rx),
|
||||
(unsigned int *)cs35l41_channel_map[i].rx);
|
||||
if (ret < 0) {
|
||||
dev_err(codec_dai->dev, "fail to set channel map, ret %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -898,7 +898,7 @@ static int lpass_platform_cdc_dma_mmap(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
unsigned long size, offset;
|
||||
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
|
||||
size = vma->vm_end - vma->vm_start;
|
||||
offset = vma->vm_pgoff << PAGE_SHIFT;
|
||||
return io_remap_pfn_range(vma, vma->vm_start,
|
||||
|
@ -318,7 +318,7 @@ sink_prepare:
|
||||
p->walking = false;
|
||||
if (ret < 0) {
|
||||
/* unprepare the source widget */
|
||||
if (!widget_ops[widget->id].ipc_unprepare && swidget->prepared) {
|
||||
if (widget_ops[widget->id].ipc_unprepare && swidget->prepared) {
|
||||
widget_ops[widget->id].ipc_unprepare(swidget);
|
||||
swidget->prepared = false;
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu
|
||||
{
|
||||
struct sof_client_dev *cdev = file->private_data;
|
||||
struct sof_msg_inject_priv *priv = cdev->data;
|
||||
size_t size;
|
||||
ssize_t size;
|
||||
int ret;
|
||||
|
||||
if (*ppos)
|
||||
@ -158,8 +158,10 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu
|
||||
|
||||
size = simple_write_to_buffer(priv->tx_buffer, priv->max_msg_size,
|
||||
ppos, buffer, count);
|
||||
if (size < 0)
|
||||
return size;
|
||||
if (size != count)
|
||||
return size > 0 ? -EFAULT : size;
|
||||
return -EFAULT;
|
||||
|
||||
memset(priv->rx_buffer, 0, priv->max_msg_size);
|
||||
|
||||
@ -179,7 +181,7 @@ static ssize_t sof_msg_inject_ipc4_dfs_write(struct file *file,
|
||||
struct sof_client_dev *cdev = file->private_data;
|
||||
struct sof_msg_inject_priv *priv = cdev->data;
|
||||
struct sof_ipc4_msg *ipc4_msg = priv->tx_buffer;
|
||||
size_t size;
|
||||
ssize_t size;
|
||||
int ret;
|
||||
|
||||
if (*ppos)
|
||||
@ -192,18 +194,20 @@ static ssize_t sof_msg_inject_ipc4_dfs_write(struct file *file,
|
||||
size = simple_write_to_buffer(&ipc4_msg->header_u64,
|
||||
sizeof(ipc4_msg->header_u64),
|
||||
ppos, buffer, count);
|
||||
if (size < 0)
|
||||
return size;
|
||||
if (size != sizeof(ipc4_msg->header_u64))
|
||||
return size > 0 ? -EFAULT : size;
|
||||
return -EFAULT;
|
||||
|
||||
count -= size;
|
||||
if (!count) {
|
||||
/* Copy the payload */
|
||||
size = simple_write_to_buffer(ipc4_msg->data_ptr,
|
||||
priv->max_msg_size, ppos, buffer,
|
||||
count);
|
||||
if (size != count)
|
||||
return size > 0 ? -EFAULT : size;
|
||||
}
|
||||
/* Copy the payload */
|
||||
size = simple_write_to_buffer(ipc4_msg->data_ptr,
|
||||
priv->max_msg_size, ppos, buffer,
|
||||
count);
|
||||
if (size < 0)
|
||||
return size;
|
||||
if (size != count)
|
||||
return -EFAULT;
|
||||
|
||||
ipc4_msg->data_size = count;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user