forked from Minki/linux
sound fixes for 5.13-rc5
A couple of small fixes are found in the ALSA core side at this time; a fix in the new LED handling code and a long-standing (and likely no one would notice) ioctl bug. The rest are usual HD-audio fixes, mostly device-specific quirks but also one major regression fix that was introduced in 5.13. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmC5zlMOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+zTBAAhc5pzi8wBoiDAo/b9SZ+SCy3HUBYHzooWqvL qTxahNTDb7x+SkeCsiYUIUdO4hmDxR7TVLpu4kHyfVdotHr0aWADp7/KuTDCMb5c dRdHz4iyutoI9aISX+xmhX1IRafQrVgBwUveN1J1ihPAHbrYtoG+A9Z7Xn3ygpPt zZ+ebZmbDZWmmNKVuhwZkRlbZZQ2jZi2tlLHY/Zh0CJSF7W0E96HvhYY5h4C3sSw Sgk9ZegpR0mYrSgEHU6bP1QZUbnjWKn6W/oimq/N9vtJ9EjLc2O0gm9Ry3FKdg3f 3JvuisGN9HPUQ8c6EnGk5E21y8kLW3XfkCa5htKjmx83c4vLt/K3cvkS5sb99a+R 7H27QafW9Qwf24ZIlGxAkxbPFh9AgxgWXt8SysDPl8S9HDjz1aqSy1L2kXLuHrad rPyPJbhAzDm1Kn/LmTcav40P2B8a+0/Cp+nYWfAbFWHRf4zttguZNukE+9YEaxDq HWP3sQXzsh6mh6wQCLgojWJ74E5H2ePlDSHlDVjOgiontPg+9+wQJd5T2Q2Sc7q6 ReUN/+RTvq7MbRYaW7j6tqnBYw05YsH2xpZPoLVjdzJLby3kQFhyQbXZRGBNF91n TRMb0+FdbjZEnJnzjhMTPyjU1Os3VtVeGwj8UY5LDcIzyu6hwzQecju6YqG20T3i GJN6Ks8= =uEgi -----END PGP SIGNATURE----- Merge tag 'sound-5.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A couple of small fixes are found in the ALSA core side at this time; a fix in the new LED handling code and a long-standing (and likely no one would notice) ioctl bug. The rest are usual HD-audio fixes, mostly device-specific quirks but also one major regression fix that was introduced in 5.13" * tag 'sound-5.13-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda: update the power_state during the direct-complete ALSA: timer: Fix master timer notification ALSA: control led: fix memory leak in snd_ctl_led_register ALSA: hda: Fix for mute key LED for HP Pavilion 15-CK0xx ALSA: hda/cirrus: Set Initial DMIC volume to -26 dB ALSA: hda: Fix a regression in Capture Switch mixer read ALSA: hda: Add AlderLake-M PCI ID
This commit is contained in:
commit
16f0596fc1
@ -17,6 +17,9 @@ MODULE_LICENSE("GPL");
|
||||
#define MAX_LED (((SNDRV_CTL_ELEM_ACCESS_MIC_LED - SNDRV_CTL_ELEM_ACCESS_SPK_LED) \
|
||||
>> SNDRV_CTL_ELEM_ACCESS_LED_SHIFT) + 1)
|
||||
|
||||
#define to_led_card_dev(_dev) \
|
||||
container_of(_dev, struct snd_ctl_led_card, dev)
|
||||
|
||||
enum snd_ctl_led_mode {
|
||||
MODE_FOLLOW_MUTE = 0,
|
||||
MODE_FOLLOW_ROUTE,
|
||||
@ -371,6 +374,21 @@ static void snd_ctl_led_disconnect(struct snd_card *card)
|
||||
snd_ctl_led_refresh();
|
||||
}
|
||||
|
||||
static void snd_ctl_led_card_release(struct device *dev)
|
||||
{
|
||||
struct snd_ctl_led_card *led_card = to_led_card_dev(dev);
|
||||
|
||||
kfree(led_card);
|
||||
}
|
||||
|
||||
static void snd_ctl_led_release(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static void snd_ctl_led_dev_release(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* sysfs
|
||||
*/
|
||||
@ -663,6 +681,7 @@ static void snd_ctl_led_sysfs_add(struct snd_card *card)
|
||||
led_card->number = card->number;
|
||||
led_card->led = led;
|
||||
device_initialize(&led_card->dev);
|
||||
led_card->dev.release = snd_ctl_led_card_release;
|
||||
if (dev_set_name(&led_card->dev, "card%d", card->number) < 0)
|
||||
goto cerr;
|
||||
led_card->dev.parent = &led->dev;
|
||||
@ -681,7 +700,6 @@ cerr:
|
||||
put_device(&led_card->dev);
|
||||
cerr2:
|
||||
printk(KERN_ERR "snd_ctl_led: unable to add card%d", card->number);
|
||||
kfree(led_card);
|
||||
}
|
||||
}
|
||||
|
||||
@ -700,8 +718,7 @@ static void snd_ctl_led_sysfs_remove(struct snd_card *card)
|
||||
snprintf(link_name, sizeof(link_name), "led-%s", led->name);
|
||||
sysfs_remove_link(&card->ctl_dev.kobj, link_name);
|
||||
sysfs_remove_link(&led_card->dev.kobj, "card");
|
||||
device_del(&led_card->dev);
|
||||
kfree(led_card);
|
||||
device_unregister(&led_card->dev);
|
||||
led->cards[card->number] = NULL;
|
||||
}
|
||||
}
|
||||
@ -723,6 +740,7 @@ static int __init snd_ctl_led_init(void)
|
||||
|
||||
device_initialize(&snd_ctl_led_dev);
|
||||
snd_ctl_led_dev.class = sound_class;
|
||||
snd_ctl_led_dev.release = snd_ctl_led_dev_release;
|
||||
dev_set_name(&snd_ctl_led_dev, "ctl-led");
|
||||
if (device_add(&snd_ctl_led_dev)) {
|
||||
put_device(&snd_ctl_led_dev);
|
||||
@ -733,15 +751,16 @@ static int __init snd_ctl_led_init(void)
|
||||
INIT_LIST_HEAD(&led->controls);
|
||||
device_initialize(&led->dev);
|
||||
led->dev.parent = &snd_ctl_led_dev;
|
||||
led->dev.release = snd_ctl_led_release;
|
||||
led->dev.groups = snd_ctl_led_dev_attr_groups;
|
||||
dev_set_name(&led->dev, led->name);
|
||||
if (device_add(&led->dev)) {
|
||||
put_device(&led->dev);
|
||||
for (; group > 0; group--) {
|
||||
led = &snd_ctl_leds[group - 1];
|
||||
device_del(&led->dev);
|
||||
device_unregister(&led->dev);
|
||||
}
|
||||
device_del(&snd_ctl_led_dev);
|
||||
device_unregister(&snd_ctl_led_dev);
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@ -767,9 +786,9 @@ static void __exit snd_ctl_led_exit(void)
|
||||
}
|
||||
for (group = 0; group < MAX_LED; group++) {
|
||||
led = &snd_ctl_leds[group];
|
||||
device_del(&led->dev);
|
||||
device_unregister(&led->dev);
|
||||
}
|
||||
device_del(&snd_ctl_led_dev);
|
||||
device_unregister(&snd_ctl_led_dev);
|
||||
snd_ctl_led_clean(NULL);
|
||||
}
|
||||
|
||||
|
@ -520,9 +520,10 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event)
|
||||
return;
|
||||
if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)
|
||||
return;
|
||||
event += 10; /* convert to SNDRV_TIMER_EVENT_MXXX */
|
||||
list_for_each_entry(ts, &ti->slave_active_head, active_list)
|
||||
if (ts->ccallback)
|
||||
ts->ccallback(ts, event + 100, &tstamp, resolution);
|
||||
ts->ccallback(ts, event, &tstamp, resolution);
|
||||
}
|
||||
|
||||
/* start/continue a master timer */
|
||||
|
@ -331,6 +331,10 @@ static const struct config_entry config_table[] = {
|
||||
.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
|
||||
.device = 0x51c8,
|
||||
},
|
||||
{
|
||||
.flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE,
|
||||
.device = 0x51cc,
|
||||
},
|
||||
#endif
|
||||
|
||||
};
|
||||
|
@ -2917,6 +2917,7 @@ static int hda_codec_runtime_resume(struct device *dev)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int hda_codec_pm_prepare(struct device *dev)
|
||||
{
|
||||
dev->power.power_state = PMSG_SUSPEND;
|
||||
return pm_runtime_suspended(dev);
|
||||
}
|
||||
|
||||
@ -2924,6 +2925,10 @@ static void hda_codec_pm_complete(struct device *dev)
|
||||
{
|
||||
struct hda_codec *codec = dev_to_hda_codec(dev);
|
||||
|
||||
/* If no other pm-functions are called between prepare() and complete() */
|
||||
if (dev->power.power_state.event == PM_EVENT_SUSPEND)
|
||||
dev->power.power_state = PMSG_RESUME;
|
||||
|
||||
if (pm_runtime_suspended(dev) && (codec->jackpoll_interval ||
|
||||
hda_codec_need_resume(codec) || codec->forced_resume))
|
||||
pm_request_resume(dev);
|
||||
|
@ -3520,6 +3520,7 @@ static int cap_sw_put(struct snd_kcontrol *kcontrol,
|
||||
static const struct snd_kcontrol_new cap_sw_temp = {
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "Capture Switch",
|
||||
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
|
||||
.info = cap_sw_info,
|
||||
.get = cap_sw_get,
|
||||
.put = cap_sw_put,
|
||||
|
@ -2485,6 +2485,9 @@ static const struct pci_device_id azx_ids[] = {
|
||||
/* Alderlake-P */
|
||||
{ PCI_DEVICE(0x8086, 0x51c8),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
/* Alderlake-M */
|
||||
{ PCI_DEVICE(0x8086, 0x51cc),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
/* Elkhart Lake */
|
||||
{ PCI_DEVICE(0x8086, 0x4b55),
|
||||
.driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
|
||||
|
@ -2206,10 +2206,9 @@ static void cs8409_cs42l42_fixups(struct hda_codec *codec,
|
||||
break;
|
||||
case HDA_FIXUP_ACT_PROBE:
|
||||
|
||||
/* Set initial volume on Bullseye to -26 dB */
|
||||
if (codec->fixup_id == CS8409_BULLSEYE)
|
||||
snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,
|
||||
HDA_INPUT, 0, 0xff, 0x19);
|
||||
/* Set initial DMIC volume to -26 dB */
|
||||
snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,
|
||||
HDA_INPUT, 0, 0xff, 0x19);
|
||||
snd_hda_gen_add_kctl(&spec->gen,
|
||||
NULL, &cs8409_cs42l42_hp_volume_mixer);
|
||||
snd_hda_gen_add_kctl(&spec->gen,
|
||||
|
@ -8303,6 +8303,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x82bf, "HP G3 mini", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x841c, "HP Pavilion 15-CK0xx", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN),
|
||||
SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
|
Loading…
Reference in New Issue
Block a user