zynqmp_dpsub.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * ZynqMP DPSUB Subsystem Driver
  4. *
  5. * Copyright (C) 2017 - 2020 Xilinx, Inc.
  6. *
  7. * Authors:
  8. * - Hyun Woo Kwon <hyun.kwon@xilinx.com>
  9. * - Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  10. */
  11. #ifndef _ZYNQMP_DPSUB_H_
  12. #define _ZYNQMP_DPSUB_H_
  13. #include <linux/types.h>
  14. struct clk;
  15. struct device;
  16. struct drm_bridge;
  17. struct zynqmp_disp;
  18. struct zynqmp_disp_layer;
  19. struct zynqmp_dp;
  20. struct zynqmp_dpsub_drm;
  21. #define ZYNQMP_DPSUB_NUM_LAYERS 2
  22. enum zynqmp_dpsub_port {
  23. ZYNQMP_DPSUB_PORT_LIVE_VIDEO,
  24. ZYNQMP_DPSUB_PORT_LIVE_GFX,
  25. ZYNQMP_DPSUB_PORT_LIVE_AUDIO,
  26. ZYNQMP_DPSUB_PORT_OUT_VIDEO,
  27. ZYNQMP_DPSUB_PORT_OUT_AUDIO,
  28. ZYNQMP_DPSUB_PORT_OUT_DP,
  29. ZYNQMP_DPSUB_NUM_PORTS,
  30. };
  31. enum zynqmp_dpsub_format {
  32. ZYNQMP_DPSUB_FORMAT_RGB,
  33. ZYNQMP_DPSUB_FORMAT_YCRCB444,
  34. ZYNQMP_DPSUB_FORMAT_YCRCB422,
  35. ZYNQMP_DPSUB_FORMAT_YONLY,
  36. };
  37. struct zynqmp_dpsub_audio;
  38. /**
  39. * struct zynqmp_dpsub - ZynqMP DisplayPort Subsystem
  40. * @dev: The physical device
  41. * @apb_clk: The APB clock
  42. * @vid_clk: Video clock
  43. * @vid_clk_from_ps: True of the video clock comes from PS, false from PL
  44. * @aud_clk: Audio clock
  45. * @aud_clk_from_ps: True of the audio clock comes from PS, false from PL
  46. * @connected_ports: Bitmask of connected ports in the device tree
  47. * @dma_enabled: True if the DMA interface is enabled, false if the DPSUB is
  48. * driven by the live input
  49. * @drm: The DRM/KMS device data
  50. * @bridge: The DP encoder bridge
  51. * @disp: The display controller
  52. * @layers: Video and graphics layers
  53. * @dp: The DisplayPort controller
  54. * @dma_align: DMA alignment constraint (must be a power of 2)
  55. * @audio: DP audio data
  56. */
  57. struct zynqmp_dpsub {
  58. struct device *dev;
  59. struct clk *apb_clk;
  60. struct clk *vid_clk;
  61. bool vid_clk_from_ps;
  62. struct clk *aud_clk;
  63. bool aud_clk_from_ps;
  64. unsigned int connected_ports;
  65. bool dma_enabled;
  66. struct zynqmp_dpsub_drm *drm;
  67. struct drm_bridge *bridge;
  68. struct zynqmp_disp *disp;
  69. struct zynqmp_disp_layer *layers[ZYNQMP_DPSUB_NUM_LAYERS];
  70. struct zynqmp_dp *dp;
  71. unsigned int dma_align;
  72. struct zynqmp_dpsub_audio *audio;
  73. };
  74. #ifdef CONFIG_DRM_ZYNQMP_DPSUB_AUDIO
  75. int zynqmp_audio_init(struct zynqmp_dpsub *dpsub);
  76. void zynqmp_audio_uninit(struct zynqmp_dpsub *dpsub);
  77. #else
  78. static inline int zynqmp_audio_init(struct zynqmp_dpsub *dpsub) { return 0; }
  79. static inline void zynqmp_audio_uninit(struct zynqmp_dpsub *dpsub) { }
  80. #endif
  81. void zynqmp_dpsub_release(struct zynqmp_dpsub *dpsub);
  82. #endif /* _ZYNQMP_DPSUB_H_ */