mdnie_tft_msm8x26.c 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  1. /* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  15. * 02110-1301, USA.
  16. *
  17. */
  18. #include <linux/module.h>
  19. #include <linux/kernel.h>
  20. #include <linux/errno.h>
  21. #include <linux/clk.h>
  22. #include <linux/mutex.h>
  23. #include <linux/poll.h>
  24. #include <linux/wait.h>
  25. #include <linux/fs.h>
  26. #include <linux/irq.h>
  27. #include <linux/mm.h>
  28. #include <linux/fb.h>
  29. #include <linux/ctype.h>
  30. #include <linux/miscdevice.h>
  31. #include <linux/dma-mapping.h>
  32. #include <linux/delay.h>
  33. #include <linux/device.h>
  34. #include <linux/fb.h>
  35. #include <linux/msm_mdp.h>
  36. #include <linux/ioctl.h>
  37. #include <linux/lcd.h>
  38. #include "mdss_fb.h"
  39. #include "mdss_panel.h"
  40. #include "mdss_dsi.h"
  41. #include "mdss_samsung_dsi_panel_msm8x26.h"
  42. #include "mdnie_tft_msm8x26.h"
  43. #if defined(CONFIG_MACH_MS01_EUR_3G) || defined(CONFIG_MACH_MS01_EUR_LTE)
  44. #include "mdnie_lite_tuning_data_ms01.h"
  45. #elif defined(CONFIG_SEC_MILLET_PROJECT) || defined(CONFIG_SEC_DEGAS_PROJECT)
  46. #include "mdnie_tft_data_millet.h"
  47. #elif defined(CONFIG_SEC_T10_PROJECT) || defined(CONFIG_SEC_T8_PROJECT)
  48. #include "mdnie_tft_data_t10_t8.h"
  49. #elif defined(CONFIG_MACH_MEGA23GEUR_OPEN)
  50. #include "mdnie_tft_data_mega23g.h"
  51. #endif
  52. int get_lcd_attached(void);
  53. #define MDNIE_TFT_DEBUG
  54. #ifdef MDNIE_TFT_DEBUG
  55. #define DPRINT(x...) printk(KERN_ERR "[mdnie lite] " x)
  56. #else
  57. #define DPRINT(x...)
  58. #endif
  59. #define MAX_LUT_SIZE 256
  60. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL)
  61. #define PAYLOAD1 mdni_tune_cmd[7]
  62. #define PAYLOAD2 mdni_tune_cmd[6]
  63. #define PAYLOAD3 mdni_tune_cmd[5]
  64. #define PAYLOAD4 mdni_tune_cmd[4]
  65. #define PAYLOAD5 mdni_tune_cmd[3]
  66. #define PAYLOAD6 mdni_tune_cmd[2]
  67. #define INPUT_PAYLOAD1(x) PAYLOAD1.payload = x
  68. #define INPUT_PAYLOAD2(x) PAYLOAD2.payload = x
  69. #define INPUT_PAYLOAD3(x) PAYLOAD3.payload = x
  70. #define INPUT_PAYLOAD4(x) PAYLOAD4.payload = x
  71. #define INPUT_PAYLOAD5(x) PAYLOAD5.payload = x
  72. #define INPUT_PAYLOAD6(x) PAYLOAD6.payload = x
  73. #elif defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  74. #define PAYLOAD1 mdni_tune_cmd[0]
  75. #define PAYLOAD2 mdni_tune_cmd[1]
  76. #define PAYLOAD3 mdni_tune_cmd[2]
  77. #define PAYLOAD4 mdni_tune_cmd[3]
  78. #define INPUT_PAYLOAD1(x) PAYLOAD1.payload = x
  79. #define INPUT_PAYLOAD2(x) PAYLOAD2.payload = x
  80. #define INPUT_PAYLOAD3(x) PAYLOAD3.payload = x
  81. #define INPUT_PAYLOAD4(x) PAYLOAD4.payload = x
  82. #else
  83. #define PAYLOAD1 mdni_tune_cmd[3]
  84. #define PAYLOAD2 mdni_tune_cmd[2]
  85. #define INPUT_PAYLOAD1(x) PAYLOAD1.payload = x
  86. #define INPUT_PAYLOAD2(x) PAYLOAD2.payload = x
  87. #endif
  88. int play_speed_1_5;
  89. struct dsi_buf dsi_mdnie_tx_buf;
  90. static struct mdss_samsung_driver_data *mdnie_msd;
  91. struct mdnie_tft_type mdnie_tun_state = {
  92. .mdnie_enable = false,
  93. .scenario = mDNIe_UI_MODE,
  94. .background = STANDARD_MODE,
  95. .outdoor = OUTDOOR_OFF_MODE,
  96. .negative = mDNIe_NEGATIVE_OFF,
  97. .blind = ACCESSIBILITY_OFF,
  98. };
  99. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  100. const char background_name[MAX_BACKGROUND_MODE][16] = {
  101. "DYNAMIC",
  102. "STANDARD",
  103. "MOVIE",
  104. "AUTO"
  105. };
  106. #else
  107. const char background_name[MAX_BACKGROUND_MODE][16] = {
  108. "DYNAMIC",
  109. "STANDARD",
  110. "MOVIE",
  111. "NATURAL",
  112. };
  113. #endif
  114. const char scenario_name[MAX_mDNIe_MODE][16] = {
  115. "UI_MODE",
  116. "VIDEO_MODE",
  117. "VIDEO_WARM_MODE",
  118. "VIDEO_COLD_MODE",
  119. "CAMERA_MODE",
  120. "NAVI",
  121. "GALLERY_MODE",
  122. "VT_MODE",
  123. "BROWSER",
  124. "eBOOK",
  125. #if defined(CONFIG_TDMB)
  126. "DMB_MODE",
  127. "DMB_WARM_MODE",
  128. "DMB_COLD_MODE",
  129. #endif
  130. };
  131. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  132. const char accessibility_name[ACCESSIBILITY_MAX][20] = {
  133. "ACCESSIBILITY_OFF",
  134. "NEGATIVE_MODE",
  135. "COLOR_BLIND_MODE",
  136. };
  137. #endif
  138. #if !defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  139. static char level1_key[] = {
  140. 0xF0,
  141. 0x5A, 0x5A,
  142. };
  143. static char level2_key[] = {
  144. 0xF1,
  145. 0x5A, 0x5A,
  146. };
  147. #endif
  148. static char tune_data1[MDNIE_TUNE_FIRST_SIZE] = {0,};
  149. static char tune_data2[MDNIE_TUNE_SECOND_SIZE] = {0,};
  150. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL) || defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  151. static char tune_data3[MDNIE_TUNE_THIRD_SIZE] = {0,};
  152. static char tune_data4[MDNIE_TUNE_FOURTH_SIZE] = {0,};
  153. #if !defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  154. static char tune_data5[MDNIE_TUNE_FIFTH_SIZE] = {0,};
  155. static char tune_data6[MDNIE_TUNE_SIXTH_SIZE] = {0,};
  156. #endif
  157. #endif
  158. static struct dsi_cmd_desc mdni_tune_cmd[] = {
  159. #if !defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  160. {{DTYPE_DCS_LWRITE, 1, 0, 0, 1,
  161. sizeof(level1_key)}, level1_key},
  162. {{DTYPE_DCS_LWRITE, 1, 0, 0, 1,
  163. sizeof(level2_key)}, level2_key},
  164. #endif
  165. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  166. sizeof(tune_data1)}, tune_data1},
  167. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  168. sizeof(tune_data2)}, tune_data2},
  169. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL) || defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  170. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  171. sizeof(tune_data3)}, tune_data3},
  172. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  173. sizeof(tune_data4)}, tune_data4},
  174. #if !defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  175. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  176. sizeof(tune_data5)}, tune_data5},
  177. {{DTYPE_DCS_LWRITE, 1, 0, 0, 2,
  178. sizeof(tune_data6)}, tune_data6},
  179. #endif
  180. #endif
  181. };
  182. void print_tun_data(void)
  183. {
  184. int i;
  185. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL)
  186. DPRINT("---- size2 : %d", PAYLOAD1.dchdr.dlen);
  187. for (i = 0; i < MDNIE_TUNE_SIXTH_SIZE ; i++)
  188. DPRINT("0x%x ", PAYLOAD1.payload[i]);
  189. DPRINT("\n");
  190. DPRINT("---- size3 : %d", PAYLOAD2.dchdr.dlen);
  191. for (i = 0; i < MDNIE_TUNE_FIFTH_SIZE ; i++)
  192. DPRINT("0x%x ", PAYLOAD2.payload[i]);
  193. DPRINT("\n");
  194. DPRINT("---- size4 : %d", PAYLOAD3.dchdr.dlen);
  195. for (i = 0; i < MDNIE_TUNE_FOURTH_SIZE ; i++)
  196. DPRINT("0x%x ", PAYLOAD3.payload[i]);
  197. DPRINT("\n");
  198. DPRINT("---- size5 : %d", PAYLOAD4.dchdr.dlen);
  199. for (i = 0; i < MDNIE_TUNE_THIRD_SIZE ; i++)
  200. DPRINT("0x%x ", PAYLOAD4.payload[i]);
  201. DPRINT("\n");
  202. DPRINT("---- size6 : %d", PAYLOAD5.dchdr.dlen);
  203. for (i = 0; i < MDNIE_TUNE_SECOND_SIZE ; i++)
  204. DPRINT("0x%x ", PAYLOAD5.payload[i]);
  205. DPRINT("\n");
  206. DPRINT("---- size7 : %d", PAYLOAD6.dchdr.dlen);
  207. for (i = 0; i < MDNIE_TUNE_FIRST_SIZE ; i++)
  208. DPRINT("0x%x ", PAYLOAD6.payload[i]);
  209. DPRINT("\n");
  210. #elif defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  211. DPRINT("\n");
  212. DPRINT("---- size1 : %d", PAYLOAD1.dchdr.dlen);
  213. for (i = 0; i < MDNIE_TUNE_FIRST_SIZE ; i++)
  214. DPRINT("0x%x ", PAYLOAD1.payload[i]);
  215. DPRINT("\n");
  216. DPRINT("---- size2 : %d", PAYLOAD2.dchdr.dlen);
  217. for (i = 0; i < MDNIE_TUNE_SECOND_SIZE ; i++)
  218. DPRINT("0x%x ", PAYLOAD2.payload[i]);
  219. DPRINT("\n");
  220. DPRINT("---- size3 : %d", PAYLOAD3.dchdr.dlen);
  221. for (i = 0; i < MDNIE_TUNE_THIRD_SIZE ; i++)
  222. DPRINT("0x%x ", PAYLOAD3.payload[i]);
  223. DPRINT("\n");
  224. DPRINT("---- size4 : %d", PAYLOAD4.dchdr.dlen);
  225. for (i = 0; i < MDNIE_TUNE_FOURTH_SIZE ; i++)
  226. DPRINT("0x%x ", PAYLOAD4.payload[i]);
  227. DPRINT("\n");
  228. #else
  229. DPRINT("\n");
  230. DPRINT("---- size1 : %d", PAYLOAD1.dchdr.dlen);
  231. for (i = 0; i < MDNIE_TUNE_SECOND_SIZE ; i++)
  232. DPRINT("0x%x ", PAYLOAD1.payload[i]);
  233. DPRINT("\n");
  234. DPRINT("---- size2 : %d", PAYLOAD2.dchdr.dlen);
  235. for (i = 0; i < MDNIE_TUNE_FIRST_SIZE ; i++)
  236. DPRINT("0x%x ", PAYLOAD2.payload[i]);
  237. DPRINT("\n");
  238. #endif
  239. }
  240. void free_tun_cmd(void)
  241. {
  242. memset(tune_data1, 0, MDNIE_TUNE_FIRST_SIZE);
  243. memset(tune_data2, 0, MDNIE_TUNE_SECOND_SIZE);
  244. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL) || defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  245. memset(tune_data3, 0, MDNIE_TUNE_THIRD_SIZE);
  246. memset(tune_data4, 0, MDNIE_TUNE_FOURTH_SIZE);
  247. #if !defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  248. memset(tune_data5, 0, MDNIE_TUNE_FIFTH_SIZE);
  249. memset(tune_data6, 0, MDNIE_TUNE_SIXTH_SIZE);
  250. #endif
  251. #endif
  252. }
  253. void sending_tuning_cmd(void)
  254. {
  255. struct msm_fb_data_type *mfd;
  256. struct mdss_panel_data *pdata;
  257. struct mdss_dsi_ctrl_pdata *ctrl_pdata;
  258. mfd = mdnie_msd->mfd;
  259. pdata = mdnie_msd->mpd;
  260. ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata,
  261. panel_data);
  262. mutex_lock(&mdnie_msd->lock);
  263. if (mfd->resume_state == MIPI_SUSPEND_STATE) {
  264. mutex_unlock(&mdnie_msd->lock);
  265. DPRINT(" power off!!\n");
  266. } else {
  267. #ifdef MDNIE_TFT_DATA_DEBUG
  268. print_tun_data();
  269. #else
  270. DPRINT(" send tuning cmd!!\n");
  271. #endif
  272. mdss_dsi_cmds_send(ctrl_pdata, mdni_tune_cmd, ARRAY_SIZE(mdni_tune_cmd),0);
  273. mutex_unlock(&mdnie_msd->lock);
  274. }
  275. }
  276. void mDNIe_Set_Mode(enum Lcd_mDNIe_UI mode)
  277. {
  278. struct msm_fb_data_type *mfd;
  279. mfd = mdnie_msd->mfd;
  280. DPRINT("mDNIe_Set_Mode start , mode(%d), background(%d)\n",
  281. mode, mdnie_tun_state.background);
  282. if (get_lcd_attached() == 0)
  283. {
  284. printk("%s: LCD not connected!\n",__func__);
  285. return;
  286. }
  287. if (mfd->resume_state == MIPI_SUSPEND_STATE) {
  288. DPRINT("[ERROR] not ST_DSI_RESUME. do not send mipi cmd.\n");
  289. return;
  290. }
  291. if (!mdnie_tun_state.mdnie_enable) {
  292. DPRINT("[ERROR] mDNIE engine is OFF.\n");
  293. return;
  294. }
  295. if (mode < mDNIe_UI_MODE || mode >= MAX_mDNIe_MODE) {
  296. DPRINT("[ERROR] wrong Scenario mode value : %d\n",
  297. mode);
  298. return;
  299. }
  300. if (mdnie_tun_state.negative) {
  301. DPRINT("already negative mode(%d), do not set background(%d)\n",
  302. mdnie_tun_state.negative, mdnie_tun_state.background);
  303. return;
  304. }
  305. play_speed_1_5 = 0;
  306. /*
  307. * Blind mode & Screen mode has separated menu.
  308. * To make a sync below code added.
  309. * Bline mode has priority than Screen mode
  310. */
  311. if (mdnie_tun_state.blind == COLOR_BLIND)
  312. mode = mDNIE_BLINE_MODE;
  313. #if !defined(CONFIG_SEC_MATISSE_PROJECT) && !defined(CONFIG_MDP_NEGATIVE_SUPPORT)
  314. switch (mode) {
  315. #if defined (CONFIG_FB_MSM_MDSS_SDC_WXGA_PANEL)
  316. case mDNIe_UI_MODE:
  317. DPRINT(" = UI MODE =\n");
  318. INPUT_PAYLOAD1(UI_1);
  319. INPUT_PAYLOAD2(UI_2);
  320. INPUT_PAYLOAD3(UI_3);
  321. INPUT_PAYLOAD4(UI_4);
  322. INPUT_PAYLOAD5(UI_5);
  323. INPUT_PAYLOAD6(UI_6);
  324. break;
  325. case mDNIe_VIDEO_MODE:
  326. DPRINT(" = VIDEO MODE =\n");
  327. INPUT_PAYLOAD1(VIDEO_1);
  328. INPUT_PAYLOAD2(VIDEO_2);
  329. INPUT_PAYLOAD3(VIDEO_3);
  330. INPUT_PAYLOAD4(VIDEO_4);
  331. INPUT_PAYLOAD5(VIDEO_5);
  332. INPUT_PAYLOAD6(VIDEO_6);
  333. break;
  334. case mDNIe_VIDEO_WARM_MODE:
  335. DPRINT(" = VIDEO WARM MODE =\n");
  336. DPRINT("no data for WARM MODE..\n");
  337. break;
  338. case mDNIe_VIDEO_COLD_MODE:
  339. DPRINT(" = VIDEO COLD MODE =\n");
  340. DPRINT("no data for COLD MODE..\n");
  341. break;
  342. case mDNIe_CAMERA_MODE:
  343. DPRINT(" = CAMERA MODE =\n");
  344. INPUT_PAYLOAD1(CAMERA_1);
  345. INPUT_PAYLOAD2(CAMERA_2);
  346. INPUT_PAYLOAD3(CAMERA_3);
  347. INPUT_PAYLOAD4(CAMERA_4);
  348. INPUT_PAYLOAD5(CAMERA_5);
  349. INPUT_PAYLOAD6(CAMERA_6);
  350. break;
  351. case mDNIe_NAVI:
  352. DPRINT(" = NAVI MODE =\n");
  353. DPRINT("no data for NAVI MODE..\n");
  354. break;
  355. case mDNIe_GALLERY:
  356. DPRINT(" = GALLERY MODE =\n");
  357. INPUT_PAYLOAD1(GALLERY_1);
  358. INPUT_PAYLOAD2(GALLERY_2);
  359. INPUT_PAYLOAD3(GALLERY_3);
  360. INPUT_PAYLOAD4(GALLERY_4);
  361. INPUT_PAYLOAD5(GALLERY_5);
  362. INPUT_PAYLOAD6(GALLERY_6);
  363. break;
  364. case mDNIe_VT_MODE:
  365. DPRINT(" = VT MODE =\n");
  366. INPUT_PAYLOAD1(VT_1);
  367. INPUT_PAYLOAD2(VT_2);
  368. INPUT_PAYLOAD3(VT_3);
  369. INPUT_PAYLOAD4(VT_4);
  370. INPUT_PAYLOAD5(VT_5);
  371. INPUT_PAYLOAD6(VT_6);
  372. break;
  373. #if defined(CONFIG_TDMB)
  374. case mDNIe_DMB_MODE:
  375. DPRINT(" = DMB MODE =\n");
  376. DPRINT("no data for DMB MODE..\n");
  377. break;
  378. case mDNIe_DMB_WARM_MODE:
  379. DPRINT(" = DMB WARM MODE =\n");
  380. DPRINT("no data for DMB WARM MODE..\n");
  381. break;
  382. case mDNIe_DMB_COLD_MODE:
  383. DPRINT(" = DMB COLD MODE =\n");
  384. DPRINT("no data for DMB COLD MODE..\n");
  385. break;
  386. #endif
  387. case mDNIe_BROWSER_MODE:
  388. DPRINT(" = BROWSER MODE =\n");
  389. INPUT_PAYLOAD1(BROWSER_1);
  390. INPUT_PAYLOAD2(BROWSER_2);
  391. INPUT_PAYLOAD3(BROWSER_3);
  392. INPUT_PAYLOAD4(BROWSER_4);
  393. INPUT_PAYLOAD5(BROWSER_5);
  394. INPUT_PAYLOAD6(BROWSER_6);
  395. break;
  396. case mDNIe_eBOOK_MODE:
  397. DPRINT(" = eBOOK MODE =\n");
  398. INPUT_PAYLOAD1(eBOOK_1);
  399. INPUT_PAYLOAD2(eBOOK_2);
  400. INPUT_PAYLOAD3(eBOOK_3);
  401. INPUT_PAYLOAD4(eBOOK_4);
  402. INPUT_PAYLOAD5(eBOOK_5);
  403. INPUT_PAYLOAD6(eBOOK_6);
  404. break;
  405. case mDNIe_EMAIL_MODE:
  406. DPRINT(" = EMAIL MODE =\n");
  407. INPUT_PAYLOAD1(eMAIL_1);
  408. INPUT_PAYLOAD2(eMAIL_2);
  409. INPUT_PAYLOAD3(eMAIL_3);
  410. INPUT_PAYLOAD4(eMAIL_4);
  411. INPUT_PAYLOAD5(eMAIL_5);
  412. INPUT_PAYLOAD6(eMAIL_6);
  413. break;
  414. case mDNIE_BLINE_MODE:
  415. DPRINT(" = BLIND MODE =\n");
  416. INPUT_PAYLOAD1(COLOR_BLIND_1);
  417. INPUT_PAYLOAD2(COLOR_BLIND_2);
  418. INPUT_PAYLOAD3(COLOR_BLIND_3);
  419. INPUT_PAYLOAD4(COLOR_BLIND_4);
  420. INPUT_PAYLOAD5(COLOR_BLIND_5);
  421. INPUT_PAYLOAD6(COLOR_BLIND_6);
  422. break;
  423. #elif defined (CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  424. case mDNIe_UI_MODE:
  425. DPRINT(" = UI MODE =\n");
  426. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  427. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  428. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  429. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  430. pr_err("mdnie tune data is NULL!\n");
  431. return;
  432. } else {
  433. INPUT_PAYLOAD1(
  434. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  435. INPUT_PAYLOAD2(
  436. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  437. INPUT_PAYLOAD3(
  438. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  439. INPUT_PAYLOAD4(
  440. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  441. }
  442. break;
  443. case mDNIe_VIDEO_MODE:
  444. DPRINT(" = VIDEO MODE =\n");
  445. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  446. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  447. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  448. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  449. pr_err("mdnie tune data is NULL!\n");
  450. return;
  451. } else {
  452. INPUT_PAYLOAD1(
  453. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  454. INPUT_PAYLOAD2(
  455. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  456. INPUT_PAYLOAD3(
  457. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  458. INPUT_PAYLOAD4(
  459. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  460. }
  461. break;
  462. case mDNIe_VIDEO_WARM_MODE:
  463. DPRINT(" = VIDEO WARM MODE =\n");
  464. DPRINT("no data for WARM MODE..\n");
  465. break;
  466. case mDNIe_VIDEO_COLD_MODE:
  467. DPRINT(" = VIDEO COLD MODE =\n");
  468. DPRINT("no data for COLD MODE..\n");
  469. break;
  470. case mDNIe_CAMERA_MODE:
  471. DPRINT(" = CAMERA MODE =\n");
  472. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  473. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  474. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  475. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  476. pr_err("mdnie tune data is NULL!\n");
  477. return;
  478. } else {
  479. INPUT_PAYLOAD1(
  480. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  481. INPUT_PAYLOAD2(
  482. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  483. INPUT_PAYLOAD3(
  484. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  485. INPUT_PAYLOAD4(
  486. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  487. }
  488. break;
  489. case mDNIe_NAVI:
  490. DPRINT(" = NAVI MODE =\n");
  491. DPRINT("no data for NAVI MODE..\n");
  492. break;
  493. case mDNIe_GALLERY:
  494. DPRINT(" = GALLERY MODE =\n");
  495. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  496. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  497. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  498. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  499. pr_err("mdnie tune data is NULL!\n");
  500. return;
  501. } else {
  502. INPUT_PAYLOAD1(
  503. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  504. INPUT_PAYLOAD2(
  505. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  506. INPUT_PAYLOAD3(
  507. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  508. INPUT_PAYLOAD4(
  509. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  510. }
  511. break;
  512. case mDNIe_VT_MODE:
  513. DPRINT(" = VT MODE =\n");
  514. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  515. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  516. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  517. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  518. pr_err("mdnie tune data is NULL!\n");
  519. return;
  520. } else {
  521. INPUT_PAYLOAD1(
  522. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  523. INPUT_PAYLOAD2(
  524. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  525. INPUT_PAYLOAD3(
  526. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  527. INPUT_PAYLOAD4(
  528. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  529. }
  530. break;
  531. #if defined(CONFIG_TDMB)
  532. case mDNIe_DMB_MODE:
  533. DPRINT(" = DMB MODE =\n");
  534. DPRINT("no data for DMB MODE..\n");
  535. break;
  536. case mDNIe_DMB_WARM_MODE:
  537. DPRINT(" = DMB WARM MODE =\n");
  538. DPRINT("no data for DMB WARM MODE..\n");
  539. break;
  540. case mDNIe_DMB_COLD_MODE:
  541. DPRINT(" = DMB COLD MODE =\n");
  542. DPRINT("no data for DMB COLD MODE..\n");
  543. break;
  544. #endif
  545. case mDNIe_BROWSER_MODE:
  546. DPRINT(" = BROWSER MODE =\n");
  547. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  548. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  549. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  550. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  551. pr_err("mdnie tune data is NULL!\n");
  552. return;
  553. } else {
  554. INPUT_PAYLOAD1(
  555. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  556. INPUT_PAYLOAD2(
  557. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  558. INPUT_PAYLOAD3(
  559. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  560. INPUT_PAYLOAD4(
  561. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  562. }
  563. break;
  564. case mDNIe_eBOOK_MODE:
  565. DPRINT(" = eBOOK MODE =\n");
  566. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  567. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  568. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  569. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  570. pr_err("mdnie tune data is NULL!\n");
  571. return;
  572. } else {
  573. INPUT_PAYLOAD1(
  574. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  575. INPUT_PAYLOAD2(
  576. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  577. INPUT_PAYLOAD3(
  578. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  579. INPUT_PAYLOAD4(
  580. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  581. }
  582. break;
  583. case mDNIe_EMAIL_MODE:
  584. DPRINT(" = EMAIL MODE =\n");
  585. if (!mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0] ||
  586. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1] ||
  587. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2] ||
  588. !mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]) {
  589. pr_err("mdnie tune data is NULL!\n");
  590. return;
  591. } else {
  592. INPUT_PAYLOAD1(
  593. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][0]);
  594. INPUT_PAYLOAD2(
  595. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][1]);
  596. INPUT_PAYLOAD3(
  597. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][2]);
  598. INPUT_PAYLOAD4(
  599. mdnie_tune_value[mdnie_tun_state.scenario][mdnie_tun_state.background][mdnie_tun_state.outdoor][3]);
  600. }
  601. break;
  602. case mDNIE_BLINE_MODE:
  603. DPRINT(" = BLIND MODE =\n");
  604. if (!blind_tune_value[mdnie_tun_state.blind][0] || !blind_tune_value[mdnie_tun_state.blind][1] ||
  605. !blind_tune_value[mdnie_tun_state.blind][2] || !blind_tune_value[mdnie_tun_state.blind][3]) {
  606. pr_err("mdnie tune data is NULL!\n");
  607. return;
  608. } else {
  609. INPUT_PAYLOAD1(blind_tune_value[mdnie_tun_state.blind][0]);
  610. INPUT_PAYLOAD2(blind_tune_value[mdnie_tun_state.blind][1]);
  611. INPUT_PAYLOAD3(blind_tune_value[mdnie_tun_state.blind][2]);
  612. INPUT_PAYLOAD4(blind_tune_value[mdnie_tun_state.blind][3]);
  613. }
  614. break;
  615. #else
  616. case mDNIe_UI_MODE:
  617. DPRINT(" = UI MODE =\n");
  618. INPUT_PAYLOAD1(UI_1);
  619. INPUT_PAYLOAD2(UI_2);
  620. break;
  621. case mDNIe_VIDEO_MODE:
  622. DPRINT(" = VIDEO MODE =\n");
  623. INPUT_PAYLOAD1(VIDEO_1);
  624. INPUT_PAYLOAD2(VIDEO_2);
  625. break;
  626. case mDNIe_VIDEO_WARM_MODE:
  627. DPRINT(" = VIDEO WARM MODE =\n");
  628. DPRINT("no data for WARM MODE..\n");
  629. break;
  630. case mDNIe_VIDEO_COLD_MODE:
  631. DPRINT(" = VIDEO COLD MODE =\n");
  632. DPRINT("no data for COLD MODE..\n");
  633. break;
  634. case mDNIe_CAMERA_MODE:
  635. DPRINT(" = CAMERA MODE =\n");
  636. INPUT_PAYLOAD1(CAMERA_1);
  637. INPUT_PAYLOAD2(CAMERA_2);
  638. break;
  639. case mDNIe_NAVI:
  640. DPRINT(" = NAVI MODE =\n");
  641. DPRINT("no data for NAVI MODE..\n");
  642. break;
  643. case mDNIe_GALLERY:
  644. DPRINT(" = GALLERY MODE =\n");
  645. INPUT_PAYLOAD1(GALLERY_1);
  646. INPUT_PAYLOAD2(GALLERY_2);
  647. break;
  648. case mDNIe_VT_MODE:
  649. DPRINT(" = VT MODE =\n");
  650. INPUT_PAYLOAD1(VT_1);
  651. INPUT_PAYLOAD2(VT_2);
  652. break;
  653. #if defined(CONFIG_TDMB)
  654. case mDNIe_DMB_MODE:
  655. DPRINT(" = DMB MODE =\n");
  656. INPUT_PAYLOAD1(TDMB_1);
  657. INPUT_PAYLOAD2(TDMB_2);
  658. break;
  659. case mDNIe_DMB_WARM_MODE:
  660. DPRINT(" = DMB WARM MODE =\n");
  661. DPRINT("no data for DMB WARM MODE..\n");
  662. break;
  663. case mDNIe_DMB_COLD_MODE:
  664. DPRINT(" = DMB COLD MODE =\n");
  665. DPRINT("no data for DMB COLD MODE..\n");
  666. break;
  667. #endif
  668. case mDNIe_BROWSER_MODE:
  669. DPRINT(" = BROWSER MODE =\n");
  670. INPUT_PAYLOAD1(BROWSER_1);
  671. INPUT_PAYLOAD2(BROWSER_2);
  672. break;
  673. case mDNIe_eBOOK_MODE:
  674. DPRINT(" = eBOOK MODE =\n");
  675. INPUT_PAYLOAD1(eBOOK_1);
  676. INPUT_PAYLOAD2(eBOOK_2);
  677. break;
  678. case mDNIe_EMAIL_MODE:
  679. DPRINT(" = EMAIL MODE =\n");
  680. INPUT_PAYLOAD1(eMAIL_1);
  681. INPUT_PAYLOAD2(eMAIL_2);
  682. break;
  683. case mDNIE_BLINE_MODE:
  684. DPRINT(" = BLIND MODE =\n");
  685. INPUT_PAYLOAD1(COLOR_BLIND_1);
  686. INPUT_PAYLOAD2(COLOR_BLIND_2);
  687. break;
  688. #endif
  689. default:
  690. DPRINT("[%s] no option (%d)\n", __func__, mode);
  691. return;
  692. }
  693. #endif
  694. sending_tuning_cmd();
  695. free_tun_cmd();
  696. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  697. DPRINT("mDNIe_Set_Mode end , %s(%d), %s(%d),\n",
  698. scenario_name[mdnie_tun_state.scenario], mdnie_tun_state.scenario,
  699. background_name[mdnie_tun_state.background], mdnie_tun_state.background);
  700. #else
  701. DPRINT("mDNIe_Set_Mode end , mode(%d), background(%d)\n",
  702. mode, mdnie_tun_state.background);
  703. #endif
  704. }
  705. void is_negative_on(void)
  706. {
  707. DPRINT("is negative Mode On = %d\n", mdnie_tun_state.negative);
  708. if (mdnie_tun_state.negative) {
  709. DPRINT("mDNIe_Set_Negative = %d\n", mdnie_tun_state.negative);
  710. DPRINT(" = NEGATIVE MODE =\n");
  711. mdss_negative_color(mdnie_tun_state.negative);
  712. } else {
  713. /* check the mode and tuning again when wake up*/
  714. DPRINT("negative off when resume, tuning again!\n");
  715. mdss_negative_color(mdnie_tun_state.negative);
  716. #if !defined(CONFIG_SEC_MATISSE_PROJECT) && !defined(CONFIG_MDP_NEGATIVE_SUPPORT)
  717. mDNIe_Set_Mode(mdnie_tun_state.scenario);
  718. #endif
  719. }
  720. }
  721. void mDNIe_set_negative(enum Lcd_mDNIe_Negative negative)
  722. {
  723. DPRINT("mDNIe_Set_Negative state:%d\n",negative);
  724. mdss_negative_color(negative);
  725. }
  726. void is_play_speed_1_5(int enable)
  727. {
  728. play_speed_1_5 = enable;
  729. }
  730. /* ##########################################################
  731. * #
  732. * # MDNIE BG Sysfs node
  733. * #
  734. * ##########################################################*/
  735. /* ##########################################################
  736. * #
  737. * # 0. Dynamic
  738. * # 1. Standard
  739. * # 2. Video
  740. * # 3. Natural
  741. * #
  742. * ##########################################################*/
  743. #if !defined(CONFIG_SEC_MATISSE_PROJECT) && !defined(CONFIG_MDP_NEGATIVE_SUPPORT)
  744. static ssize_t mode_show(struct device *dev,
  745. struct device_attribute *attr, char *buf)
  746. {
  747. return snprintf(buf, 256, "Current Background Mode : %s\n",
  748. background_name[mdnie_tun_state.background]);
  749. }
  750. static ssize_t mode_store(struct device *dev,
  751. struct device_attribute *attr, const char *buf, size_t size)
  752. {
  753. int value;
  754. struct msm_fb_data_type *mfd;
  755. mfd = mdnie_msd->mfd;
  756. sscanf(buf, "%d", &value);
  757. DPRINT("set background mode : %d\n", value);
  758. if (value < DYNAMIC_MODE || value >= MAX_BACKGROUND_MODE) {
  759. DPRINT("[ERROR] wrong backgound mode value : %d\n",
  760. value);
  761. return size;
  762. }
  763. mdnie_tun_state.background = value;
  764. if (mdnie_tun_state.negative) {
  765. DPRINT("already negative mode(%d), do not set background(%d)\n",
  766. mdnie_tun_state.negative, mdnie_tun_state.background);
  767. } else {
  768. DPRINT(" %s, input background(%d)\n",
  769. __func__, value);
  770. mutex_lock(&mfd->power_state);
  771. mDNIe_Set_Mode(mdnie_tun_state.scenario);
  772. mutex_unlock(&mfd->power_state);
  773. }
  774. return size;
  775. }
  776. static DEVICE_ATTR(mode, 0664, mode_show, mode_store);
  777. static ssize_t scenario_show(struct device *dev,
  778. struct device_attribute *attr,
  779. char *buf)
  780. {
  781. DPRINT("called %s\n", __func__);
  782. DPRINT("Current Scenario Mode : %s\n",
  783. scenario_name[mdnie_tun_state.scenario]);
  784. return snprintf(buf, 256, "Current Scenario Mode : %s\n",
  785. scenario_name[mdnie_tun_state.scenario]);
  786. }
  787. static ssize_t scenario_store(struct device *dev,
  788. struct device_attribute *attr,
  789. const char *buf, size_t size)
  790. {
  791. int value;
  792. struct msm_fb_data_type *mfd;
  793. mfd = mdnie_msd->mfd;
  794. sscanf(buf, "%d", &value);
  795. if (value < mDNIe_UI_MODE || value >= MAX_mDNIe_MODE) {
  796. DPRINT("[ERROR] wrong Scenario mode value : %d\n",
  797. value);
  798. return size;
  799. }
  800. switch (value) {
  801. case SIG_MDNIE_UI_MODE:
  802. mdnie_tun_state.scenario = mDNIe_UI_MODE;
  803. break;
  804. case SIG_MDNIE_VIDEO_MODE:
  805. mdnie_tun_state.scenario = mDNIe_VIDEO_MODE;
  806. break;
  807. case SIG_MDNIE_VIDEO_WARM_MODE:
  808. mdnie_tun_state.scenario = mDNIe_VIDEO_WARM_MODE;
  809. break;
  810. case SIG_MDNIE_VIDEO_COLD_MODE:
  811. mdnie_tun_state.scenario = mDNIe_VIDEO_COLD_MODE;
  812. break;
  813. case SIG_MDNIE_CAMERA_MODE:
  814. mdnie_tun_state.scenario = mDNIe_CAMERA_MODE;
  815. break;
  816. case SIG_MDNIE_NAVI:
  817. mdnie_tun_state.scenario = mDNIe_NAVI;
  818. break;
  819. case SIG_MDNIE_GALLERY:
  820. mdnie_tun_state.scenario = mDNIe_GALLERY;
  821. break;
  822. case SIG_MDNIE_VT:
  823. mdnie_tun_state.scenario = mDNIe_VT_MODE;
  824. break;
  825. case SIG_MDNIE_BROWSER:
  826. mdnie_tun_state.scenario = mDNIe_BROWSER_MODE;
  827. break;
  828. case SIG_MDNIE_eBOOK:
  829. mdnie_tun_state.scenario = mDNIe_eBOOK_MODE;
  830. break;
  831. case SIG_MDNIE_EMAIL:
  832. mdnie_tun_state.scenario = mDNIe_EMAIL_MODE;
  833. break;
  834. #ifdef BROWSER_COLOR_TONE_SET
  835. case SIG_MDNIE_BROWSER_TONE1:
  836. mdnie_tun_state.scenario = mDNIe_BROWSER_TONE1;
  837. break;
  838. case SIG_MDNIE_BROWSER_TONE2:
  839. mdnie_tun_state.scenario = mDNIe_BROWSER_TONE2;
  840. break;
  841. case SIG_MDNIE_BROWSER_TONE3:
  842. mdnie_tun_state.scenario = mDNIe_BROWSER_TONE3;
  843. break;
  844. #endif
  845. #if defined(CONFIG_TDMB)
  846. case SIG_MDNIE_DMB_MODE:
  847. mdnie_tun_state.scenario = mDNIe_DMB_MODE;
  848. break;
  849. case SIG_MDNIE_DMB_WARM_MODE:
  850. mdnie_tun_state.scenario = mDNIe_DMB_WARM_MODE;
  851. break;
  852. case SIG_MDNIE_DMB_COLD_MODE:
  853. mdnie_tun_state.scenario = mDNIe_DMB_COLD_MODE;
  854. break;
  855. #endif
  856. default:
  857. DPRINT("scenario_store value is wrong : value(%d)\n",
  858. value);
  859. break;
  860. }
  861. if (mdnie_tun_state.negative) {
  862. DPRINT("already negative mode(%d), do not set mode(%d)\n",
  863. mdnie_tun_state.negative, mdnie_tun_state.scenario);
  864. } else {
  865. DPRINT(" %s, input value = %d\n", __func__, value);
  866. mutex_lock(&mfd->power_state);
  867. mDNIe_Set_Mode(mdnie_tun_state.scenario);
  868. mutex_unlock(&mfd->power_state);
  869. }
  870. return size;
  871. }
  872. static DEVICE_ATTR(scenario, 0664, scenario_show,
  873. scenario_store);
  874. static ssize_t mdnieset_user_select_file_cmd_show(struct device *dev,
  875. struct device_attribute *attr,
  876. char *buf)
  877. {
  878. unsigned int mdnie_ui = 0;
  879. DPRINT("called %s\n", __func__);
  880. return snprintf(buf, 256, "%u\n", mdnie_ui);
  881. }
  882. static ssize_t mdnieset_user_select_file_cmd_store(struct device *dev,
  883. struct device_attribute
  884. *attr, const char *buf,
  885. size_t size)
  886. {
  887. int value;
  888. sscanf(buf, "%d", &value);
  889. DPRINT
  890. ("inmdnieset_user_select_file_cmd_store, input value = %d\n",
  891. value);
  892. return size;
  893. }
  894. static DEVICE_ATTR(mdnieset_user_select_file_cmd, 0664,
  895. mdnieset_user_select_file_cmd_show,
  896. mdnieset_user_select_file_cmd_store);
  897. static ssize_t mdnieset_init_file_cmd_show(struct device *dev,
  898. struct device_attribute *attr,
  899. char *buf)
  900. {
  901. char temp[] = "mdnieset_init_file_cmd_show\n\0";
  902. DPRINT("called %s\n", __func__);
  903. strcat(buf, temp);
  904. return strlen(buf);
  905. }
  906. static ssize_t mdnieset_init_file_cmd_store(struct device *dev,
  907. struct device_attribute *attr,
  908. const char *buf, size_t size)
  909. {
  910. int value;
  911. struct msm_fb_data_type *mfd;
  912. mfd = mdnie_msd->mfd;
  913. sscanf(buf, "%d", &value);
  914. DPRINT("mdnieset_init_file_cmd_store : value(%d)\n", value);
  915. switch (value) {
  916. case 0:
  917. mdnie_tun_state.scenario = mDNIe_UI_MODE;
  918. break;
  919. default:
  920. printk(KERN_ERR
  921. "mdnieset_init_file_cmd_store value is wrong : value(%d)\n",
  922. value);
  923. break;
  924. }
  925. mutex_lock(&mfd->power_state);
  926. mDNIe_Set_Mode(mdnie_tun_state.scenario);
  927. mutex_unlock(&mfd->power_state);
  928. return size;
  929. }
  930. static DEVICE_ATTR(mdnieset_init_file_cmd, 0664, mdnieset_init_file_cmd_show,
  931. mdnieset_init_file_cmd_store);
  932. static ssize_t outdoor_show(struct device *dev,
  933. struct device_attribute *attr,
  934. char *buf)
  935. {
  936. DPRINT("called %s\n", __func__);
  937. return snprintf(buf, 256, "Current outdoor Value : %s\n",
  938. (mdnie_tun_state.outdoor == 0) ? "Disabled" : "Enabled");
  939. }
  940. static ssize_t outdoor_store(struct device *dev,
  941. struct device_attribute *attr,
  942. const char *buf, size_t size)
  943. {
  944. int value;
  945. struct msm_fb_data_type *mfd;
  946. mfd = mdnie_msd->mfd;
  947. sscanf(buf, "%d", &value);
  948. DPRINT("outdoor value = %d, scenario = %d\n",
  949. value, mdnie_tun_state.scenario);
  950. if (value < OUTDOOR_OFF_MODE || value >= MAX_OUTDOOR_MODE) {
  951. DPRINT("[ERROR] : wrong outdoor mode value : %d\n",
  952. value);
  953. }
  954. mdnie_tun_state.outdoor = value;
  955. if (mdnie_tun_state.negative) {
  956. DPRINT("already negative mode(%d), do not outdoor mode(%d)\n",
  957. mdnie_tun_state.negative, mdnie_tun_state.outdoor);
  958. } else {
  959. mutex_lock(&mfd->power_state);
  960. mDNIe_Set_Mode(mdnie_tun_state.scenario);
  961. mutex_unlock(&mfd->power_state);
  962. }
  963. return size;
  964. }
  965. static DEVICE_ATTR(outdoor, 0664, outdoor_show, outdoor_store);
  966. static ssize_t playspeed_show(struct device *dev,
  967. struct device_attribute *attr,
  968. char *buf)
  969. {
  970. DPRINT("called %s\n", __func__);
  971. return snprintf(buf, 256, "%d\n", play_speed_1_5);
  972. }
  973. static ssize_t playspeed_store(struct device *dev,
  974. struct device_attribute *attr,
  975. const char *buf, size_t size)
  976. {
  977. int value;
  978. sscanf(buf, "%d", &value);
  979. DPRINT("[Play Speed Set]play speed value = %d\n", value);
  980. is_play_speed_1_5(value);
  981. return size;
  982. }
  983. static DEVICE_ATTR(playspeed, 0664,
  984. playspeed_show,
  985. playspeed_store);
  986. static ssize_t cabc_show(struct device *dev,
  987. struct device_attribute *attr, char *buf)
  988. {
  989. int rc;
  990. unsigned char cabc;
  991. cabc = mdss_dsi_show_cabc();
  992. rc = snprintf((char *)buf, 1024, "%d\n",cabc);
  993. pr_info("%s :[MIPI2LVDS] CABC: %d\n", __func__, cabc);
  994. return rc;
  995. }
  996. static ssize_t cabc_store(struct device *dev,
  997. struct device_attribute *attr, const char *buf, size_t size)
  998. {
  999. unsigned char cabc;
  1000. cabc = mdss_dsi_show_cabc();
  1001. if (sysfs_streq(buf, "1") && !cabc)
  1002. cabc = true;
  1003. else if (sysfs_streq(buf, "0") && cabc)
  1004. cabc = false;
  1005. else
  1006. pr_info("%s: Invalid argument!!", __func__);
  1007. mdss_dsi_store_cabc(cabc);
  1008. return size;
  1009. }
  1010. static DEVICE_ATTR(cabc, 0664, cabc_show, cabc_store);
  1011. #endif
  1012. static ssize_t negative_show(struct device *dev,
  1013. struct device_attribute *attr,
  1014. char *buf)
  1015. {
  1016. DPRINT("called %s\n", __func__);
  1017. return snprintf(buf, 256, "Current negative Value : %s\n",
  1018. (mdnie_tun_state.negative == 0) ? "Disabled" : "Enabled");
  1019. }
  1020. static ssize_t negative_store(struct device *dev,
  1021. struct device_attribute *attr,
  1022. const char *buf, size_t size)
  1023. {
  1024. int value;
  1025. sscanf(buf, "%d", &value);
  1026. DPRINT
  1027. ("negative_store, input value = %d\n",
  1028. value);
  1029. mdnie_tun_state.negative = value;
  1030. mDNIe_set_negative(mdnie_tun_state.negative);
  1031. DPRINT
  1032. ("negative_store, input value11 = %d\n",
  1033. value);
  1034. return size;
  1035. }
  1036. static DEVICE_ATTR(negative, 0664,
  1037. negative_show,
  1038. negative_store);
  1039. static ssize_t accessibility_show(struct device *dev,
  1040. struct device_attribute *attr,
  1041. char *buf)
  1042. {
  1043. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  1044. DPRINT("Current accessibility Mode : %s\n",
  1045. accessibility_name[mdnie_tun_state.blind]);
  1046. return snprintf(buf, 256, "Current accessibility Mode : %s\n",
  1047. accessibility_name[mdnie_tun_state.blind]);
  1048. #else
  1049. DPRINT("called %s\n", __func__);
  1050. return snprintf(buf, 256, "%d\n", play_speed_1_5);
  1051. #endif
  1052. }
  1053. #if defined(CONFIG_SEC_MATISSE_PROJECT) || defined(CONFIG_MDP_NEGATIVE_SUPPORT)
  1054. static ssize_t accessibility_store(struct device *dev,
  1055. struct device_attribute *attr,
  1056. const char *buf, size_t size)
  1057. {
  1058. int cmd_value;
  1059. sscanf(buf, "%d", &cmd_value);
  1060. if (cmd_value == NEGATIVE) {
  1061. mdnie_tun_state.negative = mDNIe_NEGATIVE_ON;
  1062. mdnie_tun_state.blind = ACCESSIBILITY_OFF;
  1063. } else if (cmd_value == ACCESSIBILITY_OFF) {
  1064. mdnie_tun_state.blind = ACCESSIBILITY_OFF;
  1065. mdnie_tun_state.negative = mDNIe_NEGATIVE_OFF;
  1066. } else
  1067. pr_info("%s ACCESSIBILITY_MAX", __func__);
  1068. is_negative_on();
  1069. return size;
  1070. }
  1071. #else
  1072. static ssize_t accessibility_store(struct device *dev,
  1073. struct device_attribute *attr,
  1074. const char *buf, size_t size)
  1075. {
  1076. int cmd_value;
  1077. char buffer[MDNIE_COLOR_BLINDE_CMD] = {0,};
  1078. int buffer2[MDNIE_COLOR_BLINDE_CMD/2] = {0,};
  1079. int loop;
  1080. char temp;
  1081. struct msm_fb_data_type *mfd;
  1082. mfd = mdnie_msd->mfd;
  1083. sscanf(buf, "%d %x %x %x %x %x %x %x %x %x", &cmd_value,
  1084. &buffer2[0], &buffer2[1], &buffer2[2], &buffer2[3], &buffer2[4],
  1085. &buffer2[5], &buffer2[6], &buffer2[7], &buffer2[8]);
  1086. for(loop = 0; loop < MDNIE_COLOR_BLINDE_CMD/2; loop++) {
  1087. buffer2[loop] = buffer2[loop] & 0xFFFF;
  1088. buffer[loop * 2] = (buffer2[loop] & 0xFF00) >> 8;
  1089. buffer[loop * 2 + 1] = buffer2[loop] & 0xFF;
  1090. }
  1091. for(loop = 0; loop < MDNIE_COLOR_BLINDE_CMD; loop+=2) {
  1092. temp = buffer[loop];
  1093. buffer[loop] = buffer[loop + 1];
  1094. buffer[loop + 1] = temp;
  1095. }
  1096. if (cmd_value == NEGATIVE) {
  1097. mdnie_tun_state.negative = mDNIe_NEGATIVE_ON;
  1098. mdnie_tun_state.blind = ACCESSIBILITY_OFF;
  1099. } else if (cmd_value == COLOR_BLIND) {
  1100. mdnie_tun_state.negative = mDNIe_NEGATIVE_OFF;
  1101. mdnie_tun_state.blind = COLOR_BLIND;
  1102. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  1103. memcpy(&COLOR_BLIND_4[22],buffer, MDNIE_COLOR_BLINDE_CMD);
  1104. #else
  1105. memcpy(&COLOR_BLIND_2[MDNIE_COLOR_BLINDE_CMD],
  1106. buffer, MDNIE_COLOR_BLINDE_CMD);
  1107. #endif
  1108. } else if (cmd_value == ACCESSIBILITY_OFF) {
  1109. mdnie_tun_state.blind = ACCESSIBILITY_OFF;
  1110. mdnie_tun_state.negative = mDNIe_NEGATIVE_OFF;
  1111. } else
  1112. pr_info("%s ACCESSIBILITY_MAX", __func__);
  1113. mutex_lock(&mfd->power_state);
  1114. is_negative_on();
  1115. mutex_unlock(&mfd->power_state);
  1116. pr_info("%s cmd_value : %d", __func__, cmd_value);
  1117. return size;
  1118. }
  1119. #endif
  1120. static DEVICE_ATTR(accessibility, 0664,
  1121. accessibility_show,
  1122. accessibility_store);
  1123. static struct class *mdnie_class;
  1124. struct device *tune_mdnie_dev;
  1125. void init_mdnie_class(void)
  1126. {
  1127. DPRINT("start!\n");
  1128. mdnie_class = class_create(THIS_MODULE, "mdnie");
  1129. if (IS_ERR(mdnie_class))
  1130. pr_err("Failed to create class(mdnie)!\n");
  1131. tune_mdnie_dev =
  1132. device_create(mdnie_class, NULL, 0, NULL,
  1133. "mdnie");
  1134. if (IS_ERR(tune_mdnie_dev))
  1135. pr_err("Failed to create device(mdnie)!\n");
  1136. #if !defined(CONFIG_SEC_MATISSE_PROJECT) && !defined(CONFIG_MDP_NEGATIVE_SUPPORT)
  1137. if (device_create_file
  1138. (tune_mdnie_dev, &dev_attr_scenario) < 0)
  1139. pr_err("Failed to create device file(%s)!\n",
  1140. dev_attr_scenario.attr.name);
  1141. if (device_create_file
  1142. (tune_mdnie_dev,
  1143. &dev_attr_mdnieset_user_select_file_cmd) < 0)
  1144. pr_err("Failed to create device file(%s)!\n",
  1145. dev_attr_mdnieset_user_select_file_cmd.attr.name);
  1146. if (device_create_file
  1147. (tune_mdnie_dev, &dev_attr_mdnieset_init_file_cmd) < 0)
  1148. pr_err("Failed to create device file(%s)!\n",
  1149. dev_attr_mdnieset_init_file_cmd.attr.name);
  1150. if (device_create_file
  1151. (tune_mdnie_dev, &dev_attr_mode) < 0)
  1152. pr_err("Failed to create device file(%s)!\n",
  1153. dev_attr_mode.attr.name);
  1154. if (device_create_file
  1155. (tune_mdnie_dev, &dev_attr_outdoor) < 0)
  1156. pr_err("Failed to create device file(%s)!\n",
  1157. dev_attr_outdoor.attr.name);
  1158. if (device_create_file
  1159. (tune_mdnie_dev, &dev_attr_playspeed) < 0)
  1160. pr_err("Failed to create device file(%s)!=n",
  1161. dev_attr_playspeed.attr.name);
  1162. if (device_create_file(tune_mdnie_dev, &dev_attr_cabc) < 0) {
  1163. pr_info("[mipi2lvds:ERROR] device_create_file(%s)\n",\
  1164. dev_attr_cabc.attr.name);
  1165. }
  1166. #endif
  1167. if (device_create_file
  1168. (tune_mdnie_dev, &dev_attr_accessibility) < 0)
  1169. pr_err("Failed to create device file(%s)!=n",
  1170. dev_attr_accessibility.attr.name);
  1171. if (device_create_file
  1172. (tune_mdnie_dev, &dev_attr_negative) < 0)
  1173. pr_err("Failed to create device file(%s)!\n",
  1174. dev_attr_negative.attr.name);
  1175. mdnie_tun_state.mdnie_enable = true;
  1176. DPRINT("end!\n");
  1177. }
  1178. void mdnie_tft_init(struct mdss_samsung_driver_data *msd)
  1179. {
  1180. mdnie_msd = msd;
  1181. mutex_init(&mdnie_msd->lock);
  1182. }