Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9a4105c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mdss: mdp3: swap colors when performing csc from yuv2rgb"

parents f8197abe 0e87542f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -391,7 +391,7 @@ struct ppp_edge_rep {
uint32_t ppp_bpp(uint32_t type);
uint32_t ppp_src_config(uint32_t type);
uint32_t ppp_out_config(uint32_t type);
uint32_t ppp_pack_pattern(uint32_t type);
uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb);
uint32_t ppp_dst_op_reg(uint32_t type);
uint32_t ppp_src_op_reg(uint32_t type);
bool ppp_per_p_alpha(uint32_t type);
+33 −1
Original line number Diff line number Diff line
@@ -88,6 +88,35 @@ const uint32_t pack_patt_lut[MDP_IMGTYPE_LIMIT] = {
		CLR_G, CLR_R, 8),
};

const uint32_t swapped_pack_patt_lut[MDP_IMGTYPE_LIMIT] = {
	[MDP_RGB_565] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8),
	[MDP_BGR_565] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8),
	[MDP_RGB_888] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8),
	[MDP_BGR_888] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8),
	[MDP_BGRA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R,
		CLR_G, CLR_B, 8),
	[MDP_RGBA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B,
		CLR_G, CLR_R, 8),
	[MDP_ARGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B,
		CLR_G, CLR_R, 8),
	[MDP_XRGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B,
		CLR_G, CLR_R, 8),
	[MDP_RGBX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B,
		CLR_G, CLR_R, 8),
	[MDP_Y_CRCB_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8),
	[MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8),
	[MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR,
		CLR_CB, 8),
	[MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR,
		CLR_CB, 8),
	[MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y,
		CLR_CB, CLR_Y, CLR_CR, 8),
	[MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8),
	[MDP_Y_CRCB_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8),
	[MDP_BGRX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R,
		CLR_G, CLR_B, 8),
};

const uint32_t dst_op_reg[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CRCB_H2V2] = PPP_OP_DST_CHROMA_420,
	[MDP_Y_CBCR_H2V2] = PPP_OP_DST_CHROMA_420,
@@ -1530,10 +1559,13 @@ uint32_t ppp_out_config(uint32_t type)
	return out_cfg_lut[type];
}

uint32_t ppp_pack_pattern(uint32_t type)
uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb)
{
	if (MDP_IS_IMGTYPE_BAD(type))
		return 0;
	if (yuv2rgb)
		return swapped_pack_patt_lut[type];

	return pack_patt_lut[type];
}

+9 −7
Original line number Diff line number Diff line
@@ -486,7 +486,7 @@ int load_csc_matrix(int matrix_type, struct ppp_csc_table *csc)
	return load_secondary_matrix(csc);
}

int config_ppp_src(struct ppp_img_desc *src)
int config_ppp_src(struct ppp_img_desc *src, uint32_t yuv2rgb)
{
	uint32_t val;

@@ -510,12 +510,12 @@ int config_ppp_src(struct ppp_img_desc *src)
	val |= (src->roi.x % 2) ? PPP_SRC_BPP_ROI_ODD_X : 0;
	val |= (src->roi.y % 2) ? PPP_SRC_BPP_ROI_ODD_Y : 0;
	PPP_WRITEL(val, MDP3_PPP_SRC_FORMAT);
	PPP_WRITEL(ppp_pack_pattern(src->color_fmt),
	PPP_WRITEL(ppp_pack_pattern(src->color_fmt, yuv2rgb),
		MDP3_PPP_SRC_UNPACK_PATTERN1);
	return 0;
}

int config_ppp_out(struct ppp_img_desc *dst)
int config_ppp_out(struct ppp_img_desc *dst, uint32_t yuv2rgb)
{
	uint32_t val;
	bool pseudoplanr_output = false;
@@ -534,7 +534,7 @@ int config_ppp_out(struct ppp_img_desc *dst)
	if (pseudoplanr_output)
		val |= PPP_DST_PLANE_PSEUDOPLN;
	PPP_WRITEL(val, MDP3_PPP_OUT_FORMAT);
	PPP_WRITEL(ppp_pack_pattern(dst->color_fmt),
	PPP_WRITEL(ppp_pack_pattern(dst->color_fmt, yuv2rgb),
		MDP3_PPP_OUT_PACK_PATTERN1);

	val = ((dst->roi.height & MDP3_PPP_XY_MASK) << MDP3_PPP_XY_OFFSET) |
@@ -573,7 +573,7 @@ int config_ppp_background(struct ppp_img_desc *bg)

	PPP_WRITEL(ppp_src_config(bg->color_fmt),
		MDP3_PPP_BG_FORMAT);
	PPP_WRITEL(ppp_pack_pattern(bg->color_fmt),
	PPP_WRITEL(ppp_pack_pattern(bg->color_fmt, 0),
		MDP3_PPP_BG_UNPACK_PATTERN1);
	return 0;
}
@@ -1108,6 +1108,7 @@ int config_ppp_rotation(uint32_t mdp_op, uint32_t *pppop_reg_ptr)

int config_ppp_op_mode(struct ppp_blit_op *blit_op)
{
	uint32_t yuv2rgb;
	uint32_t ppp_operation_reg = 0;
	int sv_slice, sh_slice;
	int dv_slice, dh_slice;
@@ -1153,6 +1154,7 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op)

	config_ppp_csc(blit_op->src.color_fmt,
		blit_op->dst.color_fmt, &ppp_operation_reg);
	yuv2rgb = ppp_operation_reg & PPP_OP_CONVERT_YCBCR2RGB;

	if (blit_op->mdp_op & MDPOP_DITHER)
		ppp_operation_reg |= PPP_OP_DITHER_EN;
@@ -1197,8 +1199,8 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op)

	config_ppp_blend(blit_op, &ppp_operation_reg);

	config_ppp_src(&blit_op->src);
	config_ppp_out(&blit_op->dst);
	config_ppp_src(&blit_op->src, yuv2rgb);
	config_ppp_out(&blit_op->dst, yuv2rgb);
	PPP_WRITEL(ppp_operation_reg, MDP3_PPP_OP_MODE);
	mb();
	return 0;