1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2018-11-14     ZeroFree     first implementation
9  * 2019-07-28     Ernest       perfect player, add record and other APIs
10  */
11 
12 #ifndef __DRV_WM8978_H__
13 #define __DRV_WM8978_H__
14 
15 #include <rtthread.h>
16 #include <rtdevice.h>
17 
18 enum data_fomat_select
19 {
20     RIGHT_FOMAT_SELECT,
21     LEFT_FOMAT_SELECT,
22     I2S_FOMAT_SELECT,
23     PCM_FOMAT_SELECT,
24 };
25 
26 rt_err_t wm8978_init(struct rt_i2c_bus_device *dev);
27 void wm8978_player_start(struct rt_i2c_bus_device *dev);
28 void wm8978_record_start(struct rt_i2c_bus_device *dev);
29 
30 int wm8978_set_volume(struct rt_i2c_bus_device *dev, int vol);
31 
32 void wm8978_reset(struct rt_i2c_bus_device *dev);
33 /* enable ADC/DAC */
34 void wm8978_ADC_enabled(struct rt_i2c_bus_device *dev, rt_bool_t bool);
35 void wm8978_DAC_enabled(struct rt_i2c_bus_device *dev, rt_bool_t bool);
36 
37 void wm8978_mic_enabled(struct rt_i2c_bus_device *dev, rt_bool_t bool);
38 void wm8978_linein_enabled(struct rt_i2c_bus_device *dev, rt_bool_t bool);
39 void wm8978_aux_enabled(struct rt_i2c_bus_device *dev, rt_bool_t bool);
40 void wm8978_linein_gain(struct rt_i2c_bus_device *dev, rt_uint8_t value);
41 void wm8978_aux_gain(struct rt_i2c_bus_device *dev, rt_uint8_t value);
42 void wm8978_mic_gain(struct rt_i2c_bus_device *dev, rt_uint8_t gain);
43 void wm8978_output_set(struct rt_i2c_bus_device *dev, rt_bool_t dac, rt_bool_t bypass);
44 void wm8978_hpvol_set(struct rt_i2c_bus_device *dev, rt_uint8_t volume);
45 void wm8978_spkvol_set(struct rt_i2c_bus_device *dev, rt_uint8_t volume);
46 
47 /* set interface mode */
48 void wm8978_interface_cfg(struct rt_i2c_bus_device *dev, enum data_fomat_select fmt, rt_uint32_t bitBand);
49 
50 void wm8978_mute_enabled(struct rt_i2c_bus_device *dev, rt_bool_t enable);
51 rt_err_t wm8978_set_EQ1(struct rt_i2c_bus_device *dev, rt_uint8_t freq, rt_uint8_t gain);
52 rt_err_t wm8978_set_EQ2(struct rt_i2c_bus_device *dev, rt_uint8_t freq, rt_uint8_t gain);
53 rt_err_t wm8978_set_EQ3(struct rt_i2c_bus_device *dev, rt_uint8_t freq, rt_uint8_t gain);
54 rt_err_t wm8978_set_EQ4(struct rt_i2c_bus_device *dev, rt_uint8_t freq, rt_uint8_t gain);
55 rt_err_t wm8978_set_EQ5(struct rt_i2c_bus_device *dev, rt_uint8_t freq, rt_uint8_t gain);
56 void wm8978_3D_Set(struct rt_i2c_bus_device *dev, rt_uint8_t depth);
57 
58 #endif
59