mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 04:34:08 +08:00
ASoC: Fixes for v5.6
A collection of updates for bugs fixed since the initial pull request, the most important one being the addition of COMMON_CLK for wcd934x which is needed for MFD to be merged. -----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAl46jnATHGJyb29uaWVA a2VybmVsLm9yZwAKCRAk1otyXVSH0FfTB/9pn+BR2PZWE349/Etdj4Tb0mHO3mfG 7sptuPYCXrFRJ82HPcSIIY8nUMBP+lYciIBE4Dn09QDxwPALFuEuzcM7XmJpJIKJ Vg9ooyYC4/59ijQJXFGR61Xaf30PcvdxE1sC3+SEt6ROn9C/whZHFzpnPJgmeFbq LIVI2ne/QpPQ+fozvUjkr8nOrEbLIhH6DeCRKExmQ5PYnM7fO//s51HmCUOAxQwJ FvEH2NCZwvGA43xSYeAdWfE1C3DgdEIT1VKEfeA+Va2tjwPz64mtA6xbaNW99xV6 5/ii/c1x3Yjvy+F6IAqrmwCDZWQJ+xIgy4nbNLd2V8t1alYKWz22aVOr =qO+a -----END PGP SIGNATURE----- Merge tag 'asoc-v5.6-2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus ASoC: Fixes for v5.6 A collection of updates for bugs fixed since the initial pull request, the most important one being the addition of COMMON_CLK for wcd934x which is needed for MFD to be merged.
This commit is contained in:
commit
9db0288273
@ -13947,7 +13947,6 @@ F: include/linux/platform_data/rtc-*
|
||||
F: tools/testing/selftests/rtc/
|
||||
|
||||
REALTEK AUDIO CODECS
|
||||
M: Bard Liao <bardliao@realtek.com>
|
||||
M: Oder Chiou <oder_chiou@realtek.com>
|
||||
S: Maintained
|
||||
F: sound/soc/codecs/rt*
|
||||
|
@ -234,30 +234,32 @@ static int acp3x_i2s_trigger(struct snd_pcm_substream *substream,
|
||||
switch (rtd->i2s_instance) {
|
||||
case I2S_BT_INSTANCE:
|
||||
reg_val = mmACP_BTTDM_ITER;
|
||||
ier_val = mmACP_BTTDM_IER;
|
||||
break;
|
||||
case I2S_SP_INSTANCE:
|
||||
default:
|
||||
reg_val = mmACP_I2STDM_ITER;
|
||||
ier_val = mmACP_I2STDM_IER;
|
||||
}
|
||||
|
||||
} else {
|
||||
switch (rtd->i2s_instance) {
|
||||
case I2S_BT_INSTANCE:
|
||||
reg_val = mmACP_BTTDM_IRER;
|
||||
ier_val = mmACP_BTTDM_IER;
|
||||
break;
|
||||
case I2S_SP_INSTANCE:
|
||||
default:
|
||||
reg_val = mmACP_I2STDM_IRER;
|
||||
ier_val = mmACP_I2STDM_IER;
|
||||
}
|
||||
}
|
||||
val = rv_readl(rtd->acp3x_base + reg_val);
|
||||
val = val & ~BIT(0);
|
||||
rv_writel(val, rtd->acp3x_base + reg_val);
|
||||
rv_writel(0, rtd->acp3x_base + ier_val);
|
||||
|
||||
if (!(rv_readl(rtd->acp3x_base + mmACP_BTTDM_ITER) & BIT(0)) &&
|
||||
!(rv_readl(rtd->acp3x_base + mmACP_BTTDM_IRER) & BIT(0)))
|
||||
rv_writel(0, rtd->acp3x_base + mmACP_BTTDM_IER);
|
||||
if (!(rv_readl(rtd->acp3x_base + mmACP_I2STDM_ITER) & BIT(0)) &&
|
||||
!(rv_readl(rtd->acp3x_base + mmACP_I2STDM_IRER) & BIT(0)))
|
||||
rv_writel(0, rtd->acp3x_base + mmACP_I2STDM_IER);
|
||||
ret = 0;
|
||||
break;
|
||||
default:
|
||||
|
@ -349,13 +349,6 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
||||
component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
|
||||
adata = dev_get_drvdata(component->dev);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/* Disable ACP irq, when the current stream is being closed and
|
||||
* another stream is also not active.
|
||||
@ -363,6 +356,13 @@ static int acp3x_dma_close(struct snd_soc_component *component,
|
||||
if (!adata->play_stream && !adata->capture_stream &&
|
||||
!adata->i2ssp_play_stream && !adata->i2ssp_capture_stream)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1334,6 +1334,7 @@ config SND_SOC_WCD9335
|
||||
|
||||
config SND_SOC_WCD934X
|
||||
tristate "WCD9340/WCD9341 Codec"
|
||||
depends on COMMON_CLK
|
||||
depends on MFD_WCD934X
|
||||
help
|
||||
The WCD9340/9341 is a audio codec IC Integrated in
|
||||
|
@ -52,7 +52,8 @@ static void max98090_shdn_restore_locked(struct max98090_priv *max98090)
|
||||
|
||||
static void max98090_shdn_save(struct max98090_priv *max98090)
|
||||
{
|
||||
mutex_lock(&max98090->component->card->dapm_mutex);
|
||||
mutex_lock_nested(&max98090->component->card->dapm_mutex,
|
||||
SND_SOC_DAPM_CLASS_RUNTIME);
|
||||
max98090_shdn_save_locked(max98090);
|
||||
}
|
||||
|
||||
|
@ -389,7 +389,7 @@ static const char * const rt1015_boost_mode[] = {
|
||||
"Bypass", "Adaptive", "Fixed Adaptive"
|
||||
};
|
||||
|
||||
static const SOC_ENUM_SINGLE_DECL(rt1015_boost_mode_enum, 0, 0,
|
||||
static SOC_ENUM_SINGLE_DECL(rt1015_boost_mode_enum, 0, 0,
|
||||
rt1015_boost_mode);
|
||||
|
||||
static int rt1015_boost_mode_get(struct snd_kcontrol *kcontrol,
|
||||
|
@ -673,7 +673,7 @@ static const struct sdw_device_id rt1308_id[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdw, rt1308_id);
|
||||
|
||||
static int rt1308_dev_suspend(struct device *dev)
|
||||
static int __maybe_unused rt1308_dev_suspend(struct device *dev)
|
||||
{
|
||||
struct rt1308_sdw_priv *rt1308 = dev_get_drvdata(dev);
|
||||
|
||||
@ -687,7 +687,7 @@ static int rt1308_dev_suspend(struct device *dev)
|
||||
|
||||
#define RT1308_PROBE_TIMEOUT 2000
|
||||
|
||||
static int rt1308_dev_resume(struct device *dev)
|
||||
static int __maybe_unused rt1308_dev_resume(struct device *dev)
|
||||
{
|
||||
struct sdw_slave *slave = dev_to_sdw_dev(dev);
|
||||
struct rt1308_sdw_priv *rt1308 = dev_get_drvdata(dev);
|
||||
|
@ -486,7 +486,7 @@ static const struct sdw_device_id rt700_id[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdw, rt700_id);
|
||||
|
||||
static int rt700_dev_suspend(struct device *dev)
|
||||
static int __maybe_unused rt700_dev_suspend(struct device *dev)
|
||||
{
|
||||
struct rt700_priv *rt700 = dev_get_drvdata(dev);
|
||||
|
||||
@ -500,7 +500,7 @@ static int rt700_dev_suspend(struct device *dev)
|
||||
|
||||
#define RT700_PROBE_TIMEOUT 2000
|
||||
|
||||
static int rt700_dev_resume(struct device *dev)
|
||||
static int __maybe_unused rt700_dev_resume(struct device *dev)
|
||||
{
|
||||
struct sdw_slave *slave = dev_to_sdw_dev(dev);
|
||||
struct rt700_priv *rt700 = dev_get_drvdata(dev);
|
||||
|
@ -487,7 +487,7 @@ static const struct sdw_device_id rt711_id[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdw, rt711_id);
|
||||
|
||||
static int rt711_dev_suspend(struct device *dev)
|
||||
static int __maybe_unused rt711_dev_suspend(struct device *dev)
|
||||
{
|
||||
struct rt711_priv *rt711 = dev_get_drvdata(dev);
|
||||
|
||||
@ -501,7 +501,7 @@ static int rt711_dev_suspend(struct device *dev)
|
||||
|
||||
#define RT711_PROBE_TIMEOUT 2000
|
||||
|
||||
static int rt711_dev_resume(struct device *dev)
|
||||
static int __maybe_unused rt711_dev_resume(struct device *dev)
|
||||
{
|
||||
struct sdw_slave *slave = dev_to_sdw_dev(dev);
|
||||
struct rt711_priv *rt711 = dev_get_drvdata(dev);
|
||||
|
@ -549,7 +549,7 @@ static const struct sdw_device_id rt715_id[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(sdw, rt715_id);
|
||||
|
||||
static int rt715_dev_suspend(struct device *dev)
|
||||
static int __maybe_unused rt715_dev_suspend(struct device *dev)
|
||||
{
|
||||
struct rt715_priv *rt715 = dev_get_drvdata(dev);
|
||||
|
||||
@ -563,7 +563,7 @@ static int rt715_dev_suspend(struct device *dev)
|
||||
|
||||
#define RT715_PROBE_TIMEOUT 2000
|
||||
|
||||
static int rt715_dev_resume(struct device *dev)
|
||||
static int __maybe_unused rt715_dev_resume(struct device *dev)
|
||||
{
|
||||
struct sdw_slave *slave = dev_to_sdw_dev(dev);
|
||||
struct rt715_priv *rt715 = dev_get_drvdata(dev);
|
||||
|
@ -617,12 +617,15 @@ static int bxt_card_late_probe(struct snd_soc_card *card)
|
||||
snd_soc_dapm_add_routes(&card->dapm, broxton_map,
|
||||
ARRAY_SIZE(broxton_map));
|
||||
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct bxt_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
if (list_empty(&ctx->hdmi_pcm_list))
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->common_hdmi_codec_drv)
|
||||
if (ctx->common_hdmi_codec_drv) {
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct bxt_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
return hda_dsp_hdmi_build_controls(card, component);
|
||||
}
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
component = pcm->codec_dai->component;
|
||||
@ -643,9 +646,6 @@ static int bxt_card_late_probe(struct snd_soc_card *card)
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
}
|
||||
|
||||
|
@ -529,12 +529,15 @@ static int bxt_card_late_probe(struct snd_soc_card *card)
|
||||
int err, i = 0;
|
||||
char jack_name[NAME_SIZE];
|
||||
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct bxt_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
if (list_empty(&ctx->hdmi_pcm_list))
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->common_hdmi_codec_drv)
|
||||
if (ctx->common_hdmi_codec_drv) {
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct bxt_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
return hda_dsp_hdmi_build_controls(card, component);
|
||||
}
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
component = pcm->codec_dai->component;
|
||||
@ -555,9 +558,6 @@ static int bxt_card_late_probe(struct snd_soc_card *card)
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
}
|
||||
|
||||
|
@ -241,12 +241,15 @@ static int sof_card_late_probe(struct snd_soc_card *card)
|
||||
struct hdmi_pcm *pcm;
|
||||
int ret, i = 0;
|
||||
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
if (list_empty(&ctx->hdmi_pcm_list))
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->common_hdmi_codec_drv)
|
||||
if (ctx->common_hdmi_codec_drv) {
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
return hda_dsp_hdmi_build_controls(card, component);
|
||||
}
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
component = pcm->codec_dai->component;
|
||||
@ -265,8 +268,6 @@ static int sof_card_late_probe(struct snd_soc_card *card)
|
||||
|
||||
i++;
|
||||
}
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
}
|
||||
|
@ -534,15 +534,18 @@ static int glk_card_late_probe(struct snd_soc_card *card)
|
||||
struct snd_soc_component *component = NULL;
|
||||
char jack_name[NAME_SIZE];
|
||||
struct glk_hdmi_pcm *pcm;
|
||||
int err = 0;
|
||||
int err;
|
||||
int i = 0;
|
||||
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct glk_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
if (list_empty(&ctx->hdmi_pcm_list))
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->common_hdmi_codec_drv)
|
||||
if (ctx->common_hdmi_codec_drv) {
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct glk_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
return hda_dsp_hdmi_build_controls(card, component);
|
||||
}
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
component = pcm->codec_dai->component;
|
||||
@ -563,9 +566,6 @@ static int glk_card_late_probe(struct snd_soc_card *card)
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
}
|
||||
|
||||
|
@ -273,19 +273,22 @@ static int sof_card_late_probe(struct snd_soc_card *card)
|
||||
struct snd_soc_component *component = NULL;
|
||||
char jack_name[NAME_SIZE];
|
||||
struct sof_hdmi_pcm *pcm;
|
||||
int err = 0;
|
||||
int err;
|
||||
int i = 0;
|
||||
|
||||
/* HDMI is not supported by SOF on Baytrail/CherryTrail */
|
||||
if (is_legacy_cpu)
|
||||
return 0;
|
||||
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
if (list_empty(&ctx->hdmi_pcm_list))
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->common_hdmi_codec_drv)
|
||||
if (ctx->common_hdmi_codec_drv) {
|
||||
pcm = list_first_entry(&ctx->hdmi_pcm_list, struct sof_hdmi_pcm,
|
||||
head);
|
||||
component = pcm->codec_dai->component;
|
||||
return hda_dsp_hdmi_build_controls(card, component);
|
||||
}
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
component = pcm->codec_dai->component;
|
||||
@ -305,8 +308,6 @@ static int sof_card_late_probe(struct snd_soc_card *card)
|
||||
|
||||
i++;
|
||||
}
|
||||
if (!component)
|
||||
return -EINVAL;
|
||||
|
||||
return hdac_hdmi_jack_port_init(component, &card->dapm);
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ static const u64 rt1308_2_adr[] = {
|
||||
};
|
||||
|
||||
static const u64 rt715_3_adr[] = {
|
||||
0x000310025D715000
|
||||
0x000310025D071500
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr icl_3_in_1_default[] = {
|
||||
|
@ -224,12 +224,12 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
|
||||
if (ret < 0) {
|
||||
dev_err(sdev->dev,
|
||||
"error: failed to register DSP DAI driver %d\n", ret);
|
||||
goto fw_run_err;
|
||||
goto fw_trace_err;
|
||||
}
|
||||
|
||||
ret = snd_sof_machine_register(sdev, plat_data);
|
||||
if (ret < 0)
|
||||
goto fw_run_err;
|
||||
goto fw_trace_err;
|
||||
|
||||
/*
|
||||
* Some platforms in SOF, ex: BYT, may not have their platform PM
|
||||
@ -244,7 +244,8 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
|
||||
|
||||
return 0;
|
||||
|
||||
#if !IS_ENABLED(CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE)
|
||||
fw_trace_err:
|
||||
snd_sof_free_trace(sdev);
|
||||
fw_run_err:
|
||||
snd_sof_fw_unload(sdev);
|
||||
fw_load_err:
|
||||
@ -253,21 +254,10 @@ ipc_err:
|
||||
snd_sof_free_debug(sdev);
|
||||
dbg_err:
|
||||
snd_sof_remove(sdev);
|
||||
#else
|
||||
|
||||
/*
|
||||
* when the probe_continue is handled in a work queue, the
|
||||
* probe does not fail so we don't release resources here.
|
||||
* They will be released with an explicit call to
|
||||
* snd_sof_device_remove() when the PCI/ACPI device is removed
|
||||
*/
|
||||
|
||||
fw_run_err:
|
||||
fw_load_err:
|
||||
ipc_err:
|
||||
dbg_err:
|
||||
|
||||
#endif
|
||||
/* all resources freed, update state to match */
|
||||
sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
|
||||
sdev->first_boot = true;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -350,10 +340,12 @@ int snd_sof_device_remove(struct device *dev)
|
||||
if (IS_ENABLED(CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE))
|
||||
cancel_work_sync(&sdev->probe_work);
|
||||
|
||||
snd_sof_fw_unload(sdev);
|
||||
snd_sof_ipc_free(sdev);
|
||||
snd_sof_free_debug(sdev);
|
||||
snd_sof_free_trace(sdev);
|
||||
if (sdev->fw_state > SOF_FW_BOOT_NOT_STARTED) {
|
||||
snd_sof_fw_unload(sdev);
|
||||
snd_sof_ipc_free(sdev);
|
||||
snd_sof_free_debug(sdev);
|
||||
snd_sof_free_trace(sdev);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unregister machine driver. This will unbind the snd_card which
|
||||
@ -361,13 +353,15 @@ int snd_sof_device_remove(struct device *dev)
|
||||
* before freeing the snd_card.
|
||||
*/
|
||||
snd_sof_machine_unregister(sdev, pdata);
|
||||
|
||||
/*
|
||||
* Unregistering the machine driver results in unloading the topology.
|
||||
* Some widgets, ex: scheduler, attempt to power down the core they are
|
||||
* scheduled on, when they are unloaded. Therefore, the DSP must be
|
||||
* removed only after the topology has been unloaded.
|
||||
*/
|
||||
snd_sof_remove(sdev);
|
||||
if (sdev->fw_state > SOF_FW_BOOT_NOT_STARTED)
|
||||
snd_sof_remove(sdev);
|
||||
|
||||
/* release firmware */
|
||||
release_firmware(pdata->fw);
|
||||
|
@ -170,23 +170,14 @@ EXPORT_SYMBOL_NS(hda_codec_probe_bus, SND_SOC_SOF_HDA_AUDIO_CODEC);
|
||||
#if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI) || \
|
||||
IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI)
|
||||
|
||||
void hda_codec_i915_get(struct snd_sof_dev *sdev)
|
||||
void hda_codec_i915_display_power(struct snd_sof_dev *sdev, bool enable)
|
||||
{
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
|
||||
dev_dbg(bus->dev, "Turning i915 HDAC power on\n");
|
||||
snd_hdac_display_power(bus, HDA_CODEC_IDX_CONTROLLER, true);
|
||||
dev_dbg(bus->dev, "Turning i915 HDAC power %d\n", enable);
|
||||
snd_hdac_display_power(bus, HDA_CODEC_IDX_CONTROLLER, enable);
|
||||
}
|
||||
EXPORT_SYMBOL_NS(hda_codec_i915_get, SND_SOC_SOF_HDA_AUDIO_CODEC_I915);
|
||||
|
||||
void hda_codec_i915_put(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
|
||||
dev_dbg(bus->dev, "Turning i915 HDAC power off\n");
|
||||
snd_hdac_display_power(bus, HDA_CODEC_IDX_CONTROLLER, false);
|
||||
}
|
||||
EXPORT_SYMBOL_NS(hda_codec_i915_put, SND_SOC_SOF_HDA_AUDIO_CODEC_I915);
|
||||
EXPORT_SYMBOL_NS(hda_codec_i915_display_power, SND_SOC_SOF_HDA_AUDIO_CODEC_I915);
|
||||
|
||||
int hda_codec_i915_init(struct snd_sof_dev *sdev)
|
||||
{
|
||||
@ -198,7 +189,7 @@ int hda_codec_i915_init(struct snd_sof_dev *sdev)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
hda_codec_i915_get(sdev);
|
||||
hda_codec_i915_display_power(sdev, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -209,7 +200,7 @@ int hda_codec_i915_exit(struct snd_sof_dev *sdev)
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
int ret;
|
||||
|
||||
hda_codec_i915_put(sdev);
|
||||
hda_codec_i915_display_power(sdev, false);
|
||||
|
||||
ret = snd_hdac_i915_exit(bus);
|
||||
|
||||
|
@ -380,7 +380,8 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
|
||||
/* create codec instances */
|
||||
hda_codec_probe_bus(sdev, hda_codec_use_common_hdmi);
|
||||
|
||||
hda_codec_i915_put(sdev);
|
||||
if (!HDA_IDISP_CODEC(bus->codec_mask))
|
||||
hda_codec_i915_display_power(sdev, false);
|
||||
|
||||
/*
|
||||
* we are done probing so decrement link counts
|
||||
|
@ -586,15 +586,14 @@ void hda_codec_jack_check(struct snd_sof_dev *sdev);
|
||||
(IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI) || \
|
||||
IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
|
||||
|
||||
void hda_codec_i915_get(struct snd_sof_dev *sdev);
|
||||
void hda_codec_i915_put(struct snd_sof_dev *sdev);
|
||||
void hda_codec_i915_display_power(struct snd_sof_dev *sdev, bool enable);
|
||||
int hda_codec_i915_init(struct snd_sof_dev *sdev);
|
||||
int hda_codec_i915_exit(struct snd_sof_dev *sdev);
|
||||
|
||||
#else
|
||||
|
||||
static inline void hda_codec_i915_get(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_i915_put(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_i915_display_power(struct snd_sof_dev *sdev,
|
||||
bool enable) { }
|
||||
static inline int hda_codec_i915_init(struct snd_sof_dev *sdev) { return 0; }
|
||||
static inline int hda_codec_i915_exit(struct snd_sof_dev *sdev) { return 0; }
|
||||
|
||||
|
@ -591,6 +591,11 @@ static int sof_pcm_new(struct snd_soc_component *component,
|
||||
"spcm: allocate %s playback DMA buffer size 0x%x max 0x%x\n",
|
||||
caps->name, caps->buffer_size_min, caps->buffer_size_max);
|
||||
|
||||
if (!pcm->streams[stream].substream) {
|
||||
dev_err(component->dev, "error: NULL playback substream!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
snd_pcm_set_managed_buffer(pcm->streams[stream].substream,
|
||||
SNDRV_DMA_TYPE_DEV_SG, sdev->dev,
|
||||
le32_to_cpu(caps->buffer_size_min),
|
||||
@ -609,6 +614,11 @@ capture:
|
||||
"spcm: allocate %s capture DMA buffer size 0x%x max 0x%x\n",
|
||||
caps->name, caps->buffer_size_min, caps->buffer_size_max);
|
||||
|
||||
if (!pcm->streams[stream].substream) {
|
||||
dev_err(component->dev, "error: NULL capture substream!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
snd_pcm_set_managed_buffer(pcm->streams[stream].substream,
|
||||
SNDRV_DMA_TYPE_DEV_SG, sdev->dev,
|
||||
le32_to_cpu(caps->buffer_size_min),
|
||||
|
@ -56,6 +56,10 @@ static int sof_resume(struct device *dev, bool runtime_resume)
|
||||
if (!sof_ops(sdev)->resume || !sof_ops(sdev)->runtime_resume)
|
||||
return 0;
|
||||
|
||||
/* DSP was never successfully started, nothing to resume */
|
||||
if (sdev->first_boot)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* if the runtime_resume flag is set, call the runtime_resume routine
|
||||
* or else call the system resume routine
|
||||
|
@ -235,6 +235,7 @@ static const struct sof_dev_desc jsl_desc = {
|
||||
.chip_info = &jsl_chip_info,
|
||||
.default_fw_path = "intel/sof",
|
||||
.default_tplg_path = "intel/sof-tplg",
|
||||
.default_fw_filename = "sof-jsl.ri",
|
||||
.nocodec_tplg_filename = "sof-jsl-nocodec.tplg",
|
||||
.ops = &sof_cnl_ops,
|
||||
};
|
||||
@ -416,6 +417,8 @@ static const struct pci_device_id sof_pci_ids[] = {
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_JASPERLAKE)
|
||||
{ PCI_DEVICE(0x8086, 0x38c8),
|
||||
.driver_data = (unsigned long)&jsl_desc},
|
||||
{ PCI_DEVICE(0x8086, 0x4dc8),
|
||||
.driver_data = (unsigned long)&jsl_desc},
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_LP)
|
||||
{ PCI_DEVICE(0x8086, 0x02c8),
|
||||
|
@ -343,7 +343,10 @@ void snd_sof_free_trace(struct snd_sof_dev *sdev)
|
||||
|
||||
snd_sof_release_trace(sdev);
|
||||
|
||||
snd_dma_free_pages(&sdev->dmatb);
|
||||
snd_dma_free_pages(&sdev->dmatp);
|
||||
if (sdev->dma_trace_pages) {
|
||||
snd_dma_free_pages(&sdev->dmatb);
|
||||
snd_dma_free_pages(&sdev->dmatp);
|
||||
sdev->dma_trace_pages = 0;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(snd_sof_free_trace);
|
||||
|
@ -127,7 +127,7 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
struct device *dev = dai->dev;
|
||||
struct tegra30_i2s *i2s = snd_soc_dai_get_drvdata(dai);
|
||||
unsigned int mask, val, reg;
|
||||
int ret, sample_size, srate, i2sclock, bitcnt, audio_bits;
|
||||
int ret, sample_size, srate, i2sclock, bitcnt;
|
||||
struct tegra30_ahub_cif_conf cif_conf;
|
||||
|
||||
if (params_channels(params) != 2)
|
||||
@ -137,19 +137,8 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
val = TEGRA30_I2S_CTRL_BIT_SIZE_16;
|
||||
audio_bits = TEGRA30_AUDIOCIF_BITS_16;
|
||||
sample_size = 16;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
val = TEGRA30_I2S_CTRL_BIT_SIZE_24;
|
||||
audio_bits = TEGRA30_AUDIOCIF_BITS_24;
|
||||
sample_size = 24;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
val = TEGRA30_I2S_CTRL_BIT_SIZE_32;
|
||||
audio_bits = TEGRA30_AUDIOCIF_BITS_32;
|
||||
sample_size = 32;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -181,8 +170,8 @@ static int tegra30_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
cif_conf.threshold = 0;
|
||||
cif_conf.audio_channels = 2;
|
||||
cif_conf.client_channels = 2;
|
||||
cif_conf.audio_bits = audio_bits;
|
||||
cif_conf.client_bits = audio_bits;
|
||||
cif_conf.audio_bits = TEGRA30_AUDIOCIF_BITS_16;
|
||||
cif_conf.client_bits = TEGRA30_AUDIOCIF_BITS_16;
|
||||
cif_conf.expand = 0;
|
||||
cif_conf.stereo_conv = 0;
|
||||
cif_conf.replicate = 0;
|
||||
@ -317,18 +306,14 @@ static const struct snd_soc_dai_driver tegra30_i2s_dai_template = {
|
||||
.channels_min = 2,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_96000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S32_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Capture",
|
||||
.channels_min = 2,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_8000_96000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S32_LE |
|
||||
SNDRV_PCM_FMTBIT_S24_LE |
|
||||
SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.ops = &tegra30_i2s_dai_ops,
|
||||
.symmetric_rates = 1,
|
||||
|
Loading…
Reference in New Issue
Block a user