Commit ffd34444 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'fix/hda' into topic/hda

parents 6942c103 619a341b
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
Required properties: Required properties:
- compatible : "fsl,sgtl5000". - compatible : "fsl,sgtl5000".
- reg : the I2C address of the device
Example: Example:
codec: sgtl5000@0a { codec: sgtl5000@0a {
......
...@@ -475,7 +475,7 @@ static int load_firmware(struct echoaudio *chip) ...@@ -475,7 +475,7 @@ static int load_firmware(struct echoaudio *chip)
const struct firmware *fw; const struct firmware *fw;
int box_type, err; int box_type, err;
if (snd_BUG_ON(!chip->dsp_code_to_load || !chip->comm_page)) if (snd_BUG_ON(!chip->comm_page))
return -EPERM; return -EPERM;
/* See if the ASIC is present and working - only if the DSP is already loaded */ /* See if the ASIC is present and working - only if the DSP is already loaded */
......
...@@ -5497,10 +5497,6 @@ int snd_hda_suspend(struct hda_bus *bus) ...@@ -5497,10 +5497,6 @@ int snd_hda_suspend(struct hda_bus *bus)
list_for_each_entry(codec, &bus->codec_list, list) { list_for_each_entry(codec, &bus->codec_list, list) {
if (hda_codec_is_power_on(codec)) if (hda_codec_is_power_on(codec))
hda_call_codec_suspend(codec); hda_call_codec_suspend(codec);
else /* forcibly change the power to D3 even if not used */
hda_set_power_state(codec,
codec->afg ? codec->afg : codec->mfg,
AC_PWRST_D3);
if (codec->patch_ops.post_suspend) if (codec->patch_ops.post_suspend)
codec->patch_ops.post_suspend(codec); codec->patch_ops.post_suspend(codec);
} }
......
...@@ -2351,6 +2351,17 @@ static void azx_power_notify(struct hda_bus *bus) ...@@ -2351,6 +2351,17 @@ static void azx_power_notify(struct hda_bus *bus)
* power management * power management
*/ */
static int snd_hda_codecs_inuse(struct hda_bus *bus)
{
struct hda_codec *codec;
list_for_each_entry(codec, &bus->codec_list, list) {
if (snd_hda_codec_needs_resume(codec))
return 1;
}
return 0;
}
static int azx_suspend(struct pci_dev *pci, pm_message_t state) static int azx_suspend(struct pci_dev *pci, pm_message_t state)
{ {
struct snd_card *card = pci_get_drvdata(pci); struct snd_card *card = pci_get_drvdata(pci);
...@@ -2397,7 +2408,8 @@ static int azx_resume(struct pci_dev *pci) ...@@ -2397,7 +2408,8 @@ static int azx_resume(struct pci_dev *pci)
return -EIO; return -EIO;
azx_init_pci(chip); azx_init_pci(chip);
azx_init_chip(chip, 1); if (snd_hda_codecs_inuse(chip->bus))
azx_init_chip(chip, 1);
snd_hda_resume(chip->bus); snd_hda_resume(chip->bus);
snd_power_change_state(card, SNDRV_CTL_POWER_D0); snd_power_change_state(card, SNDRV_CTL_POWER_D0);
......
...@@ -5381,6 +5381,8 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { ...@@ -5381,6 +5381,8 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G", SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G",
ALC882_FIXUP_ACER_ASPIRE_4930G), ALC882_FIXUP_ACER_ASPIRE_4930G),
SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210), SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210),
SND_PCI_QUIRK(0x1025, 0x021e, "Acer Aspire 5739G",
ALC882_FIXUP_ACER_ASPIRE_4930G),
SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE), SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE),
SND_PCI_QUIRK(0x1025, 0x026b, "Acer Aspire 8940G", ALC882_FIXUP_ACER_ASPIRE_8930G), SND_PCI_QUIRK(0x1025, 0x026b, "Acer Aspire 8940G", ALC882_FIXUP_ACER_ASPIRE_8930G),
SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736), SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736),
...@@ -5414,6 +5416,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { ...@@ -5414,6 +5416,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF), SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF),
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD), SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3), SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3", ALC889_FIXUP_CD), SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3", ALC889_FIXUP_CD),
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX), SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
...@@ -5614,13 +5617,13 @@ static int patch_alc262(struct hda_codec *codec) ...@@ -5614,13 +5617,13 @@ static int patch_alc262(struct hda_codec *codec)
snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PROC_COEF, tmp | 0x80); snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PROC_COEF, tmp | 0x80);
} }
#endif #endif
alc_auto_parse_customize_define(codec);
alc_fix_pll_init(codec, 0x20, 0x0a, 10); alc_fix_pll_init(codec, 0x20, 0x0a, 10);
alc_pick_fixup(codec, NULL, alc262_fixup_tbl, alc262_fixups); alc_pick_fixup(codec, NULL, alc262_fixup_tbl, alc262_fixups);
alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
alc_auto_parse_customize_define(codec);
/* automatic parse from the BIOS config */ /* automatic parse from the BIOS config */
err = alc262_parse_auto_config(codec); err = alc262_parse_auto_config(codec);
if (err < 0) if (err < 0)
...@@ -6083,6 +6086,7 @@ static const struct alc_fixup alc269_fixups[] = { ...@@ -6083,6 +6086,7 @@ static const struct alc_fixup alc269_fixups[] = {
static const struct snd_pci_quirk alc269_fixup_tbl[] = { static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED), SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED),
SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC), SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
...@@ -6222,8 +6226,6 @@ static int patch_alc269(struct hda_codec *codec) ...@@ -6222,8 +6226,6 @@ static int patch_alc269(struct hda_codec *codec)
spec->mixer_nid = 0x0b; spec->mixer_nid = 0x0b;
alc_auto_parse_customize_define(codec);
err = alc_codec_rename_from_preset(codec); err = alc_codec_rename_from_preset(codec);
if (err < 0) if (err < 0)
goto error; goto error;
...@@ -6256,6 +6258,8 @@ static int patch_alc269(struct hda_codec *codec) ...@@ -6256,6 +6258,8 @@ static int patch_alc269(struct hda_codec *codec)
alc269_fixup_tbl, alc269_fixups); alc269_fixup_tbl, alc269_fixups);
alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
alc_auto_parse_customize_define(codec);
/* automatic parse from the BIOS config */ /* automatic parse from the BIOS config */
err = alc269_parse_auto_config(codec); err = alc269_parse_auto_config(codec);
if (err < 0) if (err < 0)
...@@ -6831,8 +6835,6 @@ static int patch_alc662(struct hda_codec *codec) ...@@ -6831,8 +6835,6 @@ static int patch_alc662(struct hda_codec *codec)
/* handle multiple HPs as is */ /* handle multiple HPs as is */
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
alc_auto_parse_customize_define(codec);
alc_fix_pll_init(codec, 0x20, 0x04, 15); alc_fix_pll_init(codec, 0x20, 0x04, 15);
err = alc_codec_rename_from_preset(codec); err = alc_codec_rename_from_preset(codec);
...@@ -6849,6 +6851,9 @@ static int patch_alc662(struct hda_codec *codec) ...@@ -6849,6 +6851,9 @@ static int patch_alc662(struct hda_codec *codec)
alc_pick_fixup(codec, alc662_fixup_models, alc_pick_fixup(codec, alc662_fixup_models,
alc662_fixup_tbl, alc662_fixups); alc662_fixup_tbl, alc662_fixups);
alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE); alc_apply_fixup(codec, ALC_FIXUP_ACT_PRE_PROBE);
alc_auto_parse_customize_define(codec);
/* automatic parse from the BIOS config */ /* automatic parse from the BIOS config */
err = alc662_parse_auto_config(codec); err = alc662_parse_auto_config(codec);
if (err < 0) if (err < 0)
......
...@@ -5170,6 +5170,7 @@ static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp) ...@@ -5170,6 +5170,7 @@ static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
strcpy(hw->name, "HDSP hwdep interface"); strcpy(hw->name, "HDSP hwdep interface");
hw->ops.ioctl = snd_hdsp_hwdep_ioctl; hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
hw->ops.ioctl_compat = snd_hdsp_hwdep_ioctl;
return 0; return 0;
} }
......
...@@ -99,6 +99,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = { ...@@ -99,6 +99,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = {
.platform_name = "bfin-i2s-pcm-audio", .platform_name = "bfin-i2s-pcm-audio",
.codec_name = "ssm2602.0-001b", .codec_name = "ssm2602.0-001b",
.ops = &bf5xx_ssm2602_ops, .ops = &bf5xx_ssm2602_ops,
.dai_fmt = BF5XX_SSM2602_DAIFMT,
}, },
{ {
.name = "ssm2602", .name = "ssm2602",
...@@ -108,6 +109,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = { ...@@ -108,6 +109,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = {
.platform_name = "bfin-i2s-pcm-audio", .platform_name = "bfin-i2s-pcm-audio",
.codec_name = "ssm2602.0-001b", .codec_name = "ssm2602.0-001b",
.ops = &bf5xx_ssm2602_ops, .ops = &bf5xx_ssm2602_ops,
.dai_fmt = BF5XX_SSM2602_DAIFMT,
}, },
}; };
......
...@@ -929,6 +929,8 @@ static int cs42l73_set_mclk(struct snd_soc_dai *dai, unsigned int freq) ...@@ -929,6 +929,8 @@ static int cs42l73_set_mclk(struct snd_soc_dai *dai, unsigned int freq)
/* MCLKX -> MCLK */ /* MCLKX -> MCLK */
mclkx_coeff = cs42l73_get_mclkx_coeff(freq); mclkx_coeff = cs42l73_get_mclkx_coeff(freq);
if (mclkx_coeff < 0)
return mclkx_coeff;
mclk = cs42l73_mclkx_coeffs[mclkx_coeff].mclkx / mclk = cs42l73_mclkx_coeffs[mclkx_coeff].mclkx /
cs42l73_mclkx_coeffs[mclkx_coeff].ratio; cs42l73_mclkx_coeffs[mclkx_coeff].ratio;
......
...@@ -472,7 +472,7 @@ static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai, ...@@ -472,7 +472,7 @@ static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai,
static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec, static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
u16 reg = snd_soc_read(codec, TLV320AIC23_PWR) & 0xff7f; u16 reg = snd_soc_read(codec, TLV320AIC23_PWR) & 0x17f;
switch (level) { switch (level) {
case SND_SOC_BIAS_ON: case SND_SOC_BIAS_ON:
...@@ -491,7 +491,7 @@ static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec, ...@@ -491,7 +491,7 @@ static int tlv320aic23_set_bias_level(struct snd_soc_codec *codec,
case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_OFF:
/* everything off, dac mute, inactive */ /* everything off, dac mute, inactive */
snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0); snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x0);
snd_soc_write(codec, TLV320AIC23_PWR, 0xffff); snd_soc_write(codec, TLV320AIC23_PWR, 0x1ff);
break; break;
} }
codec->dapm.bias_level = level; codec->dapm.bias_level = level;
......
...@@ -60,7 +60,7 @@ struct wm8350_jack_data { ...@@ -60,7 +60,7 @@ struct wm8350_jack_data {
}; };
struct wm8350_data { struct wm8350_data {
struct snd_soc_codec codec; struct wm8350 *wm8350;
struct wm8350_output out1; struct wm8350_output out1;
struct wm8350_output out2; struct wm8350_output out2;
struct wm8350_jack_data hpl; struct wm8350_jack_data hpl;
...@@ -1309,7 +1309,7 @@ static void wm8350_hp_work(struct wm8350_data *priv, ...@@ -1309,7 +1309,7 @@ static void wm8350_hp_work(struct wm8350_data *priv,
struct wm8350_jack_data *jack, struct wm8350_jack_data *jack,
u16 mask) u16 mask)
{ {
struct wm8350 *wm8350 = priv->codec.control_data; struct wm8350 *wm8350 = priv->wm8350;
u16 reg; u16 reg;
int report; int report;
...@@ -1342,7 +1342,7 @@ static void wm8350_hpr_work(struct work_struct *work) ...@@ -1342,7 +1342,7 @@ static void wm8350_hpr_work(struct work_struct *work)
static irqreturn_t wm8350_hp_jack_handler(int irq, void *data) static irqreturn_t wm8350_hp_jack_handler(int irq, void *data)
{ {
struct wm8350_data *priv = data; struct wm8350_data *priv = data;
struct wm8350 *wm8350 = priv->codec.control_data; struct wm8350 *wm8350 = priv->wm8350;
struct wm8350_jack_data *jack = NULL; struct wm8350_jack_data *jack = NULL;
switch (irq - wm8350->irq_base) { switch (irq - wm8350->irq_base) {
...@@ -1427,7 +1427,7 @@ EXPORT_SYMBOL_GPL(wm8350_hp_jack_detect); ...@@ -1427,7 +1427,7 @@ EXPORT_SYMBOL_GPL(wm8350_hp_jack_detect);
static irqreturn_t wm8350_mic_handler(int irq, void *data) static irqreturn_t wm8350_mic_handler(int irq, void *data)
{ {
struct wm8350_data *priv = data; struct wm8350_data *priv = data;
struct wm8350 *wm8350 = priv->codec.control_data; struct wm8350 *wm8350 = priv->wm8350;
u16 reg; u16 reg;
int report = 0; int report = 0;
...@@ -1536,6 +1536,8 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec) ...@@ -1536,6 +1536,8 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec)
return -ENOMEM; return -ENOMEM;
snd_soc_codec_set_drvdata(codec, priv); snd_soc_codec_set_drvdata(codec, priv);
priv->wm8350 = wm8350;
for (i = 0; i < ARRAY_SIZE(supply_names); i++) for (i = 0; i < ARRAY_SIZE(supply_names); i++)
priv->supplies[i].supply = supply_names[i]; priv->supplies[i].supply = supply_names[i];
...@@ -1544,7 +1546,6 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec) ...@@ -1544,7 +1546,6 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec)
if (ret != 0) if (ret != 0)
return ret; return ret;
wm8350->codec.codec = codec;
codec->control_data = wm8350; codec->control_data = wm8350;
/* Put the codec into reset if it wasn't already */ /* Put the codec into reset if it wasn't already */
......
This diff is collapsed.
...@@ -1035,7 +1035,7 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec, ...@@ -1035,7 +1035,7 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec);
int val; int mask, val;
switch (level) { switch (level) {
case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY:
...@@ -1047,6 +1047,13 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec, ...@@ -1047,6 +1047,13 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
case SND_SOC_BIAS_ON: case SND_SOC_BIAS_ON:
/* Turn off any unneded single ended outputs */ /* Turn off any unneded single ended outputs */
val = 0; val = 0;
mask = 0;
if (hubs->lineout1_se)
mask |= WM8993_LINEOUT1N_ENA | WM8993_LINEOUT1P_ENA;
if (hubs->lineout2_se)
mask |= WM8993_LINEOUT2N_ENA | WM8993_LINEOUT2P_ENA;
if (hubs->lineout1_se && hubs->lineout1n_ena) if (hubs->lineout1_se && hubs->lineout1n_ena)
val |= WM8993_LINEOUT1N_ENA; val |= WM8993_LINEOUT1N_ENA;
...@@ -1061,11 +1068,7 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec, ...@@ -1061,11 +1068,7 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
val |= WM8993_LINEOUT2P_ENA; val |= WM8993_LINEOUT2P_ENA;
snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3, snd_soc_update_bits(codec, WM8993_POWER_MANAGEMENT_3,
WM8993_LINEOUT1N_ENA | mask, val);
WM8993_LINEOUT1P_ENA |
WM8993_LINEOUT2N_ENA |
WM8993_LINEOUT2P_ENA,
val);
/* Remove the input clamps */ /* Remove the input clamps */
snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG, snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG,
......
...@@ -401,6 +401,10 @@ static int omap_pcm_new(struct snd_soc_pcm_runtime *rtd) ...@@ -401,6 +401,10 @@ static int omap_pcm_new(struct snd_soc_pcm_runtime *rtd)
} }
out: out:
/* free preallocated buffers in case of error */
if (ret)
omap_pcm_free_dma_buffers(pcm);
return ret; return ret;
} }
......
...@@ -166,7 +166,7 @@ static struct snd_soc_dai_driver s3c2412_i2s_dai = { ...@@ -166,7 +166,7 @@ static struct snd_soc_dai_driver s3c2412_i2s_dai = {
static __devinit int s3c2412_iis_dev_probe(struct platform_device *pdev) static __devinit int s3c2412_iis_dev_probe(struct platform_device *pdev)
{ {
return snd_soc_register_dai(&pdev->dev, &s3c2412_i2s_dai); return s3c_i2sv2_register_dai(&pdev->dev, -1, &s3c2412_i2s_dai);
} }
static __devexit int s3c2412_iis_dev_remove(struct platform_device *pdev) static __devexit int s3c2412_iis_dev_remove(struct platform_device *pdev)
......
...@@ -1001,11 +1001,10 @@ static void fsi_dma_do_tasklet(unsigned long data) ...@@ -1001,11 +1001,10 @@ static void fsi_dma_do_tasklet(unsigned long data)
sg_dma_address(&sg) = buf; sg_dma_address(&sg) = buf;
sg_dma_len(&sg) = len; sg_dma_len(&sg) = len;
desc = chan->device->device_prep_slave_sg(chan, &sg, 1, dir, desc = dmaengine_prep_slave_sg(chan, &sg, 1, dir,
DMA_PREP_INTERRUPT | DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
DMA_CTRL_ACK);
if (!desc) { if (!desc) {
dev_err(dai->dev, "device_prep_slave_sg() fail\n"); dev_err(dai->dev, "dmaengine_prep_slave_sg() fail\n");
return; return;
} }
......
...@@ -3119,6 +3119,7 @@ int snd_soc_register_card(struct snd_soc_card *card) ...@@ -3119,6 +3119,7 @@ int snd_soc_register_card(struct snd_soc_card *card)
GFP_KERNEL); GFP_KERNEL);
if (card->rtd == NULL) if (card->rtd == NULL)
return -ENOMEM; return -ENOMEM;
card->num_rtd = 0;
card->rtd_aux = &card->rtd[card->num_links]; card->rtd_aux = &card->rtd[card->num_links];
for (i = 0; i < card->num_links; i++) for (i = 0; i < card->num_links; i++)
...@@ -3630,10 +3631,10 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card, ...@@ -3630,10 +3631,10 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
int i, ret; int i, ret;
num_routes = of_property_count_strings(np, propname); num_routes = of_property_count_strings(np, propname);
if (num_routes & 1) { if (num_routes < 0 || num_routes & 1) {
dev_err(card->dev, dev_err(card->dev,
"Property '%s's length is not even\n", "Property '%s' does not exist or its length is not even\n",
propname); propname);
return -EINVAL; return -EINVAL;
} }
num_routes /= 2; num_routes /= 2;
......
...@@ -67,6 +67,7 @@ static int dapm_up_seq[] = { ...@@ -67,6 +67,7 @@ static int dapm_up_seq[] = {
[snd_soc_dapm_out_drv] = 10, [snd_soc_dapm_out_drv] = 10,
[snd_soc_dapm_hp] = 10, [snd_soc_dapm_hp] = 10,
[snd_soc_dapm_spk] = 10, [snd_soc_dapm_spk] = 10,
[snd_soc_dapm_line] = 10,
[snd_soc_dapm_post] = 11, [snd_soc_dapm_post] = 11,
}; };
...@@ -75,6 +76,7 @@ static int dapm_down_seq[] = { ...@@ -75,6 +76,7 @@ static int dapm_down_seq[] = {
[snd_soc_dapm_adc] = 1, [snd_soc_dapm_adc] = 1,
[snd_soc_dapm_hp] = 2, [snd_soc_dapm_hp] = 2,
[snd_soc_dapm_spk] = 2, [snd_soc_dapm_spk] = 2,
[snd_soc_dapm_line] = 2,
[snd_soc_dapm_out_drv] = 2, [snd_soc_dapm_out_drv] = 2,
[snd_soc_dapm_pga] = 4, [snd_soc_dapm_pga] = 4,
[snd_soc_dapm_mixer_named_ctl] = 5, [snd_soc_dapm_mixer_named_ctl] = 5,
......
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