From 624e9896c5bffee146ebb05b9366f8dc3f8b54aa Mon Sep 17 00:00:00 2001 From: Sakari Ailus Date: Tue, 6 Sep 2016 09:51:17 -0300 Subject: [media] smiapp: Remove unnecessary BUG_ON()'s Instead, calculate how much is needed and then allocate the memory dynamically. Signed-off-by: Sakari Ailus Reviewed-by: Sebastian Reichel Signed-off-by: Mauro Carvalho Chehab --- drivers/media/i2c/smiapp/smiapp-core.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'drivers/media/i2c/smiapp/smiapp-core.c') diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c index e5d458420922..9873b3d764db 100644 --- a/drivers/media/i2c/smiapp/smiapp-core.c +++ b/drivers/media/i2c/smiapp/smiapp-core.c @@ -621,7 +621,7 @@ static int smiapp_init_controls(struct smiapp_sensor *sensor) static int smiapp_init_late_controls(struct smiapp_sensor *sensor) { unsigned long *valid_link_freqs = &sensor->valid_link_freqs[ - sensor->csi_format->compressed - SMIAPP_COMPRESSED_BASE]; + sensor->csi_format->compressed - sensor->compressed_min_bpp]; unsigned int max, i; for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++) { @@ -754,6 +754,7 @@ static int smiapp_get_mbus_formats(struct smiapp_sensor *sensor) { struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd); struct smiapp_pll *pll = &sensor->pll; + u8 compressed_max_bpp = 0; unsigned int type, n; unsigned int i, pixel_order; int rval; @@ -825,17 +826,28 @@ static int smiapp_get_mbus_formats(struct smiapp_sensor *sensor) pll->binning_vertical = 1; pll->scale_m = sensor->scale_m; + for (i = 0; i < ARRAY_SIZE(smiapp_csi_data_formats); i++) { + sensor->compressed_min_bpp = + min(smiapp_csi_data_formats[i].compressed, + sensor->compressed_min_bpp); + compressed_max_bpp = + max(smiapp_csi_data_formats[i].compressed, + compressed_max_bpp); + } + + sensor->valid_link_freqs = devm_kcalloc( + &client->dev, + compressed_max_bpp - sensor->compressed_min_bpp + 1, + sizeof(*sensor->valid_link_freqs), GFP_KERNEL); + for (i = 0; i < ARRAY_SIZE(smiapp_csi_data_formats); i++) { const struct smiapp_csi_data_format *f = &smiapp_csi_data_formats[i]; unsigned long *valid_link_freqs = &sensor->valid_link_freqs[ - f->compressed - SMIAPP_COMPRESSED_BASE]; + f->compressed - sensor->compressed_min_bpp]; unsigned int j; - BUG_ON(f->compressed < SMIAPP_COMPRESSED_BASE); - BUG_ON(f->compressed > SMIAPP_COMPRESSED_MAX); - if (!(sensor->default_mbus_frame_fmts & 1 << i)) continue; @@ -1769,7 +1781,7 @@ static int smiapp_set_format_source(struct v4l2_subdev *subdev, valid_link_freqs = &sensor->valid_link_freqs[sensor->csi_format->compressed - - SMIAPP_COMPRESSED_BASE]; + - sensor->compressed_min_bpp]; __v4l2_ctrl_modify_range( sensor->link_freq, 0, -- cgit