~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/drm/drm_encoder_slave.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (C) 2009 Francisco Jerez.
  3  * All Rights Reserved.
  4  *
  5  * Permission is hereby granted, free of charge, to any person obtaining
  6  * a copy of this software and associated documentation files (the
  7  * "Software"), to deal in the Software without restriction, including
  8  * without limitation the rights to use, copy, modify, merge, publish,
  9  * distribute, sublicense, and/or sell copies of the Software, and to
 10  * permit persons to whom the Software is furnished to do so, subject to
 11  * the following conditions:
 12  *
 13  * The above copyright notice and this permission notice (including the
 14  * next paragraph) shall be included in all copies or substantial
 15  * portions of the Software.
 16  *
 17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 20  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
 21  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 22  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 23  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 24  *
 25  */
 26 
 27 #ifndef __DRM_ENCODER_SLAVE_H__
 28 #define __DRM_ENCODER_SLAVE_H__
 29 
 30 #include <linux/i2c.h>
 31 
 32 #include <drm/drm_crtc.h>
 33 #include <drm/drm_encoder.h>
 34 
 35 /**
 36  * struct drm_encoder_slave_funcs - Entry points exposed by a slave encoder driver
 37  *
 38  * Most of its members are analogous to the function pointers in
 39  * &drm_encoder_helper_funcs and they can optionally be used to
 40  * initialize the latter. Connector-like methods (e.g. @get_modes and
 41  * @set_property) will typically be wrapped around and only be called
 42  * if the encoder is the currently selected one for the connector.
 43  */
 44 struct drm_encoder_slave_funcs {
 45         /**
 46          * @set_config: Initialize any encoder-specific modesetting parameters.
 47          * The meaning of the @params parameter is implementation dependent. It
 48          * will usually be a structure with DVO port data format settings or
 49          * timings. It's not required for the new parameters to take effect
 50          * until the next mode is set.
 51          */
 52         void (*set_config)(struct drm_encoder *encoder,
 53                            void *params);
 54 
 55         /**
 56          * @destroy: Analogous to &drm_encoder_funcs @destroy callback.
 57          */
 58         void (*destroy)(struct drm_encoder *encoder);
 59 
 60         /**
 61          * @dpms: Analogous to &drm_encoder_helper_funcs @dpms callback. Wrapped
 62          * by drm_i2c_encoder_dpms().
 63          */
 64         void (*dpms)(struct drm_encoder *encoder, int mode);
 65 
 66         /**
 67          * @save: Save state. Wrapped by drm_i2c_encoder_save().
 68          */
 69         void (*save)(struct drm_encoder *encoder);
 70 
 71         /**
 72          * @restore: Restore state. Wrapped by drm_i2c_encoder_restore().
 73          */
 74         void (*restore)(struct drm_encoder *encoder);
 75 
 76         /**
 77          * @mode_fixup: Analogous to &drm_encoder_helper_funcs @mode_fixup
 78          * callback. Wrapped by drm_i2c_encoder_mode_fixup().
 79          */
 80         bool (*mode_fixup)(struct drm_encoder *encoder,
 81                            const struct drm_display_mode *mode,
 82                            struct drm_display_mode *adjusted_mode);
 83 
 84         /**
 85          * @mode_valid: Analogous to &drm_encoder_helper_funcs @mode_valid.
 86          */
 87         int (*mode_valid)(struct drm_encoder *encoder,
 88                           struct drm_display_mode *mode);
 89         /**
 90          * @mode_set: Analogous to &drm_encoder_helper_funcs @mode_set
 91          * callback. Wrapped by drm_i2c_encoder_mode_set().
 92          */
 93         void (*mode_set)(struct drm_encoder *encoder,
 94                          struct drm_display_mode *mode,
 95                          struct drm_display_mode *adjusted_mode);
 96 
 97         /**
 98          * @detect: Analogous to &drm_encoder_helper_funcs @detect
 99          * callback. Wrapped by drm_i2c_encoder_detect().
100          */
101         enum drm_connector_status (*detect)(struct drm_encoder *encoder,
102                                             struct drm_connector *connector);
103         /**
104          * @get_modes: Get modes.
105          */
106         int (*get_modes)(struct drm_encoder *encoder,
107                          struct drm_connector *connector);
108         /**
109          * @create_resources: Create resources.
110          */
111         int (*create_resources)(struct drm_encoder *encoder,
112                                  struct drm_connector *connector);
113         /**
114          * @set_property: Set property.
115          */
116         int (*set_property)(struct drm_encoder *encoder,
117                             struct drm_connector *connector,
118                             struct drm_property *property,
119                             uint64_t val);
120 };
121 
122 /**
123  * struct drm_encoder_slave - Slave encoder struct
124  *
125  * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the
126  * ones in @base. The former are never actually called by the common
127  * CRTC code, it's just a convenience for splitting the encoder
128  * functions in an upper, GPU-specific layer and a (hopefully)
129  * GPU-agnostic lower layer: It's the GPU driver responsibility to
130  * call the slave methods when appropriate.
131  *
132  * drm_i2c_encoder_init() provides a way to get an implementation of
133  * this.
134  */
135 struct drm_encoder_slave {
136         /**
137          * @base: DRM encoder object.
138          */
139         struct drm_encoder base;
140 
141         /**
142          * @slave_funcs: Slave encoder callbacks.
143          */
144         const struct drm_encoder_slave_funcs *slave_funcs;
145 
146         /**
147          * @slave_priv: Slave encoder private data.
148          */
149         void *slave_priv;
150 
151         /**
152          * @bus_priv: Bus specific data.
153          */
154         void *bus_priv;
155 };
156 #define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, base)
157 
158 int drm_i2c_encoder_init(struct drm_device *dev,
159                          struct drm_encoder_slave *encoder,
160                          struct i2c_adapter *adap,
161                          const struct i2c_board_info *info);
162 
163 
164 /**
165  * struct drm_i2c_encoder_driver
166  *
167  * Describes a device driver for an encoder connected to the GPU through an I2C
168  * bus.
169  */
170 struct drm_i2c_encoder_driver {
171         /**
172          * @i2c_driver: I2C device driver description.
173          */
174         struct i2c_driver i2c_driver;
175 
176         /**
177          * @encoder_init: Callback to allocate any per-encoder data structures
178          * and to initialize the @slave_funcs and (optionally) @slave_priv
179          * members of @encoder.
180          */
181         int (*encoder_init)(struct i2c_client *client,
182                             struct drm_device *dev,
183                             struct drm_encoder_slave *encoder);
184 
185 };
186 #define to_drm_i2c_encoder_driver(x) container_of((x),                  \
187                                                   struct drm_i2c_encoder_driver, \
188                                                   i2c_driver)
189 
190 /**
191  * drm_i2c_encoder_get_client - Get the I2C client corresponding to an encoder
192  * @encoder: The encoder
193  */
194 static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *encoder)
195 {
196         return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv;
197 }
198 
199 /**
200  * drm_i2c_encoder_register - Register an I2C encoder driver
201  * @owner:      Module containing the driver.
202  * @driver:     Driver to be registered.
203  */
204 static inline int drm_i2c_encoder_register(struct module *owner,
205                                            struct drm_i2c_encoder_driver *driver)
206 {
207         return i2c_register_driver(owner, &driver->i2c_driver);
208 }
209 
210 /**
211  * drm_i2c_encoder_unregister - Unregister an I2C encoder driver
212  * @driver:     Driver to be unregistered.
213  */
214 static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *driver)
215 {
216         i2c_del_driver(&driver->i2c_driver);
217 }
218 
219 void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
220 
221 
222 /*
223  * Wrapper fxns which can be plugged in to drm_encoder_helper_funcs:
224  */
225 
226 void drm_i2c_encoder_dpms(struct drm_encoder *encoder, int mode);
227 bool drm_i2c_encoder_mode_fixup(struct drm_encoder *encoder,
228                 const struct drm_display_mode *mode,
229                 struct drm_display_mode *adjusted_mode);
230 void drm_i2c_encoder_prepare(struct drm_encoder *encoder);
231 void drm_i2c_encoder_commit(struct drm_encoder *encoder);
232 void drm_i2c_encoder_mode_set(struct drm_encoder *encoder,
233                 struct drm_display_mode *mode,
234                 struct drm_display_mode *adjusted_mode);
235 enum drm_connector_status drm_i2c_encoder_detect(struct drm_encoder *encoder,
236             struct drm_connector *connector);
237 void drm_i2c_encoder_save(struct drm_encoder *encoder);
238 void drm_i2c_encoder_restore(struct drm_encoder *encoder);
239 
240 
241 #endif
242 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php