tcm825x.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /*
  2. * drivers/media/video/tcm825x.h
  3. *
  4. * Register definitions for the TCM825X CameraChip.
  5. *
  6. * Author: David Cohen (david.cohen@indt.org.br)
  7. *
  8. * This file is licensed under the terms of the GNU General Public License
  9. * version 2. This program is licensed "as is" without any warranty of any
  10. * kind, whether express or implied.
  11. *
  12. * This file was based on ov9640.h from MontaVista
  13. */
  14. #ifndef TCM825X_H
  15. #define TCM825X_H
  16. #include <linux/videodev2.h>
  17. #include <media/v4l2-int-device.h>
  18. #define TCM825X_NAME "tcm825x"
  19. #define TCM825X_MASK(x) x & 0x00ff
  20. #define TCM825X_ADDR(x) (x & 0xff00) >> 8
  21. /* The TCM825X I2C sensor chip has a fixed slave address of 0x3d. */
  22. #define TCM825X_I2C_ADDR 0x3d
  23. /*
  24. * define register offsets for the TCM825X sensor chip
  25. * OFFSET(8 bits) + MASK(8 bits)
  26. * MASK bit 4 and 3 are used when the register uses more than one address
  27. */
  28. #define TCM825X_FPS 0x0280
  29. #define TCM825X_ACF 0x0240
  30. #define TCM825X_DOUTBUF 0x020C
  31. #define TCM825X_DCLKP 0x0202
  32. #define TCM825X_ACFDET 0x0201
  33. #define TCM825X_DOUTSW 0x0380
  34. #define TCM825X_DATAHZ 0x0340
  35. #define TCM825X_PICSIZ 0x033c
  36. #define TCM825X_PICFMT 0x0302
  37. #define TCM825X_V_INV 0x0480
  38. #define TCM825X_H_INV 0x0440
  39. #define TCM825X_ESRLSW 0x0430
  40. #define TCM825X_V_LENGTH 0x040F
  41. #define TCM825X_ALCSW 0x0580
  42. #define TCM825X_ESRLIM 0x0560
  43. #define TCM825X_ESRSPD_U 0x051F
  44. #define TCM825X_ESRSPD_L 0x06FF
  45. #define TCM825X_AG 0x07FF
  46. #define TCM825X_ESRSPD2 0x06FF
  47. #define TCM825X_ALCMODE 0x0830
  48. #define TCM825X_ALCH 0x080F
  49. #define TCM825X_ALCL 0x09FF
  50. #define TCM825X_AWBSW 0x0A80
  51. #define TCM825X_MRG 0x0BFF
  52. #define TCM825X_MBG 0x0CFF
  53. #define TCM825X_GAMSW 0x0D80
  54. #define TCM825X_HDTG 0x0EFF
  55. #define TCM825X_VDTG 0x0FFF
  56. #define TCM825X_HDTCORE 0x10F0
  57. #define TCM825X_VDTCORE 0x100F
  58. #define TCM825X_CONT 0x11FF
  59. #define TCM825X_BRIGHT 0x12FF
  60. #define TCM825X_VHUE 0x137F
  61. #define TCM825X_UHUE 0x147F
  62. #define TCM825X_VGAIN 0x153F
  63. #define TCM825X_UGAIN 0x163F
  64. #define TCM825X_UVCORE 0x170F
  65. #define TCM825X_SATU 0x187F
  66. #define TCM825X_MHMODE 0x1980
  67. #define TCM825X_MHLPFSEL 0x1940
  68. #define TCM825X_YMODE 0x1930
  69. #define TCM825X_MIXHG 0x1907
  70. #define TCM825X_LENS 0x1A3F
  71. #define TCM825X_AGLIM 0x1BE0
  72. #define TCM825X_LENSRPOL 0x1B10
  73. #define TCM825X_LENSRGAIN 0x1B0F
  74. #define TCM825X_ES100S 0x1CFF
  75. #define TCM825X_ES120S 0x1DFF
  76. #define TCM825X_DMASK 0x1EC0
  77. #define TCM825X_CODESW 0x1E20
  78. #define TCM825X_CODESEL 0x1E10
  79. #define TCM825X_TESPIC 0x1E04
  80. #define TCM825X_PICSEL 0x1E03
  81. #define TCM825X_HNUM 0x20FF
  82. #define TCM825X_VOUTPH 0x287F
  83. #define TCM825X_ESROUT 0x327F
  84. #define TCM825X_ESROUT2 0x33FF
  85. #define TCM825X_AGOUT 0x34FF
  86. #define TCM825X_DGOUT 0x353F
  87. #define TCM825X_AGSLOW1 0x39C0
  88. #define TCM825X_FLLSMODE 0x3930
  89. #define TCM825X_FLLSLIM 0x390F
  90. #define TCM825X_DETSEL 0x3AF0
  91. #define TCM825X_ACDETNC 0x3A0F
  92. #define TCM825X_AGSLOW2 0x3BC0
  93. #define TCM825X_DG 0x3B3F
  94. #define TCM825X_REJHLEV 0x3CFF
  95. #define TCM825X_ALCLOCK 0x3D80
  96. #define TCM825X_FPSLNKSW 0x3D40
  97. #define TCM825X_ALCSPD 0x3D30
  98. #define TCM825X_REJH 0x3D03
  99. #define TCM825X_SHESRSW 0x3E80
  100. #define TCM825X_ESLIMSEL 0x3E40
  101. #define TCM825X_SHESRSPD 0x3E30
  102. #define TCM825X_ELSTEP 0x3E0C
  103. #define TCM825X_ELSTART 0x3E03
  104. #define TCM825X_AGMIN 0x3FFF
  105. #define TCM825X_PREGRG 0x423F
  106. #define TCM825X_PREGBG 0x433F
  107. #define TCM825X_PRERG 0x443F
  108. #define TCM825X_PREBG 0x453F
  109. #define TCM825X_MSKBR 0x477F
  110. #define TCM825X_MSKGR 0x487F
  111. #define TCM825X_MSKRB 0x497F
  112. #define TCM825X_MSKGB 0x4A7F
  113. #define TCM825X_MSKRG 0x4B7F
  114. #define TCM825X_MSKBG 0x4C7F
  115. #define TCM825X_HDTCSW 0x4D80
  116. #define TCM825X_VDTCSW 0x4D40
  117. #define TCM825X_DTCYL 0x4D3F
  118. #define TCM825X_HDTPSW 0x4E80
  119. #define TCM825X_VDTPSW 0x4E40
  120. #define TCM825X_DTCGAIN 0x4E3F
  121. #define TCM825X_DTLLIMSW 0x4F10
  122. #define TCM825X_DTLYLIM 0x4F0F
  123. #define TCM825X_YLCUTLMSK 0x5080
  124. #define TCM825X_YLCUTL 0x503F
  125. #define TCM825X_YLCUTHMSK 0x5180
  126. #define TCM825X_YLCUTH 0x513F
  127. #define TCM825X_UVSKNC 0x527F
  128. #define TCM825X_UVLJ 0x537F
  129. #define TCM825X_WBGMIN 0x54FF
  130. #define TCM825X_WBGMAX 0x55FF
  131. #define TCM825X_WBSPDUP 0x5603
  132. #define TCM825X_ALLAREA 0x5820
  133. #define TCM825X_WBLOCK 0x5810
  134. #define TCM825X_WB2SP 0x580F
  135. #define TCM825X_KIZUSW 0x5920
  136. #define TCM825X_PBRSW 0x5910
  137. #define TCM825X_ABCSW 0x5903
  138. #define TCM825X_PBDLV 0x5AFF
  139. #define TCM825X_PBC1LV 0x5BFF
  140. #define TCM825X_NUM_REGS (TCM825X_ADDR(TCM825X_PBC1LV) + 1)
  141. #define TCM825X_BYTES_PER_PIXEL 2
  142. #define TCM825X_REG_TERM 0xff /* terminating list entry for reg */
  143. #define TCM825X_VAL_TERM 0xff /* terminating list entry for val */
  144. /* define a structure for tcm825x register initialization values */
  145. struct tcm825x_reg {
  146. u8 val;
  147. u16 reg;
  148. };
  149. enum image_size { subQCIF = 0, QQVGA, QCIF, QVGA, CIF, VGA };
  150. enum pixel_format { YUV422 = 0, RGB565 };
  151. #define NUM_IMAGE_SIZES 6
  152. #define NUM_PIXEL_FORMATS 2
  153. #define TCM825X_XCLK_MIN 11900000
  154. #define TCM825X_XCLK_MAX 25000000
  155. struct capture_size {
  156. unsigned long width;
  157. unsigned long height;
  158. };
  159. struct tcm825x_platform_data {
  160. /* Is the sensor usable? Doesn't yet mean it's there, but you
  161. * can try! */
  162. int (*is_okay)(void);
  163. /* Set power state, zero is off, non-zero is on. */
  164. int (*power_set)(int power);
  165. /* Default registers written after power-on or reset. */
  166. const struct tcm825x_reg *(*default_regs)(void);
  167. int (*needs_reset)(struct v4l2_int_device *s, void *buf,
  168. struct v4l2_pix_format *fmt);
  169. int (*ifparm)(struct v4l2_ifparm *p);
  170. int (*is_upside_down)(void);
  171. };
  172. /* Array of image sizes supported by TCM825X. These must be ordered from
  173. * smallest image size to largest.
  174. */
  175. static const struct capture_size tcm825x_sizes[] = {
  176. { 128, 96 }, /* subQCIF */
  177. { 160, 120 }, /* QQVGA */
  178. { 176, 144 }, /* QCIF */
  179. { 320, 240 }, /* QVGA */
  180. { 352, 288 }, /* CIF */
  181. { 640, 480 }, /* VGA */
  182. };
  183. #endif /* ifndef TCM825X_H */