vi_pre_ioctl.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*
  2. * Copyright (C) 2021 Alibaba Group Holding Limited
  3. * Author: Shenwuyi <shenwuyi.swy@alibaba-inc.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. */
  9. #ifndef _VI_PRE_IOC_H_
  10. #define _VI_PRE_IOC_H_
  11. #include <linux/ioctl.h>
  12. struct vi_pre_reg_t {
  13. unsigned int offset;
  14. unsigned int value;
  15. };
  16. #define VIPER_IOCTL_MAGIC 'r'
  17. #define VI_PRE_IOCTL_RESET _IOWR(VIPER_IOCTL_MAGIC, 1, int)
  18. #define VI_PRE_IOCTL_WRITE_REG _IOWR(VIPER_IOCTL_MAGIC, 2, int)
  19. #define VI_PRE_IOCTL_READ_REG _IOWR(VIPER_IOCTL_MAGIC, 3, int)
  20. #define VI_PRE_IOCTL_SET_IPI_RESOLUTION _IOWR(VIPER_IOCTL_MAGIC, 4, int)
  21. #define VI_PRE_IOCTL_SET_PIPLINE _IOWR(VIPER_IOCTL_MAGIC, 5, int)
  22. #define VI_PRE_IOCTL_SET_IPI_MODE _IOWR(VIPER_IOCTL_MAGIC, 6, int)
  23. #define VI_PRE_IOCTL_SET_IPI_IDNUM _IOWR(VIPER_IOCTL_MAGIC, 7, int)
  24. #define VI_PRE_IOCTL_ENABLE_IPI _IOWR(VIPER_IOCTL_MAGIC, 8, int)
  25. #define VI_PRE_IOCTL_DISABLE_IPI _IOWR(VIPER_IOCTL_MAGIC, 9, int)
  26. #define VI_PRE_IOCTL_SET_MIPI2DMA_M_FRMAE _IOWR(VIPER_IOCTL_MAGIC, 10, int)
  27. #define VI_PRE_IOCTL_SET_MIPI2DMA_N_LINE _IOWR(VIPER_IOCTL_MAGIC, 11, int)
  28. #define VI_PRE_IOCTL_SET_MIPI2DMA_START _IOWR(VIPER_IOCTL_MAGIC, 12, int)
  29. #define VI_PRE_IOCTL_SET_MIPI2DMA_STOP _IOWR(VIPER_IOCTL_MAGIC, 13, int)
  30. #define VI_PRE_IOCTL_SET_HDRPRO_MODE _IOWR(VIPER_IOCTL_MAGIC, 14, int)
  31. #define VI_PRE_IOCTL_SET_HDRPRO_RESOLUTION _IOWR(VIPER_IOCTL_MAGIC, 15, int)
  32. #define VI_PRE_IOCTL_SET_HDRPRO_BLACK_PARA _IOWR(VIPER_IOCTL_MAGIC, 16, int)
  33. #define VI_PRE_IOCTL_SET_HDRPRO_COLOR_PARA _IOWR(VIPER_IOCTL_MAGIC, 17, int)
  34. #define VI_PRE_IOCTL_SET_HDRPRO_MERGE_PARA _IOWR(VIPER_IOCTL_MAGIC, 18, int)
  35. #define VI_PRE_IOCTL_PRESS_INTERROR _IOWR(VIPER_IOCTL_MAGIC, 19, int)
  36. #define VI_PRE_IOCTL_HDRPRO_ENABLE _IOWR(VIPER_IOCTL_MAGIC, 20, int)
  37. #define VI_PRE_IOCTL_HDRPRO_DISABLE _IOWR(VIPER_IOCTL_MAGIC, 21, int)
  38. #define VI_PRE_IOCTL_SET_MFRAME_BUF _IOWR(VIPER_IOCTL_MAGIC, 22, int)
  39. #define VI_PRE_IOCTL_GET_MFRAME_DONE_ID _IOWR(VIPER_IOCTL_MAGIC, 23, int)
  40. #define VI_PRE_IOCTL_MFRAME_UPDATE_BUF _IOWR(VIPER_IOCTL_MAGIC, 24, int)
  41. #define VI_PRE_IOCTL_REQUEST_IRQ _IOWR(VIPER_IOCTL_MAGIC, 25, int)
  42. #define VI_PRE_IOCTL_FREE_IRQ _IOWR(VIPER_IOCTL_MAGIC, 26, int)
  43. #define VI_PRE_IOCTL_MAX _IOWR(VIPER_IOCTL_MAGIC, 27, int)
  44. typedef enum {
  45. IPI_MODE_NOMAL = 0,
  46. IPI_MODE_HDR_2_FRAME,
  47. IPI_MODE_HDR_3_FRAME,
  48. IPI_MODE_SONY_DOL_HDR_2_FRAME,
  49. IPI_MODE_SONY_DOL_HDR_3_FRAME,
  50. } ipi_mode_t;
  51. typedef struct {
  52. int glue_idx;
  53. ipi_mode_t mode;
  54. } ipi_mode_cfg_t;
  55. typedef struct {
  56. int glue_idx;
  57. int id_third_sync;
  58. int id_second_sync;
  59. int id_first_sync;
  60. int id_3;
  61. int id_2;
  62. int id_1;
  63. }ipi_idnum_cfg_t;
  64. enum hdrpro_raw_mode {
  65. //RAWMOD_HDRPRO
  66. HDRPRO_RAW6 = 0 << 21,
  67. HDRPRO_RAW7 = 1 << 21,
  68. HDRPRO_RAW8 = 2 << 21,
  69. HDRPRO_RAW10 = 3 << 21,
  70. HDRPRO_RAW12 = 4 << 21,
  71. };
  72. enum hdrpro_bayer_modesl {
  73. //BAYER_MODSEL
  74. HDRPRO_BAYER_MODSEL_BAYER_A = 0 << 19,
  75. HDRPRO_BAYER_MODSEL_BAYER_B = 1 << 19,
  76. HDRPRO_BAYER_MODSEL_BAYER_C = 2 << 19,
  77. HDRPRO_BAYER_MODSEL_BAYER_D = 3 << 19,
  78. };
  79. enum hdrpro_color_modesl {
  80. //COLOR_MODSEL
  81. HDRPRO_COLOR_MODSEL_BLACK_NODOWN_2X2 = 0 << 16,
  82. HDRPRO_COLOR_MODSEL_BLACK_DOWN_2X2 = 1 << 16,
  83. HDRPRO_COLOR_MODSEL_RGB_NODOWN_2X2 = 2 << 16,
  84. HDRPRO_COLOR_MODSEL_RGB_DOWN_2X2 = 3 << 16,
  85. HDRPRO_COLOR_MODSEL_RGB_NODOWN_3X3 = 4 << 16,
  86. HDRPRO_COLOR_MODSEL_RGB_DOWN_3X3 = 5 << 16,
  87. };
  88. enum hdrpro_enable {
  89. //HDRPRO_EN
  90. HDRPRO_BYPASS = 0 << 0,
  91. HDRPRO_EN = 1 << 0
  92. };
  93. // need to use bit length to define para after the final register map released
  94. struct hdrpro_para {
  95. unsigned int para[16];
  96. };
  97. // need to use bit length to define para after the final register map released
  98. struct hdrpro_black_weight_para {
  99. unsigned int wr;
  100. unsigned int wb;
  101. unsigned int wg0;
  102. unsigned int wg1;
  103. };
  104. // need to use bit length to define para after the final register map released
  105. struct hdrpro_color_weight_para {
  106. unsigned int pattern_00;
  107. unsigned int pattern_01;
  108. unsigned int pattern_02;
  109. unsigned int pattern_10;
  110. unsigned int pattern_11;
  111. unsigned int pattern_12;
  112. unsigned int pattern_20;
  113. unsigned int pattern_21;
  114. unsigned int pattern_22;
  115. };
  116. // need to use bit length to define para after the final register map released
  117. struct hdrpro_black_para {
  118. struct hdrpro_black_weight_para weight_para;
  119. };
  120. struct hdrpro_merge_para {
  121. struct hdrpro_para a;
  122. struct hdrpro_para b;
  123. struct hdrpro_para w;
  124. };
  125. // need to use bit length to define para after the final register map released
  126. struct hdrpro_color_para {
  127. struct hdrpro_color_weight_para wr;
  128. struct hdrpro_color_weight_para wb;
  129. struct hdrpro_color_weight_para wg0;
  130. struct hdrpro_color_weight_para wg1;
  131. };
  132. // need to use bit length to define para after the final register map released
  133. struct hdrpro_mode {
  134. enum hdrpro_raw_mode raw_mode;
  135. enum hdrpro_bayer_modesl bayer_modesel;
  136. enum hdrpro_color_modesl color_modesel;
  137. unsigned int last_delay;
  138. unsigned int id;
  139. };
  140. struct hdrpro_resolution {
  141. unsigned int width;
  142. unsigned int height;
  143. };
  144. typedef enum {
  145. VI_PRE_RAW_6BIT,
  146. VI_PRE_RAW_7BIT,
  147. VI_PRE_RAW_8BIT,
  148. VI_PRE_RAW_10BIT_16ALIGN,
  149. VI_PRE_RAW_12BIT,
  150. VI_PRE_RAW_10BIT,
  151. } vi_pre_data_width_t;
  152. typedef enum {
  153. VI_PRE_M_FRAME,
  154. VI_PRE_N_LANE,
  155. } vi_pre_dma_mode_t;
  156. typedef struct {
  157. int vc_num; //1~3
  158. vi_pre_data_width_t width;
  159. vi_pre_dma_mode_t mode;
  160. unsigned int resolution_h;
  161. unsigned int resolution_v;
  162. unsigned int line_size; //Data size of one line, unit byte; Must be 256-byte aligned
  163. unsigned int num; //n line num, or m frame num(m frme max is 4)
  164. unsigned int n_line_int;//only used for nline mode.(Generate an interrupt every time when n lines are completed). n_line_int <= num
  165. unsigned int buf_size;
  166. unsigned char *buf;
  167. } vi_pre_dma_cfg_t;
  168. typedef struct {
  169. int glue_idx;
  170. int h;
  171. int v;
  172. } vipre_resolution_cfg_t;
  173. typedef struct {
  174. int frame_id;
  175. int vc_num;
  176. void *buf_addr;
  177. int frame_size;
  178. } vi_pre_mframe_cfg_t;
  179. typedef struct {
  180. int frame_id;
  181. int vc_id;
  182. void *buf_addr;
  183. int frame_size;
  184. } vi_pre_mframe_update_t;
  185. typedef struct {
  186. int update_frame_id;
  187. int update_vc_id;
  188. } vi_pre_update_frame_info_t;
  189. extern unsigned int vi_pre_priv_ioctl(struct vi_pre_dev *dev, unsigned int cmd, void *args);
  190. #endif /* _VI_PRE_IOC_H_ */