Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/drm/drm_bridge.h
26285 views
1
/*
2
* Copyright (c) 2016 Intel Corporation
3
*
4
* Permission to use, copy, modify, distribute, and sell this software and its
5
* documentation for any purpose is hereby granted without fee, provided that
6
* the above copyright notice appear in all copies and that both that copyright
7
* notice and this permission notice appear in supporting documentation, and
8
* that the name of the copyright holders not be used in advertising or
9
* publicity pertaining to distribution of the software without specific,
10
* written prior permission. The copyright holders make no representations
11
* about the suitability of this software for any purpose. It is provided "as
12
* is" without express or implied warranty.
13
*
14
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20
* OF THIS SOFTWARE.
21
*/
22
23
#ifndef __DRM_BRIDGE_H__
24
#define __DRM_BRIDGE_H__
25
26
#include <linux/ctype.h>
27
#include <linux/list.h>
28
#include <linux/mutex.h>
29
30
#include <drm/drm_atomic.h>
31
#include <drm/drm_encoder.h>
32
#include <drm/drm_mode_object.h>
33
#include <drm/drm_modes.h>
34
35
struct cec_msg;
36
struct device_node;
37
38
struct drm_bridge;
39
struct drm_bridge_timings;
40
struct drm_connector;
41
struct drm_display_info;
42
struct drm_minor;
43
struct drm_panel;
44
struct edid;
45
struct hdmi_codec_daifmt;
46
struct hdmi_codec_params;
47
struct i2c_adapter;
48
49
/**
50
* enum drm_bridge_attach_flags - Flags for &drm_bridge_funcs.attach
51
*/
52
enum drm_bridge_attach_flags {
53
/**
54
* @DRM_BRIDGE_ATTACH_NO_CONNECTOR: When this flag is set the bridge
55
* shall not create a drm_connector.
56
*/
57
DRM_BRIDGE_ATTACH_NO_CONNECTOR = BIT(0),
58
};
59
60
/**
61
* struct drm_bridge_funcs - drm_bridge control functions
62
*/
63
struct drm_bridge_funcs {
64
/**
65
* @attach:
66
*
67
* This callback is invoked whenever our bridge is being attached to a
68
* &drm_encoder. The flags argument tunes the behaviour of the attach
69
* operation (see DRM_BRIDGE_ATTACH_*).
70
*
71
* The @attach callback is optional.
72
*
73
* RETURNS:
74
*
75
* Zero on success, error code on failure.
76
*/
77
int (*attach)(struct drm_bridge *bridge, struct drm_encoder *encoder,
78
enum drm_bridge_attach_flags flags);
79
80
/**
81
* @destroy:
82
*
83
* This callback is invoked when the bridge is about to be
84
* deallocated.
85
*
86
* The @destroy callback is optional.
87
*/
88
void (*destroy)(struct drm_bridge *bridge);
89
90
/**
91
* @detach:
92
*
93
* This callback is invoked whenever our bridge is being detached from a
94
* &drm_encoder.
95
*
96
* The @detach callback is optional.
97
*/
98
void (*detach)(struct drm_bridge *bridge);
99
100
/**
101
* @mode_valid:
102
*
103
* This callback is used to check if a specific mode is valid in this
104
* bridge. This should be implemented if the bridge has some sort of
105
* restriction in the modes it can display. For example, a given bridge
106
* may be responsible to set a clock value. If the clock can not
107
* produce all the values for the available modes then this callback
108
* can be used to restrict the number of modes to only the ones that
109
* can be displayed.
110
*
111
* This hook is used by the probe helpers to filter the mode list in
112
* drm_helper_probe_single_connector_modes(), and it is used by the
113
* atomic helpers to validate modes supplied by userspace in
114
* drm_atomic_helper_check_modeset().
115
*
116
* The @mode_valid callback is optional.
117
*
118
* NOTE:
119
*
120
* Since this function is both called from the check phase of an atomic
121
* commit, and the mode validation in the probe paths it is not allowed
122
* to look at anything else but the passed-in mode, and validate it
123
* against configuration-invariant hardware constraints. Any further
124
* limits which depend upon the configuration can only be checked in
125
* @mode_fixup.
126
*
127
* RETURNS:
128
*
129
* drm_mode_status Enum
130
*/
131
enum drm_mode_status (*mode_valid)(struct drm_bridge *bridge,
132
const struct drm_display_info *info,
133
const struct drm_display_mode *mode);
134
135
/**
136
* @mode_fixup:
137
*
138
* This callback is used to validate and adjust a mode. The parameter
139
* mode is the display mode that should be fed to the next element in
140
* the display chain, either the final &drm_connector or the next
141
* &drm_bridge. The parameter adjusted_mode is the input mode the bridge
142
* requires. It can be modified by this callback and does not need to
143
* match mode. See also &drm_crtc_state.adjusted_mode for more details.
144
*
145
* This is the only hook that allows a bridge to reject a modeset. If
146
* this function passes all other callbacks must succeed for this
147
* configuration.
148
*
149
* The mode_fixup callback is optional. &drm_bridge_funcs.mode_fixup()
150
* is not called when &drm_bridge_funcs.atomic_check() is implemented,
151
* so only one of them should be provided.
152
*
153
* NOTE:
154
*
155
* This function is called in the check phase of atomic modesets, which
156
* can be aborted for any reason (including on userspace's request to
157
* just check whether a configuration would be possible). Drivers MUST
158
* NOT touch any persistent state (hardware or software) or data
159
* structures except the passed in @state parameter.
160
*
161
* Also beware that userspace can request its own custom modes, neither
162
* core nor helpers filter modes to the list of probe modes reported by
163
* the GETCONNECTOR IOCTL and stored in &drm_connector.modes. To ensure
164
* that modes are filtered consistently put any bridge constraints and
165
* limits checks into @mode_valid.
166
*
167
* RETURNS:
168
*
169
* True if an acceptable configuration is possible, false if the modeset
170
* operation should be rejected.
171
*/
172
bool (*mode_fixup)(struct drm_bridge *bridge,
173
const struct drm_display_mode *mode,
174
struct drm_display_mode *adjusted_mode);
175
/**
176
* @disable:
177
*
178
* The @disable callback should disable the bridge.
179
*
180
* The bridge can assume that the display pipe (i.e. clocks and timing
181
* signals) feeding it is still running when this callback is called.
182
*
183
*
184
* If the preceding element is a &drm_bridge, then this is called before
185
* that bridge is disabled via one of:
186
*
187
* - &drm_bridge_funcs.disable
188
* - &drm_bridge_funcs.atomic_disable
189
*
190
* If the preceding element of the bridge is a display controller, then
191
* this callback is called before the encoder is disabled via one of:
192
*
193
* - &drm_encoder_helper_funcs.atomic_disable
194
* - &drm_encoder_helper_funcs.prepare
195
* - &drm_encoder_helper_funcs.disable
196
* - &drm_encoder_helper_funcs.dpms
197
*
198
* and the CRTC is disabled via one of:
199
*
200
* - &drm_crtc_helper_funcs.prepare
201
* - &drm_crtc_helper_funcs.atomic_disable
202
* - &drm_crtc_helper_funcs.disable
203
* - &drm_crtc_helper_funcs.dpms.
204
*
205
* The @disable callback is optional.
206
*
207
* NOTE:
208
*
209
* This is deprecated, do not use!
210
* New drivers shall use &drm_bridge_funcs.atomic_disable.
211
*/
212
void (*disable)(struct drm_bridge *bridge);
213
214
/**
215
* @post_disable:
216
*
217
* The bridge must assume that the display pipe (i.e. clocks and timing
218
* signals) feeding this bridge is no longer running when the
219
* @post_disable is called.
220
*
221
* This callback should perform all the actions required by the hardware
222
* after it has stopped receiving signals from the preceding element.
223
*
224
* If the preceding element is a &drm_bridge, then this is called after
225
* that bridge is post-disabled (unless marked otherwise by the
226
* @pre_enable_prev_first flag) via one of:
227
*
228
* - &drm_bridge_funcs.post_disable
229
* - &drm_bridge_funcs.atomic_post_disable
230
*
231
* If the preceding element of the bridge is a display controller, then
232
* this callback is called after the encoder is disabled via one of:
233
*
234
* - &drm_encoder_helper_funcs.atomic_disable
235
* - &drm_encoder_helper_funcs.prepare
236
* - &drm_encoder_helper_funcs.disable
237
* - &drm_encoder_helper_funcs.dpms
238
*
239
* and the CRTC is disabled via one of:
240
*
241
* - &drm_crtc_helper_funcs.prepare
242
* - &drm_crtc_helper_funcs.atomic_disable
243
* - &drm_crtc_helper_funcs.disable
244
* - &drm_crtc_helper_funcs.dpms
245
*
246
* The @post_disable callback is optional.
247
*
248
* NOTE:
249
*
250
* This is deprecated, do not use!
251
* New drivers shall use &drm_bridge_funcs.atomic_post_disable.
252
*/
253
void (*post_disable)(struct drm_bridge *bridge);
254
255
/**
256
* @mode_set:
257
*
258
* This callback should set the given mode on the bridge. It is called
259
* after the @mode_set callback for the preceding element in the display
260
* pipeline has been called already. If the bridge is the first element
261
* then this would be &drm_encoder_helper_funcs.mode_set. The display
262
* pipe (i.e. clocks and timing signals) is off when this function is
263
* called.
264
*
265
* The adjusted_mode parameter is the mode output by the CRTC for the
266
* first bridge in the chain. It can be different from the mode
267
* parameter that contains the desired mode for the connector at the end
268
* of the bridges chain, for instance when the first bridge in the chain
269
* performs scaling. The adjusted mode is mostly useful for the first
270
* bridge in the chain and is likely irrelevant for the other bridges.
271
*
272
* For atomic drivers the adjusted_mode is the mode stored in
273
* &drm_crtc_state.adjusted_mode.
274
*
275
* NOTE:
276
*
277
* This is deprecated, do not use!
278
* New drivers shall set their mode in the
279
* &drm_bridge_funcs.atomic_enable operation.
280
*/
281
void (*mode_set)(struct drm_bridge *bridge,
282
const struct drm_display_mode *mode,
283
const struct drm_display_mode *adjusted_mode);
284
/**
285
* @pre_enable:
286
*
287
* The display pipe (i.e. clocks and timing signals) feeding this bridge
288
* will not yet be running when the @pre_enable is called.
289
*
290
* This callback should perform all the necessary actions to prepare the
291
* bridge to accept signals from the preceding element.
292
*
293
* If the preceding element is a &drm_bridge, then this is called before
294
* that bridge is pre-enabled (unless marked otherwise by
295
* @pre_enable_prev_first flag) via one of:
296
*
297
* - &drm_bridge_funcs.pre_enable
298
* - &drm_bridge_funcs.atomic_pre_enable
299
*
300
* If the preceding element of the bridge is a display controller, then
301
* this callback is called before the CRTC is enabled via one of:
302
*
303
* - &drm_crtc_helper_funcs.atomic_enable
304
* - &drm_crtc_helper_funcs.commit
305
*
306
* and the encoder is enabled via one of:
307
*
308
* - &drm_encoder_helper_funcs.atomic_enable
309
* - &drm_encoder_helper_funcs.enable
310
* - &drm_encoder_helper_funcs.commit
311
*
312
* The @pre_enable callback is optional.
313
*
314
* NOTE:
315
*
316
* This is deprecated, do not use!
317
* New drivers shall use &drm_bridge_funcs.atomic_pre_enable.
318
*/
319
void (*pre_enable)(struct drm_bridge *bridge);
320
321
/**
322
* @enable:
323
*
324
* The @enable callback should enable the bridge.
325
*
326
* The bridge can assume that the display pipe (i.e. clocks and timing
327
* signals) feeding it is running when this callback is called. This
328
* callback must enable the display link feeding the next bridge in the
329
* chain if there is one.
330
*
331
* If the preceding element is a &drm_bridge, then this is called after
332
* that bridge is enabled via one of:
333
*
334
* - &drm_bridge_funcs.enable
335
* - &drm_bridge_funcs.atomic_enable
336
*
337
* If the preceding element of the bridge is a display controller, then
338
* this callback is called after the CRTC is enabled via one of:
339
*
340
* - &drm_crtc_helper_funcs.atomic_enable
341
* - &drm_crtc_helper_funcs.commit
342
*
343
* and the encoder is enabled via one of:
344
*
345
* - &drm_encoder_helper_funcs.atomic_enable
346
* - &drm_encoder_helper_funcs.enable
347
* - drm_encoder_helper_funcs.commit
348
*
349
* The @enable callback is optional.
350
*
351
* NOTE:
352
*
353
* This is deprecated, do not use!
354
* New drivers shall use &drm_bridge_funcs.atomic_enable.
355
*/
356
void (*enable)(struct drm_bridge *bridge);
357
358
/**
359
* @atomic_pre_enable:
360
*
361
* The display pipe (i.e. clocks and timing signals) feeding this bridge
362
* will not yet be running when the @atomic_pre_enable is called.
363
*
364
* This callback should perform all the necessary actions to prepare the
365
* bridge to accept signals from the preceding element.
366
*
367
* If the preceding element is a &drm_bridge, then this is called before
368
* that bridge is pre-enabled (unless marked otherwise by
369
* @pre_enable_prev_first flag) via one of:
370
*
371
* - &drm_bridge_funcs.pre_enable
372
* - &drm_bridge_funcs.atomic_pre_enable
373
*
374
* If the preceding element of the bridge is a display controller, then
375
* this callback is called before the CRTC is enabled via one of:
376
*
377
* - &drm_crtc_helper_funcs.atomic_enable
378
* - &drm_crtc_helper_funcs.commit
379
*
380
* and the encoder is enabled via one of:
381
*
382
* - &drm_encoder_helper_funcs.atomic_enable
383
* - &drm_encoder_helper_funcs.enable
384
* - &drm_encoder_helper_funcs.commit
385
*
386
* The @atomic_pre_enable callback is optional.
387
*/
388
void (*atomic_pre_enable)(struct drm_bridge *bridge,
389
struct drm_atomic_state *state);
390
391
/**
392
* @atomic_enable:
393
*
394
* The @atomic_enable callback should enable the bridge.
395
*
396
* The bridge can assume that the display pipe (i.e. clocks and timing
397
* signals) feeding it is running when this callback is called. This
398
* callback must enable the display link feeding the next bridge in the
399
* chain if there is one.
400
*
401
* If the preceding element is a &drm_bridge, then this is called after
402
* that bridge is enabled via one of:
403
*
404
* - &drm_bridge_funcs.enable
405
* - &drm_bridge_funcs.atomic_enable
406
*
407
* If the preceding element of the bridge is a display controller, then
408
* this callback is called after the CRTC is enabled via one of:
409
*
410
* - &drm_crtc_helper_funcs.atomic_enable
411
* - &drm_crtc_helper_funcs.commit
412
*
413
* and the encoder is enabled via one of:
414
*
415
* - &drm_encoder_helper_funcs.atomic_enable
416
* - &drm_encoder_helper_funcs.enable
417
* - drm_encoder_helper_funcs.commit
418
*
419
* The @atomic_enable callback is optional.
420
*/
421
void (*atomic_enable)(struct drm_bridge *bridge,
422
struct drm_atomic_state *state);
423
/**
424
* @atomic_disable:
425
*
426
* The @atomic_disable callback should disable the bridge.
427
*
428
* The bridge can assume that the display pipe (i.e. clocks and timing
429
* signals) feeding it is still running when this callback is called.
430
*
431
* If the preceding element is a &drm_bridge, then this is called before
432
* that bridge is disabled via one of:
433
*
434
* - &drm_bridge_funcs.disable
435
* - &drm_bridge_funcs.atomic_disable
436
*
437
* If the preceding element of the bridge is a display controller, then
438
* this callback is called before the encoder is disabled via one of:
439
*
440
* - &drm_encoder_helper_funcs.atomic_disable
441
* - &drm_encoder_helper_funcs.prepare
442
* - &drm_encoder_helper_funcs.disable
443
* - &drm_encoder_helper_funcs.dpms
444
*
445
* and the CRTC is disabled via one of:
446
*
447
* - &drm_crtc_helper_funcs.prepare
448
* - &drm_crtc_helper_funcs.atomic_disable
449
* - &drm_crtc_helper_funcs.disable
450
* - &drm_crtc_helper_funcs.dpms.
451
*
452
* The @atomic_disable callback is optional.
453
*/
454
void (*atomic_disable)(struct drm_bridge *bridge,
455
struct drm_atomic_state *state);
456
457
/**
458
* @atomic_post_disable:
459
*
460
* The bridge must assume that the display pipe (i.e. clocks and timing
461
* signals) feeding this bridge is no longer running when the
462
* @atomic_post_disable is called.
463
*
464
* This callback should perform all the actions required by the hardware
465
* after it has stopped receiving signals from the preceding element.
466
*
467
* If the preceding element is a &drm_bridge, then this is called after
468
* that bridge is post-disabled (unless marked otherwise by the
469
* @pre_enable_prev_first flag) via one of:
470
*
471
* - &drm_bridge_funcs.post_disable
472
* - &drm_bridge_funcs.atomic_post_disable
473
*
474
* If the preceding element of the bridge is a display controller, then
475
* this callback is called after the encoder is disabled via one of:
476
*
477
* - &drm_encoder_helper_funcs.atomic_disable
478
* - &drm_encoder_helper_funcs.prepare
479
* - &drm_encoder_helper_funcs.disable
480
* - &drm_encoder_helper_funcs.dpms
481
*
482
* and the CRTC is disabled via one of:
483
*
484
* - &drm_crtc_helper_funcs.prepare
485
* - &drm_crtc_helper_funcs.atomic_disable
486
* - &drm_crtc_helper_funcs.disable
487
* - &drm_crtc_helper_funcs.dpms
488
*
489
* The @atomic_post_disable callback is optional.
490
*/
491
void (*atomic_post_disable)(struct drm_bridge *bridge,
492
struct drm_atomic_state *state);
493
494
/**
495
* @atomic_duplicate_state:
496
*
497
* Duplicate the current bridge state object (which is guaranteed to be
498
* non-NULL).
499
*
500
* The atomic_duplicate_state hook is mandatory if the bridge
501
* implements any of the atomic hooks, and should be left unassigned
502
* otherwise. For bridges that don't subclass &drm_bridge_state, the
503
* drm_atomic_helper_bridge_duplicate_state() helper function shall be
504
* used to implement this hook.
505
*
506
* RETURNS:
507
* A valid drm_bridge_state object or NULL if the allocation fails.
508
*/
509
struct drm_bridge_state *(*atomic_duplicate_state)(struct drm_bridge *bridge);
510
511
/**
512
* @atomic_destroy_state:
513
*
514
* Destroy a bridge state object previously allocated by
515
* &drm_bridge_funcs.atomic_duplicate_state().
516
*
517
* The atomic_destroy_state hook is mandatory if the bridge implements
518
* any of the atomic hooks, and should be left unassigned otherwise.
519
* For bridges that don't subclass &drm_bridge_state, the
520
* drm_atomic_helper_bridge_destroy_state() helper function shall be
521
* used to implement this hook.
522
*/
523
void (*atomic_destroy_state)(struct drm_bridge *bridge,
524
struct drm_bridge_state *state);
525
526
/**
527
* @atomic_get_output_bus_fmts:
528
*
529
* Return the supported bus formats on the output end of a bridge.
530
* The returned array must be allocated with kmalloc() and will be
531
* freed by the caller. If the allocation fails, NULL should be
532
* returned. num_output_fmts must be set to the returned array size.
533
* Formats listed in the returned array should be listed in decreasing
534
* preference order (the core will try all formats until it finds one
535
* that works).
536
*
537
* This method is only called on the last element of the bridge chain
538
* as part of the bus format negotiation process that happens in
539
* &drm_atomic_bridge_chain_select_bus_fmts().
540
* This method is optional. When not implemented, the core will
541
* fall back to &drm_connector.display_info.bus_formats[0] if
542
* &drm_connector.display_info.num_bus_formats > 0,
543
* or to MEDIA_BUS_FMT_FIXED otherwise.
544
*/
545
u32 *(*atomic_get_output_bus_fmts)(struct drm_bridge *bridge,
546
struct drm_bridge_state *bridge_state,
547
struct drm_crtc_state *crtc_state,
548
struct drm_connector_state *conn_state,
549
unsigned int *num_output_fmts);
550
551
/**
552
* @atomic_get_input_bus_fmts:
553
*
554
* Return the supported bus formats on the input end of a bridge for
555
* a specific output bus format.
556
*
557
* The returned array must be allocated with kmalloc() and will be
558
* freed by the caller. If the allocation fails, NULL should be
559
* returned. num_input_fmts must be set to the returned array size.
560
* Formats listed in the returned array should be listed in decreasing
561
* preference order (the core will try all formats until it finds one
562
* that works). When the format is not supported NULL should be
563
* returned and num_input_fmts should be set to 0.
564
*
565
* This method is called on all elements of the bridge chain as part of
566
* the bus format negotiation process that happens in
567
* drm_atomic_bridge_chain_select_bus_fmts().
568
* This method is optional. When not implemented, the core will bypass
569
* bus format negotiation on this element of the bridge without
570
* failing, and the previous element in the chain will be passed
571
* MEDIA_BUS_FMT_FIXED as its output bus format.
572
*
573
* Bridge drivers that need to support being linked to bridges that are
574
* not supporting bus format negotiation should handle the
575
* output_fmt == MEDIA_BUS_FMT_FIXED case appropriately, by selecting a
576
* sensible default value or extracting this information from somewhere
577
* else (FW property, &drm_display_mode, &drm_display_info, ...)
578
*
579
* Note: Even if input format selection on the first bridge has no
580
* impact on the negotiation process (bus format negotiation stops once
581
* we reach the first element of the chain), drivers are expected to
582
* return accurate input formats as the input format may be used to
583
* configure the CRTC output appropriately.
584
*/
585
u32 *(*atomic_get_input_bus_fmts)(struct drm_bridge *bridge,
586
struct drm_bridge_state *bridge_state,
587
struct drm_crtc_state *crtc_state,
588
struct drm_connector_state *conn_state,
589
u32 output_fmt,
590
unsigned int *num_input_fmts);
591
592
/**
593
* @atomic_check:
594
*
595
* This method is responsible for checking bridge state correctness.
596
* It can also check the state of the surrounding components in chain
597
* to make sure the whole pipeline can work properly.
598
*
599
* &drm_bridge_funcs.atomic_check() hooks are called in reverse
600
* order (from the last to the first bridge).
601
*
602
* This method is optional. &drm_bridge_funcs.mode_fixup() is not
603
* called when &drm_bridge_funcs.atomic_check() is implemented, so only
604
* one of them should be provided.
605
*
606
* If drivers need to tweak &drm_bridge_state.input_bus_cfg.flags or
607
* &drm_bridge_state.output_bus_cfg.flags it should happen in
608
* this function. By default the &drm_bridge_state.output_bus_cfg.flags
609
* field is set to the next bridge
610
* &drm_bridge_state.input_bus_cfg.flags value or
611
* &drm_connector.display_info.bus_flags if the bridge is the last
612
* element in the chain.
613
*
614
* RETURNS:
615
* zero if the check passed, a negative error code otherwise.
616
*/
617
int (*atomic_check)(struct drm_bridge *bridge,
618
struct drm_bridge_state *bridge_state,
619
struct drm_crtc_state *crtc_state,
620
struct drm_connector_state *conn_state);
621
622
/**
623
* @atomic_reset:
624
*
625
* Reset the bridge to a predefined state (or retrieve its current
626
* state) and return a &drm_bridge_state object matching this state.
627
* This function is called at attach time.
628
*
629
* The atomic_reset hook is mandatory if the bridge implements any of
630
* the atomic hooks, and should be left unassigned otherwise. For
631
* bridges that don't subclass &drm_bridge_state, the
632
* drm_atomic_helper_bridge_reset() helper function shall be used to
633
* implement this hook.
634
*
635
* Note that the atomic_reset() semantics is not exactly matching the
636
* reset() semantics found on other components (connector, plane, ...).
637
*
638
* 1. The reset operation happens when the bridge is attached, not when
639
* drm_mode_config_reset() is called
640
* 2. It's meant to be used exclusively on bridges that have been
641
* converted to the ATOMIC API
642
*
643
* RETURNS:
644
* A valid drm_bridge_state object in case of success, an ERR_PTR()
645
* giving the reason of the failure otherwise.
646
*/
647
struct drm_bridge_state *(*atomic_reset)(struct drm_bridge *bridge);
648
649
/**
650
* @detect:
651
*
652
* Check if anything is attached to the bridge output.
653
*
654
* This callback is optional, if not implemented the bridge will be
655
* considered as always having a component attached to its output.
656
* Bridges that implement this callback shall set the
657
* DRM_BRIDGE_OP_DETECT flag in their &drm_bridge->ops.
658
*
659
* RETURNS:
660
*
661
* drm_connector_status indicating the bridge output status.
662
*/
663
enum drm_connector_status (*detect)(struct drm_bridge *bridge,
664
struct drm_connector *connector);
665
666
/**
667
* @get_modes:
668
*
669
* Fill all modes currently valid for the sink into the &drm_connector
670
* with drm_mode_probed_add().
671
*
672
* The @get_modes callback is mostly intended to support non-probeable
673
* displays such as many fixed panels. Bridges that support reading
674
* EDID shall leave @get_modes unimplemented and implement the
675
* &drm_bridge_funcs->edid_read callback instead.
676
*
677
* This callback is optional. Bridges that implement it shall set the
678
* DRM_BRIDGE_OP_MODES flag in their &drm_bridge->ops.
679
*
680
* The connector parameter shall be used for the sole purpose of
681
* filling modes, and shall not be stored internally by bridge drivers
682
* for future usage.
683
*
684
* RETURNS:
685
*
686
* The number of modes added by calling drm_mode_probed_add().
687
*/
688
int (*get_modes)(struct drm_bridge *bridge,
689
struct drm_connector *connector);
690
691
/**
692
* @edid_read:
693
*
694
* Read the EDID data of the connected display.
695
*
696
* The @edid_read callback is the preferred way of reporting mode
697
* information for a display connected to the bridge output. Bridges
698
* that support reading EDID shall implement this callback and leave
699
* the @get_modes callback unimplemented.
700
*
701
* The caller of this operation shall first verify the output
702
* connection status and refrain from reading EDID from a disconnected
703
* output.
704
*
705
* This callback is optional. Bridges that implement it shall set the
706
* DRM_BRIDGE_OP_EDID flag in their &drm_bridge->ops.
707
*
708
* The connector parameter shall be used for the sole purpose of EDID
709
* retrieval, and shall not be stored internally by bridge drivers for
710
* future usage.
711
*
712
* RETURNS:
713
*
714
* An edid structure newly allocated with drm_edid_alloc() or returned
715
* from drm_edid_read() family of functions on success, or NULL
716
* otherwise. The caller is responsible for freeing the returned edid
717
* structure with drm_edid_free().
718
*/
719
const struct drm_edid *(*edid_read)(struct drm_bridge *bridge,
720
struct drm_connector *connector);
721
722
/**
723
* @hpd_notify:
724
*
725
* Notify the bridge of hot plug detection.
726
*
727
* This callback is optional, it may be implemented by bridges that
728
* need to be notified of display connection or disconnection for
729
* internal reasons. One use case is to reset the internal state of CEC
730
* controllers for HDMI bridges.
731
*/
732
void (*hpd_notify)(struct drm_bridge *bridge,
733
enum drm_connector_status status);
734
735
/**
736
* @hpd_enable:
737
*
738
* Enable hot plug detection. From now on the bridge shall call
739
* drm_bridge_hpd_notify() each time a change is detected in the output
740
* connection status, until hot plug detection gets disabled with
741
* @hpd_disable.
742
*
743
* This callback is optional and shall only be implemented by bridges
744
* that support hot-plug notification without polling. Bridges that
745
* implement it shall also implement the @hpd_disable callback and set
746
* the DRM_BRIDGE_OP_HPD flag in their &drm_bridge->ops.
747
*/
748
void (*hpd_enable)(struct drm_bridge *bridge);
749
750
/**
751
* @hpd_disable:
752
*
753
* Disable hot plug detection. Once this function returns the bridge
754
* shall not call drm_bridge_hpd_notify() when a change in the output
755
* connection status occurs.
756
*
757
* This callback is optional and shall only be implemented by bridges
758
* that support hot-plug notification without polling. Bridges that
759
* implement it shall also implement the @hpd_enable callback and set
760
* the DRM_BRIDGE_OP_HPD flag in their &drm_bridge->ops.
761
*/
762
void (*hpd_disable)(struct drm_bridge *bridge);
763
764
/**
765
* @hdmi_tmds_char_rate_valid:
766
*
767
* Check whether a particular TMDS character rate is supported by the
768
* driver.
769
*
770
* This callback is optional and should only be implemented by the
771
* bridges that take part in the HDMI connector implementation. Bridges
772
* that implement it shall set the DRM_BRIDGE_OP_HDMI flag in their
773
* &drm_bridge->ops.
774
*
775
* Returns:
776
*
777
* Either &drm_mode_status.MODE_OK or one of the failure reasons
778
* in &enum drm_mode_status.
779
*/
780
enum drm_mode_status
781
(*hdmi_tmds_char_rate_valid)(const struct drm_bridge *bridge,
782
const struct drm_display_mode *mode,
783
unsigned long long tmds_rate);
784
785
/**
786
* @hdmi_clear_infoframe:
787
*
788
* This callback clears the infoframes in the hardware during commit.
789
* It will be called multiple times, once for every disabled infoframe
790
* type.
791
*
792
* This callback is optional but it must be implemented by bridges that
793
* set the DRM_BRIDGE_OP_HDMI flag in their &drm_bridge->ops.
794
*/
795
int (*hdmi_clear_infoframe)(struct drm_bridge *bridge,
796
enum hdmi_infoframe_type type);
797
/**
798
* @hdmi_write_infoframe:
799
*
800
* Program the infoframe into the hardware. It will be called multiple
801
* times, once for every updated infoframe type.
802
*
803
* This callback is optional but it must be implemented by bridges that
804
* set the DRM_BRIDGE_OP_HDMI flag in their &drm_bridge->ops.
805
*/
806
int (*hdmi_write_infoframe)(struct drm_bridge *bridge,
807
enum hdmi_infoframe_type type,
808
const u8 *buffer, size_t len);
809
810
/**
811
* @hdmi_audio_startup:
812
*
813
* Called when ASoC starts an audio stream setup.
814
*
815
* This callback is optional, it can be implemented by bridges that
816
* set the @DRM_BRIDGE_OP_HDMI_AUDIO flag in their &drm_bridge->ops.
817
*
818
* Returns:
819
* 0 on success, a negative error code otherwise
820
*/
821
int (*hdmi_audio_startup)(struct drm_bridge *bridge,
822
struct drm_connector *connector);
823
824
/**
825
* @hdmi_audio_prepare:
826
* Configures HDMI-encoder for audio stream. Can be called multiple
827
* times for each setup.
828
*
829
* This callback is optional but it must be implemented by bridges that
830
* set the @DRM_BRIDGE_OP_HDMI_AUDIO flag in their &drm_bridge->ops.
831
*
832
* Returns:
833
* 0 on success, a negative error code otherwise
834
*/
835
int (*hdmi_audio_prepare)(struct drm_bridge *bridge,
836
struct drm_connector *connector,
837
struct hdmi_codec_daifmt *fmt,
838
struct hdmi_codec_params *hparms);
839
840
/**
841
* @hdmi_audio_shutdown:
842
*
843
* Shut down the audio stream.
844
*
845
* This callback is optional but it must be implemented by bridges that
846
* set the @DRM_BRIDGE_OP_HDMI_AUDIO flag in their &drm_bridge->ops.
847
*
848
* Returns:
849
* 0 on success, a negative error code otherwise
850
*/
851
void (*hdmi_audio_shutdown)(struct drm_bridge *bridge,
852
struct drm_connector *connector);
853
854
/**
855
* @hdmi_audio_mute_stream:
856
*
857
* Mute/unmute HDMI audio stream.
858
*
859
* This callback is optional, it can be implemented by bridges that
860
* set the @DRM_BRIDGE_OP_HDMI_AUDIO flag in their &drm_bridge->ops.
861
*
862
* Returns:
863
* 0 on success, a negative error code otherwise
864
*/
865
int (*hdmi_audio_mute_stream)(struct drm_bridge *bridge,
866
struct drm_connector *connector,
867
bool enable, int direction);
868
869
/**
870
* @hdmi_cec_init:
871
*
872
* Initialize CEC part of the bridge.
873
*
874
* This callback is optional, it can be implemented by bridges that
875
* set the @DRM_BRIDGE_OP_HDMI_CEC_ADAPTER flag in their
876
* &drm_bridge->ops.
877
*
878
* Returns:
879
* 0 on success, a negative error code otherwise
880
*/
881
int (*hdmi_cec_init)(struct drm_bridge *bridge,
882
struct drm_connector *connector);
883
884
/**
885
* @hdmi_cec_enable:
886
*
887
* Enable or disable the CEC adapter inside the bridge.
888
*
889
* This callback is optional, it can be implemented by bridges that
890
* set the @DRM_BRIDGE_OP_HDMI_CEC_ADAPTER flag in their
891
* &drm_bridge->ops.
892
*
893
* Returns:
894
* 0 on success, a negative error code otherwise
895
*/
896
int (*hdmi_cec_enable)(struct drm_bridge *bridge, bool enable);
897
898
/**
899
* @hdmi_cec_log_addr:
900
*
901
* Set the logical address of the CEC adapter inside the bridge.
902
*
903
* This callback is optional, it can be implemented by bridges that
904
* set the @DRM_BRIDGE_OP_HDMI_CEC_ADAPTER flag in their
905
* &drm_bridge->ops.
906
*
907
* Returns:
908
* 0 on success, a negative error code otherwise
909
*/
910
int (*hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr);
911
912
/**
913
* @hdmi_cec_transmit:
914
*
915
* Transmit the message using the CEC adapter inside the bridge.
916
*
917
* This callback is optional, it can be implemented by bridges that
918
* set the @DRM_BRIDGE_OP_HDMI_CEC_ADAPTER flag in their
919
* &drm_bridge->ops.
920
*
921
* Returns:
922
* 0 on success, a negative error code otherwise
923
*/
924
int (*hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts,
925
u32 signal_free_time, struct cec_msg *msg);
926
927
/**
928
* @dp_audio_startup:
929
*
930
* Called when ASoC starts a DisplayPort audio stream setup.
931
*
932
* This callback is optional, it can be implemented by bridges that
933
* set the @DRM_BRIDGE_OP_DP_AUDIO flag in their &drm_bridge->ops.
934
*
935
* Returns:
936
* 0 on success, a negative error code otherwise
937
*/
938
int (*dp_audio_startup)(struct drm_bridge *bridge,
939
struct drm_connector *connector);
940
941
/**
942
* @dp_audio_prepare:
943
* Configures DisplayPort audio stream. Can be called multiple
944
* times for each setup.
945
*
946
* This callback is optional but it must be implemented by bridges that
947
* set the @DRM_BRIDGE_OP_DP_AUDIO flag in their &drm_bridge->ops.
948
*
949
* Returns:
950
* 0 on success, a negative error code otherwise
951
*/
952
int (*dp_audio_prepare)(struct drm_bridge *bridge,
953
struct drm_connector *connector,
954
struct hdmi_codec_daifmt *fmt,
955
struct hdmi_codec_params *hparms);
956
957
/**
958
* @dp_audio_shutdown:
959
*
960
* Shut down the DisplayPort audio stream.
961
*
962
* This callback is optional but it must be implemented by bridges that
963
* set the @DRM_BRIDGE_OP_DP_AUDIO flag in their &drm_bridge->ops.
964
*
965
* Returns:
966
* 0 on success, a negative error code otherwise
967
*/
968
void (*dp_audio_shutdown)(struct drm_bridge *bridge,
969
struct drm_connector *connector);
970
971
/**
972
* @dp_audio_mute_stream:
973
*
974
* Mute/unmute DisplayPort audio stream.
975
*
976
* This callback is optional, it can be implemented by bridges that
977
* set the @DRM_BRIDGE_OP_DP_AUDIO flag in their &drm_bridge->ops.
978
*
979
* Returns:
980
* 0 on success, a negative error code otherwise
981
*/
982
int (*dp_audio_mute_stream)(struct drm_bridge *bridge,
983
struct drm_connector *connector,
984
bool enable, int direction);
985
986
/**
987
* @debugfs_init:
988
*
989
* Allows bridges to create bridge-specific debugfs files.
990
*/
991
void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root);
992
};
993
994
/**
995
* struct drm_bridge_timings - timing information for the bridge
996
*/
997
struct drm_bridge_timings {
998
/**
999
* @input_bus_flags:
1000
*
1001
* Tells what additional settings for the pixel data on the bus
1002
* this bridge requires (like pixel signal polarity). See also
1003
* &drm_display_info->bus_flags.
1004
*/
1005
u32 input_bus_flags;
1006
/**
1007
* @setup_time_ps:
1008
*
1009
* Defines the time in picoseconds the input data lines must be
1010
* stable before the clock edge.
1011
*/
1012
u32 setup_time_ps;
1013
/**
1014
* @hold_time_ps:
1015
*
1016
* Defines the time in picoseconds taken for the bridge to sample the
1017
* input signal after the clock edge.
1018
*/
1019
u32 hold_time_ps;
1020
/**
1021
* @dual_link:
1022
*
1023
* True if the bus operates in dual-link mode. The exact meaning is
1024
* dependent on the bus type. For LVDS buses, this indicates that even-
1025
* and odd-numbered pixels are received on separate links.
1026
*/
1027
bool dual_link;
1028
};
1029
1030
/**
1031
* enum drm_bridge_ops - Bitmask of operations supported by the bridge
1032
*/
1033
enum drm_bridge_ops {
1034
/**
1035
* @DRM_BRIDGE_OP_DETECT: The bridge can detect displays connected to
1036
* its output. Bridges that set this flag shall implement the
1037
* &drm_bridge_funcs->detect callback.
1038
*/
1039
DRM_BRIDGE_OP_DETECT = BIT(0),
1040
/**
1041
* @DRM_BRIDGE_OP_EDID: The bridge can retrieve the EDID of the display
1042
* connected to its output. Bridges that set this flag shall implement
1043
* the &drm_bridge_funcs->edid_read callback.
1044
*/
1045
DRM_BRIDGE_OP_EDID = BIT(1),
1046
/**
1047
* @DRM_BRIDGE_OP_HPD: The bridge can detect hot-plug and hot-unplug
1048
* without requiring polling. Bridges that set this flag shall
1049
* implement the &drm_bridge_funcs->hpd_enable and
1050
* &drm_bridge_funcs->hpd_disable callbacks if they support enabling
1051
* and disabling hot-plug detection dynamically.
1052
*/
1053
DRM_BRIDGE_OP_HPD = BIT(2),
1054
/**
1055
* @DRM_BRIDGE_OP_MODES: The bridge can retrieve the modes supported
1056
* by the display at its output. This does not include reading EDID
1057
* which is separately covered by @DRM_BRIDGE_OP_EDID. Bridges that set
1058
* this flag shall implement the &drm_bridge_funcs->get_modes callback.
1059
*/
1060
DRM_BRIDGE_OP_MODES = BIT(3),
1061
/**
1062
* @DRM_BRIDGE_OP_HDMI: The bridge provides HDMI connector operations,
1063
* including infoframes support. Bridges that set this flag must
1064
* implement the &drm_bridge_funcs->write_infoframe callback.
1065
*
1066
* Note: currently there can be at most one bridge in a chain that sets
1067
* this bit. This is to simplify corresponding glue code in connector
1068
* drivers.
1069
*/
1070
DRM_BRIDGE_OP_HDMI = BIT(4),
1071
/**
1072
* @DRM_BRIDGE_OP_HDMI_AUDIO: The bridge provides HDMI audio operations.
1073
* Bridges that set this flag must implement the
1074
* &drm_bridge_funcs->hdmi_audio_prepare and
1075
* &drm_bridge_funcs->hdmi_audio_shutdown callbacks.
1076
*
1077
* Note: currently there can be at most one bridge in a chain that sets
1078
* this bit. This is to simplify corresponding glue code in connector
1079
* drivers. Also it is not possible to have a bridge in the chain that
1080
* sets @DRM_BRIDGE_OP_DP_AUDIO if there is a bridge that sets this
1081
* flag.
1082
*/
1083
DRM_BRIDGE_OP_HDMI_AUDIO = BIT(5),
1084
/**
1085
* @DRM_BRIDGE_OP_DP_AUDIO: The bridge provides DisplayPort audio operations.
1086
* Bridges that set this flag must implement the
1087
* &drm_bridge_funcs->dp_audio_prepare and
1088
* &drm_bridge_funcs->dp_audio_shutdown callbacks.
1089
*
1090
* Note: currently there can be at most one bridge in a chain that sets
1091
* this bit. This is to simplify corresponding glue code in connector
1092
* drivers. Also it is not possible to have a bridge in the chain that
1093
* sets @DRM_BRIDGE_OP_HDMI_AUDIO if there is a bridge that sets this
1094
* flag.
1095
*/
1096
DRM_BRIDGE_OP_DP_AUDIO = BIT(6),
1097
/**
1098
* @DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER: The bridge requires CEC notifier
1099
* to be present.
1100
*/
1101
DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER = BIT(7),
1102
/**
1103
* @DRM_BRIDGE_OP_HDMI_CEC_ADAPTER: The bridge requires CEC adapter
1104
* to be present.
1105
*/
1106
DRM_BRIDGE_OP_HDMI_CEC_ADAPTER = BIT(8),
1107
};
1108
1109
/**
1110
* struct drm_bridge - central DRM bridge control structure
1111
*/
1112
struct drm_bridge {
1113
/** @base: inherit from &drm_private_object */
1114
struct drm_private_obj base;
1115
/** @dev: DRM device this bridge belongs to */
1116
struct drm_device *dev;
1117
/** @encoder: encoder to which this bridge is connected */
1118
struct drm_encoder *encoder;
1119
/** @chain_node: used to form a bridge chain */
1120
struct list_head chain_node;
1121
/** @of_node: device node pointer to the bridge */
1122
struct device_node *of_node;
1123
/** @list: to keep track of all added bridges */
1124
struct list_head list;
1125
/**
1126
* @timings:
1127
*
1128
* the timing specification for the bridge, if any (may be NULL)
1129
*/
1130
const struct drm_bridge_timings *timings;
1131
/** @funcs: control functions */
1132
const struct drm_bridge_funcs *funcs;
1133
1134
/**
1135
* @container: Pointer to the private driver struct embedding this
1136
* @struct drm_bridge.
1137
*/
1138
void *container;
1139
1140
/**
1141
* @refcount: reference count of users referencing this bridge.
1142
*/
1143
struct kref refcount;
1144
1145
/** @driver_private: pointer to the bridge driver's internal context */
1146
void *driver_private;
1147
/** @ops: bitmask of operations supported by the bridge */
1148
enum drm_bridge_ops ops;
1149
/**
1150
* @type: Type of the connection at the bridge output
1151
* (DRM_MODE_CONNECTOR_*). For bridges at the end of this chain this
1152
* identifies the type of connected display.
1153
*/
1154
int type;
1155
/**
1156
* @interlace_allowed: Indicate that the bridge can handle interlaced
1157
* modes.
1158
*/
1159
bool interlace_allowed;
1160
/**
1161
* @ycbcr_420_allowed: Indicate that the bridge can handle YCbCr 420
1162
* output.
1163
*/
1164
bool ycbcr_420_allowed;
1165
/**
1166
* @pre_enable_prev_first: The bridge requires that the prev
1167
* bridge @pre_enable function is called before its @pre_enable,
1168
* and conversely for post_disable. This is most frequently a
1169
* requirement for DSI devices which need the host to be initialised
1170
* before the peripheral.
1171
*/
1172
bool pre_enable_prev_first;
1173
/**
1174
* @ddc: Associated I2C adapter for DDC access, if any.
1175
*/
1176
struct i2c_adapter *ddc;
1177
1178
/**
1179
* @vendor: Vendor of the product to be used for the SPD InfoFrame
1180
* generation. This is required if @DRM_BRIDGE_OP_HDMI is set.
1181
*/
1182
const char *vendor;
1183
1184
/**
1185
* @product: Name of the product to be used for the SPD InfoFrame
1186
* generation. This is required if @DRM_BRIDGE_OP_HDMI is set.
1187
*/
1188
const char *product;
1189
1190
/**
1191
* @supported_formats: Bitmask of @hdmi_colorspace listing supported
1192
* output formats. This is only relevant if @DRM_BRIDGE_OP_HDMI is set.
1193
*/
1194
unsigned int supported_formats;
1195
1196
/**
1197
* @max_bpc: Maximum bits per char the HDMI bridge supports. Allowed
1198
* values are 8, 10 and 12. This is only relevant if
1199
* @DRM_BRIDGE_OP_HDMI is set.
1200
*/
1201
unsigned int max_bpc;
1202
1203
/**
1204
* @hdmi_cec_dev: device to be used as a containing device for CEC
1205
* functions.
1206
*/
1207
struct device *hdmi_cec_dev;
1208
1209
/**
1210
* @hdmi_audio_dev: device to be used as a parent for the HDMI Codec if
1211
* either of @DRM_BRIDGE_OP_HDMI_AUDIO or @DRM_BRIDGE_OP_DP_AUDIO is set.
1212
*/
1213
struct device *hdmi_audio_dev;
1214
1215
/**
1216
* @hdmi_audio_max_i2s_playback_channels: maximum number of playback
1217
* I2S channels for the @DRM_BRIDGE_OP_HDMI_AUDIO or
1218
* @DRM_BRIDGE_OP_DP_AUDIO.
1219
*/
1220
int hdmi_audio_max_i2s_playback_channels;
1221
1222
/**
1223
* @hdmi_audio_i2s_formats: supported I2S formats, optional. The
1224
* default is to allow all formats supported by the corresponding I2S
1225
* bus driver. This is only used for bridges setting
1226
* @DRM_BRIDGE_OP_HDMI_AUDIO or @DRM_BRIDGE_OP_DP_AUDIO.
1227
*/
1228
u64 hdmi_audio_i2s_formats;
1229
1230
/**
1231
* @hdmi_audio_spdif_playback: set if this bridge has S/PDIF playback
1232
* port for @DRM_BRIDGE_OP_HDMI_AUDIO or @DRM_BRIDGE_OP_DP_AUDIO.
1233
*/
1234
unsigned int hdmi_audio_spdif_playback : 1;
1235
1236
/**
1237
* @hdmi_audio_dai_port: sound DAI port for either of
1238
* @DRM_BRIDGE_OP_HDMI_AUDIO and @DRM_BRIDGE_OP_DP_AUDIO, -1 if it is
1239
* not used.
1240
*/
1241
int hdmi_audio_dai_port;
1242
1243
/**
1244
* @hdmi_cec_adapter_name: the name of the adapter to register
1245
*/
1246
const char *hdmi_cec_adapter_name;
1247
1248
/**
1249
* @hdmi_cec_available_las: number of logical addresses, CEC_MAX_LOG_ADDRS if unset
1250
*/
1251
u8 hdmi_cec_available_las;
1252
1253
/** private: */
1254
/**
1255
* @hpd_mutex: Protects the @hpd_cb and @hpd_data fields.
1256
*/
1257
struct mutex hpd_mutex;
1258
/**
1259
* @hpd_cb: Hot plug detection callback, registered with
1260
* drm_bridge_hpd_enable().
1261
*/
1262
void (*hpd_cb)(void *data, enum drm_connector_status status);
1263
/**
1264
* @hpd_data: Private data passed to the Hot plug detection callback
1265
* @hpd_cb.
1266
*/
1267
void *hpd_data;
1268
};
1269
1270
static inline struct drm_bridge *
1271
drm_priv_to_bridge(struct drm_private_obj *priv)
1272
{
1273
return container_of(priv, struct drm_bridge, base);
1274
}
1275
1276
struct drm_bridge *drm_bridge_get(struct drm_bridge *bridge);
1277
void drm_bridge_put(struct drm_bridge *bridge);
1278
1279
void *__devm_drm_bridge_alloc(struct device *dev, size_t size, size_t offset,
1280
const struct drm_bridge_funcs *funcs);
1281
1282
/**
1283
* devm_drm_bridge_alloc - Allocate and initialize a bridge
1284
* @dev: struct device of the bridge device
1285
* @type: the type of the struct which contains struct &drm_bridge
1286
* @member: the name of the &drm_bridge within @type
1287
* @funcs: callbacks for this bridge
1288
*
1289
* The reference count of the returned bridge is initialized to 1. This
1290
* reference will be automatically dropped via devm (by calling
1291
* drm_bridge_put()) when @dev is removed.
1292
*
1293
* Returns:
1294
* Pointer to new bridge, or ERR_PTR on failure.
1295
*/
1296
#define devm_drm_bridge_alloc(dev, type, member, funcs) \
1297
((type *)__devm_drm_bridge_alloc(dev, sizeof(type), \
1298
offsetof(type, member), funcs))
1299
1300
void drm_bridge_add(struct drm_bridge *bridge);
1301
int devm_drm_bridge_add(struct device *dev, struct drm_bridge *bridge);
1302
void drm_bridge_remove(struct drm_bridge *bridge);
1303
int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
1304
struct drm_bridge *previous,
1305
enum drm_bridge_attach_flags flags);
1306
1307
#ifdef CONFIG_OF
1308
struct drm_bridge *of_drm_find_bridge(struct device_node *np);
1309
#else
1310
static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np)
1311
{
1312
return NULL;
1313
}
1314
#endif
1315
1316
/**
1317
* drm_bridge_get_current_state() - Get the current bridge state
1318
* @bridge: bridge object
1319
*
1320
* This function must be called with the modeset lock held.
1321
*
1322
* RETURNS:
1323
*
1324
* The current bridge state, or NULL if there is none.
1325
*/
1326
static inline struct drm_bridge_state *
1327
drm_bridge_get_current_state(struct drm_bridge *bridge)
1328
{
1329
if (!bridge)
1330
return NULL;
1331
1332
/*
1333
* Only atomic bridges will have bridge->base initialized by
1334
* drm_atomic_private_obj_init(), so we need to make sure we're
1335
* working with one before we try to use the lock.
1336
*/
1337
if (!bridge->funcs || !bridge->funcs->atomic_reset)
1338
return NULL;
1339
1340
drm_modeset_lock_assert_held(&bridge->base.lock);
1341
1342
if (!bridge->base.state)
1343
return NULL;
1344
1345
return drm_priv_to_bridge_state(bridge->base.state);
1346
}
1347
1348
/**
1349
* drm_bridge_get_next_bridge() - Get the next bridge in the chain
1350
* @bridge: bridge object
1351
*
1352
* RETURNS:
1353
* the next bridge in the chain after @bridge, or NULL if @bridge is the last.
1354
*/
1355
static inline struct drm_bridge *
1356
drm_bridge_get_next_bridge(struct drm_bridge *bridge)
1357
{
1358
if (list_is_last(&bridge->chain_node, &bridge->encoder->bridge_chain))
1359
return NULL;
1360
1361
return list_next_entry(bridge, chain_node);
1362
}
1363
1364
/**
1365
* drm_bridge_get_prev_bridge() - Get the previous bridge in the chain
1366
* @bridge: bridge object
1367
*
1368
* RETURNS:
1369
* the previous bridge in the chain, or NULL if @bridge is the first.
1370
*/
1371
static inline struct drm_bridge *
1372
drm_bridge_get_prev_bridge(struct drm_bridge *bridge)
1373
{
1374
if (list_is_first(&bridge->chain_node, &bridge->encoder->bridge_chain))
1375
return NULL;
1376
1377
return list_prev_entry(bridge, chain_node);
1378
}
1379
1380
/**
1381
* drm_bridge_chain_get_first_bridge() - Get the first bridge in the chain
1382
* @encoder: encoder object
1383
*
1384
* RETURNS:
1385
* the first bridge in the chain, or NULL if @encoder has no bridge attached
1386
* to it.
1387
*/
1388
static inline struct drm_bridge *
1389
drm_bridge_chain_get_first_bridge(struct drm_encoder *encoder)
1390
{
1391
return list_first_entry_or_null(&encoder->bridge_chain,
1392
struct drm_bridge, chain_node);
1393
}
1394
1395
/**
1396
* drm_for_each_bridge_in_chain() - Iterate over all bridges present in a chain
1397
* @encoder: the encoder to iterate bridges on
1398
* @bridge: a bridge pointer updated to point to the current bridge at each
1399
* iteration
1400
*
1401
* Iterate over all bridges present in the bridge chain attached to @encoder.
1402
*/
1403
#define drm_for_each_bridge_in_chain(encoder, bridge) \
1404
list_for_each_entry(bridge, &(encoder)->bridge_chain, chain_node)
1405
1406
enum drm_mode_status
1407
drm_bridge_chain_mode_valid(struct drm_bridge *bridge,
1408
const struct drm_display_info *info,
1409
const struct drm_display_mode *mode);
1410
void drm_bridge_chain_mode_set(struct drm_bridge *bridge,
1411
const struct drm_display_mode *mode,
1412
const struct drm_display_mode *adjusted_mode);
1413
1414
int drm_atomic_bridge_chain_check(struct drm_bridge *bridge,
1415
struct drm_crtc_state *crtc_state,
1416
struct drm_connector_state *conn_state);
1417
void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge,
1418
struct drm_atomic_state *state);
1419
void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge,
1420
struct drm_atomic_state *state);
1421
void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge,
1422
struct drm_atomic_state *state);
1423
void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge,
1424
struct drm_atomic_state *state);
1425
1426
u32 *
1427
drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge,
1428
struct drm_bridge_state *bridge_state,
1429
struct drm_crtc_state *crtc_state,
1430
struct drm_connector_state *conn_state,
1431
u32 output_fmt,
1432
unsigned int *num_input_fmts);
1433
1434
enum drm_connector_status
1435
drm_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector);
1436
int drm_bridge_get_modes(struct drm_bridge *bridge,
1437
struct drm_connector *connector);
1438
const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
1439
struct drm_connector *connector);
1440
void drm_bridge_hpd_enable(struct drm_bridge *bridge,
1441
void (*cb)(void *data,
1442
enum drm_connector_status status),
1443
void *data);
1444
void drm_bridge_hpd_disable(struct drm_bridge *bridge);
1445
void drm_bridge_hpd_notify(struct drm_bridge *bridge,
1446
enum drm_connector_status status);
1447
1448
#ifdef CONFIG_DRM_PANEL_BRIDGE
1449
bool drm_bridge_is_panel(const struct drm_bridge *bridge);
1450
struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel);
1451
struct drm_bridge *drm_panel_bridge_add_typed(struct drm_panel *panel,
1452
u32 connector_type);
1453
void drm_panel_bridge_remove(struct drm_bridge *bridge);
1454
int drm_panel_bridge_set_orientation(struct drm_connector *connector,
1455
struct drm_bridge *bridge);
1456
struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev,
1457
struct drm_panel *panel);
1458
struct drm_bridge *devm_drm_panel_bridge_add_typed(struct device *dev,
1459
struct drm_panel *panel,
1460
u32 connector_type);
1461
struct drm_bridge *drmm_panel_bridge_add(struct drm_device *drm,
1462
struct drm_panel *panel);
1463
struct drm_connector *drm_panel_bridge_connector(struct drm_bridge *bridge);
1464
#else
1465
static inline bool drm_bridge_is_panel(const struct drm_bridge *bridge)
1466
{
1467
return false;
1468
}
1469
1470
static inline int drm_panel_bridge_set_orientation(struct drm_connector *connector,
1471
struct drm_bridge *bridge)
1472
{
1473
return -EINVAL;
1474
}
1475
#endif
1476
1477
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL_BRIDGE)
1478
struct drm_bridge *devm_drm_of_get_bridge(struct device *dev, struct device_node *node,
1479
u32 port, u32 endpoint);
1480
struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm, struct device_node *node,
1481
u32 port, u32 endpoint);
1482
#else
1483
static inline struct drm_bridge *devm_drm_of_get_bridge(struct device *dev,
1484
struct device_node *node,
1485
u32 port,
1486
u32 endpoint)
1487
{
1488
return ERR_PTR(-ENODEV);
1489
}
1490
1491
static inline struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm,
1492
struct device_node *node,
1493
u32 port,
1494
u32 endpoint)
1495
{
1496
return ERR_PTR(-ENODEV);
1497
}
1498
#endif
1499
1500
void devm_drm_put_bridge(struct device *dev, struct drm_bridge *bridge);
1501
1502
void drm_bridge_debugfs_params(struct dentry *root);
1503
void drm_bridge_debugfs_encoder_params(struct dentry *root, struct drm_encoder *encoder);
1504
1505
#endif
1506
1507