Root/
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 "drmP.h" |
31 | #include "drm_crtc.h" |
32 | |
33 | /** |
34 | * struct drm_encoder_slave_funcs - Entry points exposed by a slave encoder driver |
35 | * @set_config: Initialize any encoder-specific modesetting parameters. |
36 | * The meaning of the @params parameter is implementation |
37 | * dependent. It will usually be a structure with DVO port |
38 | * data format settings or timings. It's not required for |
39 | * the new parameters to take effect until the next mode |
40 | * is set. |
41 | * |
42 | * Most of its members are analogous to the function pointers in |
43 | * &drm_encoder_helper_funcs and they can optionally be used to |
44 | * initialize the latter. Connector-like methods (e.g. @get_modes and |
45 | * @set_property) will typically be wrapped around and only be called |
46 | * if the encoder is the currently selected one for the connector. |
47 | */ |
48 | struct drm_encoder_slave_funcs { |
49 | void (*set_config)(struct drm_encoder *encoder, |
50 | void *params); |
51 | |
52 | void (*destroy)(struct drm_encoder *encoder); |
53 | void (*dpms)(struct drm_encoder *encoder, int mode); |
54 | void (*save)(struct drm_encoder *encoder); |
55 | void (*restore)(struct drm_encoder *encoder); |
56 | bool (*mode_fixup)(struct drm_encoder *encoder, |
57 | const struct drm_display_mode *mode, |
58 | struct drm_display_mode *adjusted_mode); |
59 | int (*mode_valid)(struct drm_encoder *encoder, |
60 | struct drm_display_mode *mode); |
61 | void (*mode_set)(struct drm_encoder *encoder, |
62 | struct drm_display_mode *mode, |
63 | struct drm_display_mode *adjusted_mode); |
64 | |
65 | enum drm_connector_status (*detect)(struct drm_encoder *encoder, |
66 | struct drm_connector *connector); |
67 | int (*get_modes)(struct drm_encoder *encoder, |
68 | struct drm_connector *connector); |
69 | int (*create_resources)(struct drm_encoder *encoder, |
70 | struct drm_connector *connector); |
71 | int (*set_property)(struct drm_encoder *encoder, |
72 | struct drm_connector *connector, |
73 | struct drm_property *property, |
74 | uint64_t val); |
75 | |
76 | }; |
77 | |
78 | /** |
79 | * struct drm_encoder_slave - Slave encoder struct |
80 | * @base: DRM encoder object. |
81 | * @slave_funcs: Slave encoder callbacks. |
82 | * @slave_priv: Slave encoder private data. |
83 | * @bus_priv: Bus specific data. |
84 | * |
85 | * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the |
86 | * ones in @base. The former are never actually called by the common |
87 | * CRTC code, it's just a convenience for splitting the encoder |
88 | * functions in an upper, GPU-specific layer and a (hopefully) |
89 | * GPU-agnostic lower layer: It's the GPU driver responsibility to |
90 | * call the slave methods when appropriate. |
91 | * |
92 | * drm_i2c_encoder_init() provides a way to get an implementation of |
93 | * this. |
94 | */ |
95 | struct drm_encoder_slave { |
96 | struct drm_encoder base; |
97 | |
98 | struct drm_encoder_slave_funcs *slave_funcs; |
99 | void *slave_priv; |
100 | void *bus_priv; |
101 | }; |
102 | #define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, base) |
103 | |
104 | int drm_i2c_encoder_init(struct drm_device *dev, |
105 | struct drm_encoder_slave *encoder, |
106 | struct i2c_adapter *adap, |
107 | const struct i2c_board_info *info); |
108 | |
109 | |
110 | /** |
111 | * struct drm_i2c_encoder_driver |
112 | * |
113 | * Describes a device driver for an encoder connected to the GPU |
114 | * through an I2C bus. In addition to the entry points in @i2c_driver |
115 | * an @encoder_init function should be provided. It will be called to |
116 | * give the driver an opportunity to allocate any per-encoder data |
117 | * structures and to initialize the @slave_funcs and (optionally) |
118 | * @slave_priv members of @encoder. |
119 | */ |
120 | struct drm_i2c_encoder_driver { |
121 | struct i2c_driver i2c_driver; |
122 | |
123 | int (*encoder_init)(struct i2c_client *client, |
124 | struct drm_device *dev, |
125 | struct drm_encoder_slave *encoder); |
126 | |
127 | }; |
128 | #define to_drm_i2c_encoder_driver(x) container_of((x), \ |
129 | struct drm_i2c_encoder_driver, \ |
130 | i2c_driver) |
131 | |
132 | /** |
133 | * drm_i2c_encoder_get_client - Get the I2C client corresponding to an encoder |
134 | */ |
135 | static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *encoder) |
136 | { |
137 | return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv; |
138 | } |
139 | |
140 | /** |
141 | * drm_i2c_encoder_register - Register an I2C encoder driver |
142 | * @owner: Module containing the driver. |
143 | * @driver: Driver to be registered. |
144 | */ |
145 | static inline int drm_i2c_encoder_register(struct module *owner, |
146 | struct drm_i2c_encoder_driver *driver) |
147 | { |
148 | return i2c_register_driver(owner, &driver->i2c_driver); |
149 | } |
150 | |
151 | /** |
152 | * drm_i2c_encoder_unregister - Unregister an I2C encoder driver |
153 | * @driver: Driver to be unregistered. |
154 | */ |
155 | static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *driver) |
156 | { |
157 | i2c_del_driver(&driver->i2c_driver); |
158 | } |
159 | |
160 | void drm_i2c_encoder_destroy(struct drm_encoder *encoder); |
161 | |
162 | #endif |
163 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9