mdss_dsi.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. /* Copyright (c) 2012-2014, The Linux Foundation. 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. */
  13. #ifndef MDSS_DSI_H
  14. #define MDSS_DSI_H
  15. #include <linux/list.h>
  16. #include <mach/scm-io.h>
  17. #include "mdss_panel.h"
  18. #include "mdss_io_util.h"
  19. #include "mdss_dsi_cmd.h"
  20. #define MMSS_SERDES_BASE_PHY 0x04f01000 /* mmss (De)Serializer CFG */
  21. #define MIPI_OUTP(addr, data) writel_relaxed((data), (addr))
  22. #define MIPI_INP(addr) readl_relaxed(addr)
  23. #ifdef CONFIG_MSM_SECURE_IO
  24. #define MIPI_OUTP_SECURE(addr, data) secure_writel((data), (addr))
  25. #define MIPI_INP_SECURE(addr) secure_readl(addr)
  26. #else
  27. #define MIPI_OUTP_SECURE(addr, data) writel_relaxed((data), (addr))
  28. #define MIPI_INP_SECURE(addr) readl_relaxed(addr)
  29. #endif
  30. #define MIPI_DSI_PRIM 1
  31. #define MIPI_DSI_SECD 2
  32. #define MIPI_DSI_PANEL_VGA 0
  33. #define MIPI_DSI_PANEL_WVGA 1
  34. #define MIPI_DSI_PANEL_WVGA_PT 2
  35. #define MIPI_DSI_PANEL_FWVGA_PT 3
  36. #define MIPI_DSI_PANEL_WSVGA_PT 4
  37. #define MIPI_DSI_PANEL_QHD_PT 5
  38. #define MIPI_DSI_PANEL_WXGA 6
  39. #define MIPI_DSI_PANEL_WUXGA 7
  40. #define MIPI_DSI_PANEL_720P_PT 8
  41. #define DSI_PANEL_MAX 8
  42. //#define DSI_CLK_DEBUG
  43. enum { /* mipi dsi panel */
  44. DSI_VIDEO_MODE,
  45. DSI_CMD_MODE,
  46. };
  47. enum {
  48. ST_DSI_CLK_OFF,
  49. ST_DSI_SUSPEND,
  50. ST_DSI_RESUME,
  51. ST_DSI_PLAYING,
  52. ST_DSI_NUM
  53. };
  54. enum {
  55. EV_DSI_UPDATE,
  56. EV_DSI_DONE,
  57. EV_DSI_TOUT,
  58. EV_DSI_NUM
  59. };
  60. enum {
  61. LANDSCAPE = 1,
  62. PORTRAIT = 2,
  63. };
  64. enum dsi_trigger_type {
  65. DSI_CMD_MODE_DMA,
  66. DSI_CMD_MODE_MDP,
  67. };
  68. enum dsi_panel_bl_ctrl {
  69. BL_PWM,
  70. BL_WLED,
  71. BL_DCS_CMD,
  72. BL_GPIO_SWING,
  73. UNKNOWN_CTRL,
  74. };
  75. enum dsi_panel_status_mode {
  76. ESD_BTA,
  77. ESD_REG,
  78. ESD_MAX,
  79. };
  80. enum dsi_ctrl_op_mode {
  81. DSI_LP_MODE,
  82. DSI_HS_MODE,
  83. };
  84. enum dsi_lane_map_type {
  85. DSI_LANE_MAP_0123,
  86. DSI_LANE_MAP_3012,
  87. DSI_LANE_MAP_2301,
  88. DSI_LANE_MAP_1230,
  89. DSI_LANE_MAP_0321,
  90. DSI_LANE_MAP_1032,
  91. DSI_LANE_MAP_2103,
  92. DSI_LANE_MAP_3210,
  93. };
  94. #define CTRL_STATE_UNKNOWN 0x00
  95. #define CTRL_STATE_PANEL_INIT BIT(0)
  96. #define CTRL_STATE_MDP_ACTIVE BIT(1)
  97. #define DSI_NON_BURST_SYNCH_PULSE 0
  98. #define DSI_NON_BURST_SYNCH_EVENT 1
  99. #define DSI_BURST_MODE 2
  100. #define DSI_RGB_SWAP_RGB 0
  101. #define DSI_RGB_SWAP_RBG 1
  102. #define DSI_RGB_SWAP_BGR 2
  103. #define DSI_RGB_SWAP_BRG 3
  104. #define DSI_RGB_SWAP_GRB 4
  105. #define DSI_RGB_SWAP_GBR 5
  106. #define DSI_VIDEO_DST_FORMAT_RGB565 0
  107. #define DSI_VIDEO_DST_FORMAT_RGB666 1
  108. #define DSI_VIDEO_DST_FORMAT_RGB666_LOOSE 2
  109. #define DSI_VIDEO_DST_FORMAT_RGB888 3
  110. #define DSI_CMD_DST_FORMAT_RGB111 0
  111. #define DSI_CMD_DST_FORMAT_RGB332 3
  112. #define DSI_CMD_DST_FORMAT_RGB444 4
  113. #define DSI_CMD_DST_FORMAT_RGB565 6
  114. #define DSI_CMD_DST_FORMAT_RGB666 7
  115. #define DSI_CMD_DST_FORMAT_RGB888 8
  116. #define DSI_INTR_ERROR_MASK BIT(25)
  117. #define DSI_INTR_ERROR BIT(24)
  118. #define DSI_INTR_BTA_DONE_MASK BIT(21)
  119. #define DSI_INTR_BTA_DONE BIT(20)
  120. #define DSI_INTR_VIDEO_DONE_MASK BIT(17)
  121. #define DSI_INTR_VIDEO_DONE BIT(16)
  122. #define DSI_INTR_CMD_MDP_DONE_MASK BIT(9)
  123. #define DSI_INTR_CMD_MDP_DONE BIT(8)
  124. #define DSI_INTR_CMD_DMA_DONE_MASK BIT(1)
  125. #define DSI_INTR_CMD_DMA_DONE BIT(0)
  126. /* Update this if more interrupt masks are added in future chipsets */
  127. #define DSI_INTR_MASK_ALL \
  128. (DSI_INTR_ERROR_MASK | \
  129. DSI_INTR_BTA_DONE_MASK | \
  130. DSI_INTR_VIDEO_DONE_MASK | \
  131. DSI_INTR_CMD_MDP_DONE_MASK | \
  132. DSI_INTR_CMD_DMA_DONE_MASK)
  133. #define DSI_CMD_TRIGGER_NONE 0x0 /* mdp trigger */
  134. #define DSI_CMD_TRIGGER_TE 0x02
  135. #define DSI_CMD_TRIGGER_SW 0x04
  136. #define DSI_CMD_TRIGGER_SW_SEOF 0x05 /* cmd dma only */
  137. #define DSI_CMD_TRIGGER_SW_TE 0x06
  138. #define DSI_VIDEO_TERM BIT(16)
  139. #define DSI_MDP_TERM BIT(8)
  140. #define DSI_BTA_TERM BIT(1)
  141. #define DSI_CMD_TERM BIT(0)
  142. extern struct device dsi_dev;
  143. extern int mdss_dsi_clk_on;
  144. extern u32 dsi_irq;
  145. extern struct mdss_dsi_ctrl_pdata *ctrl_list[];
  146. struct dsiphy_pll_divider_config {
  147. u32 clk_rate;
  148. u32 fb_divider;
  149. u32 ref_divider_ratio;
  150. u32 bit_clk_divider; /* oCLK1 */
  151. u32 byte_clk_divider; /* oCLK2 */
  152. u32 analog_posDiv;
  153. u32 digital_posDiv;
  154. };
  155. extern struct dsiphy_pll_divider_config pll_divider_config;
  156. struct dsi_clk_mnd_table {
  157. u8 lanes;
  158. u8 bpp;
  159. u8 pll_digital_posDiv;
  160. u8 pclk_m;
  161. u8 pclk_n;
  162. u8 pclk_d;
  163. };
  164. static const struct dsi_clk_mnd_table mnd_table[] = {
  165. { 1, 2, 8, 1, 1, 0},
  166. { 1, 3, 12, 1, 1, 0},
  167. { 2, 2, 4, 1, 1, 0},
  168. { 2, 3, 6, 1, 1, 0},
  169. { 3, 2, 1, 3, 8, 4},
  170. { 3, 3, 4, 1, 1, 0},
  171. { 4, 2, 2, 1, 1, 0},
  172. { 4, 3, 3, 1, 1, 0},
  173. };
  174. struct dsi_clk_desc {
  175. u32 src;
  176. u32 m;
  177. u32 n;
  178. u32 d;
  179. u32 mnd_mode;
  180. u32 pre_div_func;
  181. };
  182. #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OCTA_CMD_WQHD_PT_PANEL)
  183. #define DEBUG_LDI_STATUS
  184. #define DYNAMIC_FPS_USE_TE_CTRL
  185. extern int dynamic_fps_use_te_ctrl;
  186. #endif
  187. struct dsi_cmd {
  188. struct dsi_cmd_desc *cmd_desc;
  189. char *read_size;
  190. char *read_startoffset;
  191. int num_of_cmds;
  192. char *cmds_buff;
  193. int cmds_len;
  194. };
  195. struct dsi_panel_cmds {
  196. char *buf;
  197. int blen;
  198. struct dsi_cmd_desc *cmds;
  199. int cmd_cnt;
  200. int link_state;
  201. };
  202. #define CMD_REQ_SINGLE_TX 0x0010
  203. struct dsi_kickoff_action {
  204. struct list_head act_entry;
  205. void (*action) (void *);
  206. void *data;
  207. };
  208. struct dsi_drv_cm_data {
  209. struct regulator *vdd_vreg;
  210. struct regulator *vdd_io_vreg;
  211. struct regulator *vdda_vreg;
  212. struct regulator *iovdd_vreg;
  213. int broadcast_enable;
  214. };
  215. enum {
  216. DSI_CTRL_0,
  217. DSI_CTRL_1,
  218. DSI_CTRL_MAX,
  219. };
  220. /* DSI controller #0 is always treated as a master in broadcast mode */
  221. #define DSI_CTRL_MASTER DSI_CTRL_0
  222. #define DSI_CTRL_SLAVE DSI_CTRL_1
  223. #define DSI_BUS_CLKS BIT(0)
  224. #define DSI_LINK_CLKS BIT(1)
  225. #define DSI_ALL_CLKS ((DSI_BUS_CLKS) | (DSI_LINK_CLKS))
  226. #define DSI_EV_PLL_UNLOCKED 0x0001
  227. #define DSI_EV_MDP_FIFO_UNDERFLOW 0x0002
  228. #define DSI_EV_DSI_FIFO_EMPTY 0x0004
  229. #define DSI_EV_MDP_BUSY_RELEASE 0x80000000
  230. struct mdss_dsi_ctrl_pdata {
  231. int ndx; /* panel_num */
  232. int (*on) (struct mdss_panel_data *pdata);
  233. int (*off) (struct mdss_panel_data *pdata);
  234. #if defined (CONFIG_FB_MSM_MDSS_S6E8AA0A_HD_PANEL)
  235. int (*mtp) (struct mdss_panel_data *pdata);
  236. #endif
  237. int (*partial_update_fnc) (struct mdss_panel_data *pdata);
  238. int (*check_status) (struct mdss_dsi_ctrl_pdata *pdata);
  239. int (*cmdlist_commit)(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp);
  240. void (*switch_mode) (struct mdss_panel_data *pdata, int mode);
  241. int (*registered) (struct mdss_panel_data *pdata);
  242. int (*dimming_init) (struct mdss_panel_data *pdata);
  243. int (*event_handler) (int e);
  244. int (*panel_blank) (struct mdss_panel_data *pdata, int blank);
  245. void (*panel_reset) (struct mdss_panel_data *pdata, int enable);
  246. int (*panel_extra_power) (struct mdss_panel_data *pdata, int enable);
  247. void (*bl_fnc) (struct mdss_panel_data *pdata, u32 level);
  248. struct mdss_panel_data panel_data;
  249. unsigned char *ctrl_base;
  250. struct dss_io_data ctrl_io;
  251. struct dss_io_data mmss_misc_io;
  252. struct dss_io_data phy_io;
  253. int reg_size;
  254. u32 bus_clk_cnt;
  255. u32 link_clk_cnt;
  256. u32 flags;
  257. u32 clk_cnt;
  258. u32 clk_cnt_by_dsi1;
  259. struct clk *mdp_core_clk;
  260. struct clk *ahb_clk;
  261. struct clk *axi_clk;
  262. struct clk *mmss_misc_ahb_clk;
  263. struct clk *byte_clk;
  264. struct clk *esc_clk;
  265. struct clk *pixel_clk;
  266. u8 ctrl_state;
  267. int panel_mode;
  268. int irq_cnt;
  269. int mdss_dsi_clk_on;
  270. int rst_gpio;
  271. int disp_en_gpio;
  272. int disp_en_gpio2;
  273. #if defined(CONFIG_FB_MSM_MDSS_HX8394C_TFT_VIDEO_720P_PANEL)
  274. int disp_en_vsp_gpio;
  275. int disp_en_vsn_gpio;
  276. #endif
  277. #if defined(CONFIG_FB_MSM_MIPI_SAMSUNG_OCTA_CMD_WQXGA_S6TNMR7_PT_PANEL)
  278. int tcon_ready_gpio;
  279. #endif
  280. #if defined(CONFIG_FB_MSM_MDSS_MAGNA_OCTA_VIDEO_720P_PANEL)
  281. int lcd_crack_det;
  282. int expander_enble_gpio;
  283. #endif
  284. #if defined(CONFIG_FB_MSM_MDSS_SHARP_HD_PANEL)
  285. int disp_en_gpio_p;
  286. int disp_en_gpio_n;
  287. #endif
  288. #if defined(CONFIG_FB_MSM_MIPI_MAGNA_OCTA_VIDEO_WXGA_PT_DUAL_PANEL)
  289. int lcd_crack_det_gpio;
  290. int lcd_esd_det_gpio;
  291. int lcd_sel_gpio;
  292. struct regulator *lcd_3p0_vreg;
  293. struct regulator *lcd_1p8_vreg;
  294. #endif
  295. int bl_on_gpio;
  296. int disp_te_gpio;
  297. int mode_gpio;
  298. int rst_gpio_requested;
  299. int disp_en_gpio_requested;
  300. int disp_te_gpio_requested;
  301. int mode_gpio_requested;
  302. int bklt_ctrl; /* backlight ctrl */
  303. int pwm_period;
  304. int pwm_pmic_gpio;
  305. int pwm_lpg_chan;
  306. int bklt_max;
  307. int new_fps;
  308. int pwm_enabled;
  309. bool dmap_iommu_map;
  310. #if defined(CONFIG_CABC_TUNING_HX8394C)
  311. int current_cabc_duty;
  312. #endif
  313. struct pwm_device *pwm_bl;
  314. struct dsi_drv_cm_data shared_pdata;
  315. u32 pclk_rate;
  316. u32 byte_clk_rate;
  317. struct dss_module_power power_data;
  318. u32 dsi_irq_mask;
  319. struct mdss_hw *dsi_hw;
  320. struct mdss_panel_recovery *recovery;
  321. struct dsi_panel_cmds on_cmds;
  322. struct dsi_panel_cmds off_cmds;
  323. struct dsi_panel_cmds status_cmds;
  324. u32 status_value;
  325. struct dsi_panel_cmds ce_on_cmds;
  326. struct dsi_panel_cmds ce_off_cmds;
  327. struct dsi_panel_cmds cabc_on_cmds;
  328. struct dsi_panel_cmds cabc_off_cmds;
  329. #if defined(CONFIG_CABC_TUNING_HX8394C)
  330. struct dsi_panel_cmds cabc_duty_72;
  331. struct dsi_panel_cmds cabc_duty_74;
  332. struct dsi_panel_cmds cabc_duty_78;
  333. struct dsi_panel_cmds cabc_duty_82;
  334. #endif
  335. struct dsi_panel_cmds cabc_tune_cmds;
  336. #if defined(CONFIG_FB_MSM_MDSS_CPT_QHD_PANEL)
  337. struct dsi_panel_cmds disp_on_cmd;
  338. #endif
  339. struct dsi_panel_cmds video2cmd;
  340. struct dsi_panel_cmds cmd2video;
  341. struct mdss_util_intf *mdss_util;
  342. struct dcs_cmd_list cmdlist;
  343. struct completion dma_comp;
  344. struct completion mdp_comp;
  345. struct completion video_comp;
  346. struct completion bta_comp;
  347. spinlock_t irq_lock;
  348. spinlock_t mdp_lock;
  349. int mdp_busy;
  350. struct mutex mutex;
  351. struct mutex cmd_mutex;
  352. struct mutex dfps_mutex;
  353. int mdp_tg_on;
  354. bool ulps;
  355. struct dsi_buf tx_buf;
  356. struct dsi_buf rx_buf;
  357. struct dsi_buf status_buf;
  358. int status_mode;
  359. int dsi_err_cnt;
  360. #if defined(CONFIG_FB_MSM_MDSS_TC_DSI2LVDS_WXGA_PANEL)
  361. struct regulator *iovdd_vreg;
  362. #endif
  363. };
  364. struct dsi_status_data {
  365. struct notifier_block fb_notifier;
  366. struct delayed_work check_status;
  367. struct msm_fb_data_type *mfd;
  368. };
  369. #if defined(CONFIG_FB_MSM_MDSS_MDP3)
  370. enum {
  371. MIPI_RESUME_STATE,
  372. MIPI_SUSPEND_STATE,
  373. };
  374. struct mdss_dsi_driver_data {
  375. struct msm_fb_data_type *mfd;
  376. struct mdss_panel_data *pdata;
  377. struct mdss_dsi_ctrl_pdata *ctrl_pdata;
  378. struct mutex lock;
  379. #if defined(CONFIG_LCD_CLASS_DEVICE)
  380. const char *panel_name;
  381. #endif
  382. #if defined(CONFIG_GET_LCD_ATTACHED)
  383. unsigned int manufacture_id;
  384. int lcd_attached;
  385. #endif
  386. };
  387. #if defined(CONFIG_MDNIE_LITE_TUNING)
  388. void mdss_dsi_cmds_send(struct mdss_dsi_ctrl_pdata *ctrl, struct dsi_cmd_desc *cmds, int cnt);
  389. #endif
  390. #endif /* CONFIG_FB_MSM_MDSS_MDP3 */
  391. extern unsigned int gv_manufacture_id;
  392. int dsi_panel_device_register(struct device_node *pan_node,
  393. struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  394. int mdss_dsi_cmds_tx(struct mdss_dsi_ctrl_pdata *ctrl,
  395. struct dsi_cmd_desc *cmds, int cnt);
  396. int mdss_dsi_cmds_rx(struct mdss_dsi_ctrl_pdata *ctrl,
  397. struct dsi_cmd_desc *cmds, int rlen);
  398. void mdss_dsi_host_init(struct mdss_panel_data *pdata);
  399. void mdss_dsi_op_mode_config(int mode,
  400. struct mdss_panel_data *pdata);
  401. void mdss_dsi_cmd_mode_ctrl(int enable);
  402. void mdp4_dsi_cmd_trigger(void);
  403. void mdss_dsi_cmd_mdp_start(struct mdss_dsi_ctrl_pdata *ctrl);
  404. void mdss_dsi_cmd_bta_sw_trigger(struct mdss_panel_data *pdata);
  405. void mdss_dsi_ack_err_status(struct mdss_dsi_ctrl_pdata *ctrl);
  406. int mdss_dsi_clk_ctrl(struct mdss_dsi_ctrl_pdata *ctrl,
  407. u8 clk_type, int enable);
  408. void mdss_dsi_clk_req(struct mdss_dsi_ctrl_pdata *ctrl,
  409. int enable);
  410. void mdss_dsi_clk_ctrl_mdp(int ndx, int enable);
  411. void mdss_dsi_controller_cfg(int enable,
  412. struct mdss_panel_data *pdata);
  413. void mdss_dsi_sw_reset(struct mdss_panel_data *pdata);
  414. irqreturn_t mdss_dsi_isr(int irq, void *ptr);
  415. void mdss_dsi_irq_handler_config(struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  416. void mdss_dsi_set_tx_power_mode(int mode, struct mdss_panel_data *pdata);
  417. int mdss_dsi_clk_div_config(struct mdss_panel_info *panel_info,
  418. int frame_rate);
  419. int mdss_dsi_clk_init(struct platform_device *pdev,
  420. struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  421. void mdss_dsi_clk_deinit(struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  422. int mdss_dsi_enable_bus_clocks(struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  423. void mdss_dsi_disable_bus_clocks(struct mdss_dsi_ctrl_pdata *ctrl_pdata);
  424. #if defined(CONFIG_FB_MSM_MDSS_MDP3)
  425. int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable);
  426. #else
  427. void mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable);
  428. #endif
  429. void mdss_dsi_phy_disable(struct mdss_dsi_ctrl_pdata *ctrl);
  430. void mdss_dsi_phy_init(struct mdss_panel_data *pdata);
  431. void mdss_dsi_phy_sw_reset(unsigned char *ctrl_base);
  432. void mdss_dsi_cmd_test_pattern(struct mdss_dsi_ctrl_pdata *ctrl);
  433. void mdss_dsi_video_test_pattern(struct mdss_dsi_ctrl_pdata *ctrl);
  434. void mdss_dsi_panel_pwm_cfg(struct mdss_dsi_ctrl_pdata *ctrl);
  435. int mdss_dsi_cmds_single_tx(struct mdss_dsi_ctrl_pdata *ctrl,
  436. struct dsi_cmd_desc *cmds, int cnt);
  437. void mdss_dsi_ctrl_init(struct mdss_dsi_ctrl_pdata *ctrl);
  438. void mdss_dsi_cmd_mdp_busy(struct mdss_dsi_ctrl_pdata *ctrl);
  439. void mdss_dsi_wait4video_done(struct mdss_dsi_ctrl_pdata *ctrl);
  440. int mdss_dsi_cmdlist_commit(struct mdss_dsi_ctrl_pdata *ctrl, int from_mdp);
  441. void mdss_dsi_cmdlist_kickoff(int intf);
  442. int mdss_dsi_bta_status_check(struct mdss_dsi_ctrl_pdata *ctrl);
  443. int mdss_dsi_reg_status_check(struct mdss_dsi_ctrl_pdata *ctrl);
  444. bool __mdss_dsi_clk_enabled(struct mdss_dsi_ctrl_pdata *ctrl, u8 clk_type);
  445. int mdss_dsi_panel_init(struct device_node *node,
  446. struct mdss_dsi_ctrl_pdata *ctrl_pdata,
  447. bool cmd_cfg_cont_splash);
  448. int mdss_panel_dt_get_dst_fmt(u32 bpp, char mipi_mode, u32 pixel_packing,
  449. char *dst_format);
  450. int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl,
  451. struct mdss_panel_recovery *recovery);
  452. static inline bool mdss_dsi_broadcast_mode_enabled(void)
  453. {
  454. return ctrl_list[DSI_CTRL_MASTER]->shared_pdata.broadcast_enable &&
  455. ctrl_list[DSI_CTRL_SLAVE] &&
  456. ctrl_list[DSI_CTRL_SLAVE]->shared_pdata.broadcast_enable;
  457. }
  458. static inline struct mdss_dsi_ctrl_pdata *mdss_dsi_get_master_ctrl(void)
  459. {
  460. if (mdss_dsi_broadcast_mode_enabled())
  461. return ctrl_list[DSI_CTRL_MASTER];
  462. else
  463. return NULL;
  464. }
  465. static inline struct mdss_dsi_ctrl_pdata *mdss_dsi_get_slave_ctrl(void)
  466. {
  467. if (mdss_dsi_broadcast_mode_enabled())
  468. return ctrl_list[DSI_CTRL_SLAVE];
  469. else
  470. return NULL;
  471. }
  472. static inline bool mdss_dsi_is_master_ctrl(struct mdss_dsi_ctrl_pdata *ctrl)
  473. {
  474. return mdss_dsi_broadcast_mode_enabled() &&
  475. (ctrl->ndx == DSI_CTRL_MASTER);
  476. }
  477. static inline bool mdss_dsi_is_slave_ctrl(struct mdss_dsi_ctrl_pdata *ctrl)
  478. {
  479. return mdss_dsi_broadcast_mode_enabled() &&
  480. (ctrl->ndx == DSI_CTRL_SLAVE);
  481. }
  482. static inline struct mdss_dsi_ctrl_pdata *mdss_dsi_get_ctrl_by_index(int ndx)
  483. {
  484. if (ndx >= DSI_CTRL_MAX)
  485. return NULL;
  486. return ctrl_list[ndx];
  487. }
  488. void mdss_dsi_mdp_busy_wait(int panel_ndx);
  489. void mdss_dsi_dump_power_clk(struct mdss_panel_data *pdata, int flag);
  490. /*for mondrian*/
  491. void pwm_backlight_enable(void);
  492. void pwm_backlight_disable(void);
  493. #endif /* MDSS_DSI_H */