-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmJpLt4ACgkQONu9yGCS aT5Wjg//dzSnqQoqXgMjLwSoMx15rfs/HjC8vgRUpdKctpzITabLc7ywdbcxuyQt it+tlQAFMIq2caH20M+u91zm1kre9f8ap5KnVEt+snkJK+mxWZ8u0uxgzGqRJV7w 1SX4lRCdbfT82T2qjlPFlLQ3bFlxy1nbYHJI1lOltl8JXgHEHuFDGH0oWr6QwdOu wAayeL5MmIpUqtLE7G5Jb9Yc1Hg+dCPHGjJNHbtR6URnVGNY664Moz/ij0qWA8RE Gaxxud677xEVoc3OVRS3r9CzEmhZGBeI0xwc9Gc8vGWaVkJGlS2/p/+M8mk75yKu gUpGZE2DNZ+8G0rs/9hs74nV01KpcOCJokLTqka+0MqKHalNVibkw8RPLThn30Ct JyK43veFQigd3WJULwvOaoM4YBzCishYQc2jvyftZRqb5rxRfTk62UoQoqNgmhyr 1MDUS8w741jF0qdH/v8Wgv7H64d4iilZV6VqVtWiyowPphHbd76qGpRSe42Xg/gY gL/xfjS17Uwid5es+wzIP4J9D3yxwwh3KZjgfAuaOVnMVCn2RqEjZyqQJSCAc8sF kCPMbXjAN9/5sGwidGGDf7ML67MIcIF6928pel95RU3lmz7X5cEzN2FCeAZg28rn W2iiSeWEh6XD7Pzbd+TYYftG3M2kGN6qzaKM2wOGNc6cK/dDROs= =NhyD -----END PGP SIGNATURE----- Merge 5.10.113 into android12-5.10-lts Changes in 5.10.113 etherdevice: Adjust ether_addr* prototypes to silence -Wstringop-overead mm: page_alloc: fix building error on -Werror=array-compare tracing: Dump stacktrace trigger to the corresponding instance perf tools: Fix segfault accessing sample_id xyarray gfs2: assign rgrp glock before compute_bitstructs net/sched: cls_u32: fix netns refcount changes in u32_change() ALSA: usb-audio: Clear MIDI port active flag after draining ALSA: hda/realtek: Add quirk for Clevo NP70PNP dm: fix mempool NULL pointer race when completing IO ASoC: atmel: Remove system clock tree configuration for at91sam9g20ek ASoC: msm8916-wcd-digital: Check failure for devm_snd_soc_register_component ASoC: codecs: wcd934x: do not switch off SIDO Buck when codec is in use dmaengine: imx-sdma: Fix error checking in sdma_event_remap dmaengine: mediatek:Fix PM usage reference leak of mtk_uart_apdma_alloc_chan_resources spi: spi-mtk-nor: initialize spi controller after resume esp: limit skb_page_frag_refill use to a single page igc: Fix infinite loop in release_swfw_sync igc: Fix BUG: scheduling while atomic rxrpc: Restore removed timer deletion net/smc: Fix sock leak when release after smc_shutdown() net/packet: fix packet_sock xmit return value checking ip6_gre: Avoid updating tunnel->tun_hlen in __gre6_xmit() ip6_gre: Fix skb_under_panic in __gre6_xmit() net/sched: cls_u32: fix possible leak in u32_init_knode() l3mdev: l3mdev_master_upper_ifindex_by_index_rcu should be using netdev_master_upper_dev_get_rcu ipv6: make ip6_rt_gc_expire an atomic_t netlink: reset network and mac headers in netlink_dump() net: stmmac: Use readl_poll_timeout_atomic() in atomic state dmaengine: idxd: add RO check for wq max_batch_size write dmaengine: idxd: add RO check for wq max_transfer_size write selftests: mlxsw: vxlan_flooding: Prevent flooding of unwanted packets arm64/mm: Remove [PUD|PMD]_TABLE_BIT from [pud|pmd]_bad() arm64: mm: fix p?d_leaf() ARM: vexpress/spc: Avoid negative array index when !SMP reset: tegra-bpmp: Restore Handle errors in BPMP response platform/x86: samsung-laptop: Fix an unsigned comparison which can never be negative ALSA: usb-audio: Fix undefined behavior due to shift overflowing the constant arm64: dts: imx: Fix imx8*-var-som touchscreen property sizes vxlan: fix error return code in vxlan_fdb_append cifs: Check the IOCB_DIRECT flag, not O_DIRECT net: atlantic: Avoid out-of-bounds indexing mt76: Fix undefined behavior due to shift overflowing the constant brcmfmac: sdio: Fix undefined behavior due to shift overflowing the constant dpaa_eth: Fix missing of_node_put in dpaa_get_ts_info() drm/msm/mdp5: check the return of kzalloc() net: macb: Restart tx only if queue pointer is lagging scsi: qedi: Fix failed disconnect handling stat: fix inconsistency between struct stat and struct compat_stat nvme: add a quirk to disable namespace identifiers nvme-pci: disable namespace identifiers for Qemu controllers EDAC/synopsys: Read the error count from the correct register mm, hugetlb: allow for "high" userspace addresses oom_kill.c: futex: delay the OOM reaper to allow time for proper futex cleanup mm/mmu_notifier.c: fix race in mmu_interval_notifier_remove() ata: pata_marvell: Check the 'bmdma_addr' beforing reading dma: at_xdmac: fix a missing check on list iterator net: atlantic: invert deep par in pm functions, preventing null derefs xtensa: patch_text: Fixup last cpu should be master xtensa: fix a7 clobbering in coprocessor context load/store openvswitch: fix OOB access in reserve_sfa_size() gpio: Request interrupts after IRQ is initialized ASoC: soc-dapm: fix two incorrect uses of list iterator e1000e: Fix possible overflow in LTR decoding ARC: entry: fix syscall_trace_exit argument arm_pmu: Validate single/group leader events sched/pelt: Fix attach_entity_load_avg() corner case perf/core: Fix perf_mmap fail when CONFIG_PERF_USE_VMALLOC enabled drm/panel/raspberrypi-touchscreen: Avoid NULL deref if not initialised drm/panel/raspberrypi-touchscreen: Initialise the bridge in prepare KVM: PPC: Fix TCE handling for VFIO drm/vc4: Use pm_runtime_resume_and_get to fix pm_runtime_get_sync() usage powerpc/perf: Fix power9 event alternatives perf report: Set PERF_SAMPLE_DATA_SRC bit for Arm SPE event ext4: fix fallocate to use file_modified to update permissions consistently ext4: fix symlink file size not match to file content ext4: fix use-after-free in ext4_search_dir ext4: limit length to bitmap_maxbytes - blocksize in punch_hole ext4, doc: fix incorrect h_reserved size ext4: fix overhead calculation to account for the reserved gdt blocks ext4: force overhead calculation if the s_overhead_cluster makes no sense can: isotp: stop timeout monitoring when no first frame was sent jbd2: fix a potential race while discarding reserved buffers after an abort spi: atmel-quadspi: Fix the buswidth adjustment between spi-mem and controller staging: ion: Prevent incorrect reference counting behavour block/compat_ioctl: fix range check in BLKGETSIZE Revert "net: micrel: fix KS8851_MLL Kconfig" Linux 5.10.113 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I4ed10699cbb32b89caf79b8b4a2a35b3d8824115
192 lines
5.6 KiB
C
192 lines
5.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#ifndef __USBAUDIO_H
|
|
#define __USBAUDIO_H
|
|
/*
|
|
* (Tentative) USB Audio Driver for ALSA
|
|
*
|
|
* Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
|
|
*/
|
|
|
|
/* handling of USB vendor/product ID pairs as 32-bit numbers */
|
|
#define USB_ID(vendor, product) (((unsigned int)(vendor) << 16) | (product))
|
|
#define USB_ID_VENDOR(id) ((id) >> 16)
|
|
#define USB_ID_PRODUCT(id) ((u16)(id))
|
|
|
|
#include <linux/android_kabi.h>
|
|
|
|
/*
|
|
*
|
|
*/
|
|
|
|
struct media_device;
|
|
struct media_intf_devnode;
|
|
|
|
#define MAX_CARD_INTERFACES 16
|
|
|
|
struct snd_usb_audio {
|
|
int index;
|
|
struct usb_device *dev;
|
|
struct snd_card *card;
|
|
struct usb_interface *intf[MAX_CARD_INTERFACES];
|
|
u32 usb_id;
|
|
uint16_t quirk_type;
|
|
struct mutex mutex;
|
|
unsigned int system_suspend;
|
|
atomic_t active;
|
|
atomic_t shutdown;
|
|
atomic_t usage_count;
|
|
wait_queue_head_t shutdown_wait;
|
|
unsigned int txfr_quirk:1; /* Subframe boundaries on transfers */
|
|
unsigned int tx_length_quirk:1; /* Put length specifier in transfers */
|
|
unsigned int setup_fmt_after_resume_quirk:1; /* setup the format to interface after resume */
|
|
unsigned int need_delayed_register:1; /* warn for delayed registration */
|
|
int num_interfaces;
|
|
int num_suspended_intf;
|
|
int sample_rate_read_error;
|
|
|
|
int badd_profile; /* UAC3 BADD profile */
|
|
|
|
struct list_head pcm_list; /* list of pcm streams */
|
|
struct list_head ep_list; /* list of audio-related endpoints */
|
|
int pcm_devs;
|
|
|
|
struct list_head midi_list; /* list of midi interfaces */
|
|
|
|
struct list_head mixer_list; /* list of mixer interfaces */
|
|
|
|
int setup; /* from the 'device_setup' module param */
|
|
bool autoclock; /* from the 'autoclock' module param */
|
|
bool keep_iface; /* keep interface/altset after closing
|
|
* or parameter change
|
|
*/
|
|
|
|
struct usb_host_interface *ctrl_intf; /* the audio control interface */
|
|
struct media_device *media_dev;
|
|
struct media_intf_devnode *ctl_intf_media_devnode;
|
|
struct mutex dev_lock; /* to protect any race with disconnect */
|
|
int card_num; /* cache pcm card number to use upon disconnect */
|
|
void (*disconnect_cb)(struct snd_usb_audio *chip);
|
|
|
|
ANDROID_KABI_RESERVE(1);
|
|
ANDROID_KABI_RESERVE(2);
|
|
ANDROID_KABI_RESERVE(3);
|
|
ANDROID_KABI_RESERVE(4);
|
|
};
|
|
|
|
#define USB_AUDIO_IFACE_UNUSED ((void *)-1L)
|
|
|
|
#define usb_audio_err(chip, fmt, args...) \
|
|
dev_err(&(chip)->dev->dev, fmt, ##args)
|
|
#define usb_audio_warn(chip, fmt, args...) \
|
|
dev_warn(&(chip)->dev->dev, fmt, ##args)
|
|
#define usb_audio_info(chip, fmt, args...) \
|
|
dev_info(&(chip)->dev->dev, fmt, ##args)
|
|
#define usb_audio_dbg(chip, fmt, args...) \
|
|
dev_dbg(&(chip)->dev->dev, fmt, ##args)
|
|
|
|
/*
|
|
* Information about devices with broken descriptors
|
|
*/
|
|
|
|
/* special values for .ifnum */
|
|
#define QUIRK_NO_INTERFACE -2
|
|
#define QUIRK_ANY_INTERFACE -1
|
|
|
|
enum quirk_type {
|
|
QUIRK_IGNORE_INTERFACE,
|
|
QUIRK_COMPOSITE,
|
|
QUIRK_AUTODETECT,
|
|
QUIRK_MIDI_STANDARD_INTERFACE,
|
|
QUIRK_MIDI_FIXED_ENDPOINT,
|
|
QUIRK_MIDI_YAMAHA,
|
|
QUIRK_MIDI_ROLAND,
|
|
QUIRK_MIDI_MIDIMAN,
|
|
QUIRK_MIDI_NOVATION,
|
|
QUIRK_MIDI_RAW_BYTES,
|
|
QUIRK_MIDI_EMAGIC,
|
|
QUIRK_MIDI_CME,
|
|
QUIRK_MIDI_AKAI,
|
|
QUIRK_MIDI_US122L,
|
|
QUIRK_MIDI_FTDI,
|
|
QUIRK_MIDI_CH345,
|
|
QUIRK_AUDIO_STANDARD_INTERFACE,
|
|
QUIRK_AUDIO_FIXED_ENDPOINT,
|
|
QUIRK_AUDIO_EDIROL_UAXX,
|
|
QUIRK_AUDIO_ALIGN_TRANSFER,
|
|
QUIRK_AUDIO_STANDARD_MIXER,
|
|
QUIRK_SETUP_FMT_AFTER_RESUME,
|
|
QUIRK_SETUP_DISABLE_AUTOSUSPEND,
|
|
|
|
QUIRK_TYPE_COUNT
|
|
};
|
|
|
|
struct snd_usb_audio_quirk {
|
|
const char *vendor_name;
|
|
const char *product_name;
|
|
int16_t ifnum;
|
|
uint16_t type;
|
|
bool shares_media_device;
|
|
const void *data;
|
|
};
|
|
|
|
#define combine_word(s) ((*(s)) | ((unsigned int)(s)[1] << 8))
|
|
#define combine_triple(s) (combine_word(s) | ((unsigned int)(s)[2] << 16))
|
|
#define combine_quad(s) (combine_triple(s) | ((unsigned int)(s)[3] << 24))
|
|
|
|
int snd_usb_lock_shutdown(struct snd_usb_audio *chip);
|
|
void snd_usb_unlock_shutdown(struct snd_usb_audio *chip);
|
|
|
|
extern bool snd_usb_use_vmalloc;
|
|
extern bool snd_usb_skip_validation;
|
|
|
|
struct audioformat;
|
|
|
|
enum snd_vendor_pcm_open_close {
|
|
SOUND_PCM_CLOSE = 0,
|
|
SOUND_PCM_OPEN,
|
|
};
|
|
|
|
/**
|
|
* struct snd_usb_audio_vendor_ops - function callbacks for USB audio accelerators
|
|
* @connect: called when a new interface is found
|
|
* @disconnect: called when an interface is removed
|
|
* @set_interface: called when an interface is initialized
|
|
* @set_rate: called when the rate is set
|
|
* @set_pcm_buf: called when the pcm buffer is set
|
|
* @set_pcm_intf: called when the pcm interface is set
|
|
* @set_pcm_connection: called when pcm is opened/closed
|
|
* @set_pcm_binterval: called when the pcm binterval is set
|
|
* @usb_add_ctls: called when USB controls are added
|
|
*
|
|
* Set of callbacks for some accelerated USB audio streaming hardware.
|
|
*
|
|
* TODO: make this USB host-controller specific, right now this only works for
|
|
* one USB controller in the system at a time, which is only realistic for
|
|
* self-contained systems like phones.
|
|
*/
|
|
struct snd_usb_audio_vendor_ops {
|
|
int (*connect)(struct usb_interface *intf);
|
|
void (*disconnect)(struct usb_interface *intf);
|
|
|
|
int (*set_interface)(struct usb_device *udev,
|
|
struct usb_host_interface *alts,
|
|
int iface, int alt);
|
|
int (*set_rate)(struct usb_interface *intf, int iface, int rate,
|
|
int alt);
|
|
int (*set_pcm_buf)(struct usb_device *udev, int iface);
|
|
int (*set_pcm_intf)(struct usb_interface *intf, int iface, int alt,
|
|
int direction);
|
|
int (*set_pcm_connection)(struct usb_device *udev,
|
|
enum snd_vendor_pcm_open_close onoff,
|
|
int direction);
|
|
int (*set_pcm_binterval)(struct audioformat *fp,
|
|
struct audioformat *found,
|
|
int *cur_attr, int *attr);
|
|
int (*usb_add_ctls)(struct snd_usb_audio *chip);
|
|
|
|
ANDROID_KABI_RESERVE(1);
|
|
ANDROID_KABI_RESERVE(2);
|
|
};
|
|
|
|
#endif /* __USBAUDIO_H */
|