dc-pe.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2024 NXP
  4. */
  5. #ifndef __DC_PIXEL_ENGINE_H__
  6. #define __DC_PIXEL_ENGINE_H__
  7. #include <linux/clk.h>
  8. #include <linux/device.h>
  9. #include <linux/regmap.h>
  10. #include "dc-de.h"
  11. #define SHDEN BIT(0)
  12. #define CLKEN_MASK_SHIFT 24
  13. #define CLKEN_MASK (0x3 << CLKEN_MASK_SHIFT)
  14. #define CLKEN(n) ((n) << CLKEN_MASK_SHIFT)
  15. #define DC_DISP_FU_CNT 2
  16. #define DC_LB_CNT 4
  17. enum dc_link_id {
  18. LINK_ID_NONE = 0x00,
  19. LINK_ID_CONSTFRAME0 = 0x0c,
  20. LINK_ID_CONSTFRAME4 = 0x0e,
  21. LINK_ID_CONSTFRAME1 = 0x10,
  22. LINK_ID_CONSTFRAME5 = 0x12,
  23. LINK_ID_FETCHWARP2 = 0x14,
  24. LINK_ID_FETCHLAYER0 = 0x1a,
  25. LINK_ID_LAYERBLEND0 = 0x21,
  26. LINK_ID_LAYERBLEND1 = 0x22,
  27. LINK_ID_LAYERBLEND2 = 0x23,
  28. LINK_ID_LAYERBLEND3 = 0x24,
  29. };
  30. enum dc_lb_mode {
  31. LB_NEUTRAL, /* Output is same as primary input. */
  32. LB_BLEND,
  33. };
  34. enum dc_pec_clken {
  35. CLKEN_DISABLE,
  36. CLKEN_AUTOMATIC,
  37. };
  38. struct dc_cf {
  39. struct regmap *reg_cfg;
  40. enum dc_link_id link;
  41. };
  42. struct dc_ed {
  43. struct device *dev;
  44. struct regmap *reg_pec;
  45. struct regmap *reg_cfg;
  46. int irq_shdload;
  47. };
  48. struct dc_lb {
  49. struct device *dev;
  50. struct regmap *reg_pec;
  51. struct regmap *reg_cfg;
  52. int id;
  53. enum dc_link_id link;
  54. };
  55. struct dc_pe {
  56. struct device *dev;
  57. struct clk *clk_axi;
  58. struct dc_cf *cf_safe[DC_DISPLAYS];
  59. struct dc_cf *cf_cont[DC_DISPLAYS];
  60. struct dc_ed *ed_safe[DC_DISPLAYS];
  61. struct dc_ed *ed_cont[DC_DISPLAYS];
  62. struct dc_fu *fu_disp[DC_DISP_FU_CNT];
  63. struct dc_lb *lb[DC_LB_CNT];
  64. };
  65. /* Constant Frame Unit */
  66. enum dc_link_id dc_cf_get_link_id(struct dc_cf *cf);
  67. void dc_cf_framedimensions(struct dc_cf *cf, unsigned int w, unsigned int h);
  68. void dc_cf_constantcolor_black(struct dc_cf *cf);
  69. void dc_cf_constantcolor_blue(struct dc_cf *cf);
  70. void dc_cf_init(struct dc_cf *cf);
  71. /* External Destination Unit */
  72. void dc_ed_pec_src_sel(struct dc_ed *ed, enum dc_link_id src);
  73. void dc_ed_pec_sync_trigger(struct dc_ed *ed);
  74. void dc_ed_init(struct dc_ed *ed);
  75. /* Layer Blend Unit */
  76. enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb);
  77. void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim);
  78. void dc_lb_pec_dynamic_sec_sel(struct dc_lb *lb, enum dc_link_id sec);
  79. void dc_lb_pec_clken(struct dc_lb *lb, enum dc_pec_clken clken);
  80. void dc_lb_mode(struct dc_lb *lb, enum dc_lb_mode mode);
  81. void dc_lb_position(struct dc_lb *lb, int x, int y);
  82. int dc_lb_get_id(struct dc_lb *lb);
  83. void dc_lb_init(struct dc_lb *lb);
  84. #endif /* __DC_PIXEL_ENGINE_H__ */