| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-only */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/ |
|---|
| 3 | 4 | * Author: Tomi Valkeinen <tomi.valkeinen@ti.com> |
|---|
| 4 | | - * |
|---|
| 5 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 6 | | - * under the terms of the GNU General Public License version 2 as published by |
|---|
| 7 | | - * the Free Software Foundation. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, but WITHOUT |
|---|
| 10 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 11 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 12 | | - * more details. |
|---|
| 13 | | - * |
|---|
| 14 | | - * You should have received a copy of the GNU General Public License along with |
|---|
| 15 | | - * this program. If not, see <http://www.gnu.org/licenses/>. |
|---|
| 16 | 5 | */ |
|---|
| 17 | 6 | |
|---|
| 18 | 7 | #ifndef __OMAP_DRM_DSS_H |
|---|
| 19 | 8 | #define __OMAP_DRM_DSS_H |
|---|
| 20 | 9 | |
|---|
| 21 | 10 | #include <linux/list.h> |
|---|
| 22 | | -#include <linux/kobject.h> |
|---|
| 23 | 11 | #include <linux/device.h> |
|---|
| 24 | 12 | #include <linux/interrupt.h> |
|---|
| 25 | 13 | #include <video/videomode.h> |
|---|
| .. | .. |
|---|
| 68 | 56 | struct snd_aes_iec958; |
|---|
| 69 | 57 | struct snd_cea_861_aud_if; |
|---|
| 70 | 58 | struct hdmi_avi_infoframe; |
|---|
| 59 | +struct drm_connector; |
|---|
| 71 | 60 | |
|---|
| 72 | 61 | enum omap_display_type { |
|---|
| 73 | 62 | OMAP_DISPLAY_TYPE_NONE = 0, |
|---|
| .. | .. |
|---|
| 296 | 285 | u8 pre_mult_alpha; |
|---|
| 297 | 286 | }; |
|---|
| 298 | 287 | |
|---|
| 299 | | -struct omapdss_dpi_ops { |
|---|
| 300 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 301 | | - struct omap_dss_device *dst); |
|---|
| 302 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 303 | | - struct omap_dss_device *dst); |
|---|
| 304 | | - |
|---|
| 305 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 306 | | - void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 307 | | - |
|---|
| 308 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 309 | | - struct videomode *vm); |
|---|
| 310 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 311 | | - struct videomode *vm); |
|---|
| 312 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 313 | | - struct videomode *vm); |
|---|
| 314 | | -}; |
|---|
| 315 | | - |
|---|
| 316 | | -struct omapdss_sdi_ops { |
|---|
| 317 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 318 | | - struct omap_dss_device *dst); |
|---|
| 319 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 320 | | - struct omap_dss_device *dst); |
|---|
| 321 | | - |
|---|
| 322 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 323 | | - void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 324 | | - |
|---|
| 325 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 326 | | - struct videomode *vm); |
|---|
| 327 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 328 | | - struct videomode *vm); |
|---|
| 329 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 330 | | - struct videomode *vm); |
|---|
| 331 | | -}; |
|---|
| 332 | | - |
|---|
| 333 | | -struct omapdss_dvi_ops { |
|---|
| 334 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 335 | | - struct omap_dss_device *dst); |
|---|
| 336 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 337 | | - struct omap_dss_device *dst); |
|---|
| 338 | | - |
|---|
| 339 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 340 | | - void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 341 | | - |
|---|
| 342 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 343 | | - struct videomode *vm); |
|---|
| 344 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 345 | | - struct videomode *vm); |
|---|
| 346 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 347 | | - struct videomode *vm); |
|---|
| 348 | | -}; |
|---|
| 349 | | - |
|---|
| 350 | | -struct omapdss_atv_ops { |
|---|
| 351 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 352 | | - struct omap_dss_device *dst); |
|---|
| 353 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 354 | | - struct omap_dss_device *dst); |
|---|
| 355 | | - |
|---|
| 356 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 357 | | - void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 358 | | - |
|---|
| 359 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 360 | | - struct videomode *vm); |
|---|
| 361 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 362 | | - struct videomode *vm); |
|---|
| 363 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 364 | | - struct videomode *vm); |
|---|
| 365 | | - |
|---|
| 366 | | - int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); |
|---|
| 367 | | - u32 (*get_wss)(struct omap_dss_device *dssdev); |
|---|
| 368 | | -}; |
|---|
| 369 | | - |
|---|
| 370 | | -struct omapdss_hdmi_ops { |
|---|
| 371 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 372 | | - struct omap_dss_device *dst); |
|---|
| 373 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 374 | | - struct omap_dss_device *dst); |
|---|
| 375 | | - |
|---|
| 376 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 377 | | - void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 378 | | - |
|---|
| 379 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 380 | | - struct videomode *vm); |
|---|
| 381 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 382 | | - struct videomode *vm); |
|---|
| 383 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 384 | | - struct videomode *vm); |
|---|
| 385 | | - |
|---|
| 386 | | - int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len); |
|---|
| 387 | | - void (*lost_hotplug)(struct omap_dss_device *dssdev); |
|---|
| 388 | | - bool (*detect)(struct omap_dss_device *dssdev); |
|---|
| 389 | | - |
|---|
| 390 | | - int (*register_hpd_cb)(struct omap_dss_device *dssdev, |
|---|
| 391 | | - void (*cb)(void *cb_data, |
|---|
| 392 | | - enum drm_connector_status status), |
|---|
| 393 | | - void *cb_data); |
|---|
| 394 | | - void (*unregister_hpd_cb)(struct omap_dss_device *dssdev); |
|---|
| 395 | | - void (*enable_hpd)(struct omap_dss_device *dssdev); |
|---|
| 396 | | - void (*disable_hpd)(struct omap_dss_device *dssdev); |
|---|
| 397 | | - |
|---|
| 398 | | - int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode); |
|---|
| 399 | | - int (*set_infoframe)(struct omap_dss_device *dssdev, |
|---|
| 400 | | - const struct hdmi_avi_infoframe *avi); |
|---|
| 401 | | -}; |
|---|
| 402 | | - |
|---|
| 403 | 288 | struct omapdss_dsi_ops { |
|---|
| 404 | | - int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 405 | | - struct omap_dss_device *dst); |
|---|
| 406 | | - void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 407 | | - struct omap_dss_device *dst); |
|---|
| 408 | | - |
|---|
| 409 | | - int (*enable)(struct omap_dss_device *dssdev); |
|---|
| 410 | 289 | void (*disable)(struct omap_dss_device *dssdev, bool disconnect_lanes, |
|---|
| 411 | 290 | bool enter_ulps); |
|---|
| 412 | 291 | |
|---|
| .. | .. |
|---|
| 457 | 336 | int channel, u16 plen); |
|---|
| 458 | 337 | }; |
|---|
| 459 | 338 | |
|---|
| 339 | +struct omap_dss_device_ops { |
|---|
| 340 | + int (*connect)(struct omap_dss_device *dssdev, |
|---|
| 341 | + struct omap_dss_device *dst); |
|---|
| 342 | + void (*disconnect)(struct omap_dss_device *dssdev, |
|---|
| 343 | + struct omap_dss_device *dst); |
|---|
| 344 | + |
|---|
| 345 | + void (*enable)(struct omap_dss_device *dssdev); |
|---|
| 346 | + void (*disable)(struct omap_dss_device *dssdev); |
|---|
| 347 | + |
|---|
| 348 | + int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 349 | + struct drm_display_mode *mode); |
|---|
| 350 | + |
|---|
| 351 | + int (*get_modes)(struct omap_dss_device *dssdev, |
|---|
| 352 | + struct drm_connector *connector); |
|---|
| 353 | + |
|---|
| 354 | + const struct omapdss_dsi_ops dsi; |
|---|
| 355 | +}; |
|---|
| 356 | + |
|---|
| 357 | +/** |
|---|
| 358 | + * enum omap_dss_device_ops_flag - Indicates which device ops are supported |
|---|
| 359 | + * @OMAP_DSS_DEVICE_OP_MODES: The device supports reading modes |
|---|
| 360 | + */ |
|---|
| 361 | +enum omap_dss_device_ops_flag { |
|---|
| 362 | + OMAP_DSS_DEVICE_OP_MODES = BIT(3), |
|---|
| 363 | +}; |
|---|
| 364 | + |
|---|
| 460 | 365 | struct omap_dss_device { |
|---|
| 461 | | - struct kobject kobj; |
|---|
| 462 | 366 | struct device *dev; |
|---|
| 463 | 367 | |
|---|
| 464 | 368 | struct module *owner; |
|---|
| 465 | 369 | |
|---|
| 466 | | - struct list_head panel_list; |
|---|
| 370 | + struct dss_device *dss; |
|---|
| 371 | + struct omap_dss_device *next; |
|---|
| 372 | + struct drm_bridge *bridge; |
|---|
| 373 | + struct drm_bridge *next_bridge; |
|---|
| 374 | + struct drm_panel *panel; |
|---|
| 467 | 375 | |
|---|
| 468 | | - /* alias in the form of "display%d" */ |
|---|
| 469 | | - char alias[16]; |
|---|
| 376 | + struct list_head list; |
|---|
| 470 | 377 | |
|---|
| 378 | + /* |
|---|
| 379 | + * DSS type that this device generates (for DSS internal devices) or |
|---|
| 380 | + * requires (for external encoders, connectors and panels). Must be a |
|---|
| 381 | + * non-zero (different than OMAP_DISPLAY_TYPE_NONE) value. |
|---|
| 382 | + */ |
|---|
| 471 | 383 | enum omap_display_type type; |
|---|
| 472 | | - enum omap_display_type output_type; |
|---|
| 473 | 384 | |
|---|
| 474 | | - struct { |
|---|
| 475 | | - struct videomode vm; |
|---|
| 476 | | - |
|---|
| 477 | | - enum omap_dss_dsi_pixel_format dsi_pix_fmt; |
|---|
| 478 | | - enum omap_dss_dsi_mode dsi_mode; |
|---|
| 479 | | - } panel; |
|---|
| 385 | + /* |
|---|
| 386 | + * True if the device is a display (panel or connector) at the end of |
|---|
| 387 | + * the pipeline, false otherwise. |
|---|
| 388 | + */ |
|---|
| 389 | + bool display; |
|---|
| 480 | 390 | |
|---|
| 481 | 391 | const char *name; |
|---|
| 482 | 392 | |
|---|
| 483 | | - struct omap_dss_driver *driver; |
|---|
| 484 | | - |
|---|
| 485 | | - union { |
|---|
| 486 | | - const struct omapdss_dpi_ops *dpi; |
|---|
| 487 | | - const struct omapdss_sdi_ops *sdi; |
|---|
| 488 | | - const struct omapdss_dvi_ops *dvi; |
|---|
| 489 | | - const struct omapdss_hdmi_ops *hdmi; |
|---|
| 490 | | - const struct omapdss_atv_ops *atv; |
|---|
| 491 | | - const struct omapdss_dsi_ops *dsi; |
|---|
| 492 | | - } ops; |
|---|
| 493 | | - |
|---|
| 494 | | - /* helper variable for driver suspend/resume */ |
|---|
| 495 | | - bool activate_after_resume; |
|---|
| 393 | + const struct omap_dss_driver *driver; |
|---|
| 394 | + const struct omap_dss_device_ops *ops; |
|---|
| 395 | + unsigned long ops_flags; |
|---|
| 396 | + u32 bus_flags; |
|---|
| 496 | 397 | |
|---|
| 497 | 398 | enum omap_display_caps caps; |
|---|
| 498 | | - |
|---|
| 499 | | - struct omap_dss_device *src; |
|---|
| 500 | 399 | |
|---|
| 501 | 400 | enum omap_dss_display_state state; |
|---|
| 502 | 401 | |
|---|
| 503 | 402 | /* OMAP DSS output specific fields */ |
|---|
| 504 | 403 | |
|---|
| 505 | | - struct list_head list; |
|---|
| 506 | | - |
|---|
| 507 | 404 | /* DISPC channel for this output */ |
|---|
| 508 | 405 | enum omap_channel dispc_channel; |
|---|
| 509 | | - bool dispc_channel_connected; |
|---|
| 510 | 406 | |
|---|
| 511 | 407 | /* output instance */ |
|---|
| 512 | 408 | enum omap_dss_output_id id; |
|---|
| 513 | 409 | |
|---|
| 514 | | - /* the port number in the DT node */ |
|---|
| 515 | | - int port_num; |
|---|
| 516 | | - |
|---|
| 517 | | - /* dynamic fields */ |
|---|
| 518 | | - struct omap_dss_device *dst; |
|---|
| 410 | + /* port number in DT */ |
|---|
| 411 | + unsigned int of_port; |
|---|
| 519 | 412 | }; |
|---|
| 520 | 413 | |
|---|
| 521 | 414 | struct omap_dss_driver { |
|---|
| 522 | | - int (*probe)(struct omap_dss_device *); |
|---|
| 523 | | - void (*remove)(struct omap_dss_device *); |
|---|
| 524 | | - |
|---|
| 525 | | - int (*connect)(struct omap_dss_device *dssdev); |
|---|
| 526 | | - void (*disconnect)(struct omap_dss_device *dssdev); |
|---|
| 527 | | - |
|---|
| 528 | | - int (*enable)(struct omap_dss_device *display); |
|---|
| 529 | | - void (*disable)(struct omap_dss_device *display); |
|---|
| 530 | | - int (*run_test)(struct omap_dss_device *display, int test); |
|---|
| 531 | | - |
|---|
| 532 | 415 | int (*update)(struct omap_dss_device *dssdev, |
|---|
| 533 | 416 | u16 x, u16 y, u16 w, u16 h); |
|---|
| 534 | 417 | int (*sync)(struct omap_dss_device *dssdev); |
|---|
| .. | .. |
|---|
| 536 | 419 | int (*enable_te)(struct omap_dss_device *dssdev, bool enable); |
|---|
| 537 | 420 | int (*get_te)(struct omap_dss_device *dssdev); |
|---|
| 538 | 421 | |
|---|
| 539 | | - u8 (*get_rotate)(struct omap_dss_device *dssdev); |
|---|
| 540 | | - int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate); |
|---|
| 541 | | - |
|---|
| 542 | | - bool (*get_mirror)(struct omap_dss_device *dssdev); |
|---|
| 543 | | - int (*set_mirror)(struct omap_dss_device *dssdev, bool enable); |
|---|
| 544 | | - |
|---|
| 545 | 422 | int (*memory_read)(struct omap_dss_device *dssdev, |
|---|
| 546 | 423 | void *buf, size_t size, |
|---|
| 547 | 424 | u16 x, u16 y, u16 w, u16 h); |
|---|
| 548 | | - |
|---|
| 549 | | - int (*check_timings)(struct omap_dss_device *dssdev, |
|---|
| 550 | | - struct videomode *vm); |
|---|
| 551 | | - void (*set_timings)(struct omap_dss_device *dssdev, |
|---|
| 552 | | - struct videomode *vm); |
|---|
| 553 | | - void (*get_timings)(struct omap_dss_device *dssdev, |
|---|
| 554 | | - struct videomode *vm); |
|---|
| 555 | | - void (*get_size)(struct omap_dss_device *dssdev, |
|---|
| 556 | | - unsigned int *width, unsigned int *height); |
|---|
| 557 | | - |
|---|
| 558 | | - int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); |
|---|
| 559 | | - u32 (*get_wss)(struct omap_dss_device *dssdev); |
|---|
| 560 | | - |
|---|
| 561 | | - int (*read_edid)(struct omap_dss_device *dssdev, u8 *buf, int len); |
|---|
| 562 | | - bool (*detect)(struct omap_dss_device *dssdev); |
|---|
| 563 | | - |
|---|
| 564 | | - int (*register_hpd_cb)(struct omap_dss_device *dssdev, |
|---|
| 565 | | - void (*cb)(void *cb_data, |
|---|
| 566 | | - enum drm_connector_status status), |
|---|
| 567 | | - void *cb_data); |
|---|
| 568 | | - void (*unregister_hpd_cb)(struct omap_dss_device *dssdev); |
|---|
| 569 | | - void (*enable_hpd)(struct omap_dss_device *dssdev); |
|---|
| 570 | | - void (*disable_hpd)(struct omap_dss_device *dssdev); |
|---|
| 571 | | - |
|---|
| 572 | | - int (*set_hdmi_mode)(struct omap_dss_device *dssdev, bool hdmi_mode); |
|---|
| 573 | | - int (*set_hdmi_infoframe)(struct omap_dss_device *dssdev, |
|---|
| 574 | | - const struct hdmi_avi_infoframe *avi); |
|---|
| 575 | 425 | }; |
|---|
| 576 | 426 | |
|---|
| 577 | 427 | struct dss_device *omapdss_get_dss(void); |
|---|
| .. | .. |
|---|
| 581 | 431 | return !!omapdss_get_dss(); |
|---|
| 582 | 432 | } |
|---|
| 583 | 433 | |
|---|
| 584 | | -int omapdss_register_display(struct omap_dss_device *dssdev); |
|---|
| 585 | | -void omapdss_unregister_display(struct omap_dss_device *dssdev); |
|---|
| 434 | +void omapdss_display_init(struct omap_dss_device *dssdev); |
|---|
| 435 | +int omapdss_display_get_modes(struct drm_connector *connector, |
|---|
| 436 | + const struct videomode *vm); |
|---|
| 586 | 437 | |
|---|
| 587 | | -struct omap_dss_device *omap_dss_get_device(struct omap_dss_device *dssdev); |
|---|
| 588 | | -void omap_dss_put_device(struct omap_dss_device *dssdev); |
|---|
| 589 | | -#define for_each_dss_dev(d) while ((d = omap_dss_get_next_device(d)) != NULL) |
|---|
| 590 | | -struct omap_dss_device *omap_dss_get_next_device(struct omap_dss_device *from); |
|---|
| 438 | +void omapdss_device_register(struct omap_dss_device *dssdev); |
|---|
| 439 | +void omapdss_device_unregister(struct omap_dss_device *dssdev); |
|---|
| 440 | +struct omap_dss_device *omapdss_device_get(struct omap_dss_device *dssdev); |
|---|
| 441 | +void omapdss_device_put(struct omap_dss_device *dssdev); |
|---|
| 442 | +struct omap_dss_device *omapdss_find_device_by_node(struct device_node *node); |
|---|
| 443 | +int omapdss_device_connect(struct dss_device *dss, |
|---|
| 444 | + struct omap_dss_device *src, |
|---|
| 445 | + struct omap_dss_device *dst); |
|---|
| 446 | +void omapdss_device_disconnect(struct omap_dss_device *src, |
|---|
| 447 | + struct omap_dss_device *dst); |
|---|
| 448 | +void omapdss_device_enable(struct omap_dss_device *dssdev); |
|---|
| 449 | +void omapdss_device_disable(struct omap_dss_device *dssdev); |
|---|
| 591 | 450 | |
|---|
| 592 | 451 | int omap_dss_get_num_overlay_managers(void); |
|---|
| 593 | 452 | |
|---|
| 594 | 453 | int omap_dss_get_num_overlays(void); |
|---|
| 595 | 454 | |
|---|
| 596 | | -int omapdss_register_output(struct omap_dss_device *output); |
|---|
| 597 | | -void omapdss_unregister_output(struct omap_dss_device *output); |
|---|
| 598 | | -struct omap_dss_device *omap_dss_get_output(enum omap_dss_output_id id); |
|---|
| 599 | | -struct omap_dss_device *omap_dss_find_output_by_port_node(struct device_node *port); |
|---|
| 600 | | -int omapdss_output_set_device(struct omap_dss_device *out, |
|---|
| 601 | | - struct omap_dss_device *dssdev); |
|---|
| 602 | | -int omapdss_output_unset_device(struct omap_dss_device *out); |
|---|
| 603 | | - |
|---|
| 604 | | -struct omap_dss_device *omapdss_find_output_from_display(struct omap_dss_device *dssdev); |
|---|
| 455 | +#define for_each_dss_output(d) \ |
|---|
| 456 | + while ((d = omapdss_device_next_output(d)) != NULL) |
|---|
| 457 | +struct omap_dss_device *omapdss_device_next_output(struct omap_dss_device *from); |
|---|
| 458 | +int omapdss_device_init_output(struct omap_dss_device *out, |
|---|
| 459 | + struct drm_bridge *local_bridge); |
|---|
| 460 | +void omapdss_device_cleanup_output(struct omap_dss_device *out); |
|---|
| 605 | 461 | |
|---|
| 606 | 462 | typedef void (*omap_dispc_isr_t) (void *arg, u32 mask); |
|---|
| 607 | 463 | int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask); |
|---|
| .. | .. |
|---|
| 610 | 466 | int omapdss_compat_init(void); |
|---|
| 611 | 467 | void omapdss_compat_uninit(void); |
|---|
| 612 | 468 | |
|---|
| 613 | | -static inline bool omapdss_device_is_connected(struct omap_dss_device *dssdev) |
|---|
| 614 | | -{ |
|---|
| 615 | | - return dssdev->src; |
|---|
| 616 | | -} |
|---|
| 617 | | - |
|---|
| 618 | 469 | static inline bool omapdss_device_is_enabled(struct omap_dss_device *dssdev) |
|---|
| 619 | 470 | { |
|---|
| 620 | 471 | return dssdev->state == OMAP_DSS_DISPLAY_ACTIVE; |
|---|
| 621 | 472 | } |
|---|
| 622 | | - |
|---|
| 623 | | -struct omap_dss_device * |
|---|
| 624 | | -omapdss_of_find_source_for_first_ep(struct device_node *node); |
|---|
| 625 | | - |
|---|
| 626 | | -struct device_node *dss_of_port_get_parent_device(struct device_node *port); |
|---|
| 627 | | -u32 dss_of_port_get_port_number(struct device_node *port); |
|---|
| 628 | 473 | |
|---|
| 629 | 474 | enum dss_writeback_channel { |
|---|
| 630 | 475 | DSS_WB_LCD1_MGR = 0, |
|---|
| .. | .. |
|---|
| 638 | 483 | }; |
|---|
| 639 | 484 | |
|---|
| 640 | 485 | struct dss_mgr_ops { |
|---|
| 641 | | - int (*connect)(struct omap_drm_private *priv, |
|---|
| 642 | | - enum omap_channel channel, |
|---|
| 643 | | - struct omap_dss_device *dst); |
|---|
| 644 | | - void (*disconnect)(struct omap_drm_private *priv, |
|---|
| 645 | | - enum omap_channel channel, |
|---|
| 646 | | - struct omap_dss_device *dst); |
|---|
| 647 | | - |
|---|
| 648 | 486 | void (*start_update)(struct omap_drm_private *priv, |
|---|
| 649 | 487 | enum omap_channel channel); |
|---|
| 650 | 488 | int (*enable)(struct omap_drm_private *priv, |
|---|
| .. | .. |
|---|
| 665 | 503 | void (*handler)(void *), void *data); |
|---|
| 666 | 504 | }; |
|---|
| 667 | 505 | |
|---|
| 668 | | -int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops, |
|---|
| 506 | +int dss_install_mgr_ops(struct dss_device *dss, |
|---|
| 507 | + const struct dss_mgr_ops *mgr_ops, |
|---|
| 669 | 508 | struct omap_drm_private *priv); |
|---|
| 670 | | -void dss_uninstall_mgr_ops(void); |
|---|
| 509 | +void dss_uninstall_mgr_ops(struct dss_device *dss); |
|---|
| 671 | 510 | |
|---|
| 672 | | -int dss_mgr_connect(struct omap_dss_device *dssdev, |
|---|
| 673 | | - struct omap_dss_device *dst); |
|---|
| 674 | | -void dss_mgr_disconnect(struct omap_dss_device *dssdev, |
|---|
| 675 | | - struct omap_dss_device *dst); |
|---|
| 676 | 511 | void dss_mgr_set_timings(struct omap_dss_device *dssdev, |
|---|
| 677 | 512 | const struct videomode *vm); |
|---|
| 678 | 513 | void dss_mgr_set_lcd_config(struct omap_dss_device *dssdev, |
|---|
| .. | .. |
|---|
| 720 | 555 | void (*mgr_set_lcd_config)(struct dispc_device *dispc, |
|---|
| 721 | 556 | enum omap_channel channel, |
|---|
| 722 | 557 | const struct dss_lcd_mgr_config *config); |
|---|
| 558 | + int (*mgr_check_timings)(struct dispc_device *dispc, |
|---|
| 559 | + enum omap_channel channel, |
|---|
| 560 | + const struct videomode *vm); |
|---|
| 723 | 561 | void (*mgr_set_timings)(struct dispc_device *dispc, |
|---|
| 724 | 562 | enum omap_channel channel, |
|---|
| 725 | 563 | const struct videomode *vm); |
|---|
| 726 | 564 | void (*mgr_setup)(struct dispc_device *dispc, enum omap_channel channel, |
|---|
| 727 | 565 | const struct omap_overlay_manager_info *info); |
|---|
| 728 | | - enum omap_dss_output_id (*mgr_get_supported_outputs)( |
|---|
| 729 | | - struct dispc_device *dispc, enum omap_channel channel); |
|---|
| 730 | 566 | u32 (*mgr_gamma_size)(struct dispc_device *dispc, |
|---|
| 731 | 567 | enum omap_channel channel); |
|---|
| 732 | 568 | void (*mgr_set_gamma)(struct dispc_device *dispc, |
|---|
| .. | .. |
|---|
| 756 | 592 | |
|---|
| 757 | 593 | struct dispc_device *dispc_get_dispc(struct dss_device *dss); |
|---|
| 758 | 594 | const struct dispc_ops *dispc_get_ops(struct dss_device *dss); |
|---|
| 759 | | - |
|---|
| 760 | | -bool omapdss_component_is_display(struct device_node *node); |
|---|
| 761 | | -bool omapdss_component_is_output(struct device_node *node); |
|---|
| 762 | 595 | |
|---|
| 763 | 596 | bool omapdss_stack_is_ready(void); |
|---|
| 764 | 597 | void omapdss_gather_components(struct device *dev); |
|---|