Skip to content

Commit

Permalink
[media] smiapp: Use non-binning limits if the binning limit is zero
Browse files Browse the repository at this point in the history
Some sensors do use binning but do not have valid limits in binning
registers. Use non-binning limits in that case.

Signed-off-by: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Sakari Ailus authored and Mauro Carvalho Chehab committed May 20, 2012
1 parent 0458294 commit 3de886e
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions drivers/media/video/smiapp/smiapp-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ static int smiapp_get_all_limits(struct smiapp_sensor *sensor)

static int smiapp_get_limits_binning(struct smiapp_sensor *sensor)
{
struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd);
static u32 const limits[] = {
SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN,
SMIAPP_LIMIT_MAX_FRAME_LENGTH_LINES_BIN,
Expand All @@ -671,19 +672,43 @@ static int smiapp_get_limits_binning(struct smiapp_sensor *sensor)
SMIAPP_LIMIT_FINE_INTEGRATION_TIME_MIN,
SMIAPP_LIMIT_FINE_INTEGRATION_TIME_MAX_MARGIN,
};
unsigned int i;
int rval;

if (sensor->limits[SMIAPP_LIMIT_BINNING_CAPABILITY] ==
SMIAPP_BINNING_CAPABILITY_NO) {
unsigned int i;

for (i = 0; i < ARRAY_SIZE(limits); i++)
sensor->limits[limits[i]] =
sensor->limits[limits_replace[i]];

return 0;
}

return smiapp_get_limits(sensor, limits, ARRAY_SIZE(limits));
rval = smiapp_get_limits(sensor, limits, ARRAY_SIZE(limits));
if (rval < 0)
return rval;

/*
* Sanity check whether the binning limits are valid. If not,
* use the non-binning ones.
*/
if (sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN]
&& sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN]
&& sensor->limits[SMIAPP_LIMIT_MIN_LINE_BLANKING_PCK_BIN])
return 0;

for (i = 0; i < ARRAY_SIZE(limits); i++) {
dev_dbg(&client->dev,
"replace limit 0x%8.8x \"%s\" = %d, 0x%x\n",
smiapp_reg_limits[limits[i]].addr,
smiapp_reg_limits[limits[i]].what,
sensor->limits[limits_replace[i]],
sensor->limits[limits_replace[i]]);
sensor->limits[limits[i]] =
sensor->limits[limits_replace[i]];
}

return 0;
}

static int smiapp_get_mbus_formats(struct smiapp_sensor *sensor)
Expand Down

0 comments on commit 3de886e

Please sign in to comment.