Merge branch 'for-5.8' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-5.9
This commit is contained in:
@@ -12,6 +12,7 @@ struct rt5670_platform_data {
|
|||||||
int jd_mode;
|
int jd_mode;
|
||||||
bool in2_diff;
|
bool in2_diff;
|
||||||
bool dev_gpio;
|
bool dev_gpio;
|
||||||
|
bool gpio1_is_ext_spk_en;
|
||||||
|
|
||||||
bool dmic_en;
|
bool dmic_en;
|
||||||
unsigned int dmic1_data_pin;
|
unsigned int dmic1_data_pin;
|
||||||
|
|||||||
@@ -208,8 +208,8 @@ static const struct config_entry config_table[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE)
|
||||||
/* Cometlake-LP */
|
/* Cometlake-LP */
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP)
|
|
||||||
{
|
{
|
||||||
.flags = FLAG_SOF,
|
.flags = FLAG_SOF,
|
||||||
.device = 0x02c8,
|
.device = 0x02c8,
|
||||||
@@ -240,9 +240,7 @@ static const struct config_entry config_table[] = {
|
|||||||
.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
|
.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
|
||||||
.device = 0x02c8,
|
.device = 0x02c8,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
/* Cometlake-H */
|
/* Cometlake-H */
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_H)
|
|
||||||
{
|
{
|
||||||
.flags = FLAG_SOF,
|
.flags = FLAG_SOF,
|
||||||
.device = 0x06c8,
|
.device = 0x06c8,
|
||||||
|
|||||||
@@ -342,11 +342,34 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
|||||||
{
|
{
|
||||||
struct snd_soc_pcm_runtime *prtd;
|
struct snd_soc_pcm_runtime *prtd;
|
||||||
struct i2s_dev_data *adata;
|
struct i2s_dev_data *adata;
|
||||||
|
struct i2s_stream_instance *ins;
|
||||||
|
|
||||||
prtd = substream->private_data;
|
prtd = substream->private_data;
|
||||||
component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
|
component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
|
||||||
adata = dev_get_drvdata(component->dev);
|
adata = dev_get_drvdata(component->dev);
|
||||||
|
ins = substream->runtime->private_data;
|
||||||
|
if (!ins)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||||
|
switch (ins->i2s_instance) {
|
||||||
|
case I2S_BT_INSTANCE:
|
||||||
|
adata->play_stream = NULL;
|
||||||
|
break;
|
||||||
|
case I2S_SP_INSTANCE:
|
||||||
|
default:
|
||||||
|
adata->i2ssp_play_stream = NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (ins->i2s_instance) {
|
||||||
|
case I2S_BT_INSTANCE:
|
||||||
|
adata->capture_stream = NULL;
|
||||||
|
break;
|
||||||
|
case I2S_SP_INSTANCE:
|
||||||
|
default:
|
||||||
|
adata->i2ssp_capture_stream = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Disable ACP irq, when the current stream is being closed and
|
/* Disable ACP irq, when the current stream is being closed and
|
||||||
* another stream is also not active.
|
* another stream is also not active.
|
||||||
@@ -354,13 +377,6 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
|||||||
if (!adata->play_stream && !adata->capture_stream &&
|
if (!adata->play_stream && !adata->capture_stream &&
|
||||||
!adata->i2ssp_play_stream && !adata->i2ssp_capture_stream)
|
!adata->i2ssp_play_stream && !adata->i2ssp_capture_stream)
|
||||||
rv_writel(0, adata->acp3x_base + mmACP_EXTERNAL_INTR_ENB);
|
rv_writel(0, adata->acp3x_base + mmACP_EXTERNAL_INTR_ENB);
|
||||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
|
||||||
adata->play_stream = NULL;
|
|
||||||
adata->i2ssp_play_stream = NULL;
|
|
||||||
} else {
|
|
||||||
adata->capture_stream = NULL;
|
|
||||||
adata->i2ssp_capture_stream = NULL;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
# Renoir platform Support
|
# Renoir platform Support
|
||||||
snd-rn-pci-acp3x-objs := rn-pci-acp3x.o
|
snd-rn-pci-acp3x-objs := rn-pci-acp3x.o
|
||||||
snd-acp3x-pdm-dma-objs := acp3x-pdm-dma.o
|
snd-acp3x-pdm-dma-objs := acp3x-pdm-dma.o
|
||||||
|
snd-acp3x-rn-objs := acp3x-rn.o
|
||||||
obj-$(CONFIG_SND_SOC_AMD_RENOIR) += snd-rn-pci-acp3x.o
|
obj-$(CONFIG_SND_SOC_AMD_RENOIR) += snd-rn-pci-acp3x.o
|
||||||
obj-$(CONFIG_SND_SOC_AMD_RENOIR) += snd-acp3x-pdm-dma.o
|
obj-$(CONFIG_SND_SOC_AMD_RENOIR) += snd-acp3x-pdm-dma.o
|
||||||
obj-$(CONFIG_SND_SOC_AMD_RENOIR_MACH) += acp3x-rn.o
|
obj-$(CONFIG_SND_SOC_AMD_RENOIR_MACH) += snd-acp3x-rn.o
|
||||||
|
|||||||
@@ -441,13 +441,13 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
|
|||||||
ret = snd_hda_codec_set_name(hcodec, hcodec->preset->name);
|
ret = snd_hda_codec_set_name(hcodec, hcodec->preset->name);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&hdev->dev, "name failed %s\n", hcodec->preset->name);
|
dev_err(&hdev->dev, "name failed %s\n", hcodec->preset->name);
|
||||||
goto error;
|
goto error_pm;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = snd_hdac_regmap_init(&hcodec->core);
|
ret = snd_hdac_regmap_init(&hcodec->core);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&hdev->dev, "regmap init failed\n");
|
dev_err(&hdev->dev, "regmap init failed\n");
|
||||||
goto error;
|
goto error_pm;
|
||||||
}
|
}
|
||||||
|
|
||||||
patch = (hda_codec_patch_t)hcodec->preset->driver_data;
|
patch = (hda_codec_patch_t)hcodec->preset->driver_data;
|
||||||
@@ -455,7 +455,7 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
|
|||||||
ret = patch(hcodec);
|
ret = patch(hcodec);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&hdev->dev, "patch failed %d\n", ret);
|
dev_err(&hdev->dev, "patch failed %d\n", ret);
|
||||||
goto error;
|
goto error_regmap;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dev_dbg(&hdev->dev, "no patch file found\n");
|
dev_dbg(&hdev->dev, "no patch file found\n");
|
||||||
@@ -467,7 +467,7 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
|
|||||||
ret = snd_hda_codec_parse_pcms(hcodec);
|
ret = snd_hda_codec_parse_pcms(hcodec);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&hdev->dev, "unable to map pcms to dai %d\n", ret);
|
dev_err(&hdev->dev, "unable to map pcms to dai %d\n", ret);
|
||||||
goto error;
|
goto error_regmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HDMI controls need to be created in machine drivers */
|
/* HDMI controls need to be created in machine drivers */
|
||||||
@@ -476,7 +476,7 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
|
|||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&hdev->dev, "unable to create controls %d\n",
|
dev_err(&hdev->dev, "unable to create controls %d\n",
|
||||||
ret);
|
ret);
|
||||||
goto error;
|
goto error_regmap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +496,9 @@ static int hdac_hda_codec_probe(struct snd_soc_component *component)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error_regmap:
|
||||||
|
snd_hdac_regmap_exit(hdev);
|
||||||
|
error_pm:
|
||||||
pm_runtime_put(&hdev->dev);
|
pm_runtime_put(&hdev->dev);
|
||||||
error_no_pm:
|
error_no_pm:
|
||||||
snd_hdac_ext_bus_link_put(hdev->bus, hlink);
|
snd_hdac_ext_bus_link_put(hdev->bus, hlink);
|
||||||
@@ -518,6 +520,8 @@ static void hdac_hda_codec_remove(struct snd_soc_component *component)
|
|||||||
|
|
||||||
pm_runtime_disable(&hdev->dev);
|
pm_runtime_disable(&hdev->dev);
|
||||||
snd_hdac_ext_bus_link_put(hdev->bus, hlink);
|
snd_hdac_ext_bus_link_put(hdev->bus, hlink);
|
||||||
|
|
||||||
|
snd_hdac_regmap_exit(hdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct snd_soc_dapm_route hdac_hda_dapm_routes[] = {
|
static const struct snd_soc_dapm_route hdac_hda_dapm_routes[] = {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#define RT5670_JD_MODE1 BIT(9)
|
#define RT5670_JD_MODE1 BIT(9)
|
||||||
#define RT5670_JD_MODE2 BIT(10)
|
#define RT5670_JD_MODE2 BIT(10)
|
||||||
#define RT5670_JD_MODE3 BIT(11)
|
#define RT5670_JD_MODE3 BIT(11)
|
||||||
|
#define RT5670_GPIO1_IS_EXT_SPK_EN BIT(12)
|
||||||
|
|
||||||
static unsigned long rt5670_quirk;
|
static unsigned long rt5670_quirk;
|
||||||
static unsigned int quirk_override;
|
static unsigned int quirk_override;
|
||||||
@@ -602,9 +603,9 @@ int rt5670_set_jack_detect(struct snd_soc_component *component,
|
|||||||
EXPORT_SYMBOL_GPL(rt5670_set_jack_detect);
|
EXPORT_SYMBOL_GPL(rt5670_set_jack_detect);
|
||||||
|
|
||||||
static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
|
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(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);
|
static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
|
||||||
|
|
||||||
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
|
||||||
@@ -1447,6 +1448,33 @@ static int rt5670_hp_event(struct snd_soc_dapm_widget *w,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int rt5670_spk_event(struct snd_soc_dapm_widget *w,
|
||||||
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
|
{
|
||||||
|
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||||
|
struct rt5670_priv *rt5670 = snd_soc_component_get_drvdata(component);
|
||||||
|
|
||||||
|
if (!rt5670->pdata.gpio1_is_ext_spk_en)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
|
||||||
|
RT5670_GP1_OUT_MASK, RT5670_GP1_OUT_HI);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
|
||||||
|
RT5670_GP1_OUT_MASK, RT5670_GP1_OUT_LO);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int rt5670_bst1_event(struct snd_soc_dapm_widget *w,
|
static int rt5670_bst1_event(struct snd_soc_dapm_widget *w,
|
||||||
struct snd_kcontrol *kcontrol, int event)
|
struct snd_kcontrol *kcontrol, int event)
|
||||||
{
|
{
|
||||||
@@ -1860,7 +1888,9 @@ static const struct snd_soc_dapm_widget rt5670_specific_dapm_widgets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_soc_dapm_widget rt5672_specific_dapm_widgets[] = {
|
static const struct snd_soc_dapm_widget rt5672_specific_dapm_widgets[] = {
|
||||||
SND_SOC_DAPM_PGA("SPO Amp", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA_E("SPO Amp", SND_SOC_NOPM, 0, 0, NULL, 0,
|
||||||
|
rt5670_spk_event, SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMU),
|
||||||
SND_SOC_DAPM_OUTPUT("SPOLP"),
|
SND_SOC_DAPM_OUTPUT("SPOLP"),
|
||||||
SND_SOC_DAPM_OUTPUT("SPOLN"),
|
SND_SOC_DAPM_OUTPUT("SPOLN"),
|
||||||
SND_SOC_DAPM_OUTPUT("SPORP"),
|
SND_SOC_DAPM_OUTPUT("SPORP"),
|
||||||
@@ -2857,14 +2887,14 @@ static const struct dmi_system_id dmi_platform_intel_quirks[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.callback = rt5670_quirk_cb,
|
.callback = rt5670_quirk_cb,
|
||||||
.ident = "Lenovo Thinkpad Tablet 10",
|
.ident = "Lenovo Miix 2 10",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"),
|
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"),
|
||||||
},
|
},
|
||||||
.driver_data = (unsigned long *)(RT5670_DMIC_EN |
|
.driver_data = (unsigned long *)(RT5670_DMIC_EN |
|
||||||
RT5670_DMIC1_IN2P |
|
RT5670_DMIC1_IN2P |
|
||||||
RT5670_DEV_GPIO |
|
RT5670_GPIO1_IS_EXT_SPK_EN |
|
||||||
RT5670_JD_MODE2),
|
RT5670_JD_MODE2),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2924,6 +2954,10 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
|
|||||||
rt5670->pdata.dev_gpio = true;
|
rt5670->pdata.dev_gpio = true;
|
||||||
dev_info(&i2c->dev, "quirk dev_gpio\n");
|
dev_info(&i2c->dev, "quirk dev_gpio\n");
|
||||||
}
|
}
|
||||||
|
if (rt5670_quirk & RT5670_GPIO1_IS_EXT_SPK_EN) {
|
||||||
|
rt5670->pdata.gpio1_is_ext_spk_en = true;
|
||||||
|
dev_info(&i2c->dev, "quirk GPIO1 is external speaker enable\n");
|
||||||
|
}
|
||||||
if (rt5670_quirk & RT5670_IN2_DIFF) {
|
if (rt5670_quirk & RT5670_IN2_DIFF) {
|
||||||
rt5670->pdata.in2_diff = true;
|
rt5670->pdata.in2_diff = true;
|
||||||
dev_info(&i2c->dev, "quirk IN2_DIFF\n");
|
dev_info(&i2c->dev, "quirk IN2_DIFF\n");
|
||||||
@@ -3023,6 +3057,13 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
|
|||||||
RT5670_GP1_PF_MASK, RT5670_GP1_PF_OUT);
|
RT5670_GP1_PF_MASK, RT5670_GP1_PF_OUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rt5670->pdata.gpio1_is_ext_spk_en) {
|
||||||
|
regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL1,
|
||||||
|
RT5670_GP1_PIN_MASK, RT5670_GP1_PIN_GPIO1);
|
||||||
|
regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2,
|
||||||
|
RT5670_GP1_PF_MASK, RT5670_GP1_PF_OUT);
|
||||||
|
}
|
||||||
|
|
||||||
if (rt5670->pdata.jd_mode) {
|
if (rt5670->pdata.jd_mode) {
|
||||||
regmap_update_bits(rt5670->regmap, RT5670_GLB_CLK,
|
regmap_update_bits(rt5670->regmap, RT5670_GLB_CLK,
|
||||||
RT5670_SCLK_SRC_MASK, RT5670_SCLK_SRC_RCCLK);
|
RT5670_SCLK_SRC_MASK, RT5670_SCLK_SRC_RCCLK);
|
||||||
|
|||||||
@@ -757,7 +757,7 @@
|
|||||||
#define RT5670_PWR_VREF2_BIT 4
|
#define RT5670_PWR_VREF2_BIT 4
|
||||||
#define RT5670_PWR_FV2 (0x1 << 3)
|
#define RT5670_PWR_FV2 (0x1 << 3)
|
||||||
#define RT5670_PWR_FV2_BIT 3
|
#define RT5670_PWR_FV2_BIT 3
|
||||||
#define RT5670_LDO_SEL_MASK (0x3)
|
#define RT5670_LDO_SEL_MASK (0x7)
|
||||||
#define RT5670_LDO_SEL_SFT 0
|
#define RT5670_LDO_SEL_SFT 0
|
||||||
|
|
||||||
/* Power Management for Analog 2 (0x64) */
|
/* Power Management for Analog 2 (0x64) */
|
||||||
|
|||||||
@@ -932,7 +932,9 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
|
|||||||
RT5682_PWR_ANLG_1, RT5682_PWR_FV2, RT5682_PWR_FV2);
|
RT5682_PWR_ANLG_1, RT5682_PWR_FV2, RT5682_PWR_FV2);
|
||||||
snd_soc_component_update_bits(component, RT5682_PWR_ANLG_3,
|
snd_soc_component_update_bits(component, RT5682_PWR_ANLG_3,
|
||||||
RT5682_PWR_CBJ, RT5682_PWR_CBJ);
|
RT5682_PWR_CBJ, RT5682_PWR_CBJ);
|
||||||
|
snd_soc_component_update_bits(component,
|
||||||
|
RT5682_HP_CHARGE_PUMP_1,
|
||||||
|
RT5682_OSW_L_MASK | RT5682_OSW_R_MASK, 0);
|
||||||
snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
|
snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
|
||||||
RT5682_TRIG_JD_MASK, RT5682_TRIG_JD_HIGH);
|
RT5682_TRIG_JD_MASK, RT5682_TRIG_JD_HIGH);
|
||||||
|
|
||||||
@@ -956,6 +958,11 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
|
|||||||
rt5682->jack_type = SND_JACK_HEADPHONE;
|
rt5682->jack_type = SND_JACK_HEADPHONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snd_soc_component_update_bits(component,
|
||||||
|
RT5682_HP_CHARGE_PUMP_1,
|
||||||
|
RT5682_OSW_L_MASK | RT5682_OSW_R_MASK,
|
||||||
|
RT5682_OSW_L_EN | RT5682_OSW_R_EN);
|
||||||
} else {
|
} else {
|
||||||
rt5682_enable_push_button_irq(component, false);
|
rt5682_enable_push_button_irq(component, false);
|
||||||
snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
|
snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
|
||||||
|
|||||||
@@ -265,12 +265,20 @@ static int fsl_mqs_remove(struct platform_device *pdev)
|
|||||||
static int fsl_mqs_runtime_resume(struct device *dev)
|
static int fsl_mqs_runtime_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct fsl_mqs *mqs_priv = dev_get_drvdata(dev);
|
struct fsl_mqs *mqs_priv = dev_get_drvdata(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (mqs_priv->ipg)
|
ret = clk_prepare_enable(mqs_priv->ipg);
|
||||||
clk_prepare_enable(mqs_priv->ipg);
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to enable ipg clock\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (mqs_priv->mclk)
|
ret = clk_prepare_enable(mqs_priv->mclk);
|
||||||
clk_prepare_enable(mqs_priv->mclk);
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to enable mclk clock\n");
|
||||||
|
clk_disable_unprepare(mqs_priv->ipg);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (mqs_priv->use_gpr)
|
if (mqs_priv->use_gpr)
|
||||||
regmap_write(mqs_priv->regmap, IOMUXC_GPR2,
|
regmap_write(mqs_priv->regmap, IOMUXC_GPR2,
|
||||||
@@ -292,10 +300,7 @@ static int fsl_mqs_runtime_suspend(struct device *dev)
|
|||||||
regmap_read(mqs_priv->regmap, REG_MQS_CTRL,
|
regmap_read(mqs_priv->regmap, REG_MQS_CTRL,
|
||||||
&mqs_priv->reg_mqs_ctrl);
|
&mqs_priv->reg_mqs_ctrl);
|
||||||
|
|
||||||
if (mqs_priv->mclk)
|
|
||||||
clk_disable_unprepare(mqs_priv->mclk);
|
clk_disable_unprepare(mqs_priv->mclk);
|
||||||
|
|
||||||
if (mqs_priv->ipg)
|
|
||||||
clk_disable_unprepare(mqs_priv->ipg);
|
clk_disable_unprepare(mqs_priv->ipg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -678,8 +678,9 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
|
|||||||
struct regmap *regs = ssi->regs;
|
struct regmap *regs = ssi->regs;
|
||||||
u32 pm = 999, div2, psr, stccr, mask, afreq, factor, i;
|
u32 pm = 999, div2, psr, stccr, mask, afreq, factor, i;
|
||||||
unsigned long clkrate, baudrate, tmprate;
|
unsigned long clkrate, baudrate, tmprate;
|
||||||
unsigned int slots = params_channels(hw_params);
|
unsigned int channels = params_channels(hw_params);
|
||||||
unsigned int slot_width = 32;
|
unsigned int slot_width = params_width(hw_params);
|
||||||
|
unsigned int slots = 2;
|
||||||
u64 sub, savesub = 100000;
|
u64 sub, savesub = 100000;
|
||||||
unsigned int freq;
|
unsigned int freq;
|
||||||
bool baudclk_is_used;
|
bool baudclk_is_used;
|
||||||
@@ -688,10 +689,14 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
|
|||||||
/* Override slots and slot_width if being specifically set... */
|
/* Override slots and slot_width if being specifically set... */
|
||||||
if (ssi->slots)
|
if (ssi->slots)
|
||||||
slots = ssi->slots;
|
slots = ssi->slots;
|
||||||
/* ...but keep 32 bits if slots is 2 -- I2S Master mode */
|
if (ssi->slot_width)
|
||||||
if (ssi->slot_width && slots != 2)
|
|
||||||
slot_width = ssi->slot_width;
|
slot_width = ssi->slot_width;
|
||||||
|
|
||||||
|
/* ...but force 32 bits for stereo audio using I2S Master Mode */
|
||||||
|
if (channels == 2 &&
|
||||||
|
(ssi->i2s_net & SSI_SCR_I2S_MODE_MASK) == SSI_SCR_I2S_MODE_MASTER)
|
||||||
|
slot_width = 32;
|
||||||
|
|
||||||
/* Generate bit clock based on the slot number and slot width */
|
/* Generate bit clock based on the slot number and slot width */
|
||||||
freq = slots * slot_width * params_rate(hw_params);
|
freq = slots * slot_width * params_rate(hw_params);
|
||||||
|
|
||||||
|
|||||||
@@ -492,7 +492,7 @@ config SND_SOC_INTEL_SOF_PCM512x_MACH
|
|||||||
|
|
||||||
endif ## SND_SOC_SOF_HDA_LINK || SND_SOC_SOF_BAYTRAIL
|
endif ## SND_SOC_SOF_HDA_LINK || SND_SOC_SOF_BAYTRAIL
|
||||||
|
|
||||||
if (SND_SOC_SOF_COMETLAKE_LP && SND_SOC_SOF_HDA_LINK)
|
if (SND_SOC_SOF_COMETLAKE && SND_SOC_SOF_HDA_LINK)
|
||||||
|
|
||||||
config SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH
|
config SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH
|
||||||
tristate "CML_LP with DA7219 and MAX98357A in I2S Mode"
|
tristate "CML_LP with DA7219 and MAX98357A in I2S Mode"
|
||||||
@@ -520,7 +520,7 @@ config SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH
|
|||||||
Say Y if you have such a device.
|
Say Y if you have such a device.
|
||||||
If unsure select "N".
|
If unsure select "N".
|
||||||
|
|
||||||
endif ## SND_SOC_SOF_COMETLAKE_LP && SND_SOC_SOF_HDA_LINK
|
endif ## SND_SOC_SOF_COMETLAKE && SND_SOC_SOF_HDA_LINK
|
||||||
|
|
||||||
if SND_SOC_SOF_JASPERLAKE
|
if SND_SOC_SOF_JASPERLAKE
|
||||||
|
|
||||||
|
|||||||
@@ -253,21 +253,20 @@ static int cht_codec_fixup(struct snd_soc_pcm_runtime *rtd,
|
|||||||
params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
|
params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Default mode for SSP configuration is TDM 4 slot
|
* Default mode for SSP configuration is TDM 4 slot. One board/design,
|
||||||
|
* the Lenovo Miix 2 10 uses not 1 but 2 codecs connected to SSP2. The
|
||||||
|
* second piggy-backed, output-only codec is inside the keyboard-dock
|
||||||
|
* (which has extra speakers). Unlike the main rt5672 codec, we cannot
|
||||||
|
* configure this codec, it is hard coded to use 2 channel 24 bit I2S.
|
||||||
|
* Since we only support 2 channels anyways, there is no need for TDM
|
||||||
|
* on any cht-bsw-rt5672 designs. So we simply use I2S 2ch everywhere.
|
||||||
*/
|
*/
|
||||||
ret = snd_soc_dai_set_fmt(asoc_rtd_to_codec(rtd, 0),
|
ret = snd_soc_dai_set_fmt(asoc_rtd_to_cpu(rtd, 0),
|
||||||
SND_SOC_DAIFMT_DSP_B |
|
SND_SOC_DAIFMT_I2S |
|
||||||
SND_SOC_DAIFMT_IB_NF |
|
SND_SOC_DAIFMT_NB_NF |
|
||||||
SND_SOC_DAIFMT_CBS_CFS);
|
SND_SOC_DAIFMT_CBS_CFS);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(rtd->dev, "can't set format to TDM %d\n", ret);
|
dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TDM 4 slots 24 bit, set Rx & Tx bitmask to 4 active slots */
|
|
||||||
ret = snd_soc_dai_set_tdm_slot(asoc_rtd_to_codec(rtd, 0), 0xF, 0xF, 4, 24);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(rtd->dev, "can't set codec TDM slot %d\n", ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ config SND_SOC_QDSP6_ASM_DAI
|
|||||||
|
|
||||||
config SND_SOC_QDSP6
|
config SND_SOC_QDSP6
|
||||||
tristate "SoC ALSA audio driver for QDSP6"
|
tristate "SoC ALSA audio driver for QDSP6"
|
||||||
depends on QCOM_APR && HAS_DMA
|
depends on QCOM_APR
|
||||||
select SND_SOC_QDSP6_COMMON
|
select SND_SOC_QDSP6_COMMON
|
||||||
select SND_SOC_QDSP6_CORE
|
select SND_SOC_QDSP6_CORE
|
||||||
select SND_SOC_QDSP6_AFE
|
select SND_SOC_QDSP6_AFE
|
||||||
|
|||||||
@@ -590,8 +590,10 @@ static int rockchip_pdm_resume(struct device *dev)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(dev);
|
ret = pm_runtime_get_sync(dev);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
|
pm_runtime_put(dev);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = regcache_sync(pdm->regmap);
|
ret = regcache_sync(pdm->regmap);
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ config SND_SOC_SOF_INTEL_PCI
|
|||||||
select SND_SOC_SOF_CANNONLAKE if SND_SOC_SOF_CANNONLAKE_SUPPORT
|
select SND_SOC_SOF_CANNONLAKE if SND_SOC_SOF_CANNONLAKE_SUPPORT
|
||||||
select SND_SOC_SOF_COFFEELAKE if SND_SOC_SOF_COFFEELAKE_SUPPORT
|
select SND_SOC_SOF_COFFEELAKE if SND_SOC_SOF_COFFEELAKE_SUPPORT
|
||||||
select SND_SOC_SOF_ICELAKE if SND_SOC_SOF_ICELAKE_SUPPORT
|
select SND_SOC_SOF_ICELAKE if SND_SOC_SOF_ICELAKE_SUPPORT
|
||||||
select SND_SOC_SOF_COMETLAKE_LP if SND_SOC_SOF_COMETLAKE_LP_SUPPORT
|
select SND_SOC_SOF_COMETLAKE if SND_SOC_SOF_COMETLAKE_SUPPORT
|
||||||
select SND_SOC_SOF_COMETLAKE_H if SND_SOC_SOF_COMETLAKE_H_SUPPORT
|
|
||||||
select SND_SOC_SOF_TIGERLAKE if SND_SOC_SOF_TIGERLAKE_SUPPORT
|
select SND_SOC_SOF_TIGERLAKE if SND_SOC_SOF_TIGERLAKE_SUPPORT
|
||||||
select SND_SOC_SOF_ELKHARTLAKE if SND_SOC_SOF_ELKHARTLAKE_SUPPORT
|
select SND_SOC_SOF_ELKHARTLAKE if SND_SOC_SOF_ELKHARTLAKE_SUPPORT
|
||||||
select SND_SOC_SOF_JASPERLAKE if SND_SOC_SOF_JASPERLAKE_SUPPORT
|
select SND_SOC_SOF_JASPERLAKE if SND_SOC_SOF_JASPERLAKE_SUPPORT
|
||||||
@@ -201,34 +200,22 @@ config SND_SOC_SOF_ICELAKE
|
|||||||
This option is not user-selectable but automagically handled by
|
This option is not user-selectable but automagically handled by
|
||||||
'select' statements at a higher level
|
'select' statements at a higher level
|
||||||
|
|
||||||
config SND_SOC_SOF_COMETLAKE_LP
|
config SND_SOC_SOF_COMETLAKE
|
||||||
tristate
|
tristate
|
||||||
select SND_SOC_SOF_HDA_COMMON
|
select SND_SOC_SOF_HDA_COMMON
|
||||||
help
|
help
|
||||||
This option is not user-selectable but automagically handled by
|
This option is not user-selectable but automagically handled by
|
||||||
'select' statements at a higher level
|
'select' statements at a higher level
|
||||||
|
|
||||||
|
config SND_SOC_SOF_COMETLAKE_SUPPORT
|
||||||
|
bool
|
||||||
|
|
||||||
config SND_SOC_SOF_COMETLAKE_LP_SUPPORT
|
config SND_SOC_SOF_COMETLAKE_LP_SUPPORT
|
||||||
bool "SOF support for CometLake-LP"
|
bool "SOF support for CometLake"
|
||||||
|
select SND_SOC_SOF_COMETLAKE_SUPPORT
|
||||||
help
|
help
|
||||||
This adds support for Sound Open Firmware for Intel(R) platforms
|
This adds support for Sound Open Firmware for Intel(R) platforms
|
||||||
using the Cometlake-LP processors.
|
using the Cometlake processors.
|
||||||
Say Y if you have such a device.
|
|
||||||
If unsure select "N".
|
|
||||||
|
|
||||||
config SND_SOC_SOF_COMETLAKE_H
|
|
||||||
tristate
|
|
||||||
select SND_SOC_SOF_HDA_COMMON
|
|
||||||
help
|
|
||||||
This option is not user-selectable but automagically handled by
|
|
||||||
'select' statements at a higher level
|
|
||||||
|
|
||||||
config SND_SOC_SOF_COMETLAKE_H_SUPPORT
|
|
||||||
bool "SOF support for CometLake-H"
|
|
||||||
help
|
|
||||||
This adds support for Sound Open Firmware for Intel(R) platforms
|
|
||||||
using the Cometlake-H processors.
|
|
||||||
Say Y if you have such a device.
|
|
||||||
If unsure select "N".
|
If unsure select "N".
|
||||||
|
|
||||||
config SND_SOC_SOF_TIGERLAKE_SUPPORT
|
config SND_SOC_SOF_TIGERLAKE_SUPPORT
|
||||||
|
|||||||
@@ -151,9 +151,7 @@ static const struct sof_dev_desc cfl_desc = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP) || \
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE)
|
||||||
IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_H)
|
|
||||||
|
|
||||||
static const struct sof_dev_desc cml_desc = {
|
static const struct sof_dev_desc cml_desc = {
|
||||||
.machines = snd_soc_acpi_intel_cml_machines,
|
.machines = snd_soc_acpi_intel_cml_machines,
|
||||||
.alt_machines = snd_soc_acpi_intel_cml_sdw_machines,
|
.alt_machines = snd_soc_acpi_intel_cml_sdw_machines,
|
||||||
@@ -411,8 +409,11 @@ static const struct pci_device_id sof_pci_ids[] = {
|
|||||||
.driver_data = (unsigned long)&cfl_desc},
|
.driver_data = (unsigned long)&cfl_desc},
|
||||||
#endif
|
#endif
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_ICELAKE)
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_ICELAKE)
|
||||||
{ PCI_DEVICE(0x8086, 0x34C8),
|
{ PCI_DEVICE(0x8086, 0x34C8), /* ICL-LP */
|
||||||
.driver_data = (unsigned long)&icl_desc},
|
.driver_data = (unsigned long)&icl_desc},
|
||||||
|
{ PCI_DEVICE(0x8086, 0x3dc8), /* ICL-H */
|
||||||
|
.driver_data = (unsigned long)&icl_desc},
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_JASPERLAKE)
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_JASPERLAKE)
|
||||||
{ PCI_DEVICE(0x8086, 0x38c8),
|
{ PCI_DEVICE(0x8086, 0x38c8),
|
||||||
@@ -420,17 +421,20 @@ static const struct pci_device_id sof_pci_ids[] = {
|
|||||||
{ PCI_DEVICE(0x8086, 0x4dc8),
|
{ PCI_DEVICE(0x8086, 0x4dc8),
|
||||||
.driver_data = (unsigned long)&jsl_desc},
|
.driver_data = (unsigned long)&jsl_desc},
|
||||||
#endif
|
#endif
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP)
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE)
|
||||||
{ PCI_DEVICE(0x8086, 0x02c8),
|
{ PCI_DEVICE(0x8086, 0x02c8), /* CML-LP */
|
||||||
.driver_data = (unsigned long)&cml_desc},
|
.driver_data = (unsigned long)&cml_desc},
|
||||||
#endif
|
{ PCI_DEVICE(0x8086, 0x06c8), /* CML-H */
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_H)
|
.driver_data = (unsigned long)&cml_desc},
|
||||||
{ PCI_DEVICE(0x8086, 0x06c8),
|
{ PCI_DEVICE(0x8086, 0xa3f0), /* CML-S */
|
||||||
.driver_data = (unsigned long)&cml_desc},
|
.driver_data = (unsigned long)&cml_desc},
|
||||||
#endif
|
#endif
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_TIGERLAKE)
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_TIGERLAKE)
|
||||||
{ PCI_DEVICE(0x8086, 0xa0c8),
|
{ PCI_DEVICE(0x8086, 0xa0c8), /* TGL-LP */
|
||||||
.driver_data = (unsigned long)&tgl_desc},
|
.driver_data = (unsigned long)&tgl_desc},
|
||||||
|
{ PCI_DEVICE(0x8086, 0x43c8), /* TGL-H */
|
||||||
|
.driver_data = (unsigned long)&tgl_desc},
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_ELKHARTLAKE)
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_ELKHARTLAKE)
|
||||||
{ PCI_DEVICE(0x8086, 0x4b55),
|
{ PCI_DEVICE(0x8086, 0x4b55),
|
||||||
|
|||||||
Reference in New Issue
Block a user