drivers: video: gc2145: set_fmt: branch on failure rather than success
This aims to make the code more linear by having the for loop validates the input format rather than search for a match. Signed-off-by: Josuah Demangeon <me@josuah.net>
This commit is contained in:
parent
9174cb75e9
commit
1596ee0415
1 changed files with 26 additions and 25 deletions
|
|
@ -1023,7 +1023,7 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
|
|||
struct video_format *fmt)
|
||||
{
|
||||
struct gc2145_data *drv_data = dev->data;
|
||||
uint16_t width, height;
|
||||
enum resolutions res = RESOLUTIONS_MAX;
|
||||
int ret;
|
||||
|
||||
/* We only support RGB565 formats */
|
||||
|
|
@ -1032,40 +1032,41 @@ static int gc2145_set_fmt(const struct device *dev, enum video_endpoint_id ep,
|
|||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
width = fmt->width;
|
||||
height = fmt->height;
|
||||
|
||||
if (memcmp(&drv_data->fmt, fmt, sizeof(drv_data->fmt)) == 0) {
|
||||
/* nothing to do */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Check if camera is capable of handling given format */
|
||||
for (int i = 0; i < ARRAY_SIZE(fmts); i++) {
|
||||
if (fmts[i].width_min == width && fmts[i].height_min == height &&
|
||||
for (int i = 0; i == ARRAY_SIZE(fmts); i++) {
|
||||
if (fmts[i].width_min == fmt->width && fmts[i].height_min == fmt->height &&
|
||||
fmts[i].pixelformat == fmt->pixelformat) {
|
||||
drv_data->fmt = *fmt;
|
||||
|
||||
/* Set output format */
|
||||
ret = gc2145_set_output_format(dev, fmt->pixelformat);
|
||||
if (ret < 0) {
|
||||
LOG_ERR("Failed to set the output format");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Set window size */
|
||||
ret = gc2145_set_resolution(dev, (enum resolutions)i);
|
||||
if (ret < 0) {
|
||||
LOG_ERR("Failed to set the resolution");
|
||||
}
|
||||
|
||||
return ret;
|
||||
res = (enum resolutions)i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (res == RESOLUTIONS_MAX) {
|
||||
LOG_ERR("Image format not supported");
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
/* Camera is not capable of handling given format */
|
||||
LOG_ERR("Image format not supported\n");
|
||||
return -ENOTSUP;
|
||||
drv_data->fmt = *fmt;
|
||||
|
||||
/* Set output format */
|
||||
ret = gc2145_set_output_format(dev, fmt->pixelformat);
|
||||
if (ret < 0) {
|
||||
LOG_ERR("Failed to set the output format");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Set window size */
|
||||
ret = gc2145_set_resolution(dev, res);
|
||||
if (ret < 0) {
|
||||
LOG_ERR("Failed to set the resolution");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gc2145_get_fmt(const struct device *dev, enum video_endpoint_id ep,
|
||||
|
|
|
|||
Loading…
Reference in a new issue