162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * u_uac1.h - Utility definitions for UAC1 function
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2016 Ruslan Bilovol <ruslan.bilovol@gmail.com>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __U_UAC1_H
962306a36Sopenharmony_ci#define __U_UAC1_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/usb/composite.h>
1262306a36Sopenharmony_ci#include "uac_common.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define UAC1_OUT_EP_MAX_PACKET_SIZE	200
1562306a36Sopenharmony_ci#define UAC1_DEF_CCHMASK	0x3
1662306a36Sopenharmony_ci#define UAC1_DEF_CSRATE		48000
1762306a36Sopenharmony_ci#define UAC1_DEF_CSSIZE		2
1862306a36Sopenharmony_ci#define UAC1_DEF_PCHMASK	0x3
1962306a36Sopenharmony_ci#define UAC1_DEF_PSRATE		48000
2062306a36Sopenharmony_ci#define UAC1_DEF_PSSIZE		2
2162306a36Sopenharmony_ci#define UAC1_DEF_REQ_NUM	2
2262306a36Sopenharmony_ci#define UAC1_DEF_INT_REQ_NUM	10
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define UAC1_DEF_MUTE_PRESENT	1
2562306a36Sopenharmony_ci#define UAC1_DEF_VOLUME_PRESENT 1
2662306a36Sopenharmony_ci#define UAC1_DEF_MIN_DB		(-100*256)	/* -100 dB */
2762306a36Sopenharmony_ci#define UAC1_DEF_MAX_DB		0		/* 0 dB */
2862306a36Sopenharmony_ci#define UAC1_DEF_RES_DB		(1*256)	/* 1 dB */
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct f_uac1_opts {
3262306a36Sopenharmony_ci	struct usb_function_instance	func_inst;
3362306a36Sopenharmony_ci	int				c_chmask;
3462306a36Sopenharmony_ci	int				c_srates[UAC_MAX_RATES];
3562306a36Sopenharmony_ci	int				c_ssize;
3662306a36Sopenharmony_ci	int				p_chmask;
3762306a36Sopenharmony_ci	int				p_srates[UAC_MAX_RATES];
3862306a36Sopenharmony_ci	int				p_ssize;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	bool			p_mute_present;
4162306a36Sopenharmony_ci	bool			p_volume_present;
4262306a36Sopenharmony_ci	s16				p_volume_min;
4362306a36Sopenharmony_ci	s16				p_volume_max;
4462306a36Sopenharmony_ci	s16				p_volume_res;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	bool			c_mute_present;
4762306a36Sopenharmony_ci	bool			c_volume_present;
4862306a36Sopenharmony_ci	s16				c_volume_min;
4962306a36Sopenharmony_ci	s16				c_volume_max;
5062306a36Sopenharmony_ci	s16				c_volume_res;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	int				req_number;
5362306a36Sopenharmony_ci	unsigned			bound:1;
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	char			function_name[32];
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	struct mutex			lock;
5862306a36Sopenharmony_ci	int				refcnt;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#endif /* __U_UAC1_H */
62