s64 fp_b = drm_int2fixp(rgb_565 & 0x1f);
 
        out_pixel->a = (u16)0xffff;
-       out_pixel->r = drm_fixp2int(drm_fixp_mul(fp_r, fp_rb_ratio));
-       out_pixel->g = drm_fixp2int(drm_fixp_mul(fp_g, fp_g_ratio));
-       out_pixel->b = drm_fixp2int(drm_fixp_mul(fp_b, fp_rb_ratio));
+       out_pixel->r = drm_fixp2int_round(drm_fixp_mul(fp_r, fp_rb_ratio));
+       out_pixel->g = drm_fixp2int_round(drm_fixp_mul(fp_g, fp_g_ratio));
+       out_pixel->b = drm_fixp2int_round(drm_fixp_mul(fp_b, fp_rb_ratio));
 }
 
 void vkms_compose_row(struct line_buffer *stage_buffer, struct vkms_plane_state *plane, int y)
                s64 fp_g = drm_int2fixp(in_pixels[x].g);
                s64 fp_b = drm_int2fixp(in_pixels[x].b);
 
-               u16 r = drm_fixp2int(drm_fixp_div(fp_r, fp_rb_ratio));
-               u16 g = drm_fixp2int(drm_fixp_div(fp_g, fp_g_ratio));
-               u16 b = drm_fixp2int(drm_fixp_div(fp_b, fp_rb_ratio));
+               u16 r = drm_fixp2int_round(drm_fixp_div(fp_r, fp_rb_ratio));
+               u16 g = drm_fixp2int_round(drm_fixp_div(fp_g, fp_g_ratio));
+               u16 b = drm_fixp2int_round(drm_fixp_div(fp_b, fp_rb_ratio));
 
                *dst_pixels = cpu_to_le16(r << 11 | g << 5 | b);
        }