root/drivers/usb/gadget/function/u_uac2.h
/* 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_PHSBINT 0
#define UAC2_DEF_CCHMASK 0x3
#define UAC2_DEF_CSRATE 64000
#define UAC2_DEF_CSSIZE 2
#define UAC2_DEF_CHSBINT 0
#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

#define UAC2_DEF_P_TERM_TYPE 0x301
        /* UAC_OUTPUT_TERMINAL_SPEAKER */
#define UAC2_DEF_C_TERM_TYPE 0x201
        /* UAC_INPUT_TERMINAL_MICROPHONE*/

struct f_uac2_opts {
        struct usb_function_instance    func_inst;
        int                             p_chmask;
        int                             p_srates[UAC_MAX_RATES];
        int                             p_ssize;
        u8                              p_hs_bint;
        int                             c_chmask;
        int                             c_srates[UAC_MAX_RATES];
        int                             c_ssize;
        int                             c_sync;
        u8                              c_hs_bint;

        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;

        char                    function_name[USB_MAX_STRING_LEN];
        char                    if_ctrl_name[USB_MAX_STRING_LEN];
        char                    clksrc_in_name[USB_MAX_STRING_LEN];
        char                    clksrc_out_name[USB_MAX_STRING_LEN];

        char                    p_it_name[USB_MAX_STRING_LEN];
        char                    p_it_ch_name[USB_MAX_STRING_LEN];
        char                    p_ot_name[USB_MAX_STRING_LEN];
        char                    p_fu_vol_name[USB_MAX_STRING_LEN];

        char                    c_it_name[USB_MAX_STRING_LEN];
        char                    c_it_ch_name[USB_MAX_STRING_LEN];
        char                    c_ot_name[USB_MAX_STRING_LEN];
        char                    c_fu_vol_name[USB_MAX_STRING_LEN];

        s16                             p_terminal_type;
        s16                             c_terminal_type;

        struct mutex                    lock;
        int                             refcnt;
};

#endif