
A list of sampling rates can be specified via configfs. All enabled sampling rates are sent to the USB host on request. When the host selects a sampling rate, the internal active rate (stored in struct f_uac2) is updated. The gadget no longer supports only one frequency. Therefore USB strings corresponding to the clock sources are renamed from specific Hz value to general names Input clock/Output clock. Config strings with single value stay compatible with the previous version. Multiple samplerates passed as configuration arrays to g_audio module when built for f_uac2. Signed-off-by: Julian Scheel <julian@jusst.de> Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com> Link: https://lore.kernel.org/r/20220121155308.48794-6-pavel.hofman@ivitera.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Bug: 235196743 (cherry picked from commit a7339e4f5788bd088bb0be1f96a6cce459676ed0) Change-Id: I3ee59833975c6d010cd3335da0746eec828f4a0e Signed-off-by: Luiz Matheus <luizmmat@motorola.com>
67 lines
1.3 KiB
C
67 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* u_uac2.h
|
|
*
|
|
* Utility definitions for UAC2 function
|
|
*
|
|
* Copyright (c) 2014 Samsung Electronics Co., Ltd.
|
|
* http://www.samsung.com
|
|
*
|
|
* Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
|
|
*/
|
|
|
|
#ifndef U_UAC2_H
|
|
#define U_UAC2_H
|
|
|
|
#include <linux/usb/composite.h>
|
|
#include "uac_common.h"
|
|
|
|
#define UAC2_DEF_PCHMASK 0x3
|
|
#define UAC2_DEF_PSRATE 48000
|
|
#define UAC2_DEF_PSSIZE 2
|
|
#define UAC2_DEF_CCHMASK 0x3
|
|
#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_INT_REQ_NUM 10
|
|
|
|
struct f_uac2_opts {
|
|
struct usb_function_instance func_inst;
|
|
int p_chmask;
|
|
int p_srates[UAC_MAX_RATES];
|
|
int p_ssize;
|
|
int c_chmask;
|
|
int c_srates[UAC_MAX_RATES];
|
|
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;
|
|
|
|
struct mutex lock;
|
|
int refcnt;
|
|
};
|
|
|
|
#endif
|