]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/komeda: Update HW up-sampling on D71
authorLowry Li (Arm Technology China) <Lowry.Li@arm.com>
Thu, 16 May 2019 06:13:09 +0000 (07:13 +0100)
committerLiviu Dudau <Liviu.Dudau@arm.com>
Wed, 19 Jun 2019 10:42:17 +0000 (11:42 +0100)
Updates HW up-sampling method according to the format type.

Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
drivers/gpu/drm/arm/display/komeda/d71/d71_component.c

index 7f4c23abc317269597103c961eff4af7195148de..d467944f51a54af8ea51fe6083ab2dcd024b306b 100644 (file)
@@ -212,6 +212,35 @@ static void d71_layer_update(struct komeda_component *c,
                malidp_write32(reg, BLK_P1_PTR_HIGH, upper_32_bits(addr));
        }
 
+       if (fb->format->is_yuv) {
+               u32 upsampling = 0;
+
+               switch (kfb->format_caps->fourcc) {
+               case DRM_FORMAT_YUYV:
+                       upsampling = fb->modifier ? LR_CHI422_BILINEAR :
+                                    LR_CHI422_REPLICATION;
+                       break;
+               case DRM_FORMAT_UYVY:
+                       upsampling = LR_CHI422_REPLICATION;
+                       break;
+               case DRM_FORMAT_NV12:
+               case DRM_FORMAT_YUV420_8BIT:
+               case DRM_FORMAT_YUV420_10BIT:
+               case DRM_FORMAT_YUV420:
+               case DRM_FORMAT_P010:
+               /* these fmt support MPGE/JPEG both, here perfer JPEG*/
+                       upsampling = LR_CHI420_JPEG;
+                       break;
+               case DRM_FORMAT_X0L2:
+                       upsampling = LR_CHI420_JPEG;
+                       break;
+               default:
+                       break;
+               }
+
+               malidp_write32(reg, LAYER_R_CONTROL, upsampling);
+       }
+
        malidp_write32(reg, LAYER_FMT, kfb->format_caps->hw_id);
        malidp_write32(reg, BLK_IN_SIZE, HV_SIZE(st->hsize, st->vsize));