sde_encoder.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. /*
  2. * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
  3. * Copyright (C) 2013 Red Hat
  4. * Author: Rob Clark <[email protected]>
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License version 2 as published by
  8. * the Free Software Foundation.
  9. *
  10. * This program is distributed in the hope that it will be useful, but WITHOUT
  11. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  13. * more details.
  14. *
  15. * You should have received a copy of the GNU General Public License along with
  16. * this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #ifndef __SDE_ENCODER_H__
  19. #define __SDE_ENCODER_H__
  20. #include <drm/drm_crtc.h>
  21. #include <linux/sde_rsc.h>
  22. #include "msm_prop.h"
  23. #include "sde_hw_mdss.h"
  24. #include "sde_kms.h"
  25. #include "sde_connector.h"
  26. #include "sde_power_handle.h"
  27. /*
  28. * Two to anticipate panels that can do cmd/vid dynamic switching
  29. * plan is to create all possible physical encoder types, and switch between
  30. * them at runtime
  31. */
  32. #define NUM_PHYS_ENCODER_TYPES 2
  33. #define MAX_PHYS_ENCODERS_PER_VIRTUAL \
  34. (MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES)
  35. #define MAX_CHANNELS_PER_ENC 2
  36. #define SDE_ENCODER_FRAME_EVENT_DONE BIT(0)
  37. #define SDE_ENCODER_FRAME_EVENT_ERROR BIT(1)
  38. #define SDE_ENCODER_FRAME_EVENT_PANEL_DEAD BIT(2)
  39. #define SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE BIT(3)
  40. #define SDE_ENCODER_FRAME_EVENT_SIGNAL_RETIRE_FENCE BIT(4)
  41. #define IDLE_POWERCOLLAPSE_DURATION (66 - 16/2)
  42. #define IDLE_POWERCOLLAPSE_IN_EARLY_WAKEUP (200 - 16/2)
  43. /**
  44. * Encoder functions and data types
  45. * @intfs: Interfaces this encoder is using, INTF_MODE_NONE if unused
  46. * @wbs: Writebacks this encoder is using, INTF_MODE_NONE if unused
  47. * @needs_cdm: Encoder requests a CDM based on pixel format conversion needs
  48. * @display_num_of_h_tiles: Number of horizontal tiles in case of split
  49. * interface
  50. * @display_type: Type of the display
  51. * @topology: Topology of the display
  52. * @comp_info: Compression parameters information
  53. */
  54. struct sde_encoder_hw_resources {
  55. enum sde_intf_mode intfs[INTF_MAX];
  56. enum sde_intf_mode wbs[WB_MAX];
  57. bool needs_cdm;
  58. u32 display_num_of_h_tiles;
  59. enum sde_connector_display display_type;
  60. struct msm_display_topology topology;
  61. struct msm_compression_info *comp_info;
  62. };
  63. /**
  64. * sde_encoder_kickoff_params - info encoder requires at kickoff
  65. * @affected_displays: bitmask, bit set means the ROI of the commit lies within
  66. * the bounds of the physical display at the bit index
  67. * @recovery_events_enabled: indicates status of client for recoovery events
  68. * @frame_trigger_mode: indicates frame trigger mode
  69. */
  70. struct sde_encoder_kickoff_params {
  71. unsigned long affected_displays;
  72. bool recovery_events_enabled;
  73. enum frame_trigger_mode_type frame_trigger_mode;
  74. };
  75. /*
  76. * enum sde_enc_rc_states - states that the resource control maintains
  77. * @SDE_ENC_RC_STATE_OFF: Resource is in OFF state
  78. * @SDE_ENC_RC_STATE_PRE_OFF: Resource is transitioning to OFF state
  79. * @SDE_ENC_RC_STATE_ON: Resource is in ON state
  80. * @SDE_ENC_RC_STATE_MODESET: Resource is in modeset state
  81. * @SDE_ENC_RC_STATE_IDLE: Resource is in IDLE state
  82. */
  83. enum sde_enc_rc_states {
  84. SDE_ENC_RC_STATE_OFF,
  85. SDE_ENC_RC_STATE_PRE_OFF,
  86. SDE_ENC_RC_STATE_ON,
  87. SDE_ENC_RC_STATE_MODESET,
  88. SDE_ENC_RC_STATE_IDLE
  89. };
  90. /**
  91. * struct sde_encoder_ops - callback functions for generic sde encoder
  92. * Individual callbacks documented below.
  93. */
  94. struct sde_encoder_ops {
  95. /**
  96. * phys_init - phys initialization function
  97. * @type: controller type
  98. * @controller_id: controller id
  99. * @phys_init_params: Pointer of structure sde_enc_phys_init_params
  100. * Returns: Pointer of sde_encoder_phys, NULL if failed
  101. */
  102. void *(*phys_init)(enum sde_intf_type type,
  103. u32 controller_id, void *phys_init_params);
  104. };
  105. /**
  106. * struct sde_encoder_virt - virtual encoder. Container of one or more physical
  107. * encoders. Virtual encoder manages one "logical" display. Physical
  108. * encoders manage one intf block, tied to a specific panel/sub-panel.
  109. * Virtual encoder defers as much as possible to the physical encoders.
  110. * Virtual encoder registers itself with the DRM Framework as the encoder.
  111. * @base: drm_encoder base class for registration with DRM
  112. * @enc_spin_lock: Virtual-Encoder-Wide Spin Lock for IRQ purposes
  113. * @bus_scaling_client: Client handle to the bus scaling interface
  114. * @te_source: vsync source pin information
  115. * @ops: Encoder ops from init function
  116. * @num_phys_encs: Actual number of physical encoders contained.
  117. * @phys_encs: Container of physical encoders managed.
  118. * @phys_vid_encs: Video physical encoders for panel mode switch.
  119. * @phys_cmd_encs: Command physical encoders for panel mode switch.
  120. * @cur_master: Pointer to the current master in this mode. Optimization
  121. * Only valid after enable. Cleared as disable.
  122. * @hw_pp Handle to the pingpong blocks used for the display. No.
  123. * pingpong blocks can be different than num_phys_encs.
  124. * @hw_dsc: Array of DSC block handles used for the display.
  125. * @hw_vdc: Array of VDC block handles used for the display.
  126. * @dirty_dsc_ids: Cached dsc indexes for dirty DSC blocks needing flush
  127. * @intfs_swapped Whether or not the phys_enc interfaces have been swapped
  128. * for partial update right-only cases, such as pingpong
  129. * split where virtual pingpong does not generate IRQs
  130. * @qdss_status: indicate if qdss is modified since last update
  131. * @crtc_vblank_cb: Callback into the upper layer / CRTC for
  132. * notification of the VBLANK
  133. * @crtc_vblank_cb_data: Data from upper layer for VBLANK notification
  134. * @crtc_kickoff_cb: Callback into CRTC that will flush & start
  135. * all CTL paths
  136. * @crtc_kickoff_cb_data: Opaque user data given to crtc_kickoff_cb
  137. * @debugfs_root: Debug file system root file node
  138. * @enc_lock: Lock around physical encoder create/destroy and
  139. access.
  140. * @frame_done_cnt: Atomic counter for tracking which phys_enc is
  141. * done with frame processing
  142. * @crtc_frame_event_cb: callback handler for frame event
  143. * @crtc_frame_event_cb_data: callback handler private data
  144. * @vsync_event_timer: vsync timer
  145. * @rsc_client: rsc client pointer
  146. * @rsc_state_init: boolean to indicate rsc config init
  147. * @disp_info: local copy of msm_display_info struct
  148. * @misr_enable: misr enable/disable status
  149. * @misr_frame_count: misr frame count before start capturing the data
  150. * @idle_pc_enabled: indicate if idle power collapse is enabled
  151. * currently. This can be controlled by user-mode
  152. * @rc_lock: resource control mutex lock to protect
  153. * virt encoder over various state changes
  154. * @rc_state: resource controller state
  155. * @delayed_off_work: delayed worker to schedule disabling of
  156. * clks and resources after IDLE_TIMEOUT time.
  157. * @vsync_event_work: worker to handle vsync event for autorefresh
  158. * @input_event_work: worker to handle input device touch events
  159. * @esd_trigger_work: worker to handle esd trigger events
  160. * @input_handler: handler for input device events
  161. * @topology: topology of the display
  162. * @vblank_enabled: boolean to track userspace vblank vote
  163. * @idle_pc_restore: flag to indicate idle_pc_restore happened
  164. * @frame_trigger_mode: frame trigger mode indication for command mode
  165. * display
  166. * @dynamic_hdr_updated: flag to indicate if mempool was unchanged
  167. * @rsc_config: rsc configuration for display vtotal, fps, etc.
  168. * @cur_conn_roi: current connector roi
  169. * @prv_conn_roi: previous connector roi to optimize if unchanged
  170. * @crtc pointer to drm_crtc
  171. * @recovery_events_enabled: status of hw recovery feature enable by client
  172. * @elevated_ahb_vote: increase AHB bus speed for the first frame
  173. * after power collapse
  174. * @pm_qos_cpu_req: pm_qos request for cpu frequency
  175. * @mode_info: stores the current mode and should be used
  176. * only in commit phase
  177. */
  178. struct sde_encoder_virt {
  179. struct drm_encoder base;
  180. spinlock_t enc_spinlock;
  181. struct mutex vblank_ctl_lock;
  182. uint32_t bus_scaling_client;
  183. uint32_t display_num_of_h_tiles;
  184. uint32_t te_source;
  185. struct sde_encoder_ops ops;
  186. unsigned int num_phys_encs;
  187. struct sde_encoder_phys *phys_encs[MAX_PHYS_ENCODERS_PER_VIRTUAL];
  188. struct sde_encoder_phys *phys_vid_encs[MAX_PHYS_ENCODERS_PER_VIRTUAL];
  189. struct sde_encoder_phys *phys_cmd_encs[MAX_PHYS_ENCODERS_PER_VIRTUAL];
  190. struct sde_encoder_phys *cur_master;
  191. struct sde_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC];
  192. struct sde_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC];
  193. struct sde_hw_vdc *hw_vdc[MAX_CHANNELS_PER_ENC];
  194. struct sde_hw_pingpong *hw_dsc_pp[MAX_CHANNELS_PER_ENC];
  195. enum sde_dsc dirty_dsc_ids[MAX_CHANNELS_PER_ENC];
  196. enum sde_vdc dirty_vdc_ids[MAX_CHANNELS_PER_ENC];
  197. bool intfs_swapped;
  198. bool qdss_status;
  199. void (*crtc_vblank_cb)(void *data);
  200. void *crtc_vblank_cb_data;
  201. struct dentry *debugfs_root;
  202. struct mutex enc_lock;
  203. atomic_t frame_done_cnt[MAX_PHYS_ENCODERS_PER_VIRTUAL];
  204. void (*crtc_frame_event_cb)(void *data, u32 event);
  205. struct sde_kms_frame_event_cb_data crtc_frame_event_cb_data;
  206. struct timer_list vsync_event_timer;
  207. struct sde_rsc_client *rsc_client;
  208. bool rsc_state_init;
  209. struct msm_display_info disp_info;
  210. bool misr_enable;
  211. u32 misr_frame_count;
  212. bool idle_pc_enabled;
  213. struct mutex rc_lock;
  214. enum sde_enc_rc_states rc_state;
  215. struct kthread_delayed_work delayed_off_work;
  216. struct kthread_work vsync_event_work;
  217. struct kthread_work input_event_work;
  218. struct kthread_work esd_trigger_work;
  219. struct input_handler *input_handler;
  220. struct msm_display_topology topology;
  221. bool vblank_enabled;
  222. bool idle_pc_restore;
  223. enum frame_trigger_mode_type frame_trigger_mode;
  224. bool dynamic_hdr_updated;
  225. struct sde_rsc_cmd_config rsc_config;
  226. struct sde_rect cur_conn_roi;
  227. struct sde_rect prv_conn_roi;
  228. struct drm_crtc *crtc;
  229. bool recovery_events_enabled;
  230. bool elevated_ahb_vote;
  231. struct pm_qos_request pm_qos_cpu_req;
  232. struct msm_mode_info mode_info;
  233. };
  234. #define to_sde_encoder_virt(x) container_of(x, struct sde_encoder_virt, base)
  235. /**
  236. * sde_encoder_get_hw_resources - Populate table of required hardware resources
  237. * @encoder: encoder pointer
  238. * @hw_res: resource table to populate with encoder required resources
  239. * @conn_state: report hw reqs based on this proposed connector state
  240. */
  241. void sde_encoder_get_hw_resources(struct drm_encoder *encoder,
  242. struct sde_encoder_hw_resources *hw_res,
  243. struct drm_connector_state *conn_state);
  244. /**
  245. * sde_encoder_register_vblank_callback - provide callback to encoder that
  246. * will be called on the next vblank.
  247. * @encoder: encoder pointer
  248. * @cb: callback pointer, provide NULL to deregister and disable IRQs
  249. * @data: user data provided to callback
  250. */
  251. void sde_encoder_register_vblank_callback(struct drm_encoder *encoder,
  252. void (*cb)(void *), void *data);
  253. /**
  254. * sde_encoder_register_frame_event_callback - provide callback to encoder that
  255. * will be called after the request is complete, or other events.
  256. * @encoder: encoder pointer
  257. * @cb: callback pointer, provide NULL to deregister
  258. * @crtc: pointer to drm_crtc object interested in frame events
  259. */
  260. void sde_encoder_register_frame_event_callback(struct drm_encoder *encoder,
  261. void (*cb)(void *, u32), struct drm_crtc *crtc);
  262. /**
  263. * sde_encoder_get_rsc_client - gets the rsc client state for primary
  264. * for primary display.
  265. * @encoder: encoder pointer
  266. */
  267. struct sde_rsc_client *sde_encoder_get_rsc_client(struct drm_encoder *encoder);
  268. /**
  269. * sde_encoder_poll_line_counts - poll encoder line counts for start of frame
  270. * @encoder: encoder pointer
  271. * @Returns: zero on success
  272. */
  273. int sde_encoder_poll_line_counts(struct drm_encoder *encoder);
  274. /**
  275. * sde_encoder_prepare_for_kickoff - schedule double buffer flip of the ctl
  276. * path (i.e. ctl flush and start) at next appropriate time.
  277. * Immediately: if no previous commit is outstanding.
  278. * Delayed: Block until next trigger can be issued.
  279. * @encoder: encoder pointer
  280. * @params: kickoff time parameters
  281. * @Returns: Zero on success, last detected error otherwise
  282. */
  283. int sde_encoder_prepare_for_kickoff(struct drm_encoder *encoder,
  284. struct sde_encoder_kickoff_params *params);
  285. /**
  286. * sde_encoder_trigger_kickoff_pending - Clear the flush bits from previous
  287. * kickoff and trigger the ctl prepare progress for command mode display.
  288. * @encoder: encoder pointer
  289. */
  290. void sde_encoder_trigger_kickoff_pending(struct drm_encoder *encoder);
  291. /**
  292. * sde_encoder_kickoff - trigger a double buffer flip of the ctl path
  293. * (i.e. ctl flush and start) immediately.
  294. * @encoder: encoder pointer
  295. * @is_error: whether the current commit needs to be aborted and replaced
  296. * with a 'safe' commit
  297. */
  298. void sde_encoder_kickoff(struct drm_encoder *encoder, bool is_error);
  299. /**
  300. * sde_encoder_wait_for_event - Waits for encoder events
  301. * @encoder: encoder pointer
  302. * @event: event to wait for
  303. * MSM_ENC_COMMIT_DONE - Wait for hardware to have flushed the current pending
  304. * frames to hardware at a vblank or wr_ptr_start
  305. * Encoders will map this differently depending on the
  306. * panel type.
  307. * vid mode -> vsync_irq
  308. * cmd mode -> wr_ptr_start_irq
  309. * MSM_ENC_TX_COMPLETE - Wait for the hardware to transfer all the pixels to
  310. * the panel. Encoders will map this differently
  311. * depending on the panel type.
  312. * vid mode -> vsync_irq
  313. * cmd mode -> pp_done
  314. * Returns: 0 on success, -EWOULDBLOCK if already signaled, error otherwise
  315. */
  316. int sde_encoder_wait_for_event(struct drm_encoder *drm_encoder,
  317. enum msm_event_wait event);
  318. /**
  319. * sde_encoder_idle_request - request for idle request to avoid 4 vsync cycle
  320. * to turn off the clocks.
  321. * @encoder: encoder pointer
  322. * Returns: 0 on success, errorcode otherwise
  323. */
  324. int sde_encoder_idle_request(struct drm_encoder *drm_enc);
  325. /*
  326. * sde_encoder_get_fps - get interface frame rate of the given encoder
  327. * @encoder: Pointer to drm encoder object
  328. */
  329. u32 sde_encoder_get_fps(struct drm_encoder *encoder);
  330. /*
  331. * sde_encoder_get_intf_mode - get interface mode of the given encoder
  332. * @encoder: Pointer to drm encoder object
  333. */
  334. enum sde_intf_mode sde_encoder_get_intf_mode(struct drm_encoder *encoder);
  335. /**
  336. * sde_encoder_control_te - control enabling/disabling VSYNC_IN_EN
  337. * @encoder: encoder pointer
  338. * @enable: boolean to indicate enable/disable
  339. */
  340. void sde_encoder_control_te(struct drm_encoder *encoder, bool enable);
  341. /**
  342. * sde_encoder_virt_restore - restore the encoder configs
  343. * @encoder: encoder pointer
  344. */
  345. void sde_encoder_virt_restore(struct drm_encoder *encoder);
  346. /**
  347. * sde_encoder_is_dsc_merge - check if encoder is in DSC merge mode
  348. * @drm_enc: Pointer to drm encoder object
  349. * @Return: true if encoder is in DSC merge mode
  350. */
  351. bool sde_encoder_is_dsc_merge(struct drm_encoder *drm_enc);
  352. /**
  353. * sde_encoder_check_curr_mode - check if given mode is supported or not
  354. * @drm_enc: Pointer to drm encoder object
  355. * @mode: Mode to be checked
  356. * @Return: true if it is cmd mode
  357. */
  358. bool sde_encoder_check_curr_mode(struct drm_encoder *drm_enc, u32 mode);
  359. /**
  360. * sde_encoder_init - initialize virtual encoder object
  361. * @dev: Pointer to drm device structure
  362. * @disp_info: Pointer to display information structure
  363. * Returns: Pointer to newly created drm encoder
  364. */
  365. struct drm_encoder *sde_encoder_init(
  366. struct drm_device *dev,
  367. struct msm_display_info *disp_info);
  368. /**
  369. * sde_encoder_init_with_ops - initialize virtual encoder object with init ops
  370. * @dev: Pointer to drm device structure
  371. * @disp_info: Pointer to display information structure
  372. * @ops: Pointer to encoder ops structure
  373. * Returns: Pointer to newly created drm encoder
  374. */
  375. struct drm_encoder *sde_encoder_init_with_ops(
  376. struct drm_device *dev,
  377. struct msm_display_info *disp_info,
  378. const struct sde_encoder_ops *ops);
  379. /**
  380. * sde_encoder_destroy - destroy previously initialized virtual encoder
  381. * @drm_enc: Pointer to previously created drm encoder structure
  382. */
  383. void sde_encoder_destroy(struct drm_encoder *drm_enc);
  384. /**
  385. * sde_encoder_prepare_commit - prepare encoder at the very beginning of an
  386. * atomic commit, before any registers are written
  387. * @drm_enc: Pointer to previously created drm encoder structure
  388. */
  389. void sde_encoder_prepare_commit(struct drm_encoder *drm_enc);
  390. /**
  391. * sde_encoder_update_caps_for_cont_splash - update encoder settings during
  392. * device bootup when cont_splash is enabled
  393. * @drm_enc: Pointer to drm encoder structure
  394. * @splash_display: Pointer to sde_splash_display corresponding to this encoder
  395. * @enable: boolean indicates enable or displae state of splash
  396. * @Return: true if successful in updating the encoder structure
  397. */
  398. int sde_encoder_update_caps_for_cont_splash(struct drm_encoder *encoder,
  399. struct sde_splash_display *splash_display, bool enable);
  400. /**
  401. * sde_encoder_display_failure_notification - update sde encoder state for
  402. * esd timeout or other display failure notification. This event flows from
  403. * dsi, sde_connector to sde_encoder.
  404. *
  405. * This api must not be called from crtc_commit (display) thread because it
  406. * requests the flush work on same thread. It is called from esd check thread
  407. * based on current design.
  408. *
  409. * TODO: manage the event at sde_kms level for forward processing.
  410. * @drm_enc: Pointer to drm encoder structure
  411. * @skip_pre_kickoff: Caller can avoid pre_kickoff if it is triggering this
  412. * event only to switch the panel TE to watchdog mode.
  413. * @Return: true if successful in updating the encoder structure
  414. */
  415. int sde_encoder_display_failure_notification(struct drm_encoder *enc,
  416. bool skip_pre_kickoff);
  417. /**
  418. * sde_encoder_recovery_events_enabled - checks if client has enabled
  419. * sw recovery mechanism for this connector
  420. * @drm_enc: Pointer to drm encoder structure
  421. * @Return: true if enabled
  422. */
  423. bool sde_encoder_recovery_events_enabled(struct drm_encoder *encoder);
  424. /**
  425. * sde_encoder_recovery_events_handler - handler to enable/disable the
  426. * sw recovery for this connector
  427. * @drm_enc: Pointer to drm encoder structure
  428. */
  429. void sde_encoder_recovery_events_handler(struct drm_encoder *encoder,
  430. bool val);
  431. /**
  432. * sde_encoder_in_clone_mode - checks if underlying phys encoder is in clone
  433. * mode or independent display mode. ref@ WB in Concurrent writeback mode.
  434. * @drm_enc: Pointer to drm encoder structure
  435. * @Return: true if successful in updating the encoder structure
  436. */
  437. bool sde_encoder_in_clone_mode(struct drm_encoder *enc);
  438. /**
  439. * sde_encoder_is_primary_display - checks if underlying display is primary
  440. * display or not.
  441. * @drm_enc: Pointer to drm encoder structure
  442. * @Return: true if it is primary display. false if secondary display
  443. */
  444. bool sde_encoder_is_primary_display(struct drm_encoder *enc);
  445. /**
  446. * sde_encoder_is_dsi_display - checks if underlying display is DSI
  447. * display or not.
  448. * @drm_enc: Pointer to drm encoder structure
  449. * @Return: true if it is primary display. false if secondary display
  450. */
  451. bool sde_encoder_is_dsi_display(struct drm_encoder *enc);
  452. /**
  453. * sde_encoder_control_idle_pc - control enable/disable of idle power collapse
  454. * @drm_enc: Pointer to drm encoder structure
  455. * @enable: enable/disable flag
  456. */
  457. void sde_encoder_control_idle_pc(struct drm_encoder *enc, bool enable);
  458. /**
  459. * sde_encoder_in_cont_splash - checks if display is in continuous splash
  460. * @drm_enc: Pointer to drm encoder structure
  461. * @Return: true if display in continuous splash
  462. */
  463. int sde_encoder_in_cont_splash(struct drm_encoder *enc);
  464. /**
  465. * sde_encoder_uidle_enable - control enable/disable of uidle
  466. * @drm_enc: Pointer to drm encoder structure
  467. * @enable: enable/disable flag
  468. */
  469. void sde_encoder_uidle_enable(struct drm_encoder *drm_enc, bool enable);
  470. #endif /* __SDE_ENCODER_H__ */