{
        const struct v4l2_mbus_framefmt *format;
        struct vsp1_lif *lif = to_lif(&entity->subdev);
-       unsigned int hbth = 1300;
-       unsigned int obth = 400;
-       unsigned int lbth = 200;
+       unsigned int hbth;
+       unsigned int obth;
+       unsigned int lbth;
 
        format = vsp1_entity_get_pad_format(&lif->entity, lif->entity.config,
                                            LIF_PAD_SOURCE);
 
-       obth = min(obth, (format->width + 1) / 2 * format->height - 4);
+       switch (entity->vsp1->version & VI6_IP_VERSION_SOC_MASK) {
+       case VI6_IP_VERSION_MODEL_VSPD_GEN2:
+       case VI6_IP_VERSION_MODEL_VSPD_V2H:
+               hbth = 1536;
+               obth = min(128U, (format->width + 1) / 2 * format->height - 4);
+               lbth = 1520;
+               break;
+
+       case VI6_IP_VERSION_MODEL_VSPDL_GEN3:
+       case VI6_IP_VERSION_MODEL_VSPD_V3:
+               hbth = 0;
+               obth = 1500;
+               lbth = 0;
+               break;
+
+       case VI6_IP_VERSION_MODEL_VSPD_GEN3:
+       default:
+               hbth = 0;
+               obth = 3000;
+               lbth = 0;
+               break;
+       }
 
        vsp1_lif_write(lif, dlb, VI6_LIF_CSBTH,
                        (hbth << VI6_LIF_CSBTH_HBTH_SHIFT) |