// SPDX-License-Identifier: MIT
// Copyright © 2014 Intel Corporation
#ifndef _DRM_AUDIO_COMPONENT_H_
#define _DRM_AUDIO_COMPONENT_H_
#include <linux/completion.h>
#include <linux/types.h>
struct drm_audio_component;
struct device;
/**
* struct drm_audio_component_ops - Ops implemented by DRM driver , called by hda driver
*/
struct drm_audio_component_ops {
/**
* @ owner : drm module to pin down
*/
struct module *owner;
/**
* @ get_power : get the POWER_DOMAIN_AUDIO power well
*
* Request the power well to be turned on .
*
* Returns a wakeref cookie to be passed back to the corresponding
* call to @ put_power .
*/
unsigned long (*get_power)(struct device *);
/**
* @ put_power : put the POWER_DOMAIN_AUDIO power well
*
* Allow the power well to be turned off .
*/
void (*put_power)(struct device *, unsigned long );
/**
* @ codec_wake_override : Enable / disable codec wake signal
*/
void (*codec_wake_override)(struct device *, bool enable);
/**
* @ get_cdclk_freq : Get the Core Display Clock in kHz
*/
int (*get_cdclk_freq)(struct device *);
/**
* @ sync_audio_rate : set n / cts based on the sample rate
*
* Called from audio driver . After audio driver sets the
* sample rate , it will call this function to set n / cts
*/
int (*sync_audio_rate)(struct device *, int port, int pipe, int rate);
/**
* @ get_eld : fill the audio state and ELD bytes for the given port
*
* Called from audio driver to get the HDMI / DP audio state of the given
* digital port , and also fetch ELD bytes to the given pointer .
*
* It returns the byte size of the original ELD ( not the actually
* copied size ) , zero for an invalid ELD , or a negative error code .
*
* Note that the returned size may be over @ max_bytes . Then it
* implies that only a part of ELD has been copied to the buffer .
*/
int (*get_eld)(struct device *, int port, int pipe, bool *enabled,
unsigned char *buf, int max_bytes);
};
/**
* struct drm_audio_component_audio_ops - Ops implemented by hda driver , called by DRM driver
*/
struct drm_audio_component_audio_ops {
/**
* @ audio_ptr : Pointer to be used in call to pin_eld_notify
*/
void *audio_ptr;
/**
* @ pin_eld_notify : Notify the HDA driver that pin sense and / or ELD information has changed
*
* Called when the DRM driver has set up audio pipeline or has just
* begun to tear it down . This allows the HDA driver to update its
* status accordingly ( even when the HDA controller is in power save
* mode ) .
*/
void (*pin_eld_notify)(void *audio_ptr, int port, int pipe);
/**
* @ pin2port : Check and convert from pin node to port number
*
* Called by HDA driver to check and convert from the pin widget node
* number to a port number in the graphics side .
*/
int (*pin2port)(void *audio_ptr, int pin);
/**
* @ master_bind : ( Optional ) component master bind callback
*
* Called at binding master component , for HDA codec - specific
* handling of dynamic binding .
*/
int (*master_bind)(struct device *dev, struct drm_audio_component *);
/**
* @ master_unbind : ( Optional ) component master unbind callback
*
* Called at unbinding master component , for HDA codec - specific
* handling of dynamic unbinding .
*/
void (*master_unbind)(struct device *dev, struct drm_audio_component *);
};
/**
* struct drm_audio_component - Used for direct communication between DRM and hda drivers
*/
struct drm_audio_component {
/**
* @ dev : DRM device , used as parameter for ops
*/
struct device *dev;
/**
* @ ops : Ops implemented by DRM driver , called by hda driver
*/
const struct drm_audio_component_ops *ops;
/**
* @ audio_ops : Ops implemented by hda driver , called by DRM driver
*/
const struct drm_audio_component_audio_ops *audio_ops;
/**
* @ master_bind_complete : completion held during component master binding
*/
struct completion master_bind_complete;
};
#endif /* _DRM_AUDIO_COMPONENT_H_ */
Messung V0.5 in Prozent C=86 H=100 G=93
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland