From b22da3d8526a935aa31e086e63f60ff3246cb61c Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 09 Dec 2023 07:24:11 +0000
Subject: [PATCH] add stmac read mac form eeprom
---
kernel/drivers/usb/gadget/function/u_audio.h | 68 +++++++++++++++++++++++++--------
1 files changed, 51 insertions(+), 17 deletions(-)
diff --git a/kernel/drivers/usb/gadget/function/u_audio.h b/kernel/drivers/usb/gadget/function/u_audio.h
index 0178a35..51286ed 100644
--- a/kernel/drivers/usb/gadget/function/u_audio.h
+++ b/kernel/drivers/usb/gadget/function/u_audio.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
/*
* u_audio.h -- interface to USB gadget "ALSA sound card" utilities
*
@@ -10,33 +10,53 @@
#define __U_AUDIO_H
#include <linux/usb/composite.h>
+#include "uac_common.h"
-#define UAC_VOLUME_CUR 0x0000
-#define UAC_VOLUME_RES 0x0080 /* 0.5 dB */
-#define UAC_VOLUME_MAX 0x1900 /* 25 dB */
-#define UAC_VOLUME_MIN 0xE700 /* -25 dB */
-#define UAC_VOLUME_NEGATIVE_INFINITY 0x8000
-#define UAC_MAX_RATES 10
+/*
+ * Same maximum frequency deviation on the slower side as in
+ * sound/usb/endpoint.c. Value is expressed in per-mil deviation.
+ */
+#define FBACK_SLOW_MAX 250
+
+/*
+ * Maximum frequency deviation on the faster side, default value for UAC1/2.
+ * Value is expressed in per-mil deviation.
+ * UAC2 provides the value as a parameter as it impacts the endpoint required
+ * bandwidth.
+ */
+#define FBACK_FAST_MAX 5
+
+/* Feature Unit parameters */
+struct uac_fu_params {
+ int id; /* Feature Unit ID */
+
+ bool mute_present; /* mute control enable */
+
+ bool volume_present; /* volume control enable */
+ s16 volume_min; /* min volume in 1/256 dB */
+ s16 volume_max; /* max volume in 1/256 dB */
+ s16 volume_res; /* volume resolution in 1/256 dB */
+};
+
struct uac_params {
/* playback */
- int p_volume;
- int p_mute;
int p_chmask; /* channel mask */
- int p_srate[UAC_MAX_RATES]; /* rate in Hz */
- int p_srate_active; /* selected rate in Hz */
+ int p_srates[UAC_MAX_RATES]; /* available rates in Hz (0 terminated list) */
int p_ssize; /* sample size */
+ struct uac_fu_params p_fu; /* Feature Unit parameters */
/* capture */
- int c_volume;
- int c_mute;
int c_chmask; /* channel mask */
- int c_srate[UAC_MAX_RATES]; /* rate in Hz */
- int c_srate_active; /* selected rate in Hz */
+ int c_srates[UAC_MAX_RATES]; /* available rates in Hz (0 terminated list) */
int c_ssize; /* sample size */
+ struct uac_fu_params c_fu; /* Feature Unit parameters */
+
+ /* rates are dynamic, in uac_rtd_params */
int ppm; /* difference between audio clk and usb clk */
int req_number; /* number of preallocated requests */
+ int fb_max; /* upper frequency drift feedback limit per-mil */
};
enum usb_state_index {
@@ -79,12 +99,18 @@
struct usb_gadget *gadget;
struct usb_ep *in_ep;
+
struct usb_ep *out_ep;
+ /* feedback IN endpoint corresponding to out_ep */
+ struct usb_ep *in_ep_fback;
/* 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;
+
+ /* Notify UAC driver about control change */
+ int (*notify)(struct g_audio *g_audio, int unit_id, int cs);
/* The ALSA Sound Card it represents on the USB-Client side */
struct snd_uac_chip *uac;
@@ -130,9 +156,17 @@
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);
+
+int u_audio_get_capture_srate(struct g_audio *audio_dev, u32 *val);
int u_audio_set_capture_srate(struct g_audio *audio_dev, int srate);
+int u_audio_get_playback_srate(struct g_audio *audio_dev, u32 *val);
int u_audio_set_playback_srate(struct g_audio *audio_dev, int srate);
-int u_audio_fu_set_cmd(struct usb_audio_control *con, u8 cmd, int value);
-int u_audio_fu_get_cmd(struct usb_audio_control *con, u8 cmd);
+
+int u_audio_get_volume(struct g_audio *g_audio, int playback, s16 *val);
+int u_audio_set_volume(struct g_audio *g_audio, int playback, s16 val);
+int u_audio_get_mute(struct g_audio *g_audio, int playback, int *val);
+int u_audio_set_mute(struct g_audio *g_audio, int playback, int val);
+
+void u_audio_suspend(struct g_audio *g_audio);
#endif /* __U_AUDIO_H */
--
Gitblit v1.6.2