mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-25 09:41:09 -04:00
Currently, the delayed IRQ handling for PCM streams is managed in a single work embedded in hda_intel, but this is basically a per-stream thing. Due to the single work, we can't cancel the work properly at closing each stream, for example. For making the IRQ pending work to be stream-based, this patch changes the following: - An extended version of azx_dev (i.e. the hd-audio stream object) is defined for snd-hda-intel - The irq_pending flag and irq_pending_work are moved to hda_intel_stream, so that they can be hda-intel stream specific - The stream creation and assignment are refactored so that snd-hda-intel can handle individually; the snd-hda-intel specific workaround for stream tags is also moved to snd-hda-intel itself instead of the common code - The irq pending work is canceled properly at free / shutdown While we're at it, changed the bit field flag to bool, as the bit field doesn't help much in our case. Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20260519121157.28477-1-tiwai@suse.de
48 lines
1.0 KiB
C
48 lines
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
*/
|
|
#ifndef __SOUND_HDA_INTEL_H
|
|
#define __SOUND_HDA_INTEL_H
|
|
|
|
#include "hda_controller.h"
|
|
|
|
struct hda_intel {
|
|
struct azx chip;
|
|
|
|
/* sync probing */
|
|
struct completion probe_wait;
|
|
struct delayed_work probe_work;
|
|
|
|
/* card list (for power_save trigger) */
|
|
struct list_head list;
|
|
|
|
/* extra flags */
|
|
unsigned int irq_pending_warned:1;
|
|
unsigned int probe_continued:1;
|
|
unsigned int runtime_pm_disabled:1;
|
|
|
|
/* vga_switcheroo setup */
|
|
unsigned int use_vga_switcheroo:1;
|
|
unsigned int vga_switcheroo_registered:1;
|
|
unsigned int init_failed:1; /* delayed init failed */
|
|
unsigned int freed:1; /* resources already released */
|
|
|
|
bool need_i915_power:1; /* the hda controller needs i915 power */
|
|
|
|
int probe_retry; /* being probe-retry */
|
|
};
|
|
|
|
struct hda_intel_stream {
|
|
struct azx_dev azx_dev;
|
|
|
|
/* for pending irqs */
|
|
struct hda_intel *hda;
|
|
struct work_struct irq_pending_work;
|
|
bool irq_pending;
|
|
};
|
|
|
|
#define azx_dev_to_istream(azx_dev) \
|
|
container_of(azx_dev, struct hda_intel_stream, azx_dev)
|
|
|
|
#endif
|