On Fri Nov 28 23:35:42 2025 +0200, Sakari Ailus wrote:
> Handle link_freq <= as a special case and continue calculating the pixel
> rate otherwise.
> 
> Signed-off-by: Sakari Ailus <[email protected]>
> Reviewed-by: Antti Laakso <[email protected]>

Patch committed.

Thanks,
Sakari Ailus

 drivers/media/pci/intel/ipu6/ipu6-isys-video.c | 37 +++++++++++---------------
 1 file changed, 16 insertions(+), 21 deletions(-)

---

diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c 
b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
index 781fc0e88417..3d455872f29a 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
@@ -648,12 +648,9 @@ void ipu6_isys_configure_stream_watermark(struct 
ipu6_isys_video *av,
        struct ipu6_isys_csi2 *csi2 = NULL;
        struct isys_iwake_watermark *iwake_watermark = &isys->iwake_watermark;
        struct device *dev = &isys->adev->auxdev.dev;
-       struct v4l2_mbus_framefmt format;
        struct v4l2_subdev *esd;
        struct v4l2_control hb = { .id = V4L2_CID_HBLANK, .value = 0 };
-       unsigned int bpp, lanes;
-       s64 link_freq = 0;
-       u64 pixel_rate = 0;
+       s64 link_freq;
        int ret;
 
        esd = media_entity_to_v4l2_subdev(source);
@@ -671,28 +668,26 @@ void ipu6_isys_configure_stream_watermark(struct 
ipu6_isys_video *av,
 
        csi2 = ipu6_isys_subdev_to_csi2(av->stream->asd);
        link_freq = ipu6_isys_csi2_get_link_freq(csi2);
-       if (link_freq > 0) {
-               struct v4l2_subdev_state *state =
-                       v4l2_subdev_lock_and_get_active_state(&csi2->asd.sd);
-
-               lanes = csi2->nlanes;
-               format = *v4l2_subdev_state_get_format(state, 0,
-                                                      av->source_stream);
-               bpp = ipu6_isys_mbus_code_to_bpp(format.code);
-               pixel_rate = mul_u64_u32_div(link_freq, lanes * 2, bpp);
-
-               v4l2_subdev_unlock_state(state);
-       }
-
-       av->watermark.pixel_rate = pixel_rate;
-
-       if (!pixel_rate) {
+       if (link_freq <= 0) {
                mutex_lock(&iwake_watermark->mutex);
                iwake_watermark->force_iwake_disable = true;
                mutex_unlock(&iwake_watermark->mutex);
-               dev_warn(dev, "unexpected pixel_rate from %s, disable iwake.\n",
+               dev_warn(dev, "unexpected link_freq from %s, disable iwake\n",
                         source->name);
+               return;
        }
+
+       struct v4l2_subdev_state *state;
+       struct v4l2_mbus_framefmt *format;
+       unsigned int bpp;
+
+       state = v4l2_subdev_lock_and_get_active_state(&csi2->asd.sd);
+       format = v4l2_subdev_state_get_format(state, 0, av->source_stream);
+       bpp = ipu6_isys_mbus_code_to_bpp(format->code);
+       v4l2_subdev_unlock_state(state);
+
+       av->watermark.pixel_rate = mul_u64_u32_div(link_freq, csi2->nlanes * 2,
+                                                  bpp);
 }
 
 static void calculate_stream_datarate(struct ipu6_isys_video *av)
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to