mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
4d4dee0aef
As more and more device-specific workarounds came up and gathered in various places, it becomes harder to manage. Now it's time to clean up and collect workarounds more consistently and make them more easily applicable. This patch is the first step for that: a new field quirk_flags is introduced in snd_usb_audio struct to contain the bit flags for various device-specific quirks. Those are separate one from the quirks in quirks-table.h; the quirks-table.h entries are for more intrusive stuff that needs the descriptor override, while the new quirk_flags is for easier ones that are tied with the vendor:product IDs. In this patch, as the first example, we convert the list of devices and vendors to ignore GET_SAMPLE_RATE, formerly defined in snb_usb_get_sample_rate_quirk(). Link: https://lore.kernel.org/r/20210729073855.19043-2-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __USBAUDIO_QUIRKS_H
|
|
#define __USBAUDIO_QUIRKS_H
|
|
|
|
struct audioformat;
|
|
struct snd_usb_endpoint;
|
|
struct snd_usb_substream;
|
|
|
|
int snd_usb_create_quirk(struct snd_usb_audio *chip,
|
|
struct usb_interface *iface,
|
|
struct usb_driver *driver,
|
|
const struct snd_usb_audio_quirk *quirk);
|
|
|
|
int snd_usb_apply_interface_quirk(struct snd_usb_audio *chip,
|
|
int iface,
|
|
int altno);
|
|
|
|
int snd_usb_apply_boot_quirk(struct usb_device *dev,
|
|
struct usb_interface *intf,
|
|
const struct snd_usb_audio_quirk *quirk,
|
|
unsigned int usb_id);
|
|
|
|
int snd_usb_apply_boot_quirk_once(struct usb_device *dev,
|
|
struct usb_interface *intf,
|
|
const struct snd_usb_audio_quirk *quirk,
|
|
unsigned int usb_id);
|
|
|
|
void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
|
|
const struct audioformat *fmt);
|
|
|
|
int snd_usb_is_big_endian_format(struct snd_usb_audio *chip,
|
|
const struct audioformat *fp);
|
|
|
|
void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep);
|
|
|
|
void snd_usb_set_interface_quirk(struct snd_usb_audio *chip);
|
|
void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
|
|
__u8 request, __u8 requesttype, __u16 value,
|
|
__u16 index, void *data, __u16 size);
|
|
|
|
int snd_usb_select_mode_quirk(struct snd_usb_audio *chip,
|
|
const struct audioformat *fmt);
|
|
|
|
u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
|
|
struct audioformat *fp,
|
|
unsigned int sample_bytes);
|
|
|
|
void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
|
|
struct audioformat *fp,
|
|
int stream);
|
|
|
|
bool snd_usb_registration_quirk(struct snd_usb_audio *chip, int iface);
|
|
|
|
void snd_usb_init_quirk_flags(struct snd_usb_audio *chip);
|
|
|
|
#endif /* __USBAUDIO_QUIRKS_H */
|