Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

media: i2c: imx219: Propagate errors from control range updates

Propagate return values from __v4l2_ctrl_modify_range() and
__v4l2_ctrl_s_ctrl() in imx219_set_ctrl() and imx219_set_pad_format().
This ensures proper error handling instead of ignoring possible
failures. Also return the result of imx219_set_pad_format() from
imx219_init_state().

Signed-off-by: Tarang Raval <tarang.raval@siliconsignals.io>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>

authored by

Tarang Raval and committed by
Hans Verkuil
dff10c70 4985b66f

+40 -21
+40 -21
drivers/media/i2c/imx219.c
··· 453 453 exposure_max = format->height + ctrl->val - 4; 454 454 exposure_def = (exposure_max < IMX219_EXPOSURE_DEFAULT) ? 455 455 exposure_max : IMX219_EXPOSURE_DEFAULT; 456 - __v4l2_ctrl_modify_range(imx219->exposure, 457 - imx219->exposure->minimum, 458 - exposure_max, imx219->exposure->step, 459 - exposure_def); 456 + ret = __v4l2_ctrl_modify_range(imx219->exposure, 457 + imx219->exposure->minimum, 458 + exposure_max, 459 + imx219->exposure->step, 460 + exposure_def); 461 + if (ret) 462 + return ret; 463 + 460 464 } 461 465 462 466 /* ··· 852 848 struct v4l2_rect *crop; 853 849 u8 bin_h, bin_v, binning; 854 850 u32 prev_line_len; 851 + int ret; 855 852 856 853 format = v4l2_subdev_state_get_format(state, 0); 857 854 prev_line_len = format->width + imx219->hblank->val; ··· 888 883 int pixel_rate; 889 884 890 885 /* Update limits and set FPS to default */ 891 - __v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN, 892 - IMX219_FLL_MAX - mode->height, 1, 886 + ret = __v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN, 887 + IMX219_FLL_MAX - mode->height, 1, 888 + mode->fll_def - mode->height); 889 + if (ret) 890 + return ret; 891 + 892 + ret = __v4l2_ctrl_s_ctrl(imx219->vblank, 893 893 mode->fll_def - mode->height); 894 - __v4l2_ctrl_s_ctrl(imx219->vblank, 895 - mode->fll_def - mode->height); 894 + if (ret) 895 + return ret; 896 + 896 897 /* Update max exposure while meeting expected vblanking */ 897 898 exposure_max = mode->fll_def - 4; 898 899 exposure_def = (exposure_max < IMX219_EXPOSURE_DEFAULT) ? 899 900 exposure_max : IMX219_EXPOSURE_DEFAULT; 900 - __v4l2_ctrl_modify_range(imx219->exposure, 901 - imx219->exposure->minimum, 902 - exposure_max, imx219->exposure->step, 903 - exposure_def); 901 + ret = __v4l2_ctrl_modify_range(imx219->exposure, 902 + imx219->exposure->minimum, 903 + exposure_max, 904 + imx219->exposure->step, 905 + exposure_def); 906 + if (ret) 907 + return ret; 904 908 905 909 /* 906 910 * With analog binning the default minimum line length of 3448 ··· 920 906 imx219_get_binning(state, &bin_h, &bin_v); 921 907 llp_min = (bin_h & bin_v) == IMX219_BINNING_X2_ANALOG ? 922 908 IMX219_BINNED_LLP_MIN : IMX219_LLP_MIN; 923 - __v4l2_ctrl_modify_range(imx219->hblank, llp_min - mode->width, 924 - IMX219_LLP_MAX - mode->width, 1, 925 - llp_min - mode->width); 909 + ret = __v4l2_ctrl_modify_range(imx219->hblank, 910 + llp_min - mode->width, 911 + IMX219_LLP_MAX - mode->width, 1, 912 + llp_min - mode->width); 913 + if (ret) 914 + return ret; 926 915 /* 927 916 * Retain PPL setting from previous mode so that the 928 917 * line time does not change on a mode change. ··· 934 917 * mode width subtracted. 935 918 */ 936 919 hblank = prev_line_len - mode->width; 937 - __v4l2_ctrl_s_ctrl(imx219->hblank, hblank); 920 + ret = __v4l2_ctrl_s_ctrl(imx219->hblank, hblank); 921 + if (ret) 922 + return ret; 938 923 939 924 /* Scale the pixel rate based on the mode specific factor */ 940 925 pixel_rate = imx219_get_pixel_rate(imx219) * 941 926 imx219_get_rate_factor(state); 942 - __v4l2_ctrl_modify_range(imx219->pixel_rate, pixel_rate, 943 - pixel_rate, 1, pixel_rate); 927 + ret = __v4l2_ctrl_modify_range(imx219->pixel_rate, pixel_rate, 928 + pixel_rate, 1, pixel_rate); 929 + if (ret) 930 + return ret; 944 931 } 945 932 946 933 return 0; ··· 993 972 }, 994 973 }; 995 974 996 - imx219_set_pad_format(sd, state, &fmt); 997 - 998 - return 0; 975 + return imx219_set_pad_format(sd, state, &fmt); 999 976 } 1000 977 1001 978 static const struct v4l2_subdev_video_ops imx219_video_ops = {