Add a helper to get LayerBlend secondary input selection. This is needed by disabling CRTC at boot in an upcoming commit which tries to get the selection.
Reviewed-by: Frank Li <[email protected]> Signed-off-by: Liu Ying <[email protected]> --- v4: - Rebase onto the latest drm-misc-next and resolve conflict. v2: - Collect Frank's R-b tag. --- drivers/gpu/drm/imx/dc/dc-lb.c | 21 +++++++++++++++++++++ drivers/gpu/drm/imx/dc/dc-pe.h | 1 + 2 files changed, 22 insertions(+) diff --git a/drivers/gpu/drm/imx/dc/dc-lb.c b/drivers/gpu/drm/imx/dc/dc-lb.c index ca1d714c8d6e654729e3c3ed5c00e74653b3e6b3..8622efac3f3d566ee6eeef33d90e2e26899f6502 100644 --- a/drivers/gpu/drm/imx/dc/dc-lb.c +++ b/drivers/gpu/drm/imx/dc/dc-lb.c @@ -20,6 +20,8 @@ #define PIXENGCFG_DYNAMIC_SEC_SEL_MASK GENMASK(13, 8) #define PIXENGCFG_DYNAMIC_SEC_SEL(x) \ FIELD_PREP(PIXENGCFG_DYNAMIC_SEC_SEL_MASK, (x)) +#define PIXENGCFG_DYNAMIC_SEC_SEL_GET(x) \ + FIELD_GET(PIXENGCFG_DYNAMIC_SEC_SEL_MASK, (x)) #define PIXENGCFG_DYNAMIC_PRIM_SEL_MASK GENMASK(5, 0) #define PIXENGCFG_DYNAMIC_PRIM_SEL(x) \ FIELD_PREP(PIXENGCFG_DYNAMIC_PRIM_SEL_MASK, (x)) @@ -182,6 +184,25 @@ void dc_lb_pec_dynamic_sec_sel(struct dc_lb *lb, enum dc_link_id sec) dev_warn(lb->dev, "invalid secondary input selection:%d\n", sec); } +int dc_lb_pec_dynamic_sec_sel_get(struct dc_lb *lb, enum dc_link_id *sec) +{ + u32 val; + + regmap_read(lb->reg_pec, PIXENGCFG_DYNAMIC, &val); + val = PIXENGCFG_DYNAMIC_SEC_SEL_GET(val); + + switch (val) { + case LINK_ID_NONE: + case LINK_ID_FETCHWARP2: + case LINK_ID_FETCHLAYER0: + *sec = val; + dev_dbg(lb->dev, "get secondary input selection: 0x%02x\n", val); + return 0; + default: + return -EINVAL; + } +} + void dc_lb_pec_clken(struct dc_lb *lb, enum dc_pec_clken clken) { regmap_write_bits(lb->reg_pec, PIXENGCFG_DYNAMIC, CLKEN_MASK, diff --git a/drivers/gpu/drm/imx/dc/dc-pe.h b/drivers/gpu/drm/imx/dc/dc-pe.h index 0b81dc6b251c452e7ca72f1cd12af065bafaa198..4e38aead69bce6e9ad4cf2a7cd1fedbaeda60650 100644 --- a/drivers/gpu/drm/imx/dc/dc-pe.h +++ b/drivers/gpu/drm/imx/dc/dc-pe.h @@ -93,6 +93,7 @@ void dc_ed_init(struct dc_ed *ed); enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb); void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim); void dc_lb_pec_dynamic_sec_sel(struct dc_lb *lb, enum dc_link_id sec); +int dc_lb_pec_dynamic_sec_sel_get(struct dc_lb *lb, enum dc_link_id *sec); void dc_lb_pec_clken(struct dc_lb *lb, enum dc_pec_clken clken); void dc_lb_mode(struct dc_lb *lb, enum dc_lb_mode mode); void dc_lb_position(struct dc_lb *lb, int x, int y); -- 2.34.1
