kd_flashlight.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #ifndef _KD_FLASHLIGHT_H
  2. #define _KD_FLASHLIGHT_H
  3. #include <linux/ioctl.h>
  4. /*************************************************
  5. *
  6. **************************************************/
  7. /* In KERNEL mode,SHOULD be sync with mediatype.h */
  8. /* CHECK before remove or modify */
  9. /* #undef BOOL */
  10. /* #define BOOL signed int */
  11. #ifndef _MEDIA_TYPES_H
  12. typedef unsigned char MUINT8;
  13. typedef unsigned short MUINT16;
  14. typedef unsigned int MUINT32;
  15. typedef signed char MINT8;
  16. typedef signed short MINT16;
  17. typedef signed int MINT32;
  18. #endif
  19. typedef unsigned char u8;
  20. typedef unsigned short u16;
  21. enum {
  22. e_Max_Strobe_Num_Per_Dev = 2,
  23. e_Max_Part_Num_Per_Dev = 2,
  24. e_Max_Sensor_Dev_Num = 3,
  25. };
  26. /* cotta-- added for high current solution */
  27. #define KD_STROBE_HIGH_CURRENT_WIDTH 0xFF
  28. /* cotta-- time limit of strobe watch dog timer. unit : ms */
  29. #define FLASH_LIGHT_WDT_TIMEOUT_MS 300
  30. /* FIXME: temp. solutoin for main/sub sensor mapping */
  31. #define KD_DEFAULT_FLASHLIGHT_INDEX 0
  32. #define KD_CUSTOM_FLASHLIGHT_INDEX 1
  33. #define KD_DEFAULT_FLASHLIGHT_ID 0
  34. #define KD_DUMMY_FLASHLIGHT_ID 1
  35. #define KD_PEAK_FLASHLIGHT_ID 2
  36. #define KD_TORCH_FLASHLIGHT_ID 3
  37. #define KD_CONSTANT_FLASHLIGHT_ID 4
  38. typedef enum {
  39. e_CAMERA_NONE_SENSOR = 0,
  40. e_CAMERA_MAIN_SENSOR = 1,
  41. e_CAMERA_SUB_SENSOR = 2,
  42. e_CAMERA_MAIN_2_SENSOR = 4,
  43. /* for backward compatible */
  44. e_CAMERA_MAIN_SECOND_SENSOR = 4,
  45. /* DUAL_CAMERA_SUB_2_SENSOR = 16, */
  46. e_CAMERA_SENSOR_MAX
  47. } eFlashSensorId;
  48. typedef enum {
  49. e_FLASH_DRIVER_6332 = 0,
  50. } eDrvierNameId;
  51. typedef struct {
  52. int (*flashlight_open)(void *pArg);
  53. int (*flashlight_release)(void *pArg);
  54. int (*flashlight_ioctl)(unsigned int cmd, unsigned long arg);
  55. } FLASHLIGHT_FUNCTION_STRUCT, *PFLASHLIGHT_FUNCTION_STRUCT;
  56. typedef struct {
  57. int sensorDev;
  58. int strobeId;
  59. int arg;
  60. } kdStrobeDrvArg;
  61. typedef struct {
  62. MUINT32(*flashlightInit) (PFLASHLIGHT_FUNCTION_STRUCT * pfFunc);
  63. } KD_FLASHLIGHT_INIT_FUNCTION_STRUCT, *pKD_FLASHLIGHT_INIT_FUNCTION_STRUCT;
  64. typedef enum {
  65. FLASHLIGHTDRV_STATE_PREVIEW,
  66. FLASHLIGHTDRV_STATE_STILL,
  67. } eFlashlightState;
  68. /* flash type enum */
  69. typedef enum {
  70. FLASHLIGHT_NONE = 0,
  71. FLASHLIGHT_LED_ONOFF, /* LED always on/off */
  72. FLASHLIGHT_LED_CONSTANT, /* CONSTANT type LED */
  73. FLASHLIGHT_LED_PEAK, /* peak strobe type LED */
  74. FLASHLIGHT_LED_TORCH, /* LED turn on when switch FLASH_ON */
  75. FLASHLIGHT_XENON_SCR, /* SCR strobe type Xenon */
  76. FLASHLIGHT_XENON_IGBT /* IGBT strobe type Xenon */
  77. } FLASHLIGHT_TYPE_ENUM;
  78. #define FLASHLIGHT_MAGIC 'S'
  79. /* S means "set through a ptr" */
  80. /* T means "tell by a arg value" */
  81. /* G means "get by a ptr" */
  82. /* Q means "get by return a value" */
  83. /* X means "switch G and S atomically" */
  84. /* H means "switch T and Q atomically" */
  85. /* FLASHLIGHTIOC_T_ENABLE : Tell FLASHLIGHT to turn ON/OFF */
  86. #define FLASHLIGHTIOC_T_ENABLE _IOW(FLASHLIGHT_MAGIC, 5, int)
  87. /* set flashlight power level 0~31(weak~strong) */
  88. #define FLASHLIGHTIOC_T_LEVEL _IOW(FLASHLIGHT_MAGIC, 10, int)
  89. /* set flashlight time us */
  90. #define FLASHLIGHTIOC_T_FLASHTIME _IOW(FLASHLIGHT_MAGIC, 15, int)
  91. /* set flashlight state */
  92. #define FLASHLIGHTIOC_T_STATE _IOW(FLASHLIGHT_MAGIC, 20, int)
  93. /* get flash type */
  94. #define FLASHLIGHTIOC_G_FLASHTYPE _IOR(FLASHLIGHT_MAGIC, 25, int)
  95. /* set flashlight driver */
  96. #define FLASHLIGHTIOC_X_SET_DRIVER _IOWR(FLASHLIGHT_MAGIC, 30, int)
  97. /* cotta-- set capture delay of sensor */
  98. #define FLASHLIGHTIOC_T_DELAY _IOW(FLASHLIGHT_MAGIC, 35, int)
  99. #define FLASH_IOC_SET_TIME_OUT_TIME_MS _IOR(FLASHLIGHT_MAGIC, 100, int)
  100. #define FLASH_IOC_SET_STEP _IOR(FLASHLIGHT_MAGIC, 105, int)
  101. #define FLASH_IOC_SET_DUTY _IOR(FLASHLIGHT_MAGIC, 110, int)
  102. #define FLASH_IOC_SET_ONOFF _IOR(FLASHLIGHT_MAGIC, 115, int)
  103. #define FLASH_IOC_UNINIT _IOR(FLASHLIGHT_MAGIC, 120, int)
  104. #define FLASH_IOC_PRE_ON _IOR(FLASHLIGHT_MAGIC, 125, int)
  105. #define FLASH_IOC_GET_PRE_ON_TIME_MS _IOR(FLASHLIGHT_MAGIC, 130, int)
  106. #define FLASH_IOC_GET_PRE_ON_TIME_MS_DUTY _IOR(FLASHLIGHT_MAGIC, 131, int)
  107. #define FLASH_IOC_SET_REG_ADR _IOR(FLASHLIGHT_MAGIC, 135, int)
  108. #define FLASH_IOC_SET_REG_VAL _IOR(FLASHLIGHT_MAGIC, 140, int)
  109. #define FLASH_IOC_SET_REG _IOR(FLASHLIGHT_MAGIC, 145, int)
  110. #define FLASH_IOC_GET_REG _IOR(FLASHLIGHT_MAGIC, 150, int)
  111. #define FLASH_IOC_GET_MAIN_PART_ID _IOR(FLASHLIGHT_MAGIC, 155, int)
  112. #define FLASH_IOC_GET_SUB_PART_ID _IOR(FLASHLIGHT_MAGIC, 160, int)
  113. #define FLASH_IOC_GET_MAIN2_PART_ID _IOR(FLASHLIGHT_MAGIC, 165, int)
  114. #define FLASH_IOC_GET_PART_ID _IOR(FLASHLIGHT_MAGIC, 166, int)
  115. #define FLASH_IOC_HAS_LOW_POWER_DETECT _IOR(FLASHLIGHT_MAGIC, 170, int)
  116. #define FLASH_IOC_LOW_POWER_DETECT_START _IOR(FLASHLIGHT_MAGIC, 175, int)
  117. #define FLASH_IOC_LOW_POWER_DETECT_END _IOR(FLASHLIGHT_MAGIC, 180, int)
  118. #define FLASH_IOC_IS_LOW_POWER _IOR(FLASHLIGHT_MAGIC, 182, int)
  119. #define FLASH_IOC_GET_ERR _IOR(FLASHLIGHT_MAGIC, 185, int)
  120. #define FLASH_IOC_GET_PROTOCOL_VERSION _IOR(FLASHLIGHT_MAGIC, 190, int) /* 0: old, 1: 95 */
  121. #define FLASH_IOC_IS_CHARGER_IN _IOR(FLASHLIGHT_MAGIC, 195, int)
  122. #define FLASH_IOC_IS_OTG_USE _IOR(FLASHLIGHT_MAGIC, 200, int)
  123. #define FLASH_IOC_GET_FLASH_DRIVER_NAME_ID _IOR(FLASHLIGHT_MAGIC, 205, int)
  124. typedef struct {
  125. int sensorDev;
  126. int arg;
  127. } StrobeDrvArg;
  128. /* Function declaration to avoid extern usage in .c files, for kernel standardization */
  129. /* New init functions */
  130. int strobe_getPartId(int sensorDev, int strobeId);
  131. MUINT32 strobeInit_dummy(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  132. MUINT32 constantFlashlightInit(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  133. MUINT32 strobeInit_main_sid1_part2(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  134. MUINT32 strobeInit_main_sid2_part1(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  135. MUINT32 strobeInit_main_sid2_part2(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  136. MUINT32 subStrobeInit(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  137. MUINT32 strobeInit_sub_sid1_part2(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  138. MUINT32 strobeInit_sub_sid2_part1(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  139. MUINT32 strobeInit_sub_sid2_part2(FLASHLIGHT_FUNCTION_STRUCT **pfFunc);
  140. /* Old init function */
  141. MUINT32 dummyFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  142. MUINT32 defaultFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  143. MUINT32 peakFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  144. MUINT32 torchFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  145. MUINT32 constantFlashlightInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  146. MUINT32 subStrobeInit(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  147. MUINT32 strobeInit_sub_sid1_part2(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  148. MUINT32 strobeInit_main_sid1_part2(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  149. /* Tablet version */
  150. MUINT32 subStrobeInit_2ndPart_2(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  151. MUINT32 mainStrobeInit_2ndPart_2(PFLASHLIGHT_FUNCTION_STRUCT *pfFunc);
  152. /* Externs from imgsensor*/
  153. int iWriteRegI2C(u8 *a_pSendData , u16 a_sizeSendData, u16 i2cId);
  154. int iReadRegI2C(u8 *a_pSendData , u16 a_sizeSendData, u8 *a_pRecvData, u16 a_sizeRecvData, u16 i2cId);
  155. /* Externs from xhci*/
  156. bool mtk_is_host_mode(void);
  157. /* Boost4Flash */
  158. int mt6332_OpenBoost4Flash(void);
  159. int mt6332_CloseBoost4Flash(void);
  160. #endif