mirror of https://github.com/OpenIPC/firmware.git
92 lines
2.4 KiB
Diff
92 lines
2.4 KiB
Diff
--- linux-4.9.37/drivers/usb/gadget/function/u_audio.h 1970-01-01 03:00:00.000000000 +0300
|
|
+++ linux-4.9.y/drivers/usb/gadget/function/u_audio.h 2021-06-07 13:01:34.000000000 +0300
|
|
@@ -0,0 +1,88 @@
|
|
+/*
|
|
+ * ALSA audio utilities for Gadget stack
|
|
+ *
|
|
+ * Copyright (C) 2008 Bryan Wu <cooloney@kernel.org>
|
|
+ * Copyright (C) 2008 Analog Devices, Inc
|
|
+ *
|
|
+ * Enter bugs at http://blackfin.uclinux.org/
|
|
+ *
|
|
+ * Licensed under the GPL-2 or later.
|
|
+ */
|
|
+
|
|
+#ifndef __U_AUDIO_H
|
|
+#define __U_AUDIO_H
|
|
+
|
|
+#include <linux/usb/composite.h>
|
|
+
|
|
+struct uac_params {
|
|
+ /* playback */
|
|
+ int p_chmask; /* channel mask */
|
|
+ int p_srate; /* rate in Hz */
|
|
+ int p_ssize; /* sample size */
|
|
+
|
|
+ /* capture */
|
|
+ int c_chmask; /* channel mask */
|
|
+ int c_srate; /* rate in Hz */
|
|
+ int c_ssize; /* sample size */
|
|
+
|
|
+ int req_number; /* number of preallocated requests */
|
|
+};
|
|
+
|
|
+struct g_audio {
|
|
+ struct usb_function func;
|
|
+ struct usb_gadget *gadget;
|
|
+
|
|
+ struct usb_ep *in_ep;
|
|
+ struct usb_ep *out_ep;
|
|
+
|
|
+ /* Max packet size for all in_ep possible speeds */
|
|
+ unsigned int in_ep_maxpsize;
|
|
+ /* Max packet size for all out_ep possible speeds */
|
|
+ unsigned int out_ep_maxpsize;
|
|
+
|
|
+ /* The ALSA Sound Card it represents on the USB-Client side */
|
|
+ struct snd_uac_chip *uac;
|
|
+
|
|
+ struct uac_params params;
|
|
+};
|
|
+
|
|
+static inline struct g_audio *func_to_g_audio(struct usb_function *f)
|
|
+{
|
|
+ return container_of(f, struct g_audio, func);
|
|
+}
|
|
+
|
|
+static inline uint num_channels(uint chanmask)
|
|
+{
|
|
+ uint num = 0;
|
|
+
|
|
+ while (chanmask) {
|
|
+ num += (chanmask & 1);
|
|
+ chanmask >>= 1;
|
|
+ }
|
|
+
|
|
+ return num;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * g_audio_setup - initialize one virtual ALSA sound card
|
|
+ * @g_audio: struct with filled params, in_ep_maxpsize, out_ep_maxpsize
|
|
+ * @pcm_name: the id string for a PCM instance of this sound card
|
|
+ * @card_name: name of this soundcard
|
|
+ *
|
|
+ * This sets up the single virtual ALSA sound card that may be exported by a
|
|
+ * gadget driver using this framework.
|
|
+ *
|
|
+ * Context: may sleep
|
|
+ *
|
|
+ * Returns zero on success, or a negative error on failure.
|
|
+ */
|
|
+int g_audio_setup(struct g_audio *g_audio, const char *pcm_name,
|
|
+ const char *card_name);
|
|
+void g_audio_cleanup(struct g_audio *g_audio);
|
|
+
|
|
+int u_audio_start_capture(struct g_audio *g_audio);
|
|
+void u_audio_stop_capture(struct g_audio *g_audio);
|
|
+int u_audio_start_playback(struct g_audio *g_audio);
|
|
+void u_audio_stop_playback(struct g_audio *g_audio);
|
|
+
|
|
+#endif /* __U_AUDIO_H */
|