Commit 624e9896 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

[media] smiapp: Remove unnecessary BUG_ON()'s



Instead, calculate how much is needed and then allocate the memory
dynamically.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: default avatarSebastian Reichel <sre@kernel.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 6c5ff7c8
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -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,
+2 −6
Original line number Diff line number Diff line
@@ -150,11 +150,6 @@ struct smiapp_csi_data_format {
#define SMIAPP_PAD_SRC			1
#define SMIAPP_PADS			2

#define SMIAPP_COMPRESSED_BASE		8
#define SMIAPP_COMPRESSED_MAX		16
#define SMIAPP_NR_OF_COMPRESSED		(SMIAPP_COMPRESSED_MAX - \
					 SMIAPP_COMPRESSED_BASE + 1)

struct smiapp_binning_subtype {
	u8 horizontal:4;
	u8 vertical:4;
@@ -224,6 +219,7 @@ struct smiapp_sensor {

	bool streaming;
	bool dev_init_done;
	u8 compressed_min_bpp;

	u8 *nvm;		/* nvm memory buffer */
	unsigned int nvm_size;	/* bytes */
@@ -233,7 +229,7 @@ struct smiapp_sensor {
	struct smiapp_pll pll;

	/* Is a default format supported for a given BPP? */
	unsigned long valid_link_freqs[SMIAPP_NR_OF_COMPRESSED];
	unsigned long *valid_link_freqs;

	/* Pixel array controls */
	struct v4l2_ctrl *analog_gain;