]>
Commit | Line | Data |
---|---|---|
ae891abe TI |
1 | // SPDX-License-Identifier: MIT |
2 | // Copyright © 2014 Intel Corporation | |
3 | ||
4 | #ifndef _DRM_AUDIO_COMPONENT_H_ | |
5 | #define _DRM_AUDIO_COMPONENT_H_ | |
6 | ||
a57942bf | 7 | struct drm_audio_component; |
35c02725 | 8 | struct device; |
a57942bf | 9 | |
ae891abe TI |
10 | /** |
11 | * struct drm_audio_component_ops - Ops implemented by DRM driver, called by hda driver | |
12 | */ | |
13 | struct drm_audio_component_ops { | |
14 | /** | |
15 | * @owner: drm module to pin down | |
16 | */ | |
17 | struct module *owner; | |
18 | /** | |
19 | * @get_power: get the POWER_DOMAIN_AUDIO power well | |
20 | * | |
21 | * Request the power well to be turned on. | |
d31c85fc CW |
22 | * |
23 | * Returns a wakeref cookie to be passed back to the corresponding | |
24 | * call to @put_power. | |
ae891abe | 25 | */ |
d31c85fc | 26 | unsigned long (*get_power)(struct device *); |
ae891abe TI |
27 | /** |
28 | * @put_power: put the POWER_DOMAIN_AUDIO power well | |
29 | * | |
30 | * Allow the power well to be turned off. | |
31 | */ | |
d31c85fc | 32 | void (*put_power)(struct device *, unsigned long); |
ae891abe TI |
33 | /** |
34 | * @codec_wake_override: Enable/disable codec wake signal | |
35 | */ | |
36 | void (*codec_wake_override)(struct device *, bool enable); | |
37 | /** | |
38 | * @get_cdclk_freq: Get the Core Display Clock in kHz | |
39 | */ | |
40 | int (*get_cdclk_freq)(struct device *); | |
41 | /** | |
42 | * @sync_audio_rate: set n/cts based on the sample rate | |
43 | * | |
44 | * Called from audio driver. After audio driver sets the | |
45 | * sample rate, it will call this function to set n/cts | |
46 | */ | |
47 | int (*sync_audio_rate)(struct device *, int port, int pipe, int rate); | |
48 | /** | |
49 | * @get_eld: fill the audio state and ELD bytes for the given port | |
50 | * | |
51 | * Called from audio driver to get the HDMI/DP audio state of the given | |
52 | * digital port, and also fetch ELD bytes to the given pointer. | |
53 | * | |
54 | * It returns the byte size of the original ELD (not the actually | |
55 | * copied size), zero for an invalid ELD, or a negative error code. | |
56 | * | |
57 | * Note that the returned size may be over @max_bytes. Then it | |
58 | * implies that only a part of ELD has been copied to the buffer. | |
59 | */ | |
60 | int (*get_eld)(struct device *, int port, int pipe, bool *enabled, | |
61 | unsigned char *buf, int max_bytes); | |
62 | }; | |
63 | ||
64 | /** | |
65 | * struct drm_audio_component_audio_ops - Ops implemented by hda driver, called by DRM driver | |
66 | */ | |
67 | struct drm_audio_component_audio_ops { | |
68 | /** | |
69 | * @audio_ptr: Pointer to be used in call to pin_eld_notify | |
70 | */ | |
71 | void *audio_ptr; | |
72 | /** | |
73 | * @pin_eld_notify: Notify the HDA driver that pin sense and/or ELD information has changed | |
74 | * | |
75 | * Called when the DRM driver has set up audio pipeline or has just | |
76 | * begun to tear it down. This allows the HDA driver to update its | |
77 | * status accordingly (even when the HDA controller is in power save | |
78 | * mode). | |
79 | */ | |
80 | void (*pin_eld_notify)(void *audio_ptr, int port, int pipe); | |
a57942bf TI |
81 | /** |
82 | * @pin2port: Check and convert from pin node to port number | |
83 | * | |
84 | * Called by HDA driver to check and convert from the pin widget node | |
85 | * number to a port number in the graphics side. | |
86 | */ | |
87 | int (*pin2port)(void *audio_ptr, int pin); | |
88 | /** | |
89 | * @master_bind: (Optional) component master bind callback | |
90 | * | |
91 | * Called at binding master component, for HDA codec-specific | |
92 | * handling of dynamic binding. | |
93 | */ | |
94 | int (*master_bind)(struct device *dev, struct drm_audio_component *); | |
95 | /** | |
96 | * @master_unbind: (Optional) component master unbind callback | |
97 | * | |
98 | * Called at unbinding master component, for HDA codec-specific | |
99 | * handling of dynamic unbinding. | |
100 | */ | |
101 | void (*master_unbind)(struct device *dev, struct drm_audio_component *); | |
ae891abe TI |
102 | }; |
103 | ||
104 | /** | |
105 | * struct drm_audio_component - Used for direct communication between DRM and hda drivers | |
106 | */ | |
107 | struct drm_audio_component { | |
108 | /** | |
109 | * @dev: DRM device, used as parameter for ops | |
110 | */ | |
111 | struct device *dev; | |
112 | /** | |
113 | * @ops: Ops implemented by DRM driver, called by hda driver | |
114 | */ | |
115 | const struct drm_audio_component_ops *ops; | |
116 | /** | |
117 | * @audio_ops: Ops implemented by hda driver, called by DRM driver | |
118 | */ | |
119 | const struct drm_audio_component_audio_ops *audio_ops; | |
120 | }; | |
121 | ||
122 | #endif /* _DRM_AUDIO_COMPONENT_H_ */ |