ark_camera.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #ifndef __ARK_CAMERA_H__
  2. #define __ARK_CAMERA_H__
  3. #include <linux/kernel.h>
  4. #include <linux/cdev.h>
  5. #include <linux/device.h>
  6. #include <linux/interrupt.h>
  7. #define ISP_SYS 0x0
  8. #define ISP_INT_STATUS 0x1a8
  9. #define XM_printf printk
  10. #define isp_debug_printf XM_printf
  11. #define IMX323_DCK_SYNC_MODE_ENABLE 1
  12. typedef unsigned char u8_t;
  13. typedef unsigned short u16_t;
  14. typedef unsigned int u32_t;
  15. typedef unsigned long long u64_t;
  16. typedef signed char i8_t;
  17. typedef short i16_t;
  18. typedef int i32_t;
  19. typedef long long i64_t;
  20. #define IMAGE_H_SZ isp_get_video_width()
  21. #define IMAGE_V_SZ isp_get_video_height()
  22. #define ISP_FRAME_NUM 4
  23. // 0: RGGB 1: GRBG 2: BGGR 3: GBRG
  24. enum {
  25. ARKN141_ISP_RAW_IMAGE_BAYER_MODE_RGGB = 0, //
  26. ARKN141_ISP_RAW_IMAGE_BAYER_MODE_GRBG,
  27. ARKN141_ISP_RAW_IMAGE_BAYER_MODE_BGGR,
  28. ARKN141_ISP_RAW_IMAGE_BAYER_MODE_GBRG
  29. };
  30. // YUV���ݴ洢��ʽ
  31. // 0��y_uv420 1:y_uv422 2:yuv420 3:yuv422
  32. enum {
  33. ARKN141_ISP_YUV_FORMAT_Y_UV420 = 0,
  34. ARKN141_ISP_YUV_FORMAT_Y_UV422,
  35. ARKN141_ISP_YUV_FORMAT_YUV420,
  36. ARKN141_ISP_YUV_FORMAT_YUV422
  37. };
  38. // 0: 8λ 1: 10λ 2: 12λ 3: 14λ
  39. enum {
  40. ARKN141_ISP_SENSOR_BIT_8 = 0,
  41. ARKN141_ISP_SENSOR_BIT_10,
  42. ARKN141_ISP_SENSOR_BIT_12,
  43. ARKN141_ISP_SENSOR_BIT_14
  44. };
  45. // auto-run��Ŀ����
  46. enum {
  47. ISP_AUTO_RUN_AE = 0,
  48. ISP_AUTO_RUN_AWB,
  49. ISP_AUTO_RUN_COLOR,
  50. ISP_AUTO_RUN_ERIS,
  51. ISP_AUTO_RUN_DENOISE,
  52. ISP_AUTO_RUN_ENHANCE,
  53. ISP_AUTO_RUN_FESP,
  54. ISP_AUTO_RUN_SHARP,
  55. ISP_AUTO_RUN_GAMMA,
  56. ISP_AUTO_RUN_CROSSTALK,
  57. ISP_AUTO_RUN_EXP, // �ع����Զ�����
  58. ISP_AUTO_RUN_COUNT
  59. };
  60. enum {
  61. ARKN141_VIDEO_FORMAT_1080P_30 = 0,
  62. ARKN141_VIDEO_FORMAT_720P_30,
  63. #ifdef CONFIG_HONGJING_CVBS
  64. ARKN141_VIDEO_FORMAT_720X480P,
  65. ARKN141_VIDEO_FORMAT_640X480P,
  66. ARKN141_VIDEO_FORMAT_320X240P,
  67. #else
  68. ARKN141_VIDEO_FORMAT_720P_60,
  69. #endif
  70. ARKN141_VIDEO_FORMAT_COUNT
  71. };
  72. struct ark_camera_context {
  73. void __iomem *base;
  74. void __iomem *scalebase;
  75. void __iomem *sysbase;
  76. int irq;
  77. struct device *dev;
  78. struct gpio_desc *sensor_reset;
  79. struct gpio_desc *sensor_standby;
  80. spinlock_t lock;
  81. char frame_finish[ISP_FRAME_NUM];
  82. int frame_finish_count;
  83. wait_queue_head_t frame_finish_waitq;
  84. struct work_struct camera_work;
  85. struct workqueue_struct *camera_queue;
  86. };
  87. struct ark_camera_device {
  88. const char *driver_name;
  89. const char *name;
  90. int major;
  91. int minor_start;
  92. int minor_num;
  93. int num;
  94. int irq;
  95. struct cdev cdev;
  96. struct class *camera_class;
  97. struct device *camera_device;
  98. struct fasync_struct *async_queue_cam;
  99. struct ark_camera_context context;
  100. struct clk *isp_clk;
  101. struct clk *sensor_mclk;
  102. };
  103. /*************************************************************************
  104. * Ioctl command definition
  105. *************************************************************************/
  106. #define ARK_CAMERA_IOCTL_BASE 0x9A
  107. #define ARK_CAMERA_IOCTL_START _IO(ARK_CAMERA_IOCTL_BASE, 0)
  108. #define ARK_CAMERA_IOCTL_STOP _IO(ARK_CAMERA_IOCTL_BASE, 1)
  109. #define ARK_CAMERA_IOCTL_GET_YUV_BUFFER _IOR(ARK_CAMERA_IOCTL_BASE, 2, unsigned int *)
  110. #define ARK_CAMERA_IOCTL_SET_FRAME_READY _IOW(ARK_CAMERA_IOCTL_BASE, 3, int)
  111. #define ARK_CAMERA_IOCTL_GET_FRAME_SIZE _IOR(ARK_CAMERA_IOCTL_BASE, 4, unsigned int *)
  112. #define ARK_CAMERA_IOCTL_GET_FRAME_FORMAT _IOR(ARK_CAMERA_IOCTL_BASE, 5, unsigned int *)
  113. #define ARK_CAMERA_IOCTL_SET_FRAME_FORMAT _IOW(ARK_CAMERA_IOCTL_BASE, 6, unsigned int *)
  114. #define ARK_CAMERA_IOCTL_GET_FPS _IOR(ARK_CAMERA_IOCTL_BASE, 7, unsigned int *)
  115. //extern int i2c_reg8_write8 (unsigned char ucDataOffset, unsigned char data);
  116. //extern int i2c_reg8_read8 (unsigned char ucDataOffset, unsigned char *data);
  117. //extern int i2c_reg16_write8 (unsigned short ucDataOffset, unsigned char data);
  118. //extern int i2c_reg16_read8 (unsigned short ucDataOffset, unsigned char *data);
  119. extern void isp_sensor_set_reset_pin_low(void);
  120. extern void isp_sensor_set_reset_pin_high(void);
  121. //extern void isp_sensor_set_standby_pin_low(void);
  122. //extern void isp_sensor_set_standby_pin_high(void);
  123. int xm_arkn141_isp_set_flicker_freq (int flicker_freq);
  124. int ark_camera_dev_init(struct ark_camera_device *camera);
  125. irqreturn_t ark_camera_intr_handler(int irq, void *dev_id);
  126. extern u32_t isp_get_video_width (void);
  127. extern u32_t isp_get_video_height (void);
  128. extern unsigned int isp_get_video_format (void);
  129. extern unsigned int isp_get_video_image_size (void);
  130. extern void isp_set_auto_run_state (unsigned int item, unsigned int state);
  131. extern unsigned int isp_get_auto_run_state (unsigned int item);
  132. extern unsigned long isp_get_clk(void);
  133. extern unsigned long isp_get_sensor_mclk(void);
  134. extern unsigned int isp_get_sensor_fps(void);
  135. extern void isp_set_sensor_fps(unsigned int fps);
  136. #endif