disp: msm: sde: add line insertion support for sspp

Add line insertion support for sspp, this is used to support
display with external splitter. Line insertion logic checks
the difference between screen logical height and physical
height. If any difference is observed adds dummy and active
lines on screen.

Change-Id: Ieec322273df000a53fb39e05174c2d67c3c2da81
Signed-off-by: Rajesh kv <quic_kvrajesh@quicinc.com>
This commit is contained in:
Rajesh kv
2022-04-01 08:59:25 +05:30
förälder fdcfe00b0b
incheckning 03aad2fdf9
16 ändrade filer med 420 tillägg och 1 borttagningar

Visa fil

@@ -432,6 +432,20 @@ enum sde_crtc_dirty_flags {
#define to_sde_crtc(x) container_of(x, struct sde_crtc, base)
/**
* struct sde_line_insertion_param - sde line insertion parameters
* @panel_line_insertion_enable: line insertion support status
* @padding_height: panel height after line padding
* @padding_active: active lines in panel stacking pattern
* @padding_dummy: dummy lines in panel stacking pattern
*/
struct sde_line_insertion_param {
bool panel_line_insertion_enable;
u32 padding_height;
u32 padding_active;
u32 padding_dummy;
};
/**
* struct sde_crtc_state - sde container for atomic crtc state
* @base: Base drm crtc state structure
@@ -467,6 +481,7 @@ enum sde_crtc_dirty_flags {
* @cp_dirty_list: array tracking features that are dirty
* @cp_range_payload: array storing state user_data passed via range props
* @cont_splash_populated: State was populated as part of cont. splash
* @param: sde line insertion parameters
*/
struct sde_crtc_state {
struct drm_crtc_state base;
@@ -506,6 +521,7 @@ struct sde_crtc_state {
struct sde_cp_crtc_range_prop_payload
cp_range_payload[SDE_CP_CRTC_MAX_FEATURES];
bool cont_splash_populated;
struct sde_line_insertion_param line_insertion;
};
enum sde_crtc_irq_state {
@@ -1073,4 +1089,24 @@ struct drm_encoder *sde_crtc_get_src_encoder_of_clone(struct drm_crtc *crtc);
*/
void _sde_crtc_vm_release_notify(struct drm_crtc *crtc);
/*
* sde_crtc_is_line_insertion_supported - get lineinsertion
* feature bit value from panel
* @drm_crtc: Pointer to drm crtc structure
* @Return: line insertion support status
*/
bool sde_crtc_is_line_insertion_supported(struct drm_crtc *crtc);
/**
* sde_crtc_calc_vpadding_param - calculate vpadding parameters
* @state: Pointer to DRM crtc state object
* @crtc_y: Plane's CRTC_Y offset
* @crtc_h: Plane's CRTC_H size
* @padding_y: Padding Y offset
* @padding_start: Padding start offset
* @padding_height: Padding height in total
*/
void sde_crtc_calc_vpadding_param(struct drm_crtc_state *state, u32 crtc_y, u32 crtc_h,
u32 *padding_y, u32 *padding_start, u32 *padding_height);
#endif /* _SDE_CRTC_H_ */