return IRQ_HANDLED;
}
+static bool dispc_is_yuv_format(int type)
+{
+ bool ret = false;
+
+ switch(type) {
+ case SPRD_DATA_FORMAT_YUV422:
+ case SPRD_DATA_FORMAT_YUV420:
+ case SPRD_DATA_FORMAT_YUV400:
+ case SPRD_DATA_FORMAT_YUV422_3P:
+ case SPRD_DATA_FORMAT_YUV420_3P:
+ ret = true;
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
/* dispc soft reset */
static void dispc_reset(void)
reg_value = (rect->y << 16) | (rect->x);
dispc_write(reg_value, DISPC_IMG_DISP_XY);
- if(type < SPRD_DATA_FORMAT_RGB888) {
+ if(dispc_is_yuv_format(type)) {
dispc_write(1, DISPC_Y2R_CTRL);
#ifndef CONFIG_FB_SCX35
dispc_write(SPRDFB_BRIGHTNESS|SPRDFB_CONTRAST, DISPC_Y2R_Y_PARAM);
if ((setting->layer_index & SPRD_LAYER_IMG) && img_buffer) {
dispc_write((uint32_t)img_buffer,
DISPC_IMG_Y_BASE_ADDR);
- if (dispc_ctx.overlay_img_info.data_type <
- SPRD_DATA_FORMAT_RGB888) {
- uint32_t size = rect->w * rect->h;
- dispc_write((uint32_t)(img_buffer + size),
- DISPC_IMG_UV_BASE_ADDR);
- } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P) {
- uint32_t size = rect->w * rect->h;
- dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR);
- dispc_write((uint32_t)(img_buffer + size*3/2), DISPC_IMG_V_BASE_ADDR);
- } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P) {
+
+ if (dispc_is_yuv_format(dispc_ctx.overlay_img_info.data_type)) {
uint32_t size = rect->w * rect->h;
+
dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR);
- dispc_write((uint32_t)(img_buffer + size*5/4), DISPC_IMG_V_BASE_ADDR);
+
+ if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P)
+ dispc_write((uint32_t)(img_buffer + size * 3 / 2),
+ DISPC_IMG_V_BASE_ADDR);
+ else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P)
+ dispc_write((uint32_t)(img_buffer + size * 5 / 4),
+ DISPC_IMG_V_BASE_ADDR);
}
}