Gem_isp_awb.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // =============================================================================
  2. // File : Gem_isp_awb.c
  3. // Version : v1.0
  4. // Author : Honglei Zhu
  5. // Date : 2014.12.5
  6. // -----------------------------------------------------------------------------
  7. // Description :
  8. //
  9. // -----------------------------------------------------------------------------
  10. #include "Gem_isp_awb.h"
  11. #include "Gem_isp_io.h"
  12. void isp_awb_init_io (isp_awb_ptr_t p_awb)
  13. {
  14. int data0, data1, data2;
  15. data0 = ((p_awb->enable & 0x01) << 0)
  16. | ((p_awb->mode & 0x03) << 1) // bit1-bit2 mode
  17. // 0: unite gray white average
  18. // 1: unite color temperature average
  19. // 2: zone color temperature Weight
  20. | ((p_awb->manual & 0x01) << 3) // bit3 manual, 0: auto awb 1: mannual awb
  21. | ((p_awb->black & 0xFF) << 8)
  22. | ((p_awb->white & 0xFF) << 16)
  23. ;
  24. data1 = (p_awb->r2g_min) | (p_awb->b2g_min<<16);
  25. data2 = (p_awb->r2g_max) | (p_awb->b2g_max<<16);
  26. Gem_write ((GEM_AWB0_BASE+0x00), data0);
  27. Gem_write ((GEM_AWB0_BASE+0x04), data1);
  28. Gem_write ((GEM_AWB0_BASE+0x08), data2);
  29. data0 = (p_awb->r2g_light[0]) | (p_awb->b2g_light[0]<<16);
  30. Gem_write ((GEM_AWB0_BASE+0x0c), data0);
  31. data0 = (p_awb->r2g_light[1]) | (p_awb->b2g_light[1]<<16);
  32. Gem_write ((GEM_AWB0_BASE+0x10), data0);
  33. data0 = (p_awb->r2g_light[2]) | (p_awb->b2g_light[2]<<16);
  34. Gem_write ((GEM_AWB0_BASE+0x14), data0);
  35. data0 = (p_awb->r2g_light[3]) | (p_awb->b2g_light[3]<<16);
  36. Gem_write ((GEM_AWB0_BASE+0x18), data0);
  37. data0 = (p_awb->r2g_light[4]) | (p_awb->b2g_light[4]<<16);
  38. Gem_write ((GEM_AWB0_BASE+0x1c), data0);
  39. data0 = (p_awb->r2g_light[5]) | (p_awb->b2g_light[5]<<16);
  40. Gem_write ((GEM_AWB0_BASE+0x20), data0);
  41. data0 = (p_awb->r2g_light[6]) | (p_awb->b2g_light[6]<<16);
  42. Gem_write ((GEM_AWB0_BASE+0x24), data0);
  43. data0 = (p_awb->r2g_light[7]) | (p_awb->b2g_light[7]<<16);
  44. Gem_write ((GEM_AWB0_BASE+0x28), data0);
  45. data0 = (p_awb->use_light[0] << 0)
  46. | (p_awb->use_light[1] << 1)
  47. | (p_awb->use_light[2] << 2)
  48. | (p_awb->use_light[3] << 3)
  49. | (p_awb->use_light[4] << 4)
  50. | (p_awb->use_light[5] << 5)
  51. | (p_awb->use_light[6] << 6)
  52. | (p_awb->use_light[7] << 7)
  53. | (p_awb->jitter << 8)
  54. ;
  55. Gem_write ((GEM_AWB0_BASE+0x2c), data0);
  56. data0 = (p_awb->gain_g2r) | (p_awb->gain_g2b<<16);
  57. Gem_write ((GEM_AWB0_BASE+0x30), data0);
  58. data0 = (p_awb->weight[0][0] << 0)
  59. | (p_awb->weight[0][1] << 4)
  60. | (p_awb->weight[0][2] << 8)
  61. | (p_awb->weight[1][0] << 12)
  62. | (p_awb->weight[1][1] << 16)
  63. | (p_awb->weight[1][2] << 20)
  64. | (p_awb->weight[2][0] << 24)
  65. | (p_awb->weight[2][1] << 28)
  66. ;
  67. data1 = (p_awb->weight[2][2] << 0);
  68. Gem_write ((GEM_AWB0_BASE+0x34), data0);
  69. Gem_write ((GEM_AWB0_BASE+0x38), data1);
  70. }
  71. void isp_awb_info_read (isp_awb_ptr_t p_awb)
  72. {
  73. unsigned int data0, data1;
  74. data0 = Gem_read (GEM_AWB1_BASE+0);
  75. data1 = Gem_read (GEM_AWB1_BASE+4);
  76. p_awb->gray_num = data0;
  77. p_awb->gain_r2g = data1&0xffff;
  78. p_awb->gain_b2g = data1 >> 16;
  79. }
  80. void isp_awb_run (isp_awb_ptr_t p_awb)
  81. {
  82. int r2g, b2g;
  83. isp_awb_info_read (p_awb);
  84. r2g = p_awb->gain_r2g;
  85. b2g = p_awb->gain_b2g;
  86. }