XenevaOS
Loading...
Searching...
No Matches
drm_bridge.h
Go to the documentation of this file.
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/cleanup.h>
27#include <linux/ctype.h>
28#include <linux/list.h>
29#include <linux/mutex.h>
30
31#include <drm/drm_atomic.h>
32#include <drm/drm_encoder.h>
33#include <drm/drm_mode_object.h>
34#include <drm/drm_modes.h>
35
36struct cec_msg;
37struct device_node;
38
39struct drm_bridge;
41struct drm_connector;
42struct drm_display_info;
43struct drm_minor;
44struct drm_panel;
45struct edid;
46struct hdmi_codec_daifmt;
47struct hdmi_codec_params;
48struct i2c_adapter;
49
60
78 int (*attach)(struct drm_bridge *bridge, struct drm_encoder *encoder,
80
89 void (*destroy)(struct drm_bridge *bridge);
90
99 void (*detach)(struct drm_bridge *bridge);
100
132 enum drm_mode_status (*mode_valid)(struct drm_bridge *bridge,
133 const struct drm_display_info *info,
134 const struct drm_display_mode *mode);
135
173 bool (*mode_fixup)(struct drm_bridge *bridge,
174 const struct drm_display_mode *mode,
175 struct drm_display_mode *adjusted_mode);
197 void (*disable)(struct drm_bridge *bridge);
198
221 void (*post_disable)(struct drm_bridge *bridge);
222
249 void (*mode_set)(struct drm_bridge *bridge,
250 const struct drm_display_mode *mode,
251 const struct drm_display_mode *adjusted_mode);
275 void (*pre_enable)(struct drm_bridge *bridge);
276
300 void (*enable)(struct drm_bridge *bridge);
301
319 void (*atomic_pre_enable)(struct drm_bridge *bridge,
320 struct drm_atomic_commit *state);
321
339 void (*atomic_enable)(struct drm_bridge *bridge,
340 struct drm_atomic_commit *state);
356 void (*atomic_disable)(struct drm_bridge *bridge,
357 struct drm_atomic_commit *state);
358
375 void (*atomic_post_disable)(struct drm_bridge *bridge,
376 struct drm_atomic_commit *state);
377
393 struct drm_bridge_state *(*atomic_duplicate_state)(struct drm_bridge *bridge);
394
407 void (*atomic_destroy_state)(struct drm_bridge *bridge,
408 struct drm_bridge_state *state);
409
429 u32 *(*atomic_get_output_bus_fmts)(struct drm_bridge *bridge,
430 struct drm_bridge_state *bridge_state,
431 struct drm_crtc_state *crtc_state,
432 struct drm_connector_state *conn_state,
433 unsigned int *num_output_fmts);
434
469 u32 *(*atomic_get_input_bus_fmts)(struct drm_bridge *bridge,
470 struct drm_bridge_state *bridge_state,
471 struct drm_crtc_state *crtc_state,
472 struct drm_connector_state *conn_state,
473 u32 output_fmt,
474 unsigned int *num_input_fmts);
475
501 int (*atomic_check)(struct drm_bridge *bridge,
502 struct drm_bridge_state *bridge_state,
503 struct drm_crtc_state *crtc_state,
504 struct drm_connector_state *conn_state);
505
531 struct drm_bridge_state *(*atomic_reset)(struct drm_bridge *bridge);
532
547 enum drm_connector_status (*detect)(struct drm_bridge *bridge,
548 struct drm_connector *connector);
549
572 int (*get_modes)(struct drm_bridge *bridge,
573 struct drm_connector *connector);
574
603 const struct drm_edid *(*edid_read)(struct drm_bridge *bridge,
604 struct drm_connector *connector);
605
616 void (*hpd_notify)(struct drm_bridge *bridge,
617 struct drm_connector *connector,
618 enum drm_connector_status status);
619
633 void (*hpd_enable)(struct drm_bridge *bridge);
634
647 void (*hpd_disable)(struct drm_bridge *bridge);
648
665 enum drm_mode_status
666 (*hdmi_tmds_char_rate_valid)(const struct drm_bridge *bridge,
667 const struct drm_display_mode *mode,
668 unsigned long long tmds_rate);
669
678 int (*hdmi_clear_avi_infoframe)(struct drm_bridge *bridge);
679
689 const u8 *buffer, size_t len);
690
699 int (*hdmi_clear_hdmi_infoframe)(struct drm_bridge *bridge);
700
710 const u8 *buffer, size_t len);
711
722
733 const u8 *buffer, size_t len);
734
744 int (*hdmi_clear_spd_infoframe)(struct drm_bridge *bridge);
745
756 const u8 *buffer, size_t len);
757
767
777 const u8 *buffer, size_t len);
778
790 int (*hdmi_audio_startup)(struct drm_bridge *bridge,
791 struct drm_connector *connector);
792
804 int (*hdmi_audio_prepare)(struct drm_bridge *bridge,
805 struct drm_connector *connector,
806 struct hdmi_codec_daifmt *fmt,
807 struct hdmi_codec_params *hparms);
808
820 void (*hdmi_audio_shutdown)(struct drm_bridge *bridge,
821 struct drm_connector *connector);
822
834 int (*hdmi_audio_mute_stream)(struct drm_bridge *bridge,
835 struct drm_connector *connector,
836 bool enable, int direction);
837
850 int (*hdmi_cec_init)(struct drm_bridge *bridge,
851 struct drm_connector *connector);
852
865 int (*hdmi_cec_enable)(struct drm_bridge *bridge, bool enable);
866
879 int (*hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr);
880
893 int (*hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts,
894 u32 signal_free_time, struct cec_msg *msg);
895
907 int (*dp_audio_startup)(struct drm_bridge *bridge,
908 struct drm_connector *connector);
909
921 int (*dp_audio_prepare)(struct drm_bridge *bridge,
922 struct drm_connector *connector,
923 struct hdmi_codec_daifmt *fmt,
924 struct hdmi_codec_params *hparms);
925
937 void (*dp_audio_shutdown)(struct drm_bridge *bridge,
938 struct drm_connector *connector);
939
951 int (*dp_audio_mute_stream)(struct drm_bridge *bridge,
952 struct drm_connector *connector,
953 bool enable, int direction);
954
960 void (*debugfs_init)(struct drm_bridge *bridge, struct dentry *root);
961};
962
998
1096
1281
1282static inline struct drm_bridge *
1283drm_priv_to_bridge(struct drm_private_obj *priv)
1284{
1285 return container_of(priv, struct drm_bridge, base);
1286}
1287
1288bool drm_bridge_enter(struct drm_bridge *bridge, int *idx);
1289void drm_bridge_exit(int idx);
1290void drm_bridge_unplug(struct drm_bridge *bridge);
1291
1292struct drm_bridge *drm_bridge_get(struct drm_bridge *bridge);
1293void drm_bridge_put(struct drm_bridge *bridge);
1294void drm_bridge_clear_and_put(struct drm_bridge **bridge_pp);
1295
1296/* Cleanup action for use with __free() */
1298
1299void *__devm_drm_bridge_alloc(struct device *dev, size_t size, size_t offset,
1300 const struct drm_bridge_funcs *funcs);
1301
1316#define devm_drm_bridge_alloc(dev, type, member, funcs) \
1317 ((type *)__devm_drm_bridge_alloc(dev, sizeof(type), \
1318 offsetof(type, member), funcs))
1319
1320void drm_bridge_add(struct drm_bridge *bridge);
1321int devm_drm_bridge_add(struct device *dev, struct drm_bridge *bridge);
1322void drm_bridge_remove(struct drm_bridge *bridge);
1324 struct drm_bridge *previous,
1326
1327#ifdef CONFIG_OF
1328struct drm_bridge *of_drm_find_and_get_bridge(struct device_node *np);
1329struct drm_bridge *of_drm_find_bridge(struct device_node *np);
1330struct drm_bridge *of_drm_get_bridge_by_endpoint(const struct device_node *np,
1331 int port, int endpoint);
1332#else
1333static inline struct drm_bridge *of_drm_find_and_get_bridge(struct device_node *np)
1334{
1335 return NULL;
1336}
1337static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np)
1338{
1339 return NULL;
1340}
1341static inline struct drm_bridge *of_drm_get_bridge_by_endpoint(const struct device_node *np,
1342 int port, int endpoint)
1343{
1344 return ERR_PTR(-ENODEV);
1345}
1346#endif
1347
1348static inline bool drm_bridge_is_last(struct drm_bridge *bridge)
1349{
1350 return list_is_last(&bridge->chain_node, &bridge->encoder->bridge_chain);
1351}
1352
1363static inline struct drm_bridge_state *
1364drm_bridge_get_current_state(struct drm_bridge *bridge)
1365{
1366 if (!bridge)
1367 return NULL;
1368
1369 /*
1370 * Only atomic bridges will have bridge->base initialized by
1371 * drm_atomic_private_obj_init(), so we need to make sure we're
1372 * working with one before we try to use the lock.
1373 */
1374 if (!bridge->funcs || !bridge->funcs->atomic_reset)
1375 return NULL;
1376
1377 drm_modeset_lock_assert_held(&bridge->base.lock);
1378
1379 if (!bridge->base.state)
1380 return NULL;
1381
1382 return drm_priv_to_bridge_state(bridge->base.state);
1383}
1384
1399static inline struct drm_bridge *
1400drm_bridge_get_next_bridge(struct drm_bridge *bridge)
1401{
1402 if (list_is_last(&bridge->chain_node, &bridge->encoder->bridge_chain))
1403 return NULL;
1404
1405 return drm_bridge_get(list_next_entry(bridge, chain_node));
1406}
1407
1422static inline struct drm_bridge *
1423drm_bridge_get_prev_bridge(struct drm_bridge *bridge)
1424{
1425 if (list_is_first(&bridge->chain_node, &bridge->encoder->bridge_chain))
1426 return NULL;
1427
1428 return drm_bridge_get(list_prev_entry(bridge, chain_node));
1429}
1430
1442static inline struct drm_bridge *
1443drm_bridge_chain_get_first_bridge(struct drm_encoder *encoder)
1444{
1446 struct drm_bridge, chain_node));
1447}
1448
1460static inline struct drm_bridge *
1461drm_bridge_chain_get_last_bridge(struct drm_encoder *encoder)
1462{
1464 struct drm_bridge, chain_node));
1465}
1466
1467/* Internal to drm_for_each_bridge_in_chain*() */
1468static inline struct drm_bridge *__drm_for_each_bridge_in_chain_next(struct drm_bridge *bridge)
1469{
1470 struct drm_bridge *next = drm_bridge_get_next_bridge(bridge);
1471
1472 if (!next)
1474
1475 drm_bridge_put(bridge);
1476
1477 return next;
1478}
1479
1480/* Internal to drm_for_each_bridge_in_chain*() */
1481DEFINE_FREE(__drm_for_each_bridge_in_chain_cleanup, struct drm_bridge *,
1482 if (_T) { mutex_unlock(&_T->encoder->bridge_chain_mutex); drm_bridge_put(_T); })
1483
1484/* Internal to drm_for_each_bridge_in_chain_scoped() */
1485static inline struct drm_bridge *
1486__drm_for_each_bridge_in_chain_scoped_start(struct drm_encoder *encoder)
1487{
1489
1490 struct drm_bridge *bridge = drm_bridge_chain_get_first_bridge(encoder);
1491
1492 if (!bridge)
1494
1495 return bridge;
1496}
1497
1510#define drm_for_each_bridge_in_chain_scoped(encoder, bridge) \
1511 for (struct drm_bridge *bridge __free(__drm_for_each_bridge_in_chain_cleanup) = \
1512 __drm_for_each_bridge_in_chain_scoped_start((encoder)); \
1513 bridge; \
1514 bridge = __drm_for_each_bridge_in_chain_next(bridge)) \
1515
1516/* Internal to drm_for_each_bridge_in_chain_from() */
1517static inline struct drm_bridge *
1518__drm_for_each_bridge_in_chain_from_start(struct drm_bridge *bridge)
1519{
1520 drm_bridge_get(bridge);
1522
1523 return bridge;
1524}
1525
1539#define drm_for_each_bridge_in_chain_from(first_bridge, bridge) \
1540 for (struct drm_bridge *bridge __free(__drm_for_each_bridge_in_chain_cleanup) = \
1541 __drm_for_each_bridge_in_chain_from_start(first_bridge); \
1542 bridge; \
1543 bridge = __drm_for_each_bridge_in_chain_next(bridge)) \
1544
1545enum drm_mode_status
1547 const struct drm_display_info *info,
1548 const struct drm_display_mode *mode);
1550 const struct drm_display_mode *mode,
1551 const struct drm_display_mode *adjusted_mode);
1552
1554 struct drm_crtc_state *crtc_state,
1555 struct drm_connector_state *conn_state);
1557 struct drm_atomic_commit *state);
1559 struct drm_atomic_commit *state);
1561 struct drm_atomic_commit *state);
1563 struct drm_atomic_commit *state);
1564
1565u32 *
1567 struct drm_bridge_state *bridge_state,
1568 struct drm_crtc_state *crtc_state,
1569 struct drm_connector_state *conn_state,
1570 u32 output_fmt,
1571 unsigned int *num_input_fmts);
1572
1574drm_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector);
1576 struct drm_connector *connector);
1577const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
1578 struct drm_connector *connector);
1580 void (*cb)(void *data,
1581 enum drm_connector_status status),
1582 void *data);
1585 enum drm_connector_status status);
1586
1587#ifdef CONFIG_DRM_PANEL_BRIDGE
1588bool drm_bridge_is_panel(const struct drm_bridge *bridge);
1589struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel);
1590struct drm_bridge *drm_panel_bridge_add_typed(struct drm_panel *panel,
1591 u32 connector_type);
1592void drm_panel_bridge_remove(struct drm_bridge *bridge);
1593int drm_panel_bridge_set_orientation(struct drm_connector *connector,
1594 struct drm_bridge *bridge);
1595struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev,
1596 struct drm_panel *panel);
1597struct drm_bridge *devm_drm_panel_bridge_add_typed(struct device *dev,
1598 struct drm_panel *panel,
1599 u32 connector_type);
1600struct drm_bridge *drmm_panel_bridge_add(struct drm_device *drm,
1601 struct drm_panel *panel);
1602struct drm_connector *drm_panel_bridge_connector(struct drm_bridge *bridge);
1603#else
1604static inline bool drm_bridge_is_panel(const struct drm_bridge *bridge)
1605{
1606 return false;
1607}
1608
1609static inline int drm_panel_bridge_set_orientation(struct drm_connector *connector,
1610 struct drm_bridge *bridge)
1611{
1612 return -EINVAL;
1613}
1614#endif
1615
1616#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL_BRIDGE)
1617struct drm_bridge *devm_drm_of_get_bridge(struct device *dev, struct device_node *node,
1618 u32 port, u32 endpoint);
1619struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm, struct device_node *node,
1620 u32 port, u32 endpoint);
1621#else
1622static inline struct drm_bridge *devm_drm_of_get_bridge(struct device *dev,
1623 struct device_node *node,
1624 u32 port,
1625 u32 endpoint)
1626{
1627 return ERR_PTR(-ENODEV);
1628}
1629
1630static inline struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm,
1631 struct device_node *node,
1632 u32 port,
1633 u32 endpoint)
1634{
1635 return ERR_PTR(-ENODEV);
1636}
1637#endif
1638
1639void devm_drm_put_bridge(struct device *dev, struct drm_bridge *bridge);
1640
1641void drm_bridge_debugfs_params(struct dentry *root);
1643
1644#endif
#define list_last_entry_or_null(ptr, type, member)
Definition list.h:53
#define list_prev_entry(pos, member)
Definition list.h:30
#define list_next_entry(pos, member)
Definition list.h:27
#define list_first_entry_or_null(ptr, type, member)
Definition list.h:50
#define bool
Definition stdbool.h:35
void * endpoint
Definition main.cpp:149
uint8_t flags
Definition virtio.h:0
#define EINVAL
Definition acclib.h:198
#define ENODEV
Definition acclib.h:197
#define NULL
Definition actypes.h:561
#define BIT(nr)
Definition bitops.h:112
#define DEFINE_FREE(_name, _type, _free)
Definition cleanup.h:120
#define container_of(ptr, type, member)
Definition container_of.h:19
void devm_drm_put_bridge(struct device *dev, struct drm_bridge *bridge)
void drm_bridge_chain_mode_set(struct drm_bridge *bridge, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode)
enum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector)
void drm_bridge_remove(struct drm_bridge *bridge)
int devm_drm_bridge_add(struct device *dev, struct drm_bridge *bridge)
void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge, struct drm_atomic_commit *state)
drm_bridge_ops
Definition drm_bridge.h:1002
@ DRM_BRIDGE_OP_MODES
Definition drm_bridge.h:1029
@ DRM_BRIDGE_OP_EDID
Definition drm_bridge.h:1014
@ DRM_BRIDGE_OP_HPD
Definition drm_bridge.h:1022
@ DRM_BRIDGE_OP_HDMI_AUDIO
Definition drm_bridge.h:1059
@ DRM_BRIDGE_OP_DP_AUDIO
Definition drm_bridge.h:1072
@ DRM_BRIDGE_OP_HDMI
Definition drm_bridge.h:1043
@ DRM_BRIDGE_OP_DETECT
Definition drm_bridge.h:1008
@ DRM_BRIDGE_OP_HDMI_HDR_DRM_INFOFRAME
Definition drm_bridge.h:1088
@ DRM_BRIDGE_OP_HDMI_SPD_INFOFRAME
Definition drm_bridge.h:1094
@ DRM_BRIDGE_OP_HDMI_CEC_ADAPTER
Definition drm_bridge.h:1082
@ DRM_BRIDGE_OP_HDMI_CEC_NOTIFIER
Definition drm_bridge.h:1077
void drm_bridge_debugfs_params(struct dentry *root)
enum drm_mode_status drm_bridge_chain_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode)
void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge, struct drm_atomic_commit *state)
void drm_bridge_clear_and_put(struct drm_bridge **bridge_pp)
drm_bridge_attach_flags
Definition drm_bridge.h:53
@ DRM_BRIDGE_ATTACH_NO_CONNECTOR
Definition drm_bridge.h:58
u32 * drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state, u32 output_fmt, unsigned int *num_input_fmts)
size_t size
Definition drm_bridge.h:1299
int drm_atomic_bridge_chain_check(struct drm_bridge *bridge, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state)
void drm_bridge_put(struct drm_bridge *bridge)
void drm_bridge_debugfs_encoder_params(struct dentry *root, struct drm_encoder *encoder)
void drm_bridge_add(struct drm_bridge *bridge)
void drm_bridge_exit(int idx)
const struct drm_edid * drm_bridge_edid_read(struct drm_bridge *bridge, struct drm_connector *connector)
void drm_bridge_hpd_notify(struct drm_bridge *bridge, enum drm_connector_status status)
void drm_bridge_hpd_disable(struct drm_bridge *bridge)
size_t size_t const struct drm_bridge_funcs * funcs
Definition drm_bridge.h:1300
void drm_bridge_hpd_enable(struct drm_bridge *bridge, void(*cb)(void *data, enum drm_connector_status status), void *data)
size_t size_t offset
Definition drm_bridge.h:1299
void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge, struct drm_atomic_commit *state)
int drm_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *connector)
bool drm_bridge_enter(struct drm_bridge *bridge, int *idx)
struct drm_bridge * drm_bridge_get(struct drm_bridge *bridge)
int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, struct drm_bridge *previous, enum drm_bridge_attach_flags flags)
void drm_bridge_unplug(struct drm_bridge *bridge)
void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge, struct drm_atomic_commit *state)
drm_connector_status
Definition drm_connector.h:67
struct drm_encoder * encoder
Definition drm_encoder.h:211
const char * fmt
Definition drm_file.h:466
drm_mode_status
Definition drm_modes.h:91
const struct device * dev
Definition drm_print.h:519
#define ERR_PTR(err)
Definition err.h:51
struct i915_user_extension base
Definition i915_drm.h:0
size_t len
Definition initial.c:23
void * data
Definition kthread.h:30
void int node
Definition kthread.h:31
#define mutex_lock(m)
Definition kernel.h:229
uint64_t u64
Definition kernel.h:17
#define mutex_unlock(m)
Definition kernel.h:230
uint8_t u8
Definition kernel.h:14
uint32_t u32
Definition kernel.h:16
Definition fs.h:255
Definition drm_atomic.h:480
Definition drm_bridge.h:64
int(* hdmi_clear_hdmi_infoframe)(struct drm_bridge *bridge)
Definition drm_bridge.h:699
int(* hdmi_cec_enable)(struct drm_bridge *bridge, bool enable)
Definition drm_bridge.h:865
void(* disable)(struct drm_bridge *bridge)
Definition drm_bridge.h:197
void(* atomic_destroy_state)(struct drm_bridge *bridge, struct drm_bridge_state *state)
Definition drm_bridge.h:407
void(* atomic_enable)(struct drm_bridge *bridge, struct drm_atomic_commit *state)
Definition drm_bridge.h:339
int(* dp_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms)
Definition drm_bridge.h:921
void(* atomic_disable)(struct drm_bridge *bridge, struct drm_atomic_commit *state)
Definition drm_bridge.h:356
void(* hdmi_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:820
int(* hdmi_cec_transmit)(struct drm_bridge *bridge, u8 attempts, u32 signal_free_time, struct cec_msg *msg)
Definition drm_bridge.h:893
enum drm_connector_status(* detect)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:547
int(* hdmi_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction)
Definition drm_bridge.h:834
int(* hdmi_cec_log_addr)(struct drm_bridge *bridge, u8 logical_addr)
Definition drm_bridge.h:879
bool(* mode_fixup)(struct drm_bridge *bridge, const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode)
Definition drm_bridge.h:173
void(* hpd_disable)(struct drm_bridge *bridge)
Definition drm_bridge.h:647
void(* destroy)(struct drm_bridge *bridge)
Definition drm_bridge.h:89
int(* atomic_check)(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state)
Definition drm_bridge.h:501
void(* mode_set)(struct drm_bridge *bridge, const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode)
Definition drm_bridge.h:249
void(* detach)(struct drm_bridge *bridge)
Definition drm_bridge.h:99
int(* hdmi_write_audio_infoframe)(struct drm_bridge *bridge, const u8 *buffer, size_t len)
Definition drm_bridge.h:776
int(* hdmi_clear_spd_infoframe)(struct drm_bridge *bridge)
Definition drm_bridge.h:744
void(* enable)(struct drm_bridge *bridge)
Definition drm_bridge.h:300
void(* hpd_notify)(struct drm_bridge *bridge, struct drm_connector *connector, enum drm_connector_status status)
Definition drm_bridge.h:616
int(* hdmi_clear_avi_infoframe)(struct drm_bridge *bridge)
Definition drm_bridge.h:678
void(* atomic_pre_enable)(struct drm_bridge *bridge, struct drm_atomic_commit *state)
Definition drm_bridge.h:319
int(* hdmi_clear_hdr_drm_infoframe)(struct drm_bridge *bridge)
Definition drm_bridge.h:721
void(* atomic_post_disable)(struct drm_bridge *bridge, struct drm_atomic_commit *state)
Definition drm_bridge.h:375
int(* hdmi_write_spd_infoframe)(struct drm_bridge *bridge, const u8 *buffer, size_t len)
Definition drm_bridge.h:755
void(* hpd_enable)(struct drm_bridge *bridge)
Definition drm_bridge.h:633
void(* dp_audio_shutdown)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:937
int(* dp_audio_startup)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:907
int(* get_modes)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:572
int(* hdmi_audio_startup)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:790
enum drm_mode_status(* mode_valid)(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode)
Definition drm_bridge.h:132
enum drm_mode_status(* hdmi_tmds_char_rate_valid)(const struct drm_bridge *bridge, const struct drm_display_mode *mode, unsigned long long tmds_rate)
Definition drm_bridge.h:666
int(* hdmi_write_hdmi_infoframe)(struct drm_bridge *bridge, const u8 *buffer, size_t len)
Definition drm_bridge.h:709
int(* hdmi_write_hdr_drm_infoframe)(struct drm_bridge *bridge, const u8 *buffer, size_t len)
Definition drm_bridge.h:732
int(* hdmi_cec_init)(struct drm_bridge *bridge, struct drm_connector *connector)
Definition drm_bridge.h:850
int(* hdmi_clear_audio_infoframe)(struct drm_bridge *bridge)
Definition drm_bridge.h:766
struct drm_bridge_state *(* atomic_reset)(struct drm_bridge *bridge)
Definition drm_bridge.h:531
int(* dp_audio_mute_stream)(struct drm_bridge *bridge, struct drm_connector *connector, bool enable, int direction)
Definition drm_bridge.h:951
void(* post_disable)(struct drm_bridge *bridge)
Definition drm_bridge.h:221
int(* hdmi_write_avi_infoframe)(struct drm_bridge *bridge, const u8 *buffer, size_t len)
Definition drm_bridge.h:688
int(* hdmi_audio_prepare)(struct drm_bridge *bridge, struct drm_connector *connector, struct hdmi_codec_daifmt *fmt, struct hdmi_codec_params *hparms)
Definition drm_bridge.h:804
void(* pre_enable)(struct drm_bridge *bridge)
Definition drm_bridge.h:275
int(* attach)(struct drm_bridge *bridge, struct drm_encoder *encoder, enum drm_bridge_attach_flags flags)
Definition drm_bridge.h:78
void(* debugfs_init)(struct drm_bridge *bridge, struct dentry *root)
Definition drm_bridge.h:960
Definition drm_atomic.h:1339
struct drm_bridge * bridge
Definition drm_atomic.h:1348
Definition drm_bridge.h:966
u32 hold_time_ps
Definition drm_bridge.h:988
bool dual_link
Definition drm_bridge.h:996
u32 input_bus_flags
Definition drm_bridge.h:974
u32 setup_time_ps
Definition drm_bridge.h:981
Definition drm_bridge.h:1100
u8 hdmi_cec_available_las
Definition drm_bridge.h:1252
struct drm_encoder * encoder
Definition drm_bridge.h:1106
void * driver_private
Definition drm_bridge.h:1142
struct mutex hpd_mutex
Definition drm_bridge.h:1258
void * container
Definition drm_bridge.h:1126
const struct drm_bridge_timings * timings
Definition drm_bridge.h:1118
int hdmi_audio_dai_port
Definition drm_bridge.h:1242
struct list_head list
Definition drm_bridge.h:1112
int hdmi_audio_max_i2s_playback_channels
Definition drm_bridge.h:1221
struct i2c_adapter * ddc
Definition drm_bridge.h:1176
struct device_node * of_node
Definition drm_bridge.h:1110
bool support_hdcp
Definition drm_bridge.h:1172
void * hpd_data
Definition drm_bridge.h:1268
struct list_head chain_node
Definition drm_bridge.h:1108
const char * product
Definition drm_bridge.h:1188
enum drm_bridge_ops ops
Definition drm_bridge.h:1144
struct drm_device * dev
Definition drm_bridge.h:1104
void(* hpd_cb)(void *data, enum drm_connector_status status)
Definition drm_bridge.h:1263
u64 hdmi_audio_i2s_formats
Definition drm_bridge.h:1229
bool unplugged
Definition drm_bridge.h:1139
struct drm_private_obj base
Definition drm_bridge.h:1102
bool interlace_allowed
Definition drm_bridge.h:1155
unsigned int max_bpc
Definition drm_bridge.h:1202
bool ycbcr_420_allowed
Definition drm_bridge.h:1160
struct device * hdmi_cec_dev
Definition drm_bridge.h:1208
const struct drm_bridge_funcs * funcs
Definition drm_bridge.h:1120
unsigned int hdmi_audio_spdif_playback
Definition drm_bridge.h:1235
struct device * hdmi_audio_dev
Definition drm_bridge.h:1214
const char * hdmi_cec_adapter_name
Definition drm_bridge.h:1247
unsigned int supported_formats
Definition drm_bridge.h:1195
bool pre_enable_prev_first
Definition drm_bridge.h:1168
const char * vendor
Definition drm_bridge.h:1182
int type
Definition drm_bridge.h:1150
struct kref refcount
Definition drm_bridge.h:1131
struct drm_bridge * next_bridge
Definition drm_bridge.h:1279
Definition drm_connector.h:1065
Definition drm_connector.h:1998
Definition drm_crtc.h:81
Definition drm_device.h:75
Definition drm_connector.h:740
Definition drm_modes.h:252
Definition drm_encoder.h:106
struct mutex bridge_chain_mutex
Definition drm_encoder.h:194
struct list_head bridge_chain
Definition drm_encoder.h:191
Definition drm_file.h:78
Definition drm_panel.h:205
Definition drm_atomic.h:353
struct drm_modeset_lock lock
Definition drm_atomic.h:368
struct drm_private_state * state
Definition drm_atomic.h:373
Definition drm_edid.h:291
Definition i2c.h:34
Definition kref.h:44
Definition list.h:11
Definition mutex.h:59
#define state(x)
#define mode(x)
TTY * root
Definition tty.cpp:47