162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * u_uac2.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Utility definitions for UAC2 function
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (c) 2014 Samsung Electronics Co., Ltd.
862306a36Sopenharmony_ci *		http://www.samsung.com
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifndef U_UAC2_H
1462306a36Sopenharmony_ci#define U_UAC2_H
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/usb/composite.h>
1762306a36Sopenharmony_ci#include "uac_common.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define UAC2_DEF_PCHMASK 0x3
2062306a36Sopenharmony_ci#define UAC2_DEF_PSRATE 48000
2162306a36Sopenharmony_ci#define UAC2_DEF_PSSIZE 2
2262306a36Sopenharmony_ci#define UAC2_DEF_PHSBINT 0
2362306a36Sopenharmony_ci#define UAC2_DEF_CCHMASK 0x3
2462306a36Sopenharmony_ci#define UAC2_DEF_CSRATE 64000
2562306a36Sopenharmony_ci#define UAC2_DEF_CSSIZE 2
2662306a36Sopenharmony_ci#define UAC2_DEF_CHSBINT 0
2762306a36Sopenharmony_ci#define UAC2_DEF_CSYNC		USB_ENDPOINT_SYNC_ASYNC
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define UAC2_DEF_MUTE_PRESENT	1
3062306a36Sopenharmony_ci#define UAC2_DEF_VOLUME_PRESENT 1
3162306a36Sopenharmony_ci#define UAC2_DEF_MIN_DB		(-100*256)	/* -100 dB */
3262306a36Sopenharmony_ci#define UAC2_DEF_MAX_DB		0		/* 0 dB */
3362306a36Sopenharmony_ci#define UAC2_DEF_RES_DB		(1*256)		/* 1 dB */
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define UAC2_DEF_REQ_NUM 2
3662306a36Sopenharmony_ci#define UAC2_DEF_INT_REQ_NUM	10
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistruct f_uac2_opts {
3962306a36Sopenharmony_ci	struct usb_function_instance	func_inst;
4062306a36Sopenharmony_ci	int				p_chmask;
4162306a36Sopenharmony_ci	int				p_srates[UAC_MAX_RATES];
4262306a36Sopenharmony_ci	int				p_ssize;
4362306a36Sopenharmony_ci	u8				p_hs_bint;
4462306a36Sopenharmony_ci	int				c_chmask;
4562306a36Sopenharmony_ci	int				c_srates[UAC_MAX_RATES];
4662306a36Sopenharmony_ci	int				c_ssize;
4762306a36Sopenharmony_ci	int				c_sync;
4862306a36Sopenharmony_ci	u8				c_hs_bint;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	bool			p_mute_present;
5162306a36Sopenharmony_ci	bool			p_volume_present;
5262306a36Sopenharmony_ci	s16				p_volume_min;
5362306a36Sopenharmony_ci	s16				p_volume_max;
5462306a36Sopenharmony_ci	s16				p_volume_res;
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci	bool			c_mute_present;
5762306a36Sopenharmony_ci	bool			c_volume_present;
5862306a36Sopenharmony_ci	s16				c_volume_min;
5962306a36Sopenharmony_ci	s16				c_volume_max;
6062306a36Sopenharmony_ci	s16				c_volume_res;
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci	int				req_number;
6362306a36Sopenharmony_ci	int				fb_max;
6462306a36Sopenharmony_ci	bool			bound;
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	char			function_name[32];
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	struct mutex			lock;
6962306a36Sopenharmony_ci	int				refcnt;
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci#endif
73