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