pq.c 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. #include "osdef.h" //joshua check
  2. #include "pq.h"
  3. #include "pq_hw.h"
  4. #include "pq_ioctl.h"
  5. #include <linux/version.h>
  6. #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)
  7. #include <drv_dev.h>
  8. #include <drv_platform.h>
  9. #endif
  10. #include "drv_types.h"
  11. //PQ_CONTEXT PQContext;
  12. extern UINT8 utempSharpnesscValue;
  13. #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,8)
  14. LONG sispq_ioctl(struct file *filp,UINT32 cmd,ULONG arg);
  15. #else
  16. ssize_t sispq_ioctl(struct inode *inode,struct file *filp,UINT32 cmd,ULONG arg);
  17. #endif
  18. INT32 sispq_init(void);
  19. void sispq_exit(void);
  20. static struct file_operations fops = {
  21. #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,8)
  22. unlocked_ioctl: sispq_ioctl,
  23. #else
  24. ioctl: sispq_ioctl,
  25. #endif
  26. owner: THIS_MODULE,
  27. };
  28. static struct cdev cdev_sispq = {
  29. .kobj = {.name = "sispq", },
  30. .owner = THIS_MODULE,
  31. .ops = &fops,
  32. };
  33. void PQ_Initialization(void)
  34. {
  35. PQ_InitialTable();
  36. }
  37. #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,8)
  38. LONG sispq_ioctl(struct file *filp,UINT32 cmd,ULONG arg){
  39. #else
  40. ssize_t sispq_ioctl(struct inode *inode,struct file *filp,UINT32 cmd,ULONG arg){
  41. #endif
  42. switch(cmd){
  43. #ifdef DYNAMIC_BACKLIGHT
  44. case PQ_IOCTL_SWITCH_DYNAMIC_BACKLIGHT:
  45. {
  46. PQ_DynamicBacklight DynamicBacklight;
  47. copy_from_user(&DynamicBacklight, (PQ_DynamicBacklight*)arg, sizeof(PQ_DynamicBacklight));
  48. PQ_EnableDynamicBackLight(DynamicBacklight.ucLevel, DynamicBacklight.uiBacklightValue);
  49. }
  50. break;
  51. case PQ_IOCTL_SWITCH_DYNAMIC_BACKLIGHT_MAP:
  52. {
  53. PQ_DynamicBacklight DynamicBacklight;
  54. copy_from_user(&DynamicBacklight, (PQ_DynamicBacklight*)arg, sizeof(PQ_DynamicBacklight));
  55. PQ_DynamicBackLightAP(DynamicBacklight.ucLevel, DynamicBacklight.uiBacklightValue);
  56. }
  57. break;
  58. case PQ_IOCTL_DYNCBACKLIGHT:
  59. {
  60. PQ_BacklightParameter BackLightPara;
  61. copy_from_user(&BackLightPara, (PQ_BacklightParameter*)arg, sizeof(PQ_BacklightParameter));
  62. PQ_SetBacklightParameter(BackLightPara.ucTop,BackLightPara.ucBot,BackLightPara.ucTh_low,BackLightPara.ucTh_High);
  63. }
  64. break;
  65. #endif
  66. case PQ_IOCTL_FADE_IN_OUT:
  67. {
  68. PQ_FadeInOut FadeInOut;
  69. copy_from_user(&FadeInOut, (PQ_FadeInOut*)arg, sizeof(PQ_FadeInOut));
  70. PQ_SetFadeValue(1, FadeInOut.ucStartValue, FadeInOut.ucEndValue, FadeInOut.ucIncValue);
  71. }
  72. break;
  73. }
  74. return 0;
  75. }
  76. PQ_EXPORT void PQ_WatchDemo_DynamicContrast_AvgY(INT32* demoMin, INT32* demoMax,INT32* demoCurValue)
  77. {
  78. }
  79. void PQ_EventGammaPattern(UINT8 ucGrayLevel)
  80. {
  81. PQ_GammaCorrect(ucGrayLevel);
  82. }
  83. PQ_EXPORT void PQ_ChangeBackLight(UINT32 dwLightTarget, INT32 nSpeed)
  84. {
  85. #ifdef DYNAMIC_BACKLIGHT
  86. PQ_KICDebugPrint("%s:dwLightTarget = %ld(%#lx), nSpeed = %d\n",__FUNCTION__, dwLightTarget, dwLightTarget, nSpeed);
  87. dwLightTarget &= ~(0x80000000); //clear the setting bit
  88. //PQ_GetOrderedBackLight(&dwLightTarget);
  89. PQ_PresetBackLight(TRUE, dwLightTarget, nSpeed);
  90. #endif
  91. }
  92. PQ_EXPORT void PQ_SetColorStyleSaturation(UINT8 ucType)
  93. {
  94. PQ_ColorStyleSaturation(ucType);
  95. }
  96. PQ_EXPORT void PQ_EventSetFunction(UINT8 ucFunID, INT32 iValue, INT32 iUserMin, INT32 iUserMax)
  97. {
  98. UINT8 ucUserSource;
  99. UINT8 ucSubSource;
  100. INT32 iRealValue= iValue;
  101. VIP_GetSource(&ucUserSource, &ucSubSource);
  102. KICDebugPrint("%s 1: ucFunID=%d iUserMin=%d iUserMax=%d iValue=%d iRealValue=%d\n",__FUNCTION__, ucFunID, iUserMin, iUserMax, iValue, iRealValue);
  103. KICDebugPrint("%s 2: ucFunID=%d iUserMin=%d iUserMax=%d iValue=%d iRealValue=%d\n",__FUNCTION__, ucFunID, iUserMin, iUserMax, iValue, iRealValue);
  104. PQ_SetMenuValue(ucFunID,iRealValue);
  105. switch(ucFunID)
  106. {
  107. case PQ_BRIGHTNESS:
  108. PQ_Brightness(TRUE, iRealValue);
  109. break;
  110. case PQ_CONTRAST:
  111. if(PQ_IsFadeEn())
  112. {
  113. PQ_SetCurrContrastValue(iRealValue);
  114. }
  115. else
  116. {
  117. PQ_Contrast(TRUE, iRealValue);
  118. }
  119. break;
  120. case PQ_SHARPNESS:
  121. utempSharpnesscValue = iRealValue;
  122. PQ_Sharpness(TRUE, iRealValue);
  123. break;
  124. case PQ_SATURATION:
  125. PQ_Saturation(iRealValue);
  126. break;
  127. case PQ_HUE:
  128. PQ_Hue(iRealValue);
  129. break;
  130. case PQ_CT_R_GAIN: // color temp
  131. PQ_ColorTempGain(PQ_CT_GAIN_R, iRealValue);
  132. break;
  133. case PQ_CT_G_GAIN:
  134. PQ_ColorTempGain(PQ_CT_GAIN_G, iRealValue);
  135. break;
  136. case PQ_CT_B_GAIN:
  137. PQ_ColorTempGain(PQ_CT_GAIN_B, iRealValue);
  138. break;
  139. case PQ_CT_R_BIAS:
  140. PQ_ColorTempBias(PQ_CT_BIAS_R, iRealValue);
  141. break;
  142. case PQ_CT_G_BIAS:
  143. PQ_ColorTempBias(PQ_CT_BIAS_G, iRealValue);
  144. break;
  145. case PQ_CT_B_BIAS:
  146. PQ_ColorTempBias(PQ_CT_BIAS_B, iRealValue);
  147. break;
  148. case PQ_DIGITAL_NR:
  149. PQ_3DNoiseReductoin(iValue, iUserMin, iUserMax);
  150. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR);
  151. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR_SNR);
  152. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR_C);
  153. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNRZ);
  154. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNRZ_C);
  155. PQ_Set_NR_SLR_SNR(NR_SNR_BEFORE_SCALER);
  156. PQ_Set_NR_SLR_SNR(NR_SNR_AFTER_SCALER);
  157. break;
  158. case PQ_MPEG_NOISE_FILTER:
  159. PQ_MPEGNoiseReductoin(iValue, iUserMin, iUserMax);
  160. break;
  161. case PQ_GAMMA:
  162. /*
  163. if (iValue < 2)
  164. PQ_SetupGammaTable(ENABLE, iValue);
  165. else
  166. PQ_SetupGammaTable(DISABLE,iValue);
  167. */
  168. break;
  169. case PQ_GAMMATABLE:
  170. #ifdef CONFIG_PANEL_LM201WE3_TLF5_1680X1050__S2TEK_IS_DEFAULT
  171. #else
  172. if( iValue==0xff )
  173. PQ_SetupGammaTable(DISABLE, 0xff);
  174. else
  175. PQ_SetupGammaTable(ENABLE, iValue);
  176. #endif
  177. break;
  178. case PQ_DYNAMIC_CONTRAST:
  179. break;
  180. case PQ_COLOR_SPACE_MODE:
  181. PQ_ColorSpaceMode(iValue, ucUserSource);
  182. break;
  183. case PQ_GAMMA_CORRECT:
  184. PQ_EventGammaPattern((UINT8)iValue);
  185. break;
  186. case PQ_SET_COLOR_PROCESSER:
  187. PQ_ColorProcesser(iValue);
  188. break;
  189. case PQ_DYNAMIC_BACKLIGHT:
  190. #ifdef DYNAMIC_BACKLIGHT
  191. PQ_EnableDynamicBackLight(iValue, iUserMax);
  192. #endif
  193. break;
  194. case PQ_DEMOMODE:
  195. //PQ_DemoModeEnable(iValue);
  196. PQ_DPYDemoModeEnable(iValue);
  197. break;
  198. case PQ_STATIC_GAMMA:
  199. PQ_StaticGammaSetup(iValue);
  200. break;
  201. case PQ_DITHERING:
  202. PQ_SetDithering(iValue);
  203. break;
  204. case PQ_DITHERING_LEVEL:
  205. PQ_DitheringLevel(iValue);
  206. break;
  207. case PQ_DITHERING_ALGO:
  208. PQ_DitheringAlgo(iValue);
  209. break;
  210. case PQ_FLESHTONE_COMPENSATION:
  211. PQ_FlDetLevel(iValue);
  212. break;
  213. case PQ_ADAPTIVE_MAX_BACKLIGHT:
  214. #ifdef DYNAMIC_BACKLIGHT
  215. PQ_KICDebugPrint("%s, PQ_LIGHT_SENSOR_BACKLIGHT: light sensor = %d, index = %d\n",__FUNCTION__,iValue,iUserMin);
  216. PQ_GetLightSensorInfo(iValue, iUserMin, iUserMax);
  217. break;
  218. case PQ_DYNAMIC_BACKLIGHT_TYPE:
  219. PQ_SetDynamicBLType(iValue);
  220. break;
  221. case PQ_DYNAMIC_BACKLIGHT_HISTMINRATE:
  222. PQ_SetBacklightHistMin(iValue);
  223. break;
  224. case PQ_DYNAMIC_BACKLIGHT_PWMMAX:
  225. PQ_SetMaxPWM(iValue);
  226. break;
  227. #endif
  228. case PQ_DYNAMIC_CONTRAST_ENABLE:
  229. PQ_SW_DynamicContrast_Enable(iValue);
  230. break;
  231. case PQ_CONTRAST_LEVEL:
  232. PQ_SW_DynamicContrast_Y_Level(iValue);
  233. break;
  234. case PQ_CHROMA_LEVEL:
  235. PQ_SW_DynamicContrast_C_Level(iValue);
  236. break;
  237. case PQ_ALPHA_MODE1:
  238. PQ_SW_DynamicContrast_Alpha_Mode(0,iValue);
  239. break;
  240. case PQ_ALPHA_MODE2:
  241. PQ_SW_DynamicContrast_Alpha_Mode(1,iValue);
  242. break;
  243. case PQ_ALPHA_MODE3:
  244. PQ_SW_DynamicContrast_Alpha_Mode(2,iValue);
  245. break;
  246. case PQ_ALPHA_MODE4:
  247. PQ_SW_DynamicContrast_Alpha_Mode(3,iValue);
  248. break;
  249. case PQ_DVDSoruce:
  250. VIP_EventDVDSourceSelect(iValue);
  251. break;
  252. case PQ_PWMFREQ:
  253. PQ_SETPWMFreq(iValue);
  254. break;
  255. default:
  256. break;
  257. }
  258. }
  259. INT32 sispq_init(void)
  260. {
  261. INT32 err, devno;
  262. #ifndef LOGO_PROLONG
  263. PQ_Initialization();
  264. #endif
  265. devno=MKDEV(CDEV_PQ_MAJOR,0);
  266. cdev_init(&cdev_sispq, &fops);
  267. cdev_sispq.owner = THIS_MODULE;
  268. cdev_sispq.ops = &fops;
  269. err = cdev_add (&cdev_sispq, devno, 1);
  270. if (err)
  271. {
  272. PQDebugPrint( "Error");
  273. }
  274. return 0;
  275. }
  276. void sispq_exit(void)
  277. {
  278. cdev_del(&cdev_sispq);
  279. }
  280. #ifndef INIT_BY_KMF
  281. module_init(sispq_init);
  282. module_exit(sispq_exit);
  283. #endif
  284. MODULE_LICENSE("Dual BSD/GPL");