11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef __ACODEC_H__
171bd4fe43Sopenharmony_ci#define __ACODEC_H__
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci#define IOC_TYPE_ACODEC 'A'
201bd4fe43Sopenharmony_ci
211bd4fe43Sopenharmony_citypedef enum hiACODEC_FS_E {
221bd4fe43Sopenharmony_ci    ACODEC_FS_8000  =   0x1,
231bd4fe43Sopenharmony_ci    ACODEC_FS_11025 =   0x2,
241bd4fe43Sopenharmony_ci    ACODEC_FS_12000 =   0x3,
251bd4fe43Sopenharmony_ci    ACODEC_FS_16000 =   0x4,
261bd4fe43Sopenharmony_ci    ACODEC_FS_22050 =   0x5,
271bd4fe43Sopenharmony_ci    ACODEC_FS_24000 =   0x6,
281bd4fe43Sopenharmony_ci    ACODEC_FS_32000 =   0x7,
291bd4fe43Sopenharmony_ci    ACODEC_FS_44100 =   0x8,
301bd4fe43Sopenharmony_ci    ACODEC_FS_48000 =   0x9,
311bd4fe43Sopenharmony_ci    ACODEC_FS_64000 =   0xa,
321bd4fe43Sopenharmony_ci    ACODEC_FS_96000 =   0xb,
331bd4fe43Sopenharmony_ci
341bd4fe43Sopenharmony_ci    ACODEC_FS_BUTT = 0x1c,
351bd4fe43Sopenharmony_ci} ACODEC_FS_E;
361bd4fe43Sopenharmony_ci
371bd4fe43Sopenharmony_citypedef struct {
381bd4fe43Sopenharmony_ci    /* volume control, 0x00~0x7e, 0x7F:mute */
391bd4fe43Sopenharmony_ci    unsigned int vol_ctrl;
401bd4fe43Sopenharmony_ci    /* adc/dac mute control, 1:mute, 0:unmute */
411bd4fe43Sopenharmony_ci    unsigned int vol_ctrl_mute;
421bd4fe43Sopenharmony_ci} ACODEC_VOL_CTRL;
431bd4fe43Sopenharmony_ci
441bd4fe43Sopenharmony_citypedef enum hiACODEC_IOCTL_E {
451bd4fe43Sopenharmony_ci    IOC_NR_SOFT_RESET_CTRL = 0x0,
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_ci    IOC_NR_SET_INPUT_VOL,
481bd4fe43Sopenharmony_ci    IOC_NR_SET_OUTPUT_VOL,
491bd4fe43Sopenharmony_ci    IOC_NR_GET_INPUT_VOL,
501bd4fe43Sopenharmony_ci    IOC_NR_GET_OUTPUT_VOL,
511bd4fe43Sopenharmony_ci
521bd4fe43Sopenharmony_ci    IOC_NR_SET_I2S1_FS,
531bd4fe43Sopenharmony_ci    IOC_NR_SET_MIXER_MIC,
541bd4fe43Sopenharmony_ci    IOC_NR_SEL_DAC_CLK,
551bd4fe43Sopenharmony_ci    IOC_NR_SEL_ADC_CLK,
561bd4fe43Sopenharmony_ci    IOC_NR_SEL_ANA_MCLK,
571bd4fe43Sopenharmony_ci    IOC_NR_SET_GAIN_MICL,
581bd4fe43Sopenharmony_ci    IOC_NR_SET_GAIN_MICR,
591bd4fe43Sopenharmony_ci    IOC_NR_SET_DACL_VOL,
601bd4fe43Sopenharmony_ci    IOC_NR_SET_DACR_VOL,
611bd4fe43Sopenharmony_ci    IOC_NR_SET_ADCL_VOL,
621bd4fe43Sopenharmony_ci    IOC_NR_SET_ADCR_VOL,
631bd4fe43Sopenharmony_ci    IOC_NR_SET_MICL_MUTE,
641bd4fe43Sopenharmony_ci    IOC_NR_SET_MICR_MUTE,
651bd4fe43Sopenharmony_ci    IOC_NR_SET_DACL_MUTE,
661bd4fe43Sopenharmony_ci    IOC_NR_SET_DACR_MUTE,
671bd4fe43Sopenharmony_ci    IOC_NR_BOOSTL_ENABLE,
681bd4fe43Sopenharmony_ci    IOC_NR_BOOSTR_ENABLE,
691bd4fe43Sopenharmony_ci
701bd4fe43Sopenharmony_ci    IOC_NR_GET_GAIN_MICL,
711bd4fe43Sopenharmony_ci    IOC_NR_GET_GAIN_MICR,
721bd4fe43Sopenharmony_ci    IOC_NR_GET_DACL_VOL,
731bd4fe43Sopenharmony_ci    IOC_NR_GET_DACR_VOL,
741bd4fe43Sopenharmony_ci    IOC_NR_GET_ADCL_VOL,
751bd4fe43Sopenharmony_ci    IOC_NR_GET_ADCR_VOL,
761bd4fe43Sopenharmony_ci
771bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_DACL,
781bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_DACR,
791bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_ADCL,
801bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_ADCR,
811bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_LINEINL,
821bd4fe43Sopenharmony_ci    IOC_NR_SET_PD_LINEINR,
831bd4fe43Sopenharmony_ci
841bd4fe43Sopenharmony_ci    IOC_NR_SET_DAC_DE_EMPHASIS,
851bd4fe43Sopenharmony_ci    IOC_NR_SET_ADC_HP_FILTER,
861bd4fe43Sopenharmony_ci
871bd4fe43Sopenharmony_ci    IOC_NR_SET_I2S1_DATAWIDTH,
881bd4fe43Sopenharmony_ci
891bd4fe43Sopenharmony_ci    IOC_NR_DACL_SEL_TRACK,
901bd4fe43Sopenharmony_ci    IOC_NR_DACR_SEL_TRACK,
911bd4fe43Sopenharmony_ci    IOC_NR_ADCL_SEL_TRACK,
921bd4fe43Sopenharmony_ci    IOC_NR_ADCR_SEL_TRACK,
931bd4fe43Sopenharmony_ci} ACODEC_IOCTL_E;
941bd4fe43Sopenharmony_ci
951bd4fe43Sopenharmony_citypedef enum hiACODEC_MIXER_E {
961bd4fe43Sopenharmony_ci    ACODEC_MIXER_IN0   = 0x0,   /* HI3516CV500/HI3516DV300 Unsupport IN0. */
971bd4fe43Sopenharmony_ci    ACODEC_MIXER_IN1   = 0x1,
981bd4fe43Sopenharmony_ci    ACODEC_MIXER_IN_D  = 0x2,
991bd4fe43Sopenharmony_ci
1001bd4fe43Sopenharmony_ci    ACODEC_MIXER_BUTT,
1011bd4fe43Sopenharmony_ci} ACODEC_MIXER_E;
1021bd4fe43Sopenharmony_ci
1031bd4fe43Sopenharmony_ci/* reset the audio code to the default config */
1041bd4fe43Sopenharmony_ci#define ACODEC_SOFT_RESET_CTRL \
1051bd4fe43Sopenharmony_ci    _IO(IOC_TYPE_ACODEC, IOC_NR_SOFT_RESET_CTRL)
1061bd4fe43Sopenharmony_ci/* ACODEC_FS_E */
1071bd4fe43Sopenharmony_ci#define ACODEC_SET_I2S1_FS \
1081bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_I2S1_FS, unsigned int)
1091bd4fe43Sopenharmony_ci
1101bd4fe43Sopenharmony_ci/* select the micpga's input, micin linein, or differential input(ACODEC_MIXER_E) */
1111bd4fe43Sopenharmony_ci#define ACODEC_SET_MIXER_MIC \
1121bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_MIXER_MIC, unsigned int)
1131bd4fe43Sopenharmony_ci/* Input volume control(left channel) ACODEC_VOL_CTRL */
1141bd4fe43Sopenharmony_ci#define ACODEC_SET_ADCL_VOL \
1151bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_ADCL_VOL, ACODEC_VOL_CTRL)
1161bd4fe43Sopenharmony_ci/* Input volume control(right channel) ACODEC_VOL_CTRL */
1171bd4fe43Sopenharmony_ci#define ACODEC_SET_ADCR_VOL \
1181bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_ADCR_VOL, ACODEC_VOL_CTRL)
1191bd4fe43Sopenharmony_ci/* Output volume control(left channel) ACODEC_VOL_CTRL */
1201bd4fe43Sopenharmony_ci#define ACODEC_SET_DACL_VOL \
1211bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_DACL_VOL, ACODEC_VOL_CTRL)
1221bd4fe43Sopenharmony_ci/* Output volume control(right channel) ACODEC_VOL_CTRL */
1231bd4fe43Sopenharmony_ci#define ACODEC_SET_DACR_VOL \
1241bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_DACR_VOL, ACODEC_VOL_CTRL)
1251bd4fe43Sopenharmony_ci/* analog part input volume control(left channel 0~0x1f) */
1261bd4fe43Sopenharmony_ci#define ACODEC_SET_GAIN_MICL \
1271bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_GAIN_MICL, unsigned int)
1281bd4fe43Sopenharmony_ci/* analog part input volume control(right channel 0~0x1f) */
1291bd4fe43Sopenharmony_ci#define ACODEC_SET_GAIN_MICR \
1301bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_GAIN_MICR, unsigned int)
1311bd4fe43Sopenharmony_ci/* Input mute control(left channel), 1:mute, 0:unmute */
1321bd4fe43Sopenharmony_ci#define ACODEC_SET_MICL_MUTE \
1331bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_MICL_MUTE, unsigned int)
1341bd4fe43Sopenharmony_ci/* Input mute control(right channel), 1:mute, 0:unmute */
1351bd4fe43Sopenharmony_ci#define ACODEC_SET_MICR_MUTE \
1361bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_MICR_MUTE, unsigned int)
1371bd4fe43Sopenharmony_ci/* Output mute control(left channel), 1:mute, 0:unmute */
1381bd4fe43Sopenharmony_ci#define ACODEC_SET_DACL_MUTE \
1391bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_DACL_MUTE, unsigned int)
1401bd4fe43Sopenharmony_ci/* Output mute control(right channel), 1:mute, 0:unmute */
1411bd4fe43Sopenharmony_ci#define ACODEC_SET_DACR_MUTE \
1421bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_DACR_MUTE, unsigned int)
1431bd4fe43Sopenharmony_ci/* Audio AD BOOST Control, 1:on, 0:off */
1441bd4fe43Sopenharmony_ci#define ACODEC_ENABLE_BOOSTL \
1451bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_BOOSTL_ENABLE, unsigned int)
1461bd4fe43Sopenharmony_ci#define ACODEC_ENABLE_BOOSTR \
1471bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_BOOSTR_ENABLE, unsigned int)
1481bd4fe43Sopenharmony_ci
1491bd4fe43Sopenharmony_ci#define ACODEC_GET_DACL_VOL \
1501bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_DACL_VOL, ACODEC_VOL_CTRL)
1511bd4fe43Sopenharmony_ci#define ACODEC_GET_DACR_VOL \
1521bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_DACR_VOL, ACODEC_VOL_CTRL)
1531bd4fe43Sopenharmony_ci#define ACODEC_GET_ADCL_VOL \
1541bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_ADCL_VOL, ACODEC_VOL_CTRL)
1551bd4fe43Sopenharmony_ci#define ACODEC_GET_ADCR_VOL \
1561bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_ADCR_VOL, ACODEC_VOL_CTRL)
1571bd4fe43Sopenharmony_ci#define ACODEC_GET_GAIN_MICL \
1581bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_GAIN_MICL, unsigned int)
1591bd4fe43Sopenharmony_ci#define ACODEC_GET_GAIN_MICR \
1601bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_GAIN_MICR, unsigned int)
1611bd4fe43Sopenharmony_ci
1621bd4fe43Sopenharmony_ci/* set adcl power, 0: power up, 1: power down */
1631bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_LINEINL \
1641bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_LINEINL, unsigned int)
1651bd4fe43Sopenharmony_ci/* set adcr power, 0: power up, 1: power down */
1661bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_LINEINR \
1671bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_LINEINR, unsigned int)
1681bd4fe43Sopenharmony_ci/* set adcl power, 0: power up, 1: power down */
1691bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_DACL \
1701bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_DACL, unsigned int)
1711bd4fe43Sopenharmony_ci/* set adcr power, 0: power up, 1: power down */
1721bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_DACR \
1731bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_DACR, unsigned int)
1741bd4fe43Sopenharmony_ci/* set adcl power, 0: power up, 1: power down */
1751bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_ADCL \
1761bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_ADCL, unsigned int)
1771bd4fe43Sopenharmony_ci/* set adcr power, 0: power up, 1: power down */
1781bd4fe43Sopenharmony_ci#define  ACODEC_SET_PD_ADCR \
1791bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_PD_ADCR, unsigned int)
1801bd4fe43Sopenharmony_ci
1811bd4fe43Sopenharmony_ci/* Don't need to set, the driver will set a default value */
1821bd4fe43Sopenharmony_ci/* clock of dac and adc is reverse or obverse */
1831bd4fe43Sopenharmony_ci#define ACODEC_SEL_DAC_CLK \
1841bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SEL_DAC_CLK, unsigned int)
1851bd4fe43Sopenharmony_ci#define ACODEC_SEL_ADC_CLK \
1861bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SEL_ADC_CLK, unsigned int)
1871bd4fe43Sopenharmony_ci/* clock of analog part and digital part is reverse or obverse */
1881bd4fe43Sopenharmony_ci#define ACODEC_SEL_ANA_MCLK \
1891bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SEL_ANA_MCLK, unsigned int)
1901bd4fe43Sopenharmony_ci#define ACODEC_SET_DAC_DE_EMPHASIS \
1911bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_DAC_DE_EMPHASIS, unsigned int)
1921bd4fe43Sopenharmony_ci#define ACODEC_SET_ADC_HP_FILTER \
1931bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_ADC_HP_FILTER, unsigned int)
1941bd4fe43Sopenharmony_ci
1951bd4fe43Sopenharmony_ci#define ACODEC_GET_INPUT_VOL \
1961bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_INPUT_VOL, unsigned int)
1971bd4fe43Sopenharmony_ci#define ACODEC_GET_OUTPUT_VOL \
1981bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_OUTPUT_VOL, unsigned int)
1991bd4fe43Sopenharmony_ci#define ACODEC_SET_INPUT_VOL \
2001bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_INPUT_VOL, unsigned int)
2011bd4fe43Sopenharmony_ci#define ACODEC_SET_OUTPUT_VOL \
2021bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_OUTPUT_VOL, unsigned int)
2031bd4fe43Sopenharmony_ci
2041bd4fe43Sopenharmony_ci#define ACODEC_ADCL_SEL_TRACK \
2051bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_ADCL_SEL_TRACK, unsigned int)
2061bd4fe43Sopenharmony_ci#define ACODEC_ADCR_SEL_TRACK \
2071bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_ADCR_SEL_TRACK, unsigned int)
2081bd4fe43Sopenharmony_ci#define ACODEC_DACL_SEL_TRACK \
2091bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_DACL_SEL_TRACK, unsigned int)
2101bd4fe43Sopenharmony_ci#define ACODEC_DACR_SEL_TRACK \
2111bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_DACR_SEL_TRACK, unsigned int)
2121bd4fe43Sopenharmony_ci
2131bd4fe43Sopenharmony_ci/* Reserved ioctl cmd */
2141bd4fe43Sopenharmony_ci#define ACODEC_SET_I2S1_DATAWIDTH \
2151bd4fe43Sopenharmony_ci    _IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_I2S1_DATAWIDTH, unsigned int)
2161bd4fe43Sopenharmony_ci
2171bd4fe43Sopenharmony_ci#endif /* End of #ifndef __ACODEC_H__ */
218