Commit e4af3121 authored by Takashi Iwai's avatar Takashi Iwai

Merge tag 'asoc-fix-v6.8-rc2' of...

Merge tag 'asoc-fix-v6.8-rc2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus

ASoC: Fixes for v6.8

Quite a lot of fixes that came in since the merge window, a large
portion for for Qualcomm and ES8326.

The 8 DAI support for Qualcomm is just raising a constant to allow for
devies that otherwise only need DTs, and there's a few other device ID
updates for sunxi (Allwinner) and AMD platforms.
parents 2468e892 5513c5d0
...@@ -22,6 +22,7 @@ properties: ...@@ -22,6 +22,7 @@ properties:
- const: allwinner,sun6i-a31-spdif - const: allwinner,sun6i-a31-spdif
- const: allwinner,sun8i-h3-spdif - const: allwinner,sun8i-h3-spdif
- const: allwinner,sun50i-h6-spdif - const: allwinner,sun50i-h6-spdif
- const: allwinner,sun50i-h616-spdif
- items: - items:
- const: allwinner,sun8i-a83t-spdif - const: allwinner,sun8i-a83t-spdif
- const: allwinner,sun8i-h3-spdif - const: allwinner,sun8i-h3-spdif
...@@ -62,6 +63,8 @@ allOf: ...@@ -62,6 +63,8 @@ allOf:
enum: enum:
- allwinner,sun6i-a31-spdif - allwinner,sun6i-a31-spdif
- allwinner,sun8i-h3-spdif - allwinner,sun8i-h3-spdif
- allwinner,sun50i-h6-spdif
- allwinner,sun50i-h616-spdif
then: then:
required: required:
...@@ -73,7 +76,7 @@ allOf: ...@@ -73,7 +76,7 @@ allOf:
contains: contains:
enum: enum:
- allwinner,sun8i-h3-spdif - allwinner,sun8i-h3-spdif
- allwinner,sun50i-h6-spdif - allwinner,sun50i-h616-spdif
then: then:
properties: properties:
......
...@@ -505,6 +505,13 @@ static int acp_card_rt5682s_hw_params(struct snd_pcm_substream *substream, ...@@ -505,6 +505,13 @@ static int acp_card_rt5682s_hw_params(struct snd_pcm_substream *substream,
clk_set_rate(drvdata->wclk, srate); clk_set_rate(drvdata->wclk, srate);
clk_set_rate(drvdata->bclk, srate * ch * format); clk_set_rate(drvdata->bclk, srate * ch * format);
if (!drvdata->soc_mclk) {
ret = acp_clk_enable(drvdata, srate, ch * format);
if (ret < 0) {
dev_err(rtd->card->dev, "Failed to enable HS clk: %d\n", ret);
return ret;
}
}
return 0; return 0;
} }
...@@ -1464,8 +1471,13 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card) ...@@ -1464,8 +1471,13 @@ int acp_sofdsp_dai_links_create(struct snd_soc_card *card)
if (drv_data->amp_cpu_id == I2S_SP) { if (drv_data->amp_cpu_id == I2S_SP) {
links[i].name = "acp-amp-codec"; links[i].name = "acp-amp-codec";
links[i].id = AMP_BE_ID; links[i].id = AMP_BE_ID;
links[i].cpus = sof_sp_virtual; if (drv_data->platform == RENOIR) {
links[i].num_cpus = ARRAY_SIZE(sof_sp_virtual); links[i].cpus = sof_sp;
links[i].num_cpus = ARRAY_SIZE(sof_sp);
} else {
links[i].cpus = sof_sp_virtual;
links[i].num_cpus = ARRAY_SIZE(sof_sp_virtual);
}
links[i].platforms = sof_component; links[i].platforms = sof_component;
links[i].num_platforms = ARRAY_SIZE(sof_component); links[i].num_platforms = ARRAY_SIZE(sof_component);
links[i].dpcm_playback = 1; links[i].dpcm_playback = 1;
......
...@@ -48,6 +48,7 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = { ...@@ -48,6 +48,7 @@ static struct acp_card_drvdata sof_rt5682s_rt1019_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.platform = RENOIR,
.tdm_mode = false, .tdm_mode = false,
}; };
...@@ -58,6 +59,7 @@ static struct acp_card_drvdata sof_rt5682s_max_data = { ...@@ -58,6 +59,7 @@ static struct acp_card_drvdata sof_rt5682s_max_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.platform = RENOIR,
.tdm_mode = false, .tdm_mode = false,
}; };
...@@ -68,6 +70,7 @@ static struct acp_card_drvdata sof_nau8825_data = { ...@@ -68,6 +70,7 @@ static struct acp_card_drvdata sof_nau8825_data = {
.hs_codec_id = NAU8825, .hs_codec_id = NAU8825,
.amp_codec_id = MAX98360A, .amp_codec_id = MAX98360A,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.platform = REMBRANDT,
.soc_mclk = true, .soc_mclk = true,
.tdm_mode = false, .tdm_mode = false,
}; };
...@@ -79,6 +82,7 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = { ...@@ -79,6 +82,7 @@ static struct acp_card_drvdata sof_rt5682s_hs_rt1019_data = {
.hs_codec_id = RT5682S, .hs_codec_id = RT5682S,
.amp_codec_id = RT1019, .amp_codec_id = RT1019,
.dmic_codec_id = DMIC, .dmic_codec_id = DMIC,
.platform = REMBRANDT,
.soc_mclk = true, .soc_mclk = true,
.tdm_mode = false, .tdm_mode = false,
}; };
......
...@@ -354,6 +354,14 @@ static const struct dmi_system_id acp3x_es83xx_dmi_table[] = { ...@@ -354,6 +354,14 @@ static const struct dmi_system_id acp3x_es83xx_dmi_table[] = {
}, },
.driver_data = (void *)(ES83XX_ENABLE_DMIC|ES83XX_48_MHZ_MCLK), .driver_data = (void *)(ES83XX_ENABLE_DMIC|ES83XX_48_MHZ_MCLK),
}, },
{
.matches = {
DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),
DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),
},
.driver_data = (void *)(ES83XX_ENABLE_DMIC),
},
{ {
.matches = { .matches = {
DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
......
...@@ -297,6 +297,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { ...@@ -297,6 +297,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 B7ED"), DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 B7ED"),
} }
}, },
{
.driver_data = &acp6x_card,
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 C7VF"),
}
},
{ {
.driver_data = &acp6x_card, .driver_data = &acp6x_card,
.matches = { .matches = {
......
This diff is collapsed.
...@@ -72,6 +72,7 @@ ...@@ -72,6 +72,7 @@
#define ES8326_DAC_VOL 0x50 #define ES8326_DAC_VOL 0x50
#define ES8326_DRC_RECOVERY 0x53 #define ES8326_DRC_RECOVERY 0x53
#define ES8326_DRC_WINSIZE 0x54 #define ES8326_DRC_WINSIZE 0x54
#define ES8326_DAC_CROSSTALK 0x55
#define ES8326_HPJACK_TIMER 0x56 #define ES8326_HPJACK_TIMER 0x56
#define ES8326_HPDET_TYPE 0x57 #define ES8326_HPDET_TYPE 0x57
#define ES8326_INT_SOURCE 0x58 #define ES8326_INT_SOURCE 0x58
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
#define ES8326_MUTE (3 << 0) #define ES8326_MUTE (3 << 0)
/* ES8326_CLK_CTL */ /* ES8326_CLK_CTL */
#define ES8326_CLK_ON (0x7f << 0) #define ES8326_CLK_ON (0x7e << 0)
#define ES8326_CLK_OFF (0 << 0) #define ES8326_CLK_OFF (0 << 0)
/* ES8326_CLK_INV */ /* ES8326_CLK_INV */
......
...@@ -1584,7 +1584,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w, ...@@ -1584,7 +1584,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
u16 gain_reg; u16 gain_reg;
u16 reg; u16 reg;
int val; int val;
int offset_val = 0;
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component); struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
if (w->shift == WSA_MACRO_COMP1) { if (w->shift == WSA_MACRO_COMP1) {
...@@ -1623,10 +1622,8 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w, ...@@ -1623,10 +1622,8 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
CDC_WSA_RX1_RX_PATH_MIX_SEC0, CDC_WSA_RX1_RX_PATH_MIX_SEC0,
CDC_WSA_RX_PGA_HALF_DB_MASK, CDC_WSA_RX_PGA_HALF_DB_MASK,
CDC_WSA_RX_PGA_HALF_DB_ENABLE); CDC_WSA_RX_PGA_HALF_DB_ENABLE);
offset_val = -2;
} }
val = snd_soc_component_read(component, gain_reg); val = snd_soc_component_read(component, gain_reg);
val += offset_val;
snd_soc_component_write(component, gain_reg, val); snd_soc_component_write(component, gain_reg, val);
wsa_macro_config_ear_spkr_gain(component, wsa, wsa_macro_config_ear_spkr_gain(component, wsa,
event, gain_reg); event, gain_reg);
...@@ -1654,10 +1651,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w, ...@@ -1654,10 +1651,6 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
CDC_WSA_RX1_RX_PATH_MIX_SEC0, CDC_WSA_RX1_RX_PATH_MIX_SEC0,
CDC_WSA_RX_PGA_HALF_DB_MASK, CDC_WSA_RX_PGA_HALF_DB_MASK,
CDC_WSA_RX_PGA_HALF_DB_DISABLE); CDC_WSA_RX_PGA_HALF_DB_DISABLE);
offset_val = 2;
val = snd_soc_component_read(component, gain_reg);
val += offset_val;
snd_soc_component_write(component, gain_reg, val);
} }
wsa_macro_config_ear_spkr_gain(component, wsa, wsa_macro_config_ear_spkr_gain(component, wsa,
event, gain_reg); event, gain_reg);
......
...@@ -3033,7 +3033,6 @@ static int wcd9335_codec_enable_mix_path(struct snd_soc_dapm_widget *w, ...@@ -3033,7 +3033,6 @@ static int wcd9335_codec_enable_mix_path(struct snd_soc_dapm_widget *w,
{ {
struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm);
u16 gain_reg; u16 gain_reg;
int offset_val = 0;
int val = 0; int val = 0;
switch (w->reg) { switch (w->reg) {
...@@ -3073,7 +3072,6 @@ static int wcd9335_codec_enable_mix_path(struct snd_soc_dapm_widget *w, ...@@ -3073,7 +3072,6 @@ static int wcd9335_codec_enable_mix_path(struct snd_soc_dapm_widget *w,
switch (event) { switch (event) {
case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU:
val = snd_soc_component_read(comp, gain_reg); val = snd_soc_component_read(comp, gain_reg);
val += offset_val;
snd_soc_component_write(comp, gain_reg, val); snd_soc_component_write(comp, gain_reg, val);
break; break;
case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD:
...@@ -3294,7 +3292,6 @@ static int wcd9335_codec_enable_interpolator(struct snd_soc_dapm_widget *w, ...@@ -3294,7 +3292,6 @@ static int wcd9335_codec_enable_interpolator(struct snd_soc_dapm_widget *w,
u16 gain_reg; u16 gain_reg;
u16 reg; u16 reg;
int val; int val;
int offset_val = 0;
if (!(snd_soc_dapm_widget_name_cmp(w, "RX INT0 INTERP"))) { if (!(snd_soc_dapm_widget_name_cmp(w, "RX INT0 INTERP"))) {
reg = WCD9335_CDC_RX0_RX_PATH_CTL; reg = WCD9335_CDC_RX0_RX_PATH_CTL;
...@@ -3337,7 +3334,6 @@ static int wcd9335_codec_enable_interpolator(struct snd_soc_dapm_widget *w, ...@@ -3337,7 +3334,6 @@ static int wcd9335_codec_enable_interpolator(struct snd_soc_dapm_widget *w,
case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU:
wcd9335_config_compander(comp, w->shift, event); wcd9335_config_compander(comp, w->shift, event);
val = snd_soc_component_read(comp, gain_reg); val = snd_soc_component_read(comp, gain_reg);
val += offset_val;
snd_soc_component_write(comp, gain_reg, val); snd_soc_component_write(comp, gain_reg, val);
break; break;
case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD:
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/slimbus.h> #include <linux/slimbus.h>
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
......
...@@ -210,7 +210,7 @@ struct wcd938x_priv { ...@@ -210,7 +210,7 @@ struct wcd938x_priv {
}; };
static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(ear_pa_gain, 600, -1800); static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(ear_pa_gain, 600, -1800);
static const DECLARE_TLV_DB_SCALE(line_gain, -3000, 150, -3000); static const DECLARE_TLV_DB_SCALE(line_gain, -3000, 150, 0);
static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(analog_gain, 0, 3000); static const SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(analog_gain, 0, 3000);
struct wcd938x_mbhc_zdet_param { struct wcd938x_mbhc_zdet_param {
...@@ -3587,10 +3587,8 @@ static int wcd938x_probe(struct platform_device *pdev) ...@@ -3587,10 +3587,8 @@ static int wcd938x_probe(struct platform_device *pdev)
mutex_init(&wcd938x->micb_lock); mutex_init(&wcd938x->micb_lock);
ret = wcd938x_populate_dt_data(wcd938x, dev); ret = wcd938x_populate_dt_data(wcd938x, dev);
if (ret) { if (ret)
dev_err(dev, "%s: Fail to obtain platform data\n", __func__); return ret;
return -EINVAL;
}
ret = wcd938x_add_slave_components(wcd938x, dev, &match); ret = wcd938x_add_slave_components(wcd938x, dev, &match);
if (ret) if (ret)
......
...@@ -1098,7 +1098,11 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol, ...@@ -1098,7 +1098,11 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol,
return 1; return 1;
} }
static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, -300); static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(pa_gain,
0, 14, TLV_DB_SCALE_ITEM(-300, 0, 0),
15, 29, TLV_DB_SCALE_ITEM(-300, 150, 0),
30, 31, TLV_DB_SCALE_ITEM(1800, 0, 0),
);
static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol, static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
......
...@@ -32,12 +32,14 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd) ...@@ -32,12 +32,14 @@ static int sc8280xp_snd_init(struct snd_soc_pcm_runtime *rtd)
case WSA_CODEC_DMA_RX_0: case WSA_CODEC_DMA_RX_0:
case WSA_CODEC_DMA_RX_1: case WSA_CODEC_DMA_RX_1:
/* /*
* set limit of 0dB on Digital Volume for Speakers, * Set limit of -3 dB on Digital Volume and 0 dB on PA Volume
* this can prevent damage of speakers to some extent without * to reduce the risk of speaker damage until we have active
* active speaker protection * speaker protection in place.
*/ */
snd_soc_limit_volume(card, "WSA_RX0 Digital Volume", 84); snd_soc_limit_volume(card, "WSA_RX0 Digital Volume", 81);
snd_soc_limit_volume(card, "WSA_RX1 Digital Volume", 84); snd_soc_limit_volume(card, "WSA_RX1 Digital Volume", 81);
snd_soc_limit_volume(card, "SpkrLeft PA Volume", 17);
snd_soc_limit_volume(card, "SpkrRight PA Volume", 17);
break; break;
default: default:
break; break;
......
...@@ -1037,7 +1037,7 @@ static int soc_dai_link_sanity_check(struct snd_soc_card *card, ...@@ -1037,7 +1037,7 @@ static int soc_dai_link_sanity_check(struct snd_soc_card *card,
return -EINVAL; return -EINVAL;
} }
#define MAX_DEFAULT_CH_MAP_SIZE 7 #define MAX_DEFAULT_CH_MAP_SIZE 8
static struct snd_soc_dai_link_ch_map default_ch_map_sync[MAX_DEFAULT_CH_MAP_SIZE] = { static struct snd_soc_dai_link_ch_map default_ch_map_sync[MAX_DEFAULT_CH_MAP_SIZE] = {
{ .cpu = 0, .codec = 0 }, { .cpu = 0, .codec = 0 },
{ .cpu = 1, .codec = 1 }, { .cpu = 1, .codec = 1 },
...@@ -1046,6 +1046,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_sync[MAX_DEFAULT_CH_MAP_SIZ ...@@ -1046,6 +1046,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_sync[MAX_DEFAULT_CH_MAP_SIZ
{ .cpu = 4, .codec = 4 }, { .cpu = 4, .codec = 4 },
{ .cpu = 5, .codec = 5 }, { .cpu = 5, .codec = 5 },
{ .cpu = 6, .codec = 6 }, { .cpu = 6, .codec = 6 },
{ .cpu = 7, .codec = 7 },
}; };
static struct snd_soc_dai_link_ch_map default_ch_map_1cpu[MAX_DEFAULT_CH_MAP_SIZE] = { static struct snd_soc_dai_link_ch_map default_ch_map_1cpu[MAX_DEFAULT_CH_MAP_SIZE] = {
{ .cpu = 0, .codec = 0 }, { .cpu = 0, .codec = 0 },
...@@ -1055,6 +1056,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_1cpu[MAX_DEFAULT_CH_MAP_SIZ ...@@ -1055,6 +1056,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_1cpu[MAX_DEFAULT_CH_MAP_SIZ
{ .cpu = 0, .codec = 4 }, { .cpu = 0, .codec = 4 },
{ .cpu = 0, .codec = 5 }, { .cpu = 0, .codec = 5 },
{ .cpu = 0, .codec = 6 }, { .cpu = 0, .codec = 6 },
{ .cpu = 0, .codec = 7 },
}; };
static struct snd_soc_dai_link_ch_map default_ch_map_1codec[MAX_DEFAULT_CH_MAP_SIZE] = { static struct snd_soc_dai_link_ch_map default_ch_map_1codec[MAX_DEFAULT_CH_MAP_SIZE] = {
{ .cpu = 0, .codec = 0 }, { .cpu = 0, .codec = 0 },
...@@ -1064,6 +1066,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_1codec[MAX_DEFAULT_CH_MAP_S ...@@ -1064,6 +1066,7 @@ static struct snd_soc_dai_link_ch_map default_ch_map_1codec[MAX_DEFAULT_CH_MAP_S
{ .cpu = 4, .codec = 0 }, { .cpu = 4, .codec = 0 },
{ .cpu = 5, .codec = 0 }, { .cpu = 5, .codec = 0 },
{ .cpu = 6, .codec = 0 }, { .cpu = 6, .codec = 0 },
{ .cpu = 7, .codec = 0 },
}; };
static int snd_soc_compensate_channel_connection_map(struct snd_soc_card *card, static int snd_soc_compensate_channel_connection_map(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link) struct snd_soc_dai_link *dai_link)
......
...@@ -577,6 +577,11 @@ static const struct of_device_id sun4i_spdif_of_match[] = { ...@@ -577,6 +577,11 @@ static const struct of_device_id sun4i_spdif_of_match[] = {
.compatible = "allwinner,sun50i-h6-spdif", .compatible = "allwinner,sun50i-h6-spdif",
.data = &sun50i_h6_spdif_quirks, .data = &sun50i_h6_spdif_quirks,
}, },
{
.compatible = "allwinner,sun50i-h616-spdif",
/* Essentially the same as the H6, but without RX */
.data = &sun50i_h6_spdif_quirks,
},
{ /* sentinel */ } { /* sentinel */ }
}; };
MODULE_DEVICE_TABLE(of, sun4i_spdif_of_match); MODULE_DEVICE_TABLE(of, sun4i_spdif_of_match);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment