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