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_a, /* DSP/PCM mode A */
19  wm8978_pcm_b /* DSP/PCM mode B */
21 
22 typedef enum wm8978_word_length {
23  wm8978_16bits_length = 0, /* 16bits */
24  wm8978_20bits_length, /* 20bits */
25  wm8978_24bits_length, /* 24bits */
26  wm8978_32bits_length, /* 32bits */
28 
29 typedef enum wm8978_out_channel {
30  wm8978_out1_channel = 0, /* R/LOUT1 channel. */
31  wm8978_out2_channel = 1, /* R/LOUT2 channel. */
33 
34 typedef enum input_channel_flag {
35  input_off = 0x00, /* no input */
36  mic_left_on = 0x01, /* LIN,LIP pin,MIC left input */
37  mic_right_on = 0x02, /* RIN,RIP pin,MIC right input */
38  line_on = 0x04, /* L2,R2 pin input */
39  aux_on = 0x08, /* AUXL,AUXR pins input */
40  dac_on = 0x10, /* dac for i2s */
41  adc_on = 0x20 /* input fed into the WM8978 internal ADC */
43 
44 /* WM8978 音频输出通道控制选项, 可以选择多路 */
45 typedef enum output_channel_flag {
46  output_off = 0x00, /* no output */
47  earphone_left_on = 0x01, /* LOUT1 earphone */
48  earphone_right_on = 0x02, /* ROUT1 earphone */
49  spk_on = 0x04, /* LOUT2 and ROUT2 Inverting output mono*/
50  out_3_4_on = 0x08, /* OUT3 and OUT4 output mono audio*/
52 
53 typedef struct {
54  I2C_Type *ptr; /* I2C bus */
55  uint8_t device_address; /* code device address */
57 
58 #if defined(__cplusplus)
59 extern "C" {
60 #endif
61 
69 
79 
88 hpm_stat_t wm8978_get_out_volume(wm8978_context_t *control, wm8978_out_channel_t channel, uint8_t *volume);
89 
99 
107 hpm_stat_t wm8978_set_mic_gain(wm8978_context_t *control, uint8_t gain);
108 
116 hpm_stat_t wm8978_set_line_gain(wm8978_context_t *control, uint8_t gain);
117 
125 
133 hpm_stat_t wm8978_ctrl_gpio1(wm8978_context_t *control, bool value);
134 
144  wm8978_audio_interface_t standard,
145  wm8978_word_length_t word_len);
146 
154 
164  uint8_t in_flags,
165  uint8_t out_flags);
166 
176 hpm_stat_t wm8978_notch_filter(wm8978_context_t *control, uint16_t nfa0, uint16_t nfa1);
177 
185 
194 hpm_stat_t wm8978_write_reg(wm8978_context_t *control, uint8_t reg, uint16_t val);
195 
203 hpm_stat_t wm8978_read_reg(wm8978_context_t *control, uint8_t reg, uint16_t *val);
204 
213 hpm_stat_t wm8978_modify_reg(wm8978_context_t *control, uint8_t reg, uint16_t mask, uint16_t val);
214 
215 #ifdef __cplusplus
216 }
217 #endif
218 
219 #endif /* HPM_WM8978_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:135
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:34
@ mic_left_on
Definition: hpm_wm8978.h:36
@ input_off
Definition: hpm_wm8978.h:35
@ line_on
Definition: hpm_wm8978.h:38
@ dac_on
Definition: hpm_wm8978.h:40
@ aux_on
Definition: hpm_wm8978.h:39
@ mic_right_on
Definition: hpm_wm8978.h:37
@ adc_on
Definition: hpm_wm8978.h:41
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:45
@ output_off
Definition: hpm_wm8978.h:46
@ out_3_4_on
Definition: hpm_wm8978.h:50
@ earphone_left_on
Definition: hpm_wm8978.h:47
@ spk_on
Definition: hpm_wm8978.h:49
@ earphone_right_on
Definition: hpm_wm8978.h:48
hpm_stat_t wm8978_reset(wm8978_context_t *control)
Write register to WM8978 using I2C.
Definition: hpm_wm8978.c:43
hpm_stat_t wm8978_invert_lrclk_polarity(wm8978_context_t *control, bool invert)
Invert LRCLK polarity.
Definition: hpm_wm8978.c:171
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:401
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:381
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:368
wm8978_word_length
Definition: hpm_wm8978.h:22
@ wm8978_24bits_length
Definition: hpm_wm8978.h:25
@ wm8978_32bits_length
Definition: hpm_wm8978.h:26
@ wm8978_20bits_length
Definition: hpm_wm8978.h:24
@ wm8978_16bits_length
Definition: hpm_wm8978.h:23
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:29
@ wm8978_out1_channel
Definition: hpm_wm8978.h:30
@ wm8978_out2_channel
Definition: hpm_wm8978.h:31
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:350
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_b
Definition: hpm_wm8978.h:19
@ wm8978_pcm_a
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:394
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:180
Definition: hpm_i2c_regs.h:12
Definition: hpm_wm8978.h:53
I2C_Type * ptr
Definition: hpm_wm8978.h:54
uint8_t device_address
Definition: hpm_wm8978.h:55