Commit 0356e628 authored by Ruslan Bilovol's avatar Ruslan Bilovol Committed by Greg Kroah-Hartman
Browse files

usb: gadget: f_uac1: add volume and mute support



This adds bi-directional (host->device, device->host)
volume/mute support to the f_uac1 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: default avatarRuslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: default avatarPavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20210712125529.76070-5-pavel.hofman@ivitera.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eaf6cbe0
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -8,9 +8,19 @@ Description:
		c_chmask	capture channel mask
		c_srate		capture sampling rate
		c_ssize		capture sample size (bytes)
		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)
		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
		==========	===================================
+18 −8
Original line number Diff line number Diff line
@@ -918,9 +918,19 @@ The uac1 function provides these attributes in its function directory:
	c_chmask   	capture channel mask
	c_srate    	capture sampling rate
	c_ssize    	capture sample size (bytes)
	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)
	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
	========== ====================================================
+652 −22

File changed.

Preview size limit exceeded, changes collapsed.

+20 −0
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@
#define UAC1_DEF_PSRATE		48000
#define UAC1_DEF_PSSIZE		2
#define UAC1_DEF_REQ_NUM	2
#define UAC1_DEF_INT_REQ_NUM	10

#define UAC1_DEF_MUTE_PRESENT	1
#define UAC1_DEF_VOLUME_PRESENT 1
#define UAC1_DEF_MIN_DB		(-100*256)	/* -100 dB */
#define UAC1_DEF_MAX_DB		0		/* 0 dB */
#define UAC1_DEF_RES_DB		(1*256)	/* 1 dB */


struct f_uac1_opts {
@@ -28,6 +35,19 @@ struct f_uac1_opts {
	int				p_chmask;
	int				p_srate;
	int				p_ssize;

	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;
	unsigned			bound:1;