mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-linus' into for-next
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
commit
473d5ae82d
|
@ -1571,6 +1571,14 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
|
|||
return -ENOMEM;
|
||||
kctl->id.device = dev;
|
||||
kctl->id.subdevice = substr;
|
||||
|
||||
/* Add the control before copying the id so that
|
||||
* the numid field of the id is set in the copy.
|
||||
*/
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
switch (idx) {
|
||||
case ACTIVE_IDX:
|
||||
setup->active_id = kctl->id;
|
||||
|
@ -1587,9 +1595,6 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -989,8 +989,12 @@ static int azx_prepare(struct device *dev)
|
|||
struct snd_card *card = dev_get_drvdata(dev);
|
||||
struct azx *chip;
|
||||
|
||||
if (!azx_is_pm_ready(card))
|
||||
return 0;
|
||||
|
||||
chip = card->private_data;
|
||||
chip->pm_prepared = 1;
|
||||
snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
|
||||
|
||||
flush_work(&azx_bus(chip)->unsol_work);
|
||||
|
||||
|
@ -1005,7 +1009,11 @@ static void azx_complete(struct device *dev)
|
|||
struct snd_card *card = dev_get_drvdata(dev);
|
||||
struct azx *chip;
|
||||
|
||||
if (!azx_is_pm_ready(card))
|
||||
return;
|
||||
|
||||
chip = card->private_data;
|
||||
snd_power_change_state(card, SNDRV_CTL_POWER_D0);
|
||||
chip->pm_prepared = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -944,6 +944,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x829a, "HP 800 G3 DM", CXT_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x8402, "HP ProBook 645 G4", CXT_FIXUP_MUTE_LED_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x8427, "HP ZBook Studio G5", CXT_FIXUP_HP_ZBOOK_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x844f, "HP ZBook Studio G5", CXT_FIXUP_HP_ZBOOK_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8455, "HP Z2 G4", CXT_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x8456, "HP Z2 G4 SFF", CXT_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x8457, "HP Z2 G4 mini", CXT_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
|
|
|
@ -3934,6 +3934,15 @@ static void alc271_fixup_dmic(struct hda_codec *codec,
|
|||
snd_hda_sequence_write(codec, verbs);
|
||||
}
|
||||
|
||||
/* Fix the speaker amp after resume, etc */
|
||||
static void alc269vb_fixup_aspire_e1_coef(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix,
|
||||
int action)
|
||||
{
|
||||
if (action == HDA_FIXUP_ACT_INIT)
|
||||
alc_update_coef_idx(codec, 0x0d, 0x6000, 0x6000);
|
||||
}
|
||||
|
||||
static void alc269_fixup_pcm_44k(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
|
@ -5263,7 +5272,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
|||
case 0x10ec0274:
|
||||
case 0x10ec0294:
|
||||
alc_process_coef_fw(codec, coef0274);
|
||||
msleep(80);
|
||||
msleep(850);
|
||||
val = alc_read_coef_idx(codec, 0x46);
|
||||
is_ctia = (val & 0x00f0) == 0x00f0;
|
||||
break;
|
||||
|
@ -5447,6 +5456,7 @@ static void alc_update_headset_jack_cb(struct hda_codec *codec,
|
|||
struct hda_jack_callback *jack)
|
||||
{
|
||||
snd_hda_gen_hp_automute(codec, jack);
|
||||
alc_update_headset_mode(codec);
|
||||
}
|
||||
|
||||
static void alc_probe_headset_mode(struct hda_codec *codec)
|
||||
|
@ -6307,6 +6317,7 @@ enum {
|
|||
ALC283_FIXUP_HEADSET_MIC,
|
||||
ALC255_FIXUP_MIC_MUTE_LED,
|
||||
ALC282_FIXUP_ASPIRE_V5_PINS,
|
||||
ALC269VB_FIXUP_ASPIRE_E1_COEF,
|
||||
ALC280_FIXUP_HP_GPIO4,
|
||||
ALC286_FIXUP_HP_GPIO_LED,
|
||||
ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
|
||||
|
@ -6985,6 +6996,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
{ },
|
||||
},
|
||||
},
|
||||
[ALC269VB_FIXUP_ASPIRE_E1_COEF] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc269vb_fixup_aspire_e1_coef,
|
||||
},
|
||||
[ALC280_FIXUP_HP_GPIO4] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc280_fixup_hp_gpio4,
|
||||
|
@ -7907,6 +7922,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
||||
SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
|
||||
SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
|
||||
SND_PCI_QUIRK(0x1025, 0x0840, "Acer Aspire E1", ALC269VB_FIXUP_ASPIRE_E1_COEF),
|
||||
SND_PCI_QUIRK(0x1025, 0x101c, "Acer Veriton N2510G", ALC269_FIXUP_LIFEBOOK),
|
||||
SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
|
||||
|
@ -8064,6 +8080,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
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, 0x87f2, "HP ProBook 640 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),
|
||||
|
@ -8400,6 +8417,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
|||
{.id = ALC283_FIXUP_HEADSET_MIC, .name = "alc283-headset"},
|
||||
{.id = ALC255_FIXUP_MIC_MUTE_LED, .name = "alc255-dell-mute"},
|
||||
{.id = ALC282_FIXUP_ASPIRE_V5_PINS, .name = "aspire-v5"},
|
||||
{.id = ALC269VB_FIXUP_ASPIRE_E1_COEF, .name = "aspire-e1-coef"},
|
||||
{.id = ALC280_FIXUP_HP_GPIO4, .name = "hp-gpio4"},
|
||||
{.id = ALC286_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
|
||||
{.id = ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY, .name = "hp-gpio2-hotkey"},
|
||||
|
|
|
@ -1348,8 +1348,10 @@ static int cygnus_ssp_probe(struct platform_device *pdev)
|
|||
&cygnus_ssp_dai[active_port_count]);
|
||||
|
||||
/* negative is err, 0 is active and good, 1 is disabled */
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
of_node_put(child_node);
|
||||
return err;
|
||||
}
|
||||
else if (!err) {
|
||||
dev_dbg(dev, "Activating DAI: %s\n",
|
||||
cygnus_ssp_dai[active_port_count].name);
|
||||
|
|
|
@ -3551,7 +3551,7 @@ static int rx_macro_probe(struct platform_device *pdev)
|
|||
|
||||
/* set MCLK and NPL rates */
|
||||
clk_set_rate(rx->clks[2].clk, MCLK_FREQ);
|
||||
clk_set_rate(rx->clks[3].clk, MCLK_FREQ);
|
||||
clk_set_rate(rx->clks[3].clk, 2 * MCLK_FREQ);
|
||||
|
||||
ret = clk_bulk_prepare_enable(RX_NUM_CLKS_MAX, rx->clks);
|
||||
if (ret)
|
||||
|
|
|
@ -1811,7 +1811,7 @@ static int tx_macro_probe(struct platform_device *pdev)
|
|||
|
||||
/* set MCLK and NPL rates */
|
||||
clk_set_rate(tx->clks[2].clk, MCLK_FREQ);
|
||||
clk_set_rate(tx->clks[3].clk, MCLK_FREQ);
|
||||
clk_set_rate(tx->clks[3].clk, 2 * MCLK_FREQ);
|
||||
|
||||
ret = clk_bulk_prepare_enable(TX_NUM_CLKS_MAX, tx->clks);
|
||||
if (ret)
|
||||
|
|
|
@ -446,6 +446,7 @@ static bool max98373_volatile_reg(struct device *dev, unsigned int reg)
|
|||
case MAX98373_R2054_MEAS_ADC_PVDD_CH_READBACK:
|
||||
case MAX98373_R2055_MEAS_ADC_THERM_CH_READBACK:
|
||||
case MAX98373_R20B6_BDE_CUR_STATE_READBACK:
|
||||
case MAX98373_R20FF_GLOBAL_SHDN:
|
||||
case MAX98373_R21FF_REV_ID:
|
||||
return true;
|
||||
default:
|
||||
|
|
|
@ -220,6 +220,7 @@ static bool max98373_volatile_reg(struct device *dev, unsigned int reg)
|
|||
case MAX98373_R2054_MEAS_ADC_PVDD_CH_READBACK:
|
||||
case MAX98373_R2055_MEAS_ADC_THERM_CH_READBACK:
|
||||
case MAX98373_R20B6_BDE_CUR_STATE_READBACK:
|
||||
case MAX98373_R20FF_GLOBAL_SHDN:
|
||||
case MAX98373_R21FF_REV_ID:
|
||||
/* SoundWire Control Port Registers */
|
||||
case MAX98373_R0040_SCP_INIT_STAT_1 ... MAX98373_R0070_SCP_FRAME_CTLR:
|
||||
|
|
|
@ -28,11 +28,13 @@ static int max98373_dac_event(struct snd_soc_dapm_widget *w,
|
|||
regmap_update_bits(max98373->regmap,
|
||||
MAX98373_R20FF_GLOBAL_SHDN,
|
||||
MAX98373_GLOBAL_EN_MASK, 1);
|
||||
usleep_range(30000, 31000);
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
regmap_update_bits(max98373->regmap,
|
||||
MAX98373_R20FF_GLOBAL_SHDN,
|
||||
MAX98373_GLOBAL_EN_MASK, 0);
|
||||
usleep_range(30000, 31000);
|
||||
max98373->tdm_mode = false;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -707,7 +707,13 @@ int wm8960_configure_pll(struct snd_soc_component *component, int freq_in,
|
|||
best_freq_out = -EINVAL;
|
||||
*sysclk_idx = *dac_idx = *bclk_idx = -1;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
|
||||
/*
|
||||
* From Datasheet, the PLL performs best when f2 is between
|
||||
* 90MHz and 100MHz, the desired sysclk output is 11.2896MHz
|
||||
* or 12.288MHz, then sysclkdiv = 2 is the best choice.
|
||||
* So search sysclk_divs from 2 to 1 other than from 1 to 2.
|
||||
*/
|
||||
for (i = ARRAY_SIZE(sysclk_divs) - 1; i >= 0; --i) {
|
||||
if (sysclk_divs[i] == -1)
|
||||
continue;
|
||||
for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) {
|
||||
|
|
|
@ -519,11 +519,13 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,
|
|||
ESAI_SAICR_SYNC, esai_priv->synchronous ?
|
||||
ESAI_SAICR_SYNC : 0);
|
||||
|
||||
/* Set a default slot number -- 2 */
|
||||
/* Set slots count */
|
||||
regmap_update_bits(esai_priv->regmap, REG_ESAI_TCCR,
|
||||
ESAI_xCCR_xDC_MASK, ESAI_xCCR_xDC(2));
|
||||
ESAI_xCCR_xDC_MASK,
|
||||
ESAI_xCCR_xDC(esai_priv->slots));
|
||||
regmap_update_bits(esai_priv->regmap, REG_ESAI_RCCR,
|
||||
ESAI_xCCR_xDC_MASK, ESAI_xCCR_xDC(2));
|
||||
ESAI_xCCR_xDC_MASK,
|
||||
ESAI_xCCR_xDC(esai_priv->slots));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -487,15 +487,15 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
|
|||
.stream_name = "Headset Playback",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Headset Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -505,8 +505,8 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
|
|||
.stream_name = "Deepbuffer Playback",
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.rates = SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
@ -399,7 +399,13 @@ int snd_sof_device_shutdown(struct device *dev)
|
|||
{
|
||||
struct snd_sof_dev *sdev = dev_get_drvdata(dev);
|
||||
|
||||
if (IS_ENABLED(CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE))
|
||||
cancel_work_sync(&sdev->probe_work);
|
||||
|
||||
if (sdev->fw_state == SOF_FW_BOOT_COMPLETE)
|
||||
return snd_sof_shutdown(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_sof_device_shutdown);
|
||||
|
||||
|
|
|
@ -27,9 +27,10 @@ static const struct snd_sof_debugfs_map apl_dsp_debugfs[] = {
|
|||
|
||||
/* apollolake ops */
|
||||
const struct snd_sof_dsp_ops sof_apl_ops = {
|
||||
/* probe and remove */
|
||||
/* probe/remove/shutdown */
|
||||
.probe = hda_dsp_probe,
|
||||
.remove = hda_dsp_remove,
|
||||
.shutdown = hda_dsp_shutdown,
|
||||
|
||||
/* Register IO */
|
||||
.write = sof_io_write,
|
||||
|
|
|
@ -232,9 +232,10 @@ void cnl_ipc_dump(struct snd_sof_dev *sdev)
|
|||
|
||||
/* cannonlake ops */
|
||||
const struct snd_sof_dsp_ops sof_cnl_ops = {
|
||||
/* probe and remove */
|
||||
/* probe/remove/shutdown */
|
||||
.probe = hda_dsp_probe,
|
||||
.remove = hda_dsp_remove,
|
||||
.shutdown = hda_dsp_shutdown,
|
||||
|
||||
/* Register IO */
|
||||
.write = sof_io_write,
|
||||
|
@ -349,22 +350,6 @@ const struct sof_intel_dsp_desc cnl_chip_info = {
|
|||
};
|
||||
EXPORT_SYMBOL_NS(cnl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
|
||||
|
||||
const struct sof_intel_dsp_desc ehl_chip_info = {
|
||||
/* Elkhartlake */
|
||||
.cores_num = 4,
|
||||
.init_core_mask = 1,
|
||||
.host_managed_cores_mask = BIT(0),
|
||||
.ipc_req = CNL_DSP_REG_HIPCIDR,
|
||||
.ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
|
||||
.ipc_ack = CNL_DSP_REG_HIPCIDA,
|
||||
.ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
|
||||
.ipc_ctl = CNL_DSP_REG_HIPCCTL,
|
||||
.rom_init_timeout = 300,
|
||||
.ssp_count = ICL_SSP_COUNT,
|
||||
.ssp_base_offset = CNL_SSP_BASE_OFFSET,
|
||||
};
|
||||
EXPORT_SYMBOL_NS(ehl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
|
||||
|
||||
const struct sof_intel_dsp_desc jsl_chip_info = {
|
||||
/* Jasperlake */
|
||||
.cores_num = 2,
|
||||
|
|
|
@ -226,11 +226,18 @@ bool hda_dsp_core_is_enabled(struct snd_sof_dev *sdev,
|
|||
|
||||
val = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPCS);
|
||||
|
||||
is_enable = (val & HDA_DSP_ADSPCS_CPA_MASK(core_mask)) &&
|
||||
(val & HDA_DSP_ADSPCS_SPA_MASK(core_mask)) &&
|
||||
#define MASK_IS_EQUAL(v, m, field) ({ \
|
||||
u32 _m = field(m); \
|
||||
((v) & _m) == _m; \
|
||||
})
|
||||
|
||||
is_enable = MASK_IS_EQUAL(val, core_mask, HDA_DSP_ADSPCS_CPA_MASK) &&
|
||||
MASK_IS_EQUAL(val, core_mask, HDA_DSP_ADSPCS_SPA_MASK) &&
|
||||
!(val & HDA_DSP_ADSPCS_CRST_MASK(core_mask)) &&
|
||||
!(val & HDA_DSP_ADSPCS_CSTALL_MASK(core_mask));
|
||||
|
||||
#undef MASK_IS_EQUAL
|
||||
|
||||
dev_dbg(sdev->dev, "DSP core(s) enabled? %d : core_mask %x\n",
|
||||
is_enable, core_mask);
|
||||
|
||||
|
@ -885,6 +892,12 @@ int hda_dsp_suspend(struct snd_sof_dev *sdev, u32 target_state)
|
|||
return snd_sof_dsp_set_power_state(sdev, &target_dsp_state);
|
||||
}
|
||||
|
||||
int hda_dsp_shutdown(struct snd_sof_dev *sdev)
|
||||
{
|
||||
sdev->system_suspend_target = SOF_SUSPEND_S3;
|
||||
return snd_sof_suspend(sdev->dev);
|
||||
}
|
||||
|
||||
int hda_dsp_set_hw_params_upon_resume(struct snd_sof_dev *sdev)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
|
|
|
@ -517,6 +517,7 @@ int hda_dsp_resume(struct snd_sof_dev *sdev);
|
|||
int hda_dsp_runtime_suspend(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_runtime_resume(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_runtime_idle(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_shutdown(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_set_hw_params_upon_resume(struct snd_sof_dev *sdev);
|
||||
void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags);
|
||||
void hda_ipc_dump(struct snd_sof_dev *sdev);
|
||||
|
|
|
@ -26,9 +26,10 @@ static const struct snd_sof_debugfs_map icl_dsp_debugfs[] = {
|
|||
|
||||
/* Icelake ops */
|
||||
const struct snd_sof_dsp_ops sof_icl_ops = {
|
||||
/* probe and remove */
|
||||
/* probe/remove/shutdown */
|
||||
.probe = hda_dsp_probe,
|
||||
.remove = hda_dsp_remove,
|
||||
.shutdown = hda_dsp_shutdown,
|
||||
|
||||
/* Register IO */
|
||||
.write = sof_io_write,
|
||||
|
|
|
@ -65,7 +65,7 @@ static const struct sof_dev_desc ehl_desc = {
|
|||
.default_tplg_path = "intel/sof-tplg",
|
||||
.default_fw_filename = "sof-ehl.ri",
|
||||
.nocodec_tplg_filename = "sof-ehl-nocodec.tplg",
|
||||
.ops = &sof_cnl_ops,
|
||||
.ops = &sof_tgl_ops,
|
||||
};
|
||||
|
||||
static const struct sof_dev_desc adls_desc = {
|
||||
|
|
|
@ -25,7 +25,7 @@ const struct snd_sof_dsp_ops sof_tgl_ops = {
|
|||
/* probe/remove/shutdown */
|
||||
.probe = hda_dsp_probe,
|
||||
.remove = hda_dsp_remove,
|
||||
.shutdown = hda_dsp_remove,
|
||||
.shutdown = hda_dsp_shutdown,
|
||||
|
||||
/* Register IO */
|
||||
.write = sof_io_write,
|
||||
|
@ -156,6 +156,22 @@ const struct sof_intel_dsp_desc tglh_chip_info = {
|
|||
};
|
||||
EXPORT_SYMBOL_NS(tglh_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
|
||||
|
||||
const struct sof_intel_dsp_desc ehl_chip_info = {
|
||||
/* Elkhartlake */
|
||||
.cores_num = 4,
|
||||
.init_core_mask = 1,
|
||||
.host_managed_cores_mask = BIT(0),
|
||||
.ipc_req = CNL_DSP_REG_HIPCIDR,
|
||||
.ipc_req_mask = CNL_DSP_REG_HIPCIDR_BUSY,
|
||||
.ipc_ack = CNL_DSP_REG_HIPCIDA,
|
||||
.ipc_ack_mask = CNL_DSP_REG_HIPCIDA_DONE,
|
||||
.ipc_ctl = CNL_DSP_REG_HIPCCTL,
|
||||
.rom_init_timeout = 300,
|
||||
.ssp_count = ICL_SSP_COUNT,
|
||||
.ssp_base_offset = CNL_SSP_BASE_OFFSET,
|
||||
};
|
||||
EXPORT_SYMBOL_NS(ehl_chip_info, SND_SOC_SOF_INTEL_HDA_COMMON);
|
||||
|
||||
const struct sof_intel_dsp_desc adls_chip_info = {
|
||||
/* Alderlake-S */
|
||||
.cores_num = 2,
|
||||
|
|
|
@ -1364,6 +1364,7 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->name = "sun4i-codec";
|
||||
card->dapm_widgets = sun4i_codec_card_dapm_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sun4i_codec_card_dapm_widgets);
|
||||
|
@ -1396,6 +1397,7 @@ static struct snd_soc_card *sun6i_codec_create_card(struct device *dev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->name = "A31 Audio Codec";
|
||||
card->dapm_widgets = sun6i_codec_card_dapm_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
|
||||
|
@ -1449,6 +1451,7 @@ static struct snd_soc_card *sun8i_a23_codec_create_card(struct device *dev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->name = "A23 Audio Codec";
|
||||
card->dapm_widgets = sun6i_codec_card_dapm_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
|
||||
|
@ -1487,6 +1490,7 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->name = "H3 Audio Codec";
|
||||
card->dapm_widgets = sun6i_codec_card_dapm_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
|
||||
|
@ -1525,6 +1529,7 @@ static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
card->dev = dev;
|
||||
card->owner = THIS_MODULE;
|
||||
card->name = "V3s Audio Codec";
|
||||
card->dapm_widgets = sun6i_codec_card_dapm_widgets;
|
||||
card->num_dapm_widgets = ARRAY_SIZE(sun6i_codec_card_dapm_widgets);
|
||||
|
|
|
@ -1532,6 +1532,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
|
|||
case USB_ID(0x21b4, 0x0081): /* AudioQuest DragonFly */
|
||||
case USB_ID(0x2912, 0x30c8): /* Audioengine D1 */
|
||||
case USB_ID(0x413c, 0xa506): /* Dell AE515 sound bar */
|
||||
case USB_ID(0x046d, 0x084c): /* Logitech ConferenceCam Connect */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue