sun8i_ui_scaler.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (C) 2017 Jernej Skrabec <jernej.skrabec@siol.net>
  3. *
  4. * This file is licensed under the terms of the GNU General Public
  5. * License version 2. This program is licensed "as is" without any
  6. * warranty of any kind, whether express or implied.
  7. */
  8. #ifndef _SUN8I_UI_SCALER_H_
  9. #define _SUN8I_UI_SCALER_H_
  10. #include "sun8i_mixer.h"
  11. /* this two macros assumes 16 fractional bits which is standard in DRM */
  12. #define SUN8I_UI_SCALER_SCALE_MIN 1
  13. #define SUN8I_UI_SCALER_SCALE_MAX ((1UL << 20) - 1)
  14. #define SUN8I_UI_SCALER_SCALE_FRAC 20
  15. #define SUN8I_UI_SCALER_PHASE_FRAC 20
  16. #define SUN8I_UI_SCALER_COEFF_COUNT 16
  17. #define SUN8I_UI_SCALER_SIZE(w, h) (((h) - 1) << 16 | ((w) - 1))
  18. #define SUN8I_SCALER_GSU_CTRL(vi_cnt, ui_idx) \
  19. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x0)
  20. #define SUN8I_SCALER_GSU_OUTSIZE(vi_cnt, ui_idx) \
  21. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x40)
  22. #define SUN8I_SCALER_GSU_INSIZE(vi_cnt, ui_idx) \
  23. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x80)
  24. #define SUN8I_SCALER_GSU_HSTEP(vi_cnt, ui_idx) \
  25. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x88)
  26. #define SUN8I_SCALER_GSU_VSTEP(vi_cnt, ui_idx) \
  27. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x8c)
  28. #define SUN8I_SCALER_GSU_HPHASE(vi_cnt, ui_idx) \
  29. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x90)
  30. #define SUN8I_SCALER_GSU_VPHASE(vi_cnt, ui_idx) \
  31. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x98)
  32. #define SUN8I_SCALER_GSU_HCOEFF(vi_cnt, ui_idx, index) \
  33. (0x20000 + 0x20000 * (vi_cnt) + 0x10000 * (ui_idx) + 0x200 + \
  34. 0x4 * (index))
  35. #define SUN8I_SCALER_GSU_CTRL_EN BIT(0)
  36. #define SUN8I_SCALER_GSU_CTRL_COEFF_RDY BIT(4)
  37. void sun8i_ui_scaler_enable(struct sun8i_mixer *mixer, int layer, bool enable);
  38. void sun8i_ui_scaler_setup(struct sun8i_mixer *mixer, int layer,
  39. u32 src_w, u32 src_h, u32 dst_w, u32 dst_h,
  40. u32 hscale, u32 vscale, u32 hphase, u32 vphase);
  41. #endif