ddp_drv.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. #ifndef __DDP_DRV_H__
  2. #define __DDP_DRV_H__
  3. #include <linux/ioctl.h>
  4. #include "ddp_hal.h"
  5. #include "ddp_aal.h"
  6. #include "ddp_gamma.h"
  7. #include "disp_event.h"
  8. #include "DpDataType.h"
  9. #ifndef CONFIG_MTK_CLKMGR
  10. #include <linux/clk.h>
  11. #endif
  12. typedef struct {
  13. unsigned int reg;
  14. unsigned int val;
  15. unsigned int mask;
  16. } DISP_WRITE_REG;
  17. typedef struct {
  18. unsigned int reg;
  19. unsigned int val;
  20. unsigned int mask;
  21. } DISP_READ_REG;
  22. #if 0
  23. typedef struct {
  24. DISP_MODULE_ENUM module;
  25. unsigned int timeout_ms; /* timeout, unit is ms */
  26. } disp_wait_irq_struct;
  27. #endif
  28. typedef struct DISP_EXEC_COMMAND {
  29. int taskID;
  30. uint32_t scenario;
  31. uint32_t priority;
  32. uint32_t engineFlag;
  33. uint32_t *pFrameBaseSW;
  34. uint32_t *pTileBaseSW;
  35. uint32_t blockSize;
  36. } DISP_EXEC_COMMAND;
  37. typedef struct {
  38. int layer;
  39. unsigned long addr;
  40. DpColorFormat fmt;
  41. int x;
  42. int y;
  43. int w;
  44. int h; /* clip region */
  45. int pitch;
  46. } DISP_OVL_INFO;
  47. /* PQ */
  48. #define COLOR_TUNING_INDEX 19
  49. #define THSHP_TUNING_INDEX 12
  50. #define THSHP_PARAM_MAX 83
  51. #define PARTIAL_Y_INDEX 10
  52. #define GLOBAL_SAT_SIZE 10
  53. #define CONTRAST_SIZE 10
  54. #define BRIGHTNESS_SIZE 10
  55. #define PARTIAL_Y_SIZE 28
  56. #define PQ_HUE_ADJ_PHASE_CNT 4
  57. #define PQ_SAT_ADJ_PHASE_CNT 4
  58. #define PQ_PARTIALS_CONTROL 5
  59. #define PURP_TONE_SIZE 3
  60. #define SKIN_TONE_SIZE 8 /* (-6) */
  61. #define GRASS_TONE_SIZE 6 /* (-2) */
  62. #define SKY_TONE_SIZE 3
  63. #define CCORR_COEF_CNT 4 /* ccorr feature */
  64. typedef struct {
  65. unsigned int u4SHPGain; /* 0 : min , 9 : max. */
  66. unsigned int u4SatGain; /* 0 : min , 9 : max. */
  67. unsigned int u4PartialY; /* 0 : min , 9 : max. */
  68. unsigned int u4HueAdj[PQ_HUE_ADJ_PHASE_CNT];
  69. unsigned int u4SatAdj[PQ_SAT_ADJ_PHASE_CNT];
  70. unsigned int u4Contrast; /* 0 : min , 9 : max. */
  71. unsigned int u4Brightness; /* 0 : min , 9 : max. */
  72. unsigned int u4Ccorr; /* 0 : min , 3 : max. ccorr feature */
  73. } DISP_PQ_PARAM;
  74. typedef struct {
  75. int split_en;
  76. int start_x;
  77. int start_y;
  78. int end_x;
  79. int end_y;
  80. } DISP_PQ_WIN_PARAM;
  81. typedef struct {
  82. int image;
  83. int video;
  84. int camera;
  85. } DISP_PQ_MAPPING_PARAM;
  86. typedef struct {
  87. unsigned int en;
  88. unsigned int pos_x;
  89. unsigned int pos_y;
  90. } MDP_COLOR_CAP;
  91. typedef struct {
  92. unsigned int TDS_GAIN_MID;
  93. unsigned int TDS_GAIN_HIGH;
  94. unsigned int TDS_COR_GAIN;
  95. unsigned int TDS_COR_THR;
  96. unsigned int TDS_COR_ZERO;
  97. unsigned int TDS_GAIN;
  98. unsigned int TDS_COR_VALUE;
  99. } MDP_TDSHP_REG;
  100. typedef struct {
  101. unsigned short GLOBAL_SAT[GLOBAL_SAT_SIZE];
  102. unsigned short CONTRAST[CONTRAST_SIZE];
  103. unsigned short BRIGHTNESS[BRIGHTNESS_SIZE];
  104. unsigned char PARTIAL_Y[PARTIAL_Y_INDEX][PARTIAL_Y_SIZE];
  105. unsigned char PURP_TONE_S[COLOR_TUNING_INDEX][PQ_PARTIALS_CONTROL][PURP_TONE_SIZE];
  106. unsigned char SKIN_TONE_S[COLOR_TUNING_INDEX][PQ_PARTIALS_CONTROL][SKIN_TONE_SIZE];
  107. unsigned char GRASS_TONE_S[COLOR_TUNING_INDEX][PQ_PARTIALS_CONTROL][GRASS_TONE_SIZE];
  108. unsigned char SKY_TONE_S[COLOR_TUNING_INDEX][PQ_PARTIALS_CONTROL][SKY_TONE_SIZE];
  109. unsigned char PURP_TONE_H[COLOR_TUNING_INDEX][PURP_TONE_SIZE];
  110. unsigned char SKIN_TONE_H[COLOR_TUNING_INDEX][SKIN_TONE_SIZE];
  111. unsigned char GRASS_TONE_H[COLOR_TUNING_INDEX][GRASS_TONE_SIZE];
  112. unsigned char SKY_TONE_H[COLOR_TUNING_INDEX][SKY_TONE_SIZE];
  113. unsigned int CCORR_COEF[CCORR_COEF_CNT][3][3];
  114. } DISPLAY_PQ_T;
  115. typedef struct {
  116. unsigned int entry[THSHP_TUNING_INDEX][THSHP_PARAM_MAX];
  117. } DISPLAY_TDSHP_T;
  118. typedef enum {
  119. DS_en = 0,
  120. iUpSlope,
  121. iUpThreshold,
  122. iDownSlope,
  123. iDownThreshold,
  124. iISO_en,
  125. iISO_thr1,
  126. iISO_thr0,
  127. iISO_thr3,
  128. iISO_thr2,
  129. iISO_IIR_alpha,
  130. iCorZero_clip2,
  131. iCorZero_clip1,
  132. iCorZero_clip0,
  133. iCorThr_clip2,
  134. iCorThr_clip1,
  135. iCorThr_clip0,
  136. iCorGain_clip2,
  137. iCorGain_clip1,
  138. iCorGain_clip0,
  139. iGain_clip2,
  140. iGain_clip1,
  141. iGain_clip0,
  142. PQ_DS_INDEX_MAX
  143. } PQ_DS_index_t;
  144. typedef struct {
  145. int param[PQ_DS_INDEX_MAX];
  146. } DISP_PQ_DS_PARAM;
  147. typedef enum {
  148. BlackEffectEnable = 0,
  149. WhiteEffectEnable,
  150. StrongBlackEffect,
  151. StrongWhiteEffect,
  152. AdaptiveBlackEffect,
  153. AdaptiveWhiteEffect,
  154. ScenceChangeOnceEn,
  155. ScenceChangeControlEn,
  156. ScenceChangeControl,
  157. ScenceChangeTh1,
  158. ScenceChangeTh2,
  159. ScenceChangeTh3,
  160. ContentSmooth1,
  161. ContentSmooth2,
  162. ContentSmooth3,
  163. MiddleRegionGain1,
  164. MiddleRegionGain2,
  165. BlackRegionGain1,
  166. BlackRegionGain2,
  167. BlackRegionRange,
  168. BlackEffectLevel,
  169. BlackEffectParam1,
  170. BlackEffectParam2,
  171. BlackEffectParam3,
  172. BlackEffectParam4,
  173. WhiteRegionGain1,
  174. WhiteRegionGain2,
  175. WhiteRegionRange,
  176. WhiteEffectLevel,
  177. WhiteEffectParam1,
  178. WhiteEffectParam2,
  179. WhiteEffectParam3,
  180. WhiteEffectParam4,
  181. ContrastAdjust1,
  182. ContrastAdjust2,
  183. DCChangeSpeedLevel,
  184. ProtectRegionEffect,
  185. DCChangeSpeedLevel2,
  186. ProtectRegionWeight,
  187. DCEnable
  188. } PQ_DC_index_t;
  189. typedef struct {
  190. int param[40];
  191. } DISP_PQ_DC_PARAM;
  192. /* OD */
  193. typedef struct {
  194. unsigned int size;
  195. unsigned int type;
  196. unsigned int ret;
  197. unsigned int param0;
  198. unsigned int param1;
  199. unsigned int param2;
  200. unsigned int param3;
  201. } DISP_OD_CMD;
  202. typedef enum {
  203. DISP_INTERLACE_FORMAT_NONE,
  204. DISP_INTERLACE_FORMAT_TOP_FIELD,
  205. DISP_INTERLACE_FORMAT_BOTTOM_FIELD
  206. } DISP_INTERLACE_FORMAT;
  207. struct device *disp_get_device(void);
  208. #define DISP_IOCTL_MAGIC 'x'
  209. #define DISP_IOCTL_WRITE_REG _IOW(DISP_IOCTL_MAGIC, 1, DISP_WRITE_REG) /* also defined in atci_pq_cmd.h */
  210. #define DISP_IOCTL_READ_REG _IOWR(DISP_IOCTL_MAGIC, 2, DISP_READ_REG) /* also defined in atci_pq_cmd.h */
  211. /* #define DISP_IOCTL_WAIT_IRQ _IOR (DISP_IOCTL_MAGIC, 3, disp_wait_irq_struct) */
  212. #define DISP_IOCTL_DUMP_REG _IOR(DISP_IOCTL_MAGIC, 4, int)
  213. #define DISP_IOCTL_LOCK_THREAD _IOR(DISP_IOCTL_MAGIC, 5, int)
  214. #define DISP_IOCTL_UNLOCK_THREAD _IOR(DISP_IOCTL_MAGIC, 6, int)
  215. #define DISP_IOCTL_MARK_CMQ _IOR(DISP_IOCTL_MAGIC, 7, int)
  216. #define DISP_IOCTL_WAIT_CMQ _IOR(DISP_IOCTL_MAGIC, 8, int)
  217. #define DISP_IOCTL_SYNC_REG _IOR(DISP_IOCTL_MAGIC, 9, int)
  218. #define DISP_IOCTL_LOCK_MUTEX _IOW(DISP_IOCTL_MAGIC, 20, int)
  219. #define DISP_IOCTL_UNLOCK_MUTEX _IOR(DISP_IOCTL_MAGIC, 21, int)
  220. #define DISP_IOCTL_LOCK_RESOURCE _IOW(DISP_IOCTL_MAGIC, 25, int)
  221. #define DISP_IOCTL_UNLOCK_RESOURCE _IOR(DISP_IOCTL_MAGIC, 26, int)
  222. #define DISP_IOCTL_SET_INTR _IOR(DISP_IOCTL_MAGIC, 10, int)
  223. #define DISP_IOCTL_TEST_PATH _IOR(DISP_IOCTL_MAGIC, 11, int)
  224. #define DISP_IOCTL_CLOCK_ON _IOR(DISP_IOCTL_MAGIC, 12, int)
  225. #define DISP_IOCTL_CLOCK_OFF _IOR(DISP_IOCTL_MAGIC, 13, int)
  226. #define DISP_IOCTL_RUN_DPF _IOW(DISP_IOCTL_MAGIC, 30, int)
  227. #define DISP_IOCTL_CHECK_OVL _IOR(DISP_IOCTL_MAGIC, 31, int)
  228. #define DISP_IOCTL_GET_OVL _IOWR(DISP_IOCTL_MAGIC, 32, DISP_OVL_INFO)
  229. #define DISP_IOCTL_EXEC_COMMAND _IOW(DISP_IOCTL_MAGIC, 33, DISP_EXEC_COMMAND)
  230. #define DISP_IOCTL_RESOURCE_REQUIRE _IOR(DISP_IOCTL_MAGIC, 34, int)
  231. /* Add for AAL control - S */
  232. /* 0 : disable AAL event, 1 : enable AAL event */
  233. #define DISP_IOCTL_AAL_EVENTCTL _IOW(DISP_IOCTL_MAGIC, 15 , int)
  234. /* Get AAL statistics data. */
  235. #define DISP_IOCTL_AAL_GET_HIST _IOR(DISP_IOCTL_MAGIC, 16 , DISP_AAL_HIST)
  236. /* Update AAL setting */
  237. #define DISP_IOCTL_AAL_SET_PARAM _IOW(DISP_IOCTL_MAGIC, 17 , DISP_AAL_PARAM)
  238. #define DISP_IOCTL_AAL_INIT_REG _IOW(DISP_IOCTL_MAGIC, 18 , DISP_AAL_INITREG)
  239. #define DISP_IOCTL_SET_GAMMALUT _IOW(DISP_IOCTL_MAGIC, 23 , DISP_GAMMA_LUT_T)
  240. #define DISP_IOCTL_SET_CCORR _IOW(DISP_IOCTL_MAGIC, 24 , DISP_CCORR_COEF_T)
  241. /* Add for AAL control - E */
  242. /*-----------------------------------------------------------------------------
  243. DDP Kernel Mode API (for Kernel Trap)
  244. -----------------------------------------------------------------------------*/
  245. /* DDPK Bitblit */
  246. /* #define DISP_IOCTL_G_WAIT_REQUEST _IOR (DISP_IOCTL_MAGIC , 40 , DDPIOCTL_DdpkBitbltConfig) */
  247. /* #define DISP_IOCTL_T_INFORM_DONE _IOW (DISP_IOCTL_MAGIC , 41 , DDPIOCTL_DdpkBitbltInformDone) */
  248. #define DISP_IOCTL_SET_CLKON _IOW(DISP_IOCTL_MAGIC, 50 , DISP_MODULE_ENUM)
  249. #define DISP_IOCTL_SET_CLKOFF _IOW(DISP_IOCTL_MAGIC, 51 , DISP_MODULE_ENUM)
  250. #define DISP_IOCTL_MUTEX_CONTROL _IOW(DISP_IOCTL_MAGIC, 55 , int) /* also defined in atci_pq_cmd.h */
  251. #define DISP_IOCTL_GET_LCMINDEX _IOR(DISP_IOCTL_MAGIC, 56 , int)
  252. /* PQ setting */
  253. #define DISP_IOCTL_SET_PQPARAM _IOW(DISP_IOCTL_MAGIC, 60 , DISP_PQ_PARAM)
  254. #define DISP_IOCTL_GET_PQPARAM _IOR(DISP_IOCTL_MAGIC, 61 , DISP_PQ_PARAM)
  255. #define DISP_IOCTL_GET_PQINDEX _IOR(DISP_IOCTL_MAGIC, 63, DISPLAY_PQ_T)
  256. #define DISP_IOCTL_SET_PQINDEX _IOW(DISP_IOCTL_MAGIC, 64 , DISPLAY_PQ_T)
  257. #define DISP_IOCTL_SET_TDSHPINDEX _IOW(DISP_IOCTL_MAGIC, 65 , DISPLAY_TDSHP_T)
  258. #define DISP_IOCTL_GET_TDSHPINDEX _IOR(DISP_IOCTL_MAGIC, 66 , DISPLAY_TDSHP_T)
  259. #define DISP_IOCTL_SET_PQ_CAM_PARAM _IOW(DISP_IOCTL_MAGIC, 67 , DISP_PQ_PARAM)
  260. #define DISP_IOCTL_GET_PQ_CAM_PARAM _IOR(DISP_IOCTL_MAGIC, 68 , DISP_PQ_PARAM)
  261. #define DISP_IOCTL_SET_PQ_GAL_PARAM _IOW(DISP_IOCTL_MAGIC, 69 , DISP_PQ_PARAM)
  262. #define DISP_IOCTL_GET_PQ_GAL_PARAM _IOR(DISP_IOCTL_MAGIC, 70 , DISP_PQ_PARAM)
  263. #define DISP_IOCTL_PQ_SET_BYPASS_COLOR _IOW(DISP_IOCTL_MAGIC, 71 , int)
  264. #define DISP_IOCTL_PQ_SET_WINDOW _IOW(DISP_IOCTL_MAGIC, 72 , DISP_PQ_WIN_PARAM)
  265. #define DISP_IOCTL_PQ_GET_TDSHP_FLAG _IOR(DISP_IOCTL_MAGIC, 73 , int)
  266. #define DISP_IOCTL_PQ_SET_TDSHP_FLAG _IOW(DISP_IOCTL_MAGIC, 74 , int)
  267. #define DISP_IOCTL_PQ_GET_DC_PARAM _IOR(DISP_IOCTL_MAGIC, 75, DISP_PQ_DC_PARAM)
  268. #define DISP_IOCTL_PQ_SET_DC_PARAM _IOW(DISP_IOCTL_MAGIC, 76, DISP_PQ_DC_PARAM)
  269. #define DISP_IOCTL_WRITE_SW_REG _IOW(DISP_IOCTL_MAGIC, 77, DISP_WRITE_REG) /* also defined in atci_pq_cmd.h */
  270. #define DISP_IOCTL_READ_SW_REG _IOWR(DISP_IOCTL_MAGIC, 78, DISP_READ_REG) /* also defined in atci_pq_cmd.h */
  271. /* OD */
  272. #define DISP_IOCTL_OD_CTL _IOWR(DISP_IOCTL_MAGIC, 80 , DISP_OD_CMD)
  273. /* OVL */
  274. #define DISP_IOCTL_OVL_ENABLE_CASCADE _IOW(DISP_IOCTL_MAGIC, 90 , int)
  275. #define DISP_IOCTL_OVL_DISABLE_CASCADE _IOW(DISP_IOCTL_MAGIC, 91 , int)
  276. /*PQ setting*/
  277. #define DISP_IOCTL_PQ_GET_DS_PARAM _IOR(DISP_IOCTL_MAGIC, 100, DISP_PQ_DS_PARAM)
  278. #define DISP_IOCTL_PQ_GET_MDP_COLOR_CAP _IOR(DISP_IOCTL_MAGIC, 101, MDP_COLOR_CAP)
  279. #define DISP_IOCTL_PQ_GET_MDP_TDSHP_REG _IOR(DISP_IOCTL_MAGIC, 102, MDP_TDSHP_REG)
  280. /* secure video path implementation: the handle value */
  281. #define DISP_IOCTL_SET_TPLAY_HANDLE _IOW(DISP_IOCTL_MAGIC, 200, unsigned int)
  282. #ifndef CONFIG_MTK_CLKMGR
  283. typedef enum disp_clk_id {
  284. DISP0_SMI_COMMON = 0,
  285. DISP0_SMI_LARB0,
  286. DISP0_DISP_OVL0,
  287. DISP0_DISP_RDMA0,
  288. DISP0_DISP_RDMA1,
  289. DISP0_DISP_WDMA0,
  290. DISP0_DISP_COLOR,
  291. DISP0_DISP_CCORR,
  292. DISP0_DISP_AAL,
  293. DISP0_DISP_GAMMA,
  294. DISP0_DISP_DITHER,
  295. DISP1_DSI_ENGINE,
  296. DISP1_DSI_DIGITAL,
  297. DISP1_DPI_ENGINE,
  298. DISP1_DPI_PIXEL,
  299. DISP_PWM,
  300. MUX_DPI0,
  301. TVDPLL,
  302. TVDPLL_CK,
  303. TVDPLL_D2,
  304. TVDPLL_D4,
  305. DPI_CK,
  306. MUX_PWM,
  307. UNIVPLL2_D4,
  308. SYSPLL4_D2_D8,
  309. SYS_26M_CK,
  310. DISP_MTCMOS_CLK,
  311. MAX_DISP_CLK_CNT
  312. } eDDP_CLK_ID;
  313. int ddp_clk_prepare(eDDP_CLK_ID id);
  314. int ddp_clk_unprepare(eDDP_CLK_ID id);
  315. int ddp_clk_enable(eDDP_CLK_ID id);
  316. int ddp_clk_disable(eDDP_CLK_ID id);
  317. int ddp_clk_prepare_enable(eDDP_CLK_ID id);
  318. int ddp_clk_disable_unprepare(eDDP_CLK_ID id);
  319. int ddp_clk_set_parent(eDDP_CLK_ID id, eDDP_CLK_ID parent);
  320. int ddp_clk_set_rate(eDDP_CLK_ID id, unsigned long rate);
  321. #endif
  322. extern unsigned int dispsys_irq[DISP_REG_NUM];
  323. extern unsigned long dispsys_reg[DISP_REG_NUM];
  324. extern void disp_m4u_tf_disable(void);
  325. /* TODO: FIXME */
  326. #include <linux/types.h>
  327. #include "disp_drv_platform.h"
  328. #ifndef DISP_NO_DPI
  329. #include "ddp_dpi_reg.h"
  330. extern struct DPI_REGS *DPI_REG;
  331. extern unsigned long DPI_TVDPLL_CON0;
  332. extern unsigned long DPI_TVDPLL_CON1;
  333. #endif
  334. extern int m4u_enable_tf(int port, bool fgenable);
  335. #endif