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