/* max. connections to a widget */ #define HDA_MAX_CONNECTIONS 32
struct hdmi_spec_per_pin {
hda_nid_t pin_nid; int dev_id; /* pin idx, different device entries on the same pin use the same idx */ int pin_nid_idx; int num_mux_nids;
hda_nid_t mux_nids[HDA_MAX_CONNECTIONS]; int mux_idx;
hda_nid_t cvt_nid;
struct hda_codec *codec; struct hdmi_eld sink_eld; struct mutex lock; struct delayed_work work; struct hdmi_pcm *pcm; /* pointer to spec->pcm_rec[n] dynamically*/ int pcm_idx; /* which pcm is attached. -1 means no pcm is attached */ int prev_pcm_idx; /* previously assigned pcm index */ int repoll_count; bool setup; /* the stream has been set up by prepare callback */ bool silent_stream; int channels; /* current number of channels */ bool non_pcm; bool chmap_set; /* channel-map override by ALSA API? */ unsignedchar chmap[8]; /* ALSA API channel-map */ #ifdef CONFIG_SND_PROC_FS struct snd_info_entry *proc_entry; #endif
};
/* operations used by generic code that can be overridden by codec drivers */ struct hdmi_ops { int (*pin_get_eld)(struct hda_codec *codec, hda_nid_t pin_nid, int dev_id, unsignedchar *buf, int *eld_size);
void (*pin_setup_infoframe)(struct hda_codec *codec, hda_nid_t pin_nid, int dev_id, int ca, int active_channels, int conn_type);
/* enable/disable HBR (HD passthrough) */ int (*pin_hbr_setup)(struct hda_codec *codec, hda_nid_t pin_nid, int dev_id, bool hbr);
int (*setup_stream)(struct hda_codec *codec, hda_nid_t cvt_nid,
hda_nid_t pin_nid, int dev_id, u32 stream_tag, int format);
enum {
SILENT_STREAM_OFF = 0,
SILENT_STREAM_KAE, /* use standard HDA Keep-Alive */
SILENT_STREAM_I915, /* Intel i915 extension */
};
struct hdmi_spec { struct hda_codec *codec; int num_cvts; struct snd_array cvts; /* struct hdmi_spec_per_cvt */
hda_nid_t cvt_nids[4]; /* only for haswell fix */
/* * num_pins is the number of virtual pins * for example, there are 3 pins, and each pin * has 4 device entries, then the num_pins is 12
*/ int num_pins; /* * num_nids is the number of real pins * In the above example, num_nids is 3
*/ int num_nids; /* * dev_num is the number of device entries * on each pin. * In the above example, dev_num is 4
*/ int dev_num; struct snd_array pins; /* struct hdmi_spec_per_pin */ struct hdmi_pcm pcm_rec[8]; struct mutex pcm_lock; struct mutex bind_lock; /* for audio component binding */ /* pcm_bitmap means which pcms have been assigned to pins*/ unsignedlong pcm_bitmap; int pcm_used; /* counter of pcm_rec[] */ /* bitmap shows whether the pcm is opened in user space * bit 0 means the first playback PCM (PCM3); * bit 1 means the second playback PCM, and so on.
*/ unsignedlong pcm_in_use;
struct hdmi_eld temp_eld; struct hdmi_ops ops;
bool dyn_pin_out; bool static_pcm_mapping; /* hdmi interrupt trigger control flag for Nvidia codec */ bool hdmi_intr_trig_ctrl; bool nv_dp_workaround; /* workaround DP audio infoframe for Nvidia */
/* Audio component support */ void snd_hda_hdmi_setup_drm_audio_ops(struct hda_codec *codec, conststruct drm_audio_component_audio_ops *ops); void snd_hda_hdmi_acomp_init(struct hda_codec *codec, conststruct drm_audio_component_audio_ops *ops, int (*port2pin)(struct hda_codec *, int)); void snd_hda_hdmi_acomp_pin_eld_notify(void *audio_ptr, int port, int dev_id); int snd_hda_hdmi_acomp_master_bind(struct device *dev, struct drm_audio_component *acomp); void snd_hda_hdmi_acomp_master_unbind(struct device *dev, struct drm_audio_component *acomp);
/* Simple / legacy HDMI codec support */ int snd_hda_hdmi_simple_probe(struct hda_codec *codec,
hda_nid_t cvt_nid, hda_nid_t pin_nid); void snd_hda_hdmi_simple_remove(struct hda_codec *codec);
int snd_hda_hdmi_simple_build_pcms(struct hda_codec *codec); int snd_hda_hdmi_simple_build_controls(struct hda_codec *codec); int snd_hda_hdmi_simple_init(struct hda_codec *codec); void snd_hda_hdmi_simple_unsol_event(struct hda_codec *codec, unsignedint res); int snd_hda_hdmi_simple_pcm_open(struct hda_pcm_stream *hinfo, struct hda_codec *codec, struct snd_pcm_substream *substream);
#endif/* __HDA_HDMI_LOCAL_H */
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.9Bemerkung:
(vorverarbeitet am 2026-06-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.