Merge tag 'sound-5.2-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "No big surprises here, just a few device-specific fixes. HD-audio received several fixes for Acer, Dell, Huawei and other laptops as well as the workaround for the new Intel chipset. One significant one-liner fix is the disablement of the node-power saving on Realtek codecs, which may potentially cover annoying bugs like the background noises or click noises on many devices. Other than that, a fix for FireWire bit definitions, and another fix for LINE6 USB audio bug that was discovered by syzkaller" * tag 'sound-5.2-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: fireface: Use ULL suffixes for 64-bit constants ALSA: hda/realtek - Improve the headset mic for Acer Aspire laptops ALSA: line6: Assure canceling delayed work at disconnection ALSA: hda - Force polling mode on CNL for fixing codec communication ALSA: hda/realtek - Enable micmute LED for Huawei laptops ALSA: hda/realtek - Set default power save node to 0 ALSA: hda/realtek - Check headset type by unplug and resume
Этот коммит содержится в:
@@ -720,6 +720,15 @@ static int line6_init_cap_control(struct usb_line6 *line6)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void line6_startup_work(struct work_struct *work)
|
||||
{
|
||||
struct usb_line6 *line6 =
|
||||
container_of(work, struct usb_line6, startup_work.work);
|
||||
|
||||
if (line6->startup)
|
||||
line6->startup(line6);
|
||||
}
|
||||
|
||||
/*
|
||||
Probe USB device.
|
||||
*/
|
||||
@@ -755,6 +764,7 @@ int line6_probe(struct usb_interface *interface,
|
||||
line6->properties = properties;
|
||||
line6->usbdev = usbdev;
|
||||
line6->ifcdev = &interface->dev;
|
||||
INIT_DELAYED_WORK(&line6->startup_work, line6_startup_work);
|
||||
|
||||
strcpy(card->id, properties->id);
|
||||
strcpy(card->driver, driver_name);
|
||||
@@ -825,6 +835,8 @@ void line6_disconnect(struct usb_interface *interface)
|
||||
if (WARN_ON(usbdev != line6->usbdev))
|
||||
return;
|
||||
|
||||
cancel_delayed_work(&line6->startup_work);
|
||||
|
||||
if (line6->urb_listen != NULL)
|
||||
line6_stop_listen(line6);
|
||||
|
||||
|
@@ -178,11 +178,15 @@ struct usb_line6 {
|
||||
fifo;
|
||||
} messages;
|
||||
|
||||
/* Work for delayed PCM startup */
|
||||
struct delayed_work startup_work;
|
||||
|
||||
/* If MIDI is supported, buffer_message contains the pre-processed data;
|
||||
* otherwise the data is only in urb_listen (buffer_incoming).
|
||||
*/
|
||||
void (*process_message)(struct usb_line6 *);
|
||||
void (*disconnect)(struct usb_line6 *line6);
|
||||
void (*startup)(struct usb_line6 *line6);
|
||||
};
|
||||
|
||||
extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1,
|
||||
|
@@ -54,9 +54,6 @@ struct usb_line6_toneport {
|
||||
/* Firmware version (x 100) */
|
||||
u8 firmware_version;
|
||||
|
||||
/* Work for delayed PCM startup */
|
||||
struct delayed_work pcm_work;
|
||||
|
||||
/* Device type */
|
||||
enum line6_device_type type;
|
||||
|
||||
@@ -241,12 +238,8 @@ static int snd_toneport_source_put(struct snd_kcontrol *kcontrol,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void toneport_start_pcm(struct work_struct *work)
|
||||
static void toneport_startup(struct usb_line6 *line6)
|
||||
{
|
||||
struct usb_line6_toneport *toneport =
|
||||
container_of(work, struct usb_line6_toneport, pcm_work.work);
|
||||
struct usb_line6 *line6 = &toneport->line6;
|
||||
|
||||
line6_pcm_acquire(line6->line6pcm, LINE6_STREAM_MONITOR, true);
|
||||
}
|
||||
|
||||
@@ -394,7 +387,7 @@ static int toneport_setup(struct usb_line6_toneport *toneport)
|
||||
if (toneport_has_led(toneport))
|
||||
toneport_update_led(toneport);
|
||||
|
||||
schedule_delayed_work(&toneport->pcm_work,
|
||||
schedule_delayed_work(&toneport->line6.startup_work,
|
||||
msecs_to_jiffies(TONEPORT_PCM_DELAY * 1000));
|
||||
return 0;
|
||||
}
|
||||
@@ -407,8 +400,6 @@ static void line6_toneport_disconnect(struct usb_line6 *line6)
|
||||
struct usb_line6_toneport *toneport =
|
||||
(struct usb_line6_toneport *)line6;
|
||||
|
||||
cancel_delayed_work_sync(&toneport->pcm_work);
|
||||
|
||||
if (toneport_has_led(toneport))
|
||||
toneport_remove_leds(toneport);
|
||||
}
|
||||
@@ -424,9 +415,9 @@ static int toneport_init(struct usb_line6 *line6,
|
||||
struct usb_line6_toneport *toneport = (struct usb_line6_toneport *) line6;
|
||||
|
||||
toneport->type = id->driver_info;
|
||||
INIT_DELAYED_WORK(&toneport->pcm_work, toneport_start_pcm);
|
||||
|
||||
line6->disconnect = line6_toneport_disconnect;
|
||||
line6->startup = toneport_startup;
|
||||
|
||||
/* initialize PCM subsystem: */
|
||||
err = line6_init_pcm(line6, &toneport_pcm_properties);
|
||||
|
Ссылка в новой задаче
Block a user