xref: /openbmc/u-boot/include/hda_codec.h (revision c507d306)
1*2ca47137SSimon Glass /* SPDX-License-Identifier: GPL-2.0 */
2*2ca47137SSimon Glass /*
3*2ca47137SSimon Glass  * Support for Intel High-Definition Audio codec
4*2ca47137SSimon Glass  *
5*2ca47137SSimon Glass  * Copyright 2018 Google LLC
6*2ca47137SSimon Glass  *
7*2ca47137SSimon Glass  * Taken from coreboot file of the same name
8*2ca47137SSimon Glass  */
9*2ca47137SSimon Glass 
10*2ca47137SSimon Glass #ifndef __HDA_CODEC_H_
11*2ca47137SSimon Glass #define __HDA_CODEC_H_
12*2ca47137SSimon Glass 
13*2ca47137SSimon Glass struct hda_regs;
14*2ca47137SSimon Glass 
15*2ca47137SSimon Glass /**
16*2ca47137SSimon Glass  * struct hda_codec_priv - Private data required by the HDA codec
17*2ca47137SSimon Glass  *
18*2ca47137SSimon Glass  * @regs: HDA registers
19*2ca47137SSimon Glass  * @beep_nid: Node ID of beep node (>0)
20*2ca47137SSimon Glass  */
21*2ca47137SSimon Glass struct hda_codec_priv {
22*2ca47137SSimon Glass 	struct hda_regs *regs;
23*2ca47137SSimon Glass 	uint beep_nid;
24*2ca47137SSimon Glass };
25*2ca47137SSimon Glass 
26*2ca47137SSimon Glass /**
27*2ca47137SSimon Glass  *  hda_wait_for_ready() - Wait for the codec to indicate it is ready
28*2ca47137SSimon Glass  *
29*2ca47137SSimon Glass  * @regs: HDA registers
30*2ca47137SSimon Glass  * @return 0 if OK -ETIMEDOUT if codec did not respond in time
31*2ca47137SSimon Glass  */
32*2ca47137SSimon Glass int hda_wait_for_ready(struct hda_regs *regs);
33*2ca47137SSimon Glass 
34*2ca47137SSimon Glass /**
35*2ca47137SSimon Glass  *  hda_wait_for_valid() - Wait for the codec to accept the last command
36*2ca47137SSimon Glass  *
37*2ca47137SSimon Glass  * @regs: HDA registers
38*2ca47137SSimon Glass  * @return 0 if OK -ETIMEDOUT if codec did not respond in time
39*2ca47137SSimon Glass  */
40*2ca47137SSimon Glass int hda_wait_for_valid(struct hda_regs *regs);
41*2ca47137SSimon Glass 
42*2ca47137SSimon Glass /**
43*2ca47137SSimon Glass  * hda_codec_detect() - Detect which codecs are present
44*2ca47137SSimon Glass  *
45*2ca47137SSimon Glass  * @regs: HDA registers
46*2ca47137SSimon Glass  * @return bit mask of active codecs (0 if none)
47*2ca47137SSimon Glass  * @return 0 if OK, -ve on error
48*2ca47137SSimon Glass  */
49*2ca47137SSimon Glass int hda_codec_detect(struct hda_regs *regs);
50*2ca47137SSimon Glass 
51*2ca47137SSimon Glass /**
52*2ca47137SSimon Glass  * hda_codecs_init() - Init all codecs
53*2ca47137SSimon Glass  *
54*2ca47137SSimon Glass  * @dev: Sound device
55*2ca47137SSimon Glass  * @regs: HDA registers
56*2ca47137SSimon Glass  * @codec_mask: Mask of codecs to init (bits 3:0)
57*2ca47137SSimon Glass  * @return 0 if OK, -ve on error
58*2ca47137SSimon Glass  */
59*2ca47137SSimon Glass int hda_codecs_init(struct udevice *dev, struct hda_regs *regs, u32 codec_mask);
60*2ca47137SSimon Glass 
61*2ca47137SSimon Glass /**
62*2ca47137SSimon Glass  * hda_codec_start_beep() - Start beeping
63*2ca47137SSimon Glass  *
64*2ca47137SSimon Glass  * This tells the sound hardware to start a beep. It will continue until stopped
65*2ca47137SSimon Glass  * by sound_stop_beep().
66*2ca47137SSimon Glass  *
67*2ca47137SSimon Glass  * @dev: Sound device
68*2ca47137SSimon Glass  * @frequency_hz: Beep frequency in hertz
69*2ca47137SSimon Glass  * @return if OK, -ve on error
70*2ca47137SSimon Glass  */
71*2ca47137SSimon Glass int hda_codec_start_beep(struct udevice *dev, int frequency_hz);
72*2ca47137SSimon Glass 
73*2ca47137SSimon Glass /**
74*2ca47137SSimon Glass  * hda_codec_stop_beep() - Stop beeping
75*2ca47137SSimon Glass  *
76*2ca47137SSimon Glass  * This tells the sound hardware to stop a previously started beep.
77*2ca47137SSimon Glass  *
78*2ca47137SSimon Glass  * @dev: Sound device
79*2ca47137SSimon Glass  * @return if OK, -ve on error
80*2ca47137SSimon Glass  */
81*2ca47137SSimon Glass int hda_codec_stop_beep(struct udevice *dev);
82*2ca47137SSimon Glass 
83*2ca47137SSimon Glass /**
84*2ca47137SSimon Glass  * hda_codec_init() - Set up the HDA codec base address
85*2ca47137SSimon Glass  *
86*2ca47137SSimon Glass  * This should be called at the start of the probe() method.
87*2ca47137SSimon Glass  *
88*2ca47137SSimon Glass  * @dev: Sound device
89*2ca47137SSimon Glass  * @return 0 if OK, -ve on error
90*2ca47137SSimon Glass  */
91*2ca47137SSimon Glass int hda_codec_init(struct udevice *dev);
92*2ca47137SSimon Glass 
93*2ca47137SSimon Glass /**
94*2ca47137SSimon Glass  * hda_codec_finish_init() - Finish setting up the HDA codec base address
95*2ca47137SSimon Glass  *
96*2ca47137SSimon Glass  * This should be called at the end of the probe() method.
97*2ca47137SSimon Glass  *
98*2ca47137SSimon Glass  * @dev: Sound device
99*2ca47137SSimon Glass  * @return 0 if OK, -ve on error
100*2ca47137SSimon Glass  */
101*2ca47137SSimon Glass int hda_codec_finish_init(struct udevice *dev);
102*2ca47137SSimon Glass 
103*2ca47137SSimon Glass #endif /* __HDA_CODEC_H_ */
104