diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0408-media-i2c-imx290-Fix-the-pixel-rate-at-148.5Mpix-s.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0408-media-i2c-imx290-Fix-the-pixel-rate-at-148.5Mpix-s.patch | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0408-media-i2c-imx290-Fix-the-pixel-rate-at-148.5Mpix-s.patch b/target/linux/bcm27xx/patches-5.15/950-0408-media-i2c-imx290-Fix-the-pixel-rate-at-148.5Mpix-s.patch new file mode 100644 index 0000000000..00d4e133cc --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0408-media-i2c-imx290-Fix-the-pixel-rate-at-148.5Mpix-s.patch @@ -0,0 +1,49 @@ +From ae89f74e9c2583b2d49ea0c6d5653aa820083c4e Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.com> +Date: Thu, 17 Jun 2021 13:00:39 +0100 +Subject: [PATCH] media: i2c: imx290: Fix the pixel rate at 148.5Mpix/s + +Whilst the datasheet lists the link frequency changing between +1080p and 720p modes, reality is that with the default blanking +we have +(1920 + 280) * (1080 + 45) * 60fps = 148.5MPix/s +and +(1280 + 2020) * (720 + 30) * 60fps = 148.5MPix/s +and this reflects reality whether in 10 or 12 bit readout modes. + +How this relates to link frequency is unclear as it differs +from the datasheet, but all exposure and frame rate calcs need +the pixel rate to be correct, so make it so. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> +--- + drivers/media/i2c/imx290.c | 16 +--------------- + 1 file changed, 1 insertion(+), 15 deletions(-) + +--- a/drivers/media/i2c/imx290.c ++++ b/drivers/media/i2c/imx290.c +@@ -853,23 +853,9 @@ static inline u8 imx290_get_link_freq_in + return imx290->current_mode->link_freq_index; + } + +-static s64 imx290_get_link_freq(struct imx290 *imx290) +-{ +- u8 index = imx290_get_link_freq_index(imx290); +- +- return *(imx290_link_freqs_ptr(imx290) + index); +-} +- + static u64 imx290_calc_pixel_rate(struct imx290 *imx290) + { +- s64 link_freq = imx290_get_link_freq(imx290); +- u8 nlanes = imx290->nlanes; +- u64 pixel_rate; +- +- /* pixel rate = link_freq * 2 * nr_of_lanes / bits_per_sample */ +- pixel_rate = link_freq * 2 * nlanes; +- do_div(pixel_rate, imx290->bpp); +- return pixel_rate; ++ return 148500000; + } + + static int imx290_set_fmt(struct v4l2_subdev *sd, |