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