pq.c 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  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. INT16 bRgain = 1024,bGgain = 1024,bBgain = 1024,bGammaSwitch = 0,bGammaIndex = 0;
  102. VIP_GetSource(&ucUserSource, &ucSubSource);
  103. KICDebugPrint("%s 1: ucFunID=%d iUserMin=%d iUserMax=%d iValue=%d iRealValue=%d\n",__FUNCTION__, ucFunID, iUserMin, iUserMax, iValue, iRealValue);
  104. KICDebugPrint("%s 2: ucFunID=%d iUserMin=%d iUserMax=%d iValue=%d iRealValue=%d\n",__FUNCTION__, ucFunID, iUserMin, iUserMax, iValue, iRealValue);
  105. PQ_SetMenuValue(ucFunID,iRealValue);
  106. if(ucFunID == PQ_COLORTEMPGAIN)
  107. {
  108. bGgain = iValue & 0x0000ffff;
  109. bRgain = (iValue >> 16) & 0x0000ffff;
  110. bBgain = (iUserMin >> 16) & 0x0000ffff;
  111. bGammaIndex = iUserMin & 0x000000ff;
  112. bGammaSwitch = (iUserMin >> 8) & 0x000000ff;
  113. PQ_SetMenuValueCT(ucFunID,bRgain,bGgain,bBgain);
  114. }
  115. switch(ucFunID)
  116. {
  117. case PQ_BRIGHTNESS:
  118. PQ_Brightness(TRUE, iRealValue);
  119. break;
  120. case PQ_CONTRAST:
  121. if(PQ_IsFadeEn())
  122. {
  123. PQ_SetCurrContrastValue(iRealValue);
  124. }
  125. else
  126. {
  127. PQ_Contrast(TRUE, iRealValue);
  128. }
  129. break;
  130. case PQ_SHARPNESS:
  131. utempSharpnesscValue = iRealValue;
  132. PQ_Sharpness(TRUE, iRealValue);
  133. break;
  134. case PQ_SATURATION:
  135. PQ_Saturation(iRealValue);
  136. break;
  137. case PQ_HUE:
  138. PQ_Hue(iRealValue);
  139. break;
  140. case PQ_CT_R_GAIN: // color temp
  141. PQ_ColorTempGain(PQ_CT_GAIN_R, iRealValue);
  142. break;
  143. case PQ_CT_G_GAIN:
  144. PQ_ColorTempGain(PQ_CT_GAIN_G, iRealValue);
  145. break;
  146. case PQ_CT_B_GAIN:
  147. PQ_ColorTempGain(PQ_CT_GAIN_B, iRealValue);
  148. break;
  149. case PQ_CT_R_BIAS:
  150. PQ_ColorTempBias(PQ_CT_BIAS_R, iRealValue);
  151. break;
  152. case PQ_CT_G_BIAS:
  153. PQ_ColorTempBias(PQ_CT_BIAS_G, iRealValue);
  154. break;
  155. case PQ_CT_B_BIAS:
  156. PQ_ColorTempBias(PQ_CT_BIAS_B, iRealValue);
  157. break;
  158. case PQ_COLORTEMPGAIN:
  159. PQ_ColorTempGainALL(bRgain,bGgain,bBgain,bGammaSwitch,bGammaIndex);
  160. break;
  161. case PQ_DIGITAL_NR:
  162. PQ_3DNoiseReductoin(iValue, iUserMin, iUserMax);
  163. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR);
  164. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR_SNR);
  165. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNR_C);
  166. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNRZ);
  167. PQ_Set_NR_BlockAlpha(NR_BLOCK_ALPHA_TNRZ_C);
  168. PQ_Set_NR_SLR_SNR(NR_SNR_BEFORE_SCALER);
  169. PQ_Set_NR_SLR_SNR(NR_SNR_AFTER_SCALER);
  170. #ifdef CONFIG_FORCE_NR_EFFECT_ENHANCED_IN_OFF_OPTION
  171. PQ_SigmaNR(TRUE, 0xff, 0xff, 0xff);
  172. #else
  173. PQ_SigmaNR(TRUE, iValue, 0xff, 0xff);
  174. #endif
  175. break;
  176. case PQ_MPEG_NOISE_FILTER:
  177. PQ_MPEGNoiseReductoin(iValue, iUserMin, iUserMax);
  178. break;
  179. case PQ_GAMMA:
  180. break;
  181. case PQ_GAMMATABLE:
  182. #ifdef CONFIG_PANEL_LM201WE3_TLF5_1680X1050__S2TEK_IS_DEFAULT
  183. #else
  184. if( iValue==0xff )
  185. {
  186. PQ_SetupGammaTable(DISABLE, 0xff, FALSE);
  187. }
  188. else
  189. {
  190. PQ_SetupGammaTable(ENABLE, iValue, FALSE);
  191. }
  192. #endif
  193. break;
  194. case PQ_DYNAMIC_CONTRAST:
  195. break;
  196. case PQ_COLOR_SPACE_MODE:
  197. PQ_ColorSpaceMode(iValue, ucUserSource);
  198. break;
  199. case PQ_GAMMA_CORRECT:
  200. PQ_EventGammaPattern((UINT8)iValue);
  201. break;
  202. case PQ_SET_COLOR_PROCESSER:
  203. PQ_ColorProcesser(iValue);
  204. break;
  205. case PQ_DYNAMIC_BACKLIGHT:
  206. #ifdef DYNAMIC_BACKLIGHT
  207. PQ_EnableDynamicBackLight(iValue, iUserMax);
  208. #endif
  209. break;
  210. case PQ_DEMOMODE:
  211. //PQ_DemoModeEnable(iValue);
  212. PQ_DPYDemoModeEnable(iValue);
  213. break;
  214. case PQ_STATIC_GAMMA:
  215. PQ_StaticGammaSetup(iValue);
  216. break;
  217. case PQ_DITHERING:
  218. PQ_SetDithering(iValue);
  219. break;
  220. case PQ_DITHERING_LEVEL:
  221. PQ_DitheringLevel(iValue);
  222. break;
  223. case PQ_DITHERING_ALGO:
  224. PQ_DitheringAlgo(iValue);
  225. break;
  226. case PQ_FLESHTONE_COMPENSATION:
  227. PQ_FlDetLevel(iValue);
  228. break;
  229. case PQ_ADAPTIVE_MAX_BACKLIGHT:
  230. #ifdef DYNAMIC_BACKLIGHT
  231. PQ_KICDebugPrint("%s, PQ_LIGHT_SENSOR_BACKLIGHT: light sensor = %d, index = %d\n",__FUNCTION__,iValue,iUserMin);
  232. PQ_GetLightSensorInfo(iValue, iUserMin, iUserMax);
  233. break;
  234. case PQ_DYNAMIC_BACKLIGHT_TYPE:
  235. PQ_SetDynamicBLType(iValue);
  236. break;
  237. case PQ_DYNAMIC_BACKLIGHT_HISTMINRATE:
  238. PQ_SetBacklightHistMin(iValue);
  239. break;
  240. case PQ_DYNAMIC_BACKLIGHT_PWMMAX:
  241. PQ_SetMaxPWM(iValue);
  242. break;
  243. #endif
  244. case PQ_DYNAMIC_CONTRAST_ENABLE:
  245. PQ_SW_DynamicContrast_Enable(iValue);
  246. break;
  247. case PQ_CONTRAST_LEVEL:
  248. PQ_SW_DynamicContrast_Y_Level(iValue);
  249. break;
  250. case PQ_CHROMA_LEVEL:
  251. PQ_SW_DynamicContrast_C_Level(iValue);
  252. break;
  253. case PQ_ALPHA_MODE1:
  254. PQ_SW_DynamicContrast_Alpha_Mode(0,iValue);
  255. break;
  256. case PQ_ALPHA_MODE2:
  257. PQ_SW_DynamicContrast_Alpha_Mode(1,iValue);
  258. break;
  259. case PQ_ALPHA_MODE3:
  260. PQ_SW_DynamicContrast_Alpha_Mode(2,iValue);
  261. break;
  262. case PQ_ALPHA_MODE4:
  263. PQ_SW_DynamicContrast_Alpha_Mode(3,iValue);
  264. break;
  265. case PQ_DVDSoruce:
  266. VIP_EventDVDSourceSelect(iValue);
  267. break;
  268. case PQ_NetworkSoruce:
  269. VIP_EventNetowrkSourceSelect(iValue);
  270. break;
  271. case PQ_PWMFREQ:
  272. PQ_SETPWMFreq(iValue);
  273. break;
  274. default:
  275. break;
  276. }
  277. }
  278. INT32 sispq_init(void)
  279. {
  280. INT32 err, devno;
  281. #ifndef LOGO_PROLONG
  282. PQ_Initialization();
  283. #endif
  284. devno=MKDEV(CDEV_PQ_MAJOR,0);
  285. cdev_init(&cdev_sispq, &fops);
  286. cdev_sispq.owner = THIS_MODULE;
  287. cdev_sispq.ops = &fops;
  288. err = cdev_add (&cdev_sispq, devno, 1);
  289. if (err)
  290. {
  291. PQDebugPrint( "Error");
  292. }
  293. return 0;
  294. }
  295. void sispq_exit(void)
  296. {
  297. cdev_del(&cdev_sispq);
  298. }
  299. #ifndef INIT_BY_KMF
  300. module_init(sispq_init);
  301. module_exit(sispq_exit);
  302. #endif
  303. MODULE_LICENSE("Dual BSD/GPL");