usb: gadget: f_uac2: add volume and mute support
This adds bi-directional (host->device, device->host) volume/mute support to the f_uac2 driver by adding Feature Units and interrupt endpoint. Currently only master channel is supported. Volume and mute are configurable through configfs, by default volume has -100..0 dB range with 1 dB step. Similar to existing flexible endpoints configuration, Feature Unit won't be added to the topology if both mute and volume are not enabled, also interrupt endpoint isn't added to the device if no feature unit is present Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com> Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com> Link: https://lore.kernel.org/r/20210712125529.76070-4-pavel.hofman@ivitera.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
02de698ca8
commit
eaf6cbe099
|
@ -9,8 +9,18 @@ Description:
|
|||
c_srate capture sampling rate
|
||||
c_ssize capture sample size (bytes)
|
||||
c_sync capture synchronization type (async/adaptive)
|
||||
c_mute_present capture mute control enable
|
||||
c_volume_present capture volume control enable
|
||||
c_volume_min capture volume control min value (in 1/256 dB)
|
||||
c_volume_max capture volume control max value (in 1/256 dB)
|
||||
c_volume_res capture volume control resolution (in 1/256 dB)
|
||||
fb_max maximum extra bandwidth in async mode
|
||||
p_chmask playback channel mask
|
||||
p_srate playback sampling rate
|
||||
p_ssize playback sample size (bytes)
|
||||
p_mute_present playback mute control enable
|
||||
p_volume_present playback volume control enable
|
||||
p_volume_min playback volume control min value (in 1/256 dB)
|
||||
p_volume_max playback volume control max value (in 1/256 dB)
|
||||
p_volume_res playback volume control resolution (in 1/256 dB)
|
||||
========= ============================
|
||||
|
|
|
@ -729,10 +729,20 @@ The uac2 function provides these attributes in its function directory:
|
|||
c_srate capture sampling rate
|
||||
c_ssize capture sample size (bytes)
|
||||
c_sync capture synchronization type (async/adaptive)
|
||||
fb_max maximum extra bandwidth in async mode
|
||||
c_mute_present capture mute control enable
|
||||
c_volume_present capture volume control enable
|
||||
c_volume_min capture volume control min value (in 1/256 dB)
|
||||
c_volume_max capture volume control max value (in 1/256 dB)
|
||||
c_volume_res capture volume control resolution (in 1/256 dB)
|
||||
fb_max maximum extra bandwidth in async mode
|
||||
p_chmask playback channel mask
|
||||
p_srate playback sampling rate
|
||||
p_ssize playback sample size (bytes)
|
||||
p_mute_present playback mute control enable
|
||||
p_volume_present playback volume control enable
|
||||
p_volume_min playback volume control min value (in 1/256 dB)
|
||||
p_volume_max playback volume control max value (in 1/256 dB)
|
||||
p_volume_res playback volume control resolution (in 1/256 dB)
|
||||
req_number the number of pre-allocated request for both capture
|
||||
and playback
|
||||
=============== ====================================================
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -22,8 +22,16 @@
|
|||
#define UAC2_DEF_CSRATE 64000
|
||||
#define UAC2_DEF_CSSIZE 2
|
||||
#define UAC2_DEF_CSYNC USB_ENDPOINT_SYNC_ASYNC
|
||||
|
||||
#define UAC2_DEF_MUTE_PRESENT 1
|
||||
#define UAC2_DEF_VOLUME_PRESENT 1
|
||||
#define UAC2_DEF_MIN_DB (-100*256) /* -100 dB */
|
||||
#define UAC2_DEF_MAX_DB 0 /* 0 dB */
|
||||
#define UAC2_DEF_RES_DB (1*256) /* 1 dB */
|
||||
|
||||
#define UAC2_DEF_REQ_NUM 2
|
||||
#define UAC2_DEF_FB_MAX 5
|
||||
#define UAC2_DEF_INT_REQ_NUM 10
|
||||
|
||||
struct f_uac2_opts {
|
||||
struct usb_function_instance func_inst;
|
||||
|
@ -34,9 +42,22 @@ struct f_uac2_opts {
|
|||
int c_srate;
|
||||
int c_ssize;
|
||||
int c_sync;
|
||||
|
||||
bool p_mute_present;
|
||||
bool p_volume_present;
|
||||
s16 p_volume_min;
|
||||
s16 p_volume_max;
|
||||
s16 p_volume_res;
|
||||
|
||||
bool c_mute_present;
|
||||
bool c_volume_present;
|
||||
s16 c_volume_min;
|
||||
s16 c_volume_max;
|
||||
s16 c_volume_res;
|
||||
|
||||
int req_number;
|
||||
int fb_max;
|
||||
bool bound;
|
||||
bool bound;
|
||||
|
||||
struct mutex lock;
|
||||
int refcnt;
|
||||
|
|
Loading…
Reference in New Issue