Gem_isp_fesp.c 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // =============================================================================
  2. // File : Gem_isp_fesp.c
  3. // Version : v1.0
  4. // Author : Honglei Zhu
  5. // Date : 2014.12.5
  6. // -----------------------------------------------------------------------------
  7. // Description :
  8. //
  9. // -----------------------------------------------------------------------------
  10. #include "Gem_isp_fesp.h"
  11. #include "Gem_isp_io.h"
  12. void isp_fesp_init_io (isp_fesp_ptr_t p_fesp)
  13. {
  14. int i, data0, data1, data2, data3;
  15. // lens shading
  16. data0 = ((p_fesp->Lensshade.enable & 0x01) << 0)
  17. | ((p_fesp->Lensshade.scale & 0x03) << 1);
  18. data1 = ((p_fesp->Lensshade.rcenterRx & 0xFFFF) << 0)
  19. | ((p_fesp->Lensshade.rcenterRy & 0xFFFF) << 16);
  20. data2 = ((p_fesp->Lensshade.rcenterGx & 0xFFFF) << 0)
  21. | ((p_fesp->Lensshade.rcenterGy & 0xFFFF) << 16);
  22. data3 = ((p_fesp->Lensshade.rcenterBx & 0xFFFF) << 0)
  23. | ((p_fesp->Lensshade.rcenterBy & 0xFFFF) << 16);
  24. Gem_write ((GEM_LENS_BASE+0x00), data0);
  25. Gem_write ((GEM_LENS_BASE+0x04), data1);
  26. Gem_write ((GEM_LENS_BASE+0x08), data2);
  27. Gem_write ((GEM_LENS_BASE+0x0c), data3);
  28. // bit15-0 lscofst
  29. data0 = (p_fesp->Lensshade.lscofst & 0xFFFF);
  30. Gem_write ((GEM_LENS_LSCOFST_BASE+0x00), data0);
  31. for (i = 0; i < 195; i++)
  32. {
  33. data0 = (0x00) | (i << 8) | ((p_fesp->Lensshade.coef[i] & 0xFFFF) << 16);
  34. Gem_write ((GEM_LUT_BASE+0x00), data0);
  35. }
  36. // FixPattern denoise
  37. data0 = ((p_fesp->Fixpatt.enable & 0x01) << 0)
  38. | ((p_fesp->Fixpatt.mode & 0x01) << 1);
  39. data1 = ((p_fesp->Fixpatt.rBlacklevel & 0xFFFF) << 0)
  40. | ((p_fesp->Fixpatt.grBlacklevel & 0xFFFF) << 16);
  41. data2 = ((p_fesp->Fixpatt.gbBlacklevel & 0xFFFF) << 0)
  42. | ((p_fesp->Fixpatt.bBlacklevel & 0xFFFF) << 16);
  43. Gem_write ((GEM_FIXPATT_BASE+0x00), data0);
  44. Gem_write ((GEM_FIXPATT_BASE+0x04), data1);
  45. Gem_write ((GEM_FIXPATT_BASE+0x08), data2);
  46. for (i = 0; i < 17; i++)
  47. {
  48. data0 = (0x09) | (i << 8) | ((p_fesp->Fixpatt.profile[i] & 0xFFFF) << 16);
  49. Gem_write ((GEM_LUT_BASE+0x00), data0);
  50. }
  51. // Bad Pixel
  52. data0 = ((p_fesp->Badpix.enable & 0x01) << 0)
  53. | ((p_fesp->Badpix.mode & 0x01) << 1);
  54. data1 = ((p_fesp->Badpix.thresh & 0xFFFF) << 0);
  55. Gem_write ((GEM_BADPIX_BASE+0x00), data0);
  56. Gem_write ((GEM_BADPIX_BASE+0x04), data1);
  57. for (i = 0; i < 16; i++)
  58. {
  59. data0 = (0x0a) | (i << 8) | ((p_fesp->Badpix.profile[i] & 0xFF) << 16);
  60. Gem_write ((GEM_LUT_BASE+0x00), data0);
  61. }
  62. // CrossTalk
  63. //p_fesp->Crosstalk.mode = 0x02; // 10: use reg thres
  64. data0 = ((p_fesp->Crosstalk.enable & 0x0001) << 0 ) // bit0 crosstalk enable (1: enable 0:disable)
  65. | ((p_fesp->Crosstalk.mode & 0x0003) << 1 ) // bit1-bit2 crosstalk mode (00: unite filter thres=128 10: use reg thres x1: base on lut)
  66. | ((p_fesp->Crosstalk.snsCgf & 0x0003) << 3 ) // bit3-bit4 snsCgf
  67. | ((p_fesp->Crosstalk.thres0cgf & 0xFFFF) << 16) // bit16-bit31 thres0cgf
  68. ;
  69. data1 = ((p_fesp->Crosstalk.thresh & 0xFFFF) << 0) // bit0-bit15 Crosstalk_thresh thres2cgf
  70. | ((p_fesp->Crosstalk.thres1cgf & 0xFFFF) << 16) // bit16-bit31 Crosstalk_thresh thres1cgf
  71. ;
  72. Gem_write ((GEM_CROSS_BASE+0x00), data0);
  73. Gem_write ((GEM_CROSS_BASE+0x04), data1);
  74. for (i = 0; i < 17; i++)
  75. {
  76. data1 = (0x01) | (i << 8) | ((p_fesp->Crosstalk.profile[i] & 0xFF) << 16);
  77. Gem_write ((GEM_LUT_BASE+0x00), data1);
  78. }
  79. }