Merge branch 'for-linus' into for-next
This commit is contained in:
@@ -930,6 +930,8 @@ irqreturn_t azx_interrupt(int irq, void *dev_id)
|
||||
struct azx *chip = dev_id;
|
||||
struct hdac_bus *bus = azx_bus(chip);
|
||||
u32 status;
|
||||
bool active, handled = false;
|
||||
int repeat = 0; /* count for avoiding endless loop */
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
if (azx_has_pm_runtime(chip))
|
||||
@@ -939,33 +941,36 @@ irqreturn_t azx_interrupt(int irq, void *dev_id)
|
||||
|
||||
spin_lock(&bus->reg_lock);
|
||||
|
||||
if (chip->disabled) {
|
||||
spin_unlock(&bus->reg_lock);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
if (chip->disabled)
|
||||
goto unlock;
|
||||
|
||||
status = azx_readl(chip, INTSTS);
|
||||
if (status == 0 || status == 0xffffffff) {
|
||||
spin_unlock(&bus->reg_lock);
|
||||
return IRQ_NONE;
|
||||
}
|
||||
do {
|
||||
status = azx_readl(chip, INTSTS);
|
||||
if (status == 0 || status == 0xffffffff)
|
||||
break;
|
||||
|
||||
snd_hdac_bus_handle_stream_irq(bus, status, stream_update);
|
||||
handled = true;
|
||||
active = false;
|
||||
if (snd_hdac_bus_handle_stream_irq(bus, status, stream_update))
|
||||
active = true;
|
||||
|
||||
/* clear rirb int */
|
||||
status = azx_readb(chip, RIRBSTS);
|
||||
if (status & RIRB_INT_MASK) {
|
||||
if (status & RIRB_INT_RESPONSE) {
|
||||
if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
|
||||
udelay(80);
|
||||
snd_hdac_bus_update_rirb(bus);
|
||||
/* clear rirb int */
|
||||
status = azx_readb(chip, RIRBSTS);
|
||||
if (status & RIRB_INT_MASK) {
|
||||
active = true;
|
||||
if (status & RIRB_INT_RESPONSE) {
|
||||
if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
|
||||
udelay(80);
|
||||
snd_hdac_bus_update_rirb(bus);
|
||||
}
|
||||
azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
|
||||
}
|
||||
azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
|
||||
}
|
||||
} while (active && ++repeat < 10);
|
||||
|
||||
unlock:
|
||||
spin_unlock(&bus->reg_lock);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
return IRQ_RETVAL(handled);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(azx_interrupt);
|
||||
|
||||
|
@@ -363,7 +363,10 @@ enum {
|
||||
((pci)->device == 0x0d0c) || \
|
||||
((pci)->device == 0x160c))
|
||||
|
||||
#define IS_BROXTON(pci) ((pci)->device == 0x5a98)
|
||||
#define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170)
|
||||
#define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70)
|
||||
#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
|
||||
#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci))
|
||||
|
||||
static char *driver_short_names[] = {
|
||||
[AZX_DRIVER_ICH] = "HDA Intel",
|
||||
@@ -540,13 +543,13 @@ static void hda_intel_init_chip(struct azx *chip, bool full_reset)
|
||||
|
||||
if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
|
||||
snd_hdac_set_codec_wakeup(bus, true);
|
||||
if (IS_BROXTON(pci)) {
|
||||
if (IS_SKL_PLUS(pci)) {
|
||||
pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);
|
||||
val = val & ~INTEL_HDA_CGCTL_MISCBDCGE;
|
||||
pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);
|
||||
}
|
||||
azx_init_chip(chip, full_reset);
|
||||
if (IS_BROXTON(pci)) {
|
||||
if (IS_SKL_PLUS(pci)) {
|
||||
pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);
|
||||
val = val | INTEL_HDA_CGCTL_MISCBDCGE;
|
||||
pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);
|
||||
@@ -555,7 +558,7 @@ static void hda_intel_init_chip(struct azx *chip, bool full_reset)
|
||||
snd_hdac_set_codec_wakeup(bus, false);
|
||||
|
||||
/* reduce dma latency to avoid noise */
|
||||
if (IS_BROXTON(pci))
|
||||
if (IS_BXT(pci))
|
||||
bxt_reduce_dma_latency(chip);
|
||||
}
|
||||
|
||||
@@ -977,11 +980,6 @@ static int azx_resume(struct device *dev)
|
||||
/* put codec down to D3 at hibernation for Intel SKL+;
|
||||
* otherwise BIOS may still access the codec and screw up the driver
|
||||
*/
|
||||
#define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170)
|
||||
#define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70)
|
||||
#define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
|
||||
#define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci))
|
||||
|
||||
static int azx_freeze_noirq(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci = to_pci_dev(dev);
|
||||
@@ -2168,10 +2166,10 @@ static void azx_remove(struct pci_dev *pci)
|
||||
struct hda_intel *hda;
|
||||
|
||||
if (card) {
|
||||
/* flush the pending probing work */
|
||||
/* cancel the pending probing work */
|
||||
chip = card->private_data;
|
||||
hda = container_of(chip, struct hda_intel, chip);
|
||||
flush_work(&hda->probe_work);
|
||||
cancel_work_sync(&hda->probe_work);
|
||||
|
||||
snd_card_free(card);
|
||||
}
|
||||
|
@@ -3801,6 +3801,10 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
||||
|
||||
static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
{
|
||||
static struct coef_fw coef0225[] = {
|
||||
UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
|
||||
{}
|
||||
};
|
||||
static struct coef_fw coef0255[] = {
|
||||
WRITE_COEF(0x45, 0xc089),
|
||||
WRITE_COEF(0x45, 0xc489),
|
||||
@@ -3842,6 +3846,9 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
||||
};
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0225:
|
||||
alc_process_coef_fw(codec, coef0225);
|
||||
break;
|
||||
case 0x10ec0255:
|
||||
case 0x10ec0256:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
@@ -4749,6 +4756,9 @@ enum {
|
||||
ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE,
|
||||
ALC293_FIXUP_LENOVO_SPK_NOISE,
|
||||
ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
|
||||
ALC255_FIXUP_DELL_SPK_NOISE,
|
||||
ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC280_FIXUP_HP_HEADSET_MIC,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@@ -5368,6 +5378,29 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc233_fixup_lenovo_line2_mic_hotkey,
|
||||
},
|
||||
[ALC255_FIXUP_DELL_SPK_NOISE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_disable_aamix,
|
||||
.chained = true,
|
||||
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
},
|
||||
[ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
/* Disable pass-through path for FRONT 14h */
|
||||
{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
|
||||
{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
|
||||
{}
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
},
|
||||
[ALC280_FIXUP_HP_HEADSET_MIC] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_disable_aamix,
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_HEADSET_MIC,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@@ -5410,6 +5443,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x06df, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x06e0, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0704, "Dell XPS 13", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
|
||||
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||
@@ -5470,6 +5504,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x2335, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
||||
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
@@ -5638,10 +5673,10 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{0x21, 0x03211020}
|
||||
|
||||
static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC225_STANDARD_PINS,
|
||||
{0x14, 0x901701a0}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC225_STANDARD_PINS,
|
||||
{0x14, 0x901701b0}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
|
||||
|
Reference in New Issue
Block a user