HPM SDK
HPMicro Software Development Kit
hpm_wm8978.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef _HPM_W8978_H_
9 #define _HPM_W8978_H_
10 
11 #include "hpm_i2c_drv.h"
12 #include "hpm_wm8978_regs.h"
13 
14 typedef enum wm8978_audio_interface {
15  wm8978_right_justified = 0, /* Right Justified */
16  wm8978_left_justified, /* Left Justified */
17  wm8978_philips_i2s, /* I2S format */
18  wm8978_pcm_mode, /* DSP/PCM mode */
20 
21 typedef enum wm8978_word_length {
22  wm8978_16bits_length = 0, /* 16bits */
23  wm8978_20bits_length, /* 20bits */
24  wm8978_24bits_length, /* 24bits */
25  wm8978_32bits_length, /* 32bits */
27 
28 typedef enum wm8978_out_channel {
29  wm8978_out1_channel = 0, /* R/LOUT1 channel. */
30  wm8978_out2_channel = 1, /* R/LOUT2 channel. */
32 
33 typedef enum input_channel_flag {
34  input_off = 0x00, /* no input */
35  mic_left_on = 0x01, /* LIN,LIP pin,MIC left input */
36  mic_right_on = 0x02, /* RIN,RIP pin,MIC right input */
37  line_on = 0x04, /* L2,R2 pin input */
38  aux_on = 0x08, /* AUXL,AUXR pins input */
39  dac_on = 0x10, /* dac for i2s */
40  adc_on = 0x20 /* input fed into the WM8978 internal ADC */
42 
43 /* WM8978 音频输出通道控制选项, 可以选择多路 */
44 typedef enum output_channel_flag {
45  output_off = 0x00, /* no output */
46  earphone_left_on = 0x01, /* LOUT1 earphone */
47  earphone_right_on = 0x02, /* ROUT1 earphone */
48  spk_on = 0x04, /* LOUT2 and ROUT2 Inverting output mono*/
49  out_3_4_on = 0x08, /* OUT3 and OUT4 output mono audio*/
51 
52 typedef struct {
53  I2C_Type *ptr; /* I2C bus */
54  uint8_t device_address; /* code device address */
56 
57 #if defined(__cplusplus)
58 extern "C" {
59 #endif
60 
68 
78 
87 hpm_stat_t wm8978_get_out_volume(wm8978_context_t *control, wm8978_out_channel_t channel, uint8_t *volume);
88 
98 
106 hpm_stat_t wm8978_set_mic_gain(wm8978_context_t *control, uint8_t gain);
107 
115 hpm_stat_t wm8978_set_line_gain(wm8978_context_t *control, uint8_t gain);
116 
124 
132 hpm_stat_t wm8978_ctrl_gpio1(wm8978_context_t *control, bool value);
133 
143  wm8978_audio_interface_t standard,
144  wm8978_word_length_t word_len);
145 
155  uint8_t in_flags,
156  uint8_t out_flags);
157 
167 hpm_stat_t wm8978_notch_filter(wm8978_context_t *control, uint16_t nfa0, uint16_t nfa1);
168 
176 
185 hpm_stat_t wm8978_write_reg(wm8978_context_t *control, uint8_t reg, uint16_t val);
186 
194 hpm_stat_t wm8978_read_reg(wm8978_context_t *control, uint8_t reg, uint16_t *val);
195 
204 hpm_stat_t wm8978_modify_reg(wm8978_context_t *control, uint8_t reg, uint16_t mask, uint16_t val);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
215 #endif /* HPM_WM8978_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
hpm_stat_t wm8978_set_out_mute(wm8978_context_t *control, wm8978_out_channel_t channel, bool mute)
WM8979 set out mute.
Definition: hpm_wm8978.c:90
input_channel_flag
Definition: hpm_wm8978.h:33
@ mic_left_on
Definition: hpm_wm8978.h:35
@ input_off
Definition: hpm_wm8978.h:34
@ line_on
Definition: hpm_wm8978.h:37
@ dac_on
Definition: hpm_wm8978.h:39
@ aux_on
Definition: hpm_wm8978.h:38
@ mic_right_on
Definition: hpm_wm8978.h:36
@ adc_on
Definition: hpm_wm8978.h:40
enum output_channel_flag output_channel_flag_t
hpm_stat_t wm8978_cfg_audio_interface(wm8978_context_t *control, wm8978_audio_interface_t standard, wm8978_word_length_t word_len)
Configuring the audio interface of WM8978.
Definition: hpm_wm8978.c:158
hpm_stat_t wm8978_get_out_volume(wm8978_context_t *control, wm8978_out_channel_t channel, uint8_t *volume)
WM8979 read out volume function.
Definition: hpm_wm8978.c:73
output_channel_flag
Definition: hpm_wm8978.h:44
@ output_off
Definition: hpm_wm8978.h:45
@ out_3_4_on
Definition: hpm_wm8978.h:49
@ earphone_left_on
Definition: hpm_wm8978.h:46
@ spk_on
Definition: hpm_wm8978.h:48
@ earphone_right_on
Definition: hpm_wm8978.h:47
hpm_stat_t wm8978_reset(wm8978_context_t *control)
Write register to WM8978 using I2C.
Definition: hpm_wm8978.c:43
hpm_stat_t wm8978_modify_reg(wm8978_context_t *control, uint8_t reg, uint16_t mask, uint16_t val)
Modify some bits in the register using I2C.
Definition: hpm_wm8978.c:389
hpm_stat_t wm8978_write_reg(wm8978_context_t *control, uint8_t reg, uint16_t val)
Write register to WM8978 using I2C.
Definition: hpm_wm8978.c:369
hpm_stat_t wm8979_init(wm8978_context_t *control)
WM8979 initialize function.
Definition: hpm_wm8978.c:24
hpm_stat_t wm8978_power_down(wm8978_context_t *control)
WM8979 enter power down mode.
Definition: hpm_wm8978.c:153
enum wm8978_audio_interface wm8978_audio_interface_t
hpm_stat_t wm8978_ctrl_gpio1(wm8978_context_t *control, bool value)
Control the GPIO1 pin of WM8978 to output high or low.
Definition: hpm_wm8978.c:356
wm8978_word_length
Definition: hpm_wm8978.h:21
@ wm8978_24bits_length
Definition: hpm_wm8978.h:24
@ wm8978_32bits_length
Definition: hpm_wm8978.h:25
@ wm8978_20bits_length
Definition: hpm_wm8978.h:23
@ wm8978_16bits_length
Definition: hpm_wm8978.h:22
hpm_stat_t wm8978_set_line_gain(wm8978_context_t *control, uint8_t gain)
WM8979 set the gain of the Line input channel.
Definition: hpm_wm8978.c:134
hpm_stat_t wm8978_set_out_volume(wm8978_context_t *control, wm8978_out_channel_t channel, uint8_t volume)
WM8979 set out volume function.
Definition: hpm_wm8978.c:50
enum wm8978_word_length wm8978_word_length_t
wm8978_out_channel
Definition: hpm_wm8978.h:28
@ wm8978_out1_channel
Definition: hpm_wm8978.h:29
@ wm8978_out2_channel
Definition: hpm_wm8978.h:30
hpm_stat_t wm8978_notch_filter(wm8978_context_t *control, uint16_t nfa0, uint16_t nfa1)
setting the Notch Filter for WM8978
Definition: hpm_wm8978.c:338
enum wm8978_out_channel wm8978_out_channel_t
wm8978_audio_interface
Definition: hpm_wm8978.h:14
@ wm8978_philips_i2s
Definition: hpm_wm8978.h:17
@ wm8978_left_justified
Definition: hpm_wm8978.h:16
@ wm8978_pcm_mode
Definition: hpm_wm8978.h:18
@ wm8978_right_justified
Definition: hpm_wm8978.h:15
enum input_channel_flag input_channel_flags_t
hpm_stat_t wm8978_set_mic_gain(wm8978_context_t *control, uint8_t gain)
WM8979 set gain of mic.
Definition: hpm_wm8978.c:123
hpm_stat_t wm8978_read_reg(wm8978_context_t *control, uint8_t reg, uint16_t *val)
Read register from WM8978 using I2C.
Definition: hpm_wm8978.c:382
hpm_stat_t wm8978_cfg_audio_channel(wm8978_context_t *control, uint8_t in_flags, uint8_t out_flags)
Configure wm8978 audio channel.
Definition: hpm_wm8978.c:168
Definition: hpm_i2c_regs.h:12
Definition: hpm_wm8978.h:52
I2C_Type * ptr
Definition: hpm_wm8978.h:53
uint8_t device_address
Definition: hpm_wm8978.h:54