ark1668_itu656.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. /*
  2. * Copyright(c) 2013 Hong Kong Applied Science and Technology
  3. * Research Institute Company Limited (ASTRI), all rights reserved
  4. * Proprietary and Confidential Information.
  5. *
  6. * This source file is the property of ASTRI, and may not be copied or
  7. * distributed in any isomorphic form without the prior written consent
  8. * of ASTRI.
  9. *
  10. * Name:
  11. * itu656_regs.h
  12. *
  13. * Description:
  14. * This file contains ark809 SOC ITU656 register definitions
  15. *
  16. * Author:
  17. * Chan Man Chi
  18. *
  19. * Remarks:
  20. *
  21. */
  22. #ifndef _ITU656_REGS_H_
  23. #define _ITU656_REGS_H_
  24. #include <linux/cdev.h>
  25. #include <linux/soc/arkmicro/ark1668_itu656_regs.h>
  26. #include <linux/soc/arkmicro/ark1668_sys_resgs.h>
  27. #include <linux/soc/arkmicro/ark1668_gpio.h>
  28. #include <linux/soc/arkmicro/ark1668_lcdc_regs.h>
  29. #define ITU656_FRAME_NUM 4//max 6
  30. #define ITU656_BUFFER_NUM 3
  31. #define ITU656_DEV_CLASS_CREATE 1
  32. enum ark_disp_tvenc_out_mode {
  33. ARKDISP_TVENC_OUT_YPBPR_I480HZ60 = 0,
  34. ARKDISP_TVENC_OUT_YPBPR_I576HZ50 = 1,
  35. ARKDISP_TVENC_OUT_YPBPR_P480HZ60 = 2,
  36. ARKDISP_TVENC_OUT_YPBPR_P576HZ50 = 3,
  37. ARKDISP_TVENC_OUT_YPBPR_P720HZ60 = 4,
  38. ARKDISP_TVENC_OUT_YPBPR_P720HZ50 = 5,
  39. ARKDISP_TVENC_OUT_YPBPR_I1080HZ60 = 6,
  40. ARKDISP_TVENC_OUT_YPBPR_I1080HZ50 = 7,
  41. ARKDISP_TVENC_OUT_YPBPR_I1080HZ50_1250 = 8,
  42. ARKDISP_TVENC_OUT_YPBPR_P1080HZ60 = 9,
  43. ARKDISP_TVENC_OUT_YPBPR_P1080HZ50 = 10,
  44. ARKDISP_TVENC_OUT_CVBS_PAL = 11,
  45. ARKDISP_TVENC_OUT_CVBS_NTSC = 12,
  46. ARKDISP_TVENC_OUT_ITU656_PAL = 13,
  47. ARKDISP_TVENC_OUT_ITU656_NTSC = 14,
  48. ARKDISP_TVENC_OUT_VGA_640x480HZ60 = 15,
  49. ARKDISP_TVENC_OUT_VGA_800x600HZ60 = 16,
  50. ARKDISP_TVENC_OUT_VGA_1024x768HZ60 = 17,
  51. ARKDISP_TVENC_OUT_VGA_1280x1024HZ60 = 18,
  52. ARKDISP_TVENC_OUT_VGA_1900x1200HZ60 = 19, // bandwidth limit
  53. ARKDISP_TVENC_OUT_VGA_1280x1024HZ75 = 20,
  54. ARKDISP_TVENC_OUT_VGA_1280x960HZ85 = 21, // bandwidth limit
  55. ARKDISP_TVENC_OUT_VGA_1280x720HZ60 = 22,
  56. };
  57. enum {
  58. TYPE_UNKNOWN = -1,
  59. TYPE_CVBS = 0,
  60. TYPE_720P,
  61. TYPE_1080P,
  62. };
  63. enum ark7116_channel {
  64. ARK7116_AV0,
  65. ARK7116_AV1,
  66. ARK7116_AV2,
  67. };
  68. enum itu656_channel {
  69. ITU656_CH0,
  70. ITU656_CH1,
  71. ITU656_CH2,
  72. };
  73. enum dvr_source {
  74. DVR_SOURCE_CAMERA,
  75. DVR_SOURCE_AUX,
  76. DVR_SOURCE_DVD,
  77. };
  78. enum dvr_ic_type {
  79. IC_TYPE_UNKNOWN,
  80. IC_TYPE_ARK7116,
  81. IC_TYPE_TP2825B,
  82. IC_TYPE_RN6752,
  83. IC_TYPE_UB934,
  84. IC_TYPE_END
  85. };
  86. struct itu656in_para{
  87. int xpos;
  88. int ypos;
  89. int width;
  90. int height;
  91. int source;
  92. int tvout;
  93. int hori_mirror;
  94. int vert_mirror;
  95. int left_blank;
  96. int right_blank;
  97. int top_blank;
  98. int bottom_blank;
  99. int progressive;
  100. int itu601en;
  101. };
  102. enum ui_scaler_type_id {
  103. UI_SCALER_NONE,//normal mode: no caler ,cannt set posx posy
  104. UI_POSITION_CVBS,//no scaler, can set posx posy throught arkdata.ini
  105. UI_SCALER_VGA, //scaler mode, can set posx posy throught arkdata.ini
  106. UI_SCALER_CVBS, //scaler mode, can set posx posy throught arkdata.ini
  107. UI_SCALER_END,
  108. };
  109. enum mirror_type {
  110. MIRROR_TYPE_NONE,
  111. MIRROR_TYPE_L2R,//mirror left to right
  112. MIRROR_TYPE_U2D,//mirror up to down
  113. MIRROR_TYPE_L2R_U2D,//mirror left to right and up to down
  114. MIRROR_TYPE_END,
  115. };
  116. struct arkfb_update_window {
  117. unsigned int win_x, win_y;
  118. unsigned int win_width, win_height;
  119. unsigned int width, height;
  120. unsigned int format;
  121. unsigned int rgb_order;
  122. unsigned int yuyv_order;
  123. unsigned int out_x, out_y;
  124. unsigned int out_width, out_height;
  125. unsigned int interlace_out;
  126. unsigned int show_tv;
  127. };
  128. struct arkfb_window_addr {
  129. unsigned int phy_addr;
  130. unsigned int phy_cbaddr;
  131. unsigned int phy_craddr;
  132. unsigned int wait_vsync;
  133. };
  134. struct ark_disp_tvenc_cfg_arg {
  135. unsigned int enable;
  136. unsigned int out_mode; /* enum ark_disp_tvenc_out_mode */
  137. unsigned int backcolor_y;
  138. unsigned int backcolor_cb;
  139. unsigned int backcolor_cr;
  140. };
  141. struct ark_frame_info {
  142. unsigned int frame_max;//mxa = 6
  143. unsigned int framebuf_phyaddr[6];
  144. };
  145. struct ark_private_data {
  146. int init;
  147. int support_max_resolution;
  148. int (*select_channel)(int ch);
  149. int (*detect_signal)(void);
  150. int (*get_progressive)(void);
  151. int (*display_effect)(int cmd, unsigned long arg);
  152. void (*dvr_start_cb)(void);
  153. void (*dvr_stop_cb)(void);
  154. int (*enter_carback_cb)(void);
  155. int (*exit_carback_cb)(void);
  156. int (*dvr_config)(void);
  157. int ic_type;
  158. int channel;
  159. };
  160. struct ark_carback_effect_para {
  161. volatile unsigned int carback_mask; //bit0=1:carback_brightness active,bit0=0:carback_brightness not active; ... ; bit5=1:carback_sharpness active,bit5=0:carback_sharpness not active
  162. volatile int carback_brightness;
  163. volatile int carback_contrast;
  164. volatile int carback_saturation;
  165. volatile int carback_hue;
  166. volatile int carback_sharpness;
  167. };
  168. struct ark_itu656in_context {
  169. int itu656_irq;
  170. int deinterlace_irq;
  171. struct device *dev;
  172. void __iomem *itu656_base;
  173. void __iomem *sys_base;
  174. void __iomem *deinterlace_base;
  175. void __iomem *lcd_base;
  176. };
  177. struct dvr_dev{
  178. char *name;
  179. int deinter_odd_even;
  180. int work_status;
  181. int channel;
  182. int carback_break;
  183. int start_carback_exit;
  184. int itu_channel;
  185. int system; //ntsc or pal
  186. int interlace;
  187. int itu601en;
  188. int discard_frame;
  189. int cur_buffer;
  190. int write_buffer;
  191. int display_buffer;
  192. int video_reinit;
  193. int show_video;
  194. int display_odd_even;
  195. int deinter_status;
  196. int src_width;
  197. int src_height;
  198. u8 *buffer_virtaddr;
  199. unsigned int buffer_size;
  200. unsigned int buffer_phyaddr;
  201. unsigned int buf_status[ITU656_BUFFER_NUM];
  202. unsigned int oddbuf_phyaddr[ITU656_BUFFER_NUM];
  203. unsigned int evenbuf_phyaddr[ITU656_BUFFER_NUM];
  204. unsigned int fieldbuf_phyaddr[4];
  205. int carback_signal;
  206. int enter_carback;
  207. int clock_scale_store; //save clock configure when enter carback
  208. //struct mutex mutex_lock;
  209. spinlock_t spin_lock;
  210. int dev_major, dev_minor;
  211. struct cdev cdev;
  212. struct i2c_client *client;
  213. struct itu656in_para itu656in;
  214. struct itu656in_para itu656in_back;
  215. struct timer_list timer;
  216. struct fasync_struct *fasync_queue;
  217. //for vbox
  218. unsigned int framebuf_phyaddr[ITU656_FRAME_NUM];
  219. unsigned int framebuf_status[ITU656_FRAME_NUM];
  220. int write_framebuf;
  221. int get_framebuf;
  222. int deinter_indirect_show;
  223. char frame_finish[ITU656_FRAME_NUM];//store frame id
  224. int frame_finish_count;
  225. wait_queue_head_t frame_finish_waitq;
  226. //mirror
  227. struct work_struct mirror_work;
  228. struct workqueue_struct *mirror_queue;
  229. unsigned int mirror_type;
  230. unsigned int oddbuf_virtaddr[ITU656_BUFFER_NUM];
  231. unsigned int evenbuf_virtaddr[ITU656_BUFFER_NUM];
  232. int write_mirror;
  233. struct list_head frame_list;
  234. void (*start)(struct dvr_dev *dvr_dev);
  235. void (*stop)(struct dvr_dev *dvr_dev);
  236. struct ark_private_data priv_data;
  237. int ic_type; //7116, tp2825b, rn6752 ...
  238. int old_cvbs_type; //cvbs type before change
  239. struct ark_itu656in_context context;
  240. struct class *itu656_class;
  241. struct device *itu656_device;
  242. };
  243. #define DEBUG
  244. #ifdef DEBUG
  245. #define itu656_printk(...) printk(__VA_ARGS__)
  246. #else
  247. #define itu656_printk(...)
  248. #endif
  249. /* IOCTL CMD */
  250. #define ARK_DVR_IOC_MAGIC 'n'
  251. #define ARK_DVR_START _IO(ARK_DVR_IOC_MAGIC, 0x10)
  252. #define ARK_DVR_STOP _IO(ARK_DVR_IOC_MAGIC, 0x20)
  253. #define ARK_DVR_GETFRAME _IO(ARK_DVR_IOC_MAGIC, 0x30)
  254. #define ARK_DVR_SWITCH_CHANNEL _IOWR(ARK_DVR_IOC_MAGIC, 0x40, unsigned long)
  255. #define ARK_DVR_CHANNEL_STATUS _IOWR(ARK_DVR_IOC_MAGIC, 0x50, unsigned long)
  256. #define ARK_DVR_INIT _IOWR(ARK_DVR_IOC_MAGIC, 0x60, struct itu656in_para)
  257. #define ARK_DVR_TVOUT _IOWR(ARK_DVR_IOC_MAGIC, 0x70, unsigned long)
  258. #define ARK_DVR_DETECT_SIGNAL _IOWR(ARK_DVR_IOC_MAGIC, 0x80, unsigned long)
  259. #define ARK_DVR_INDIRECT_LCD _IOWR(ARK_DVR_IOC_MAGIC, 0x90, unsigned long)
  260. #define ARK_DVR_GET_FRAME_INFO _IOWR(ARK_DVR_IOC_MAGIC, 0xA0, unsigned long)
  261. #define ARK_DVR_SET_FRAME_COMPLETE _IOWR(ARK_DVR_IOC_MAGIC, 0xB0, unsigned long)
  262. #define ARK_DVR_SET_FRAME_SHOW _IOWR(ARK_DVR_IOC_MAGIC, 0xC0, unsigned long)
  263. #define ARK_DVR_SET_MIRROR_TYPE _IOWR(ARK_DVR_IOC_MAGIC, 0xD0, unsigned long)
  264. #define ARK_DVR_GET_CVBS_TYPE _IOWR(ARK_DVR_IOC_MAGIC, 0xD1, unsigned long)
  265. #define ARK_DVR_GET_BRIGHTNESS _IOWR(ARK_DVR_IOC_MAGIC, 0xE0, unsigned long)
  266. #define ARK_DVR_SET_BRIGHTNESS _IOWR(ARK_DVR_IOC_MAGIC, 0xE1, unsigned long)
  267. #define ARK_DVR_GET_CONTRAST _IOWR(ARK_DVR_IOC_MAGIC, 0xE2, unsigned long)
  268. #define ARK_DVR_SET_CONTRAST _IOWR(ARK_DVR_IOC_MAGIC, 0xE3, unsigned long)
  269. #define ARK_DVR_GET_SATURATION _IOWR(ARK_DVR_IOC_MAGIC, 0xE4, unsigned long)
  270. #define ARK_DVR_SET_SATURATION _IOWR(ARK_DVR_IOC_MAGIC, 0xE5, unsigned long)
  271. #define ARK_DVR_GET_HUE _IOWR(ARK_DVR_IOC_MAGIC, 0xE6, unsigned long)
  272. #define ARK_DVR_SET_HUE _IOWR(ARK_DVR_IOC_MAGIC, 0xE7, unsigned long)
  273. #define ARK_DVR_GET_SHARPNESS _IOWR(ARK_DVR_IOC_MAGIC, 0xE8, unsigned long)
  274. #define ARK_DVR_SET_SHARPNESS _IOWR(ARK_DVR_IOC_MAGIC, 0xE9, unsigned long)
  275. #define ARK_DVR_BRIGHTNESS_MASK (1<<0)
  276. #define ARK_DVR_CONTRAST_MASK (1<<1)
  277. #define ARK_DVR_SATURATION_MASK (1<<2)
  278. #define ARK_DVR_HUE_MASK (1<<3)
  279. #define ARK_DVR_SHARPNESS_MASK (1<<4)
  280. #define ITU656_INT (12+16)
  281. #define DEINTERLACE_INT (31+16)
  282. #endif