On Tue Mar 3 10:42:25 2026 +0200, Svyatoslav Ryhel wrote:
> During __tegra_channel_try_format, the VI (Video Input) checks if the
> camera sensor driver provides a get_selection operation. If this operation
> is unavailable, the crop is set to 0. However, if the operation is
> available but returns an error, the VI currently fails.
>
> While this works for simple cameras with a single pad, it creates a corner
> case for sensors like the mt9m114. This sensor provides the same operation
> set for both IFP pads, but returns an error when get_selection is called
> on an unsupported pad (such as the source pad), causing the aforementioned
> behavior.
>
> To resolve this, if get_selection is implemented but returns an error,
> try_crop is now set to 0 â treating it as if the operation was not
> implemented â instead of returning a failure.
>
> Tested-by: Luca Ceresoli <[email protected]> # tegra20, parallel
> camera
> Signed-off-by: Svyatoslav Ryhel <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>
Patch committed.
Thanks,
Hans Verkuil
drivers/staging/media/tegra-video/vi.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
---
diff --git a/drivers/staging/media/tegra-video/vi.c
b/drivers/staging/media/tegra-video/vi.c
index a7892036f29e..e0961bc0a017 100644
--- a/drivers/staging/media/tegra-video/vi.c
+++ b/drivers/staging/media/tegra-video/vi.c
@@ -476,17 +476,11 @@ static int __tegra_channel_try_format(struct
tegra_vi_channel *chan,
fse.code = fmtinfo->code;
ret = v4l2_subdev_call(subdev, pad, enum_frame_size, sd_state, &fse);
if (ret) {
- if (!v4l2_subdev_has_op(subdev, pad, get_selection)) {
+ if (!v4l2_subdev_has_op(subdev, pad, get_selection) ||
+ v4l2_subdev_call(subdev, pad, get_selection, NULL, &sdsel))
{
try_crop->width = 0;
try_crop->height = 0;
} else {
- ret = v4l2_subdev_call(subdev, pad, get_selection,
- NULL, &sdsel);
- if (ret) {
- ret = -EINVAL;
- goto out_free;
- }
-
try_crop->width = sdsel.r.width;
try_crop->height = sdsel.r.height;
}
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]