Skip to content

Commit

Permalink
[media] V4L: ov9740: Add suspend/resume
Browse files Browse the repository at this point in the history
On suspend, remember whether we are streaming or not, and at what frame format,
so that on resume, we can start streaming again.

Signed-off-by: Andrew Chew <achew@nvidia.com>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Andrew Chew authored and Mauro Carvalho Chehab committed Jul 27, 2011
1 parent e29c9bf commit 95904d4
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions drivers/media/video/ov9740.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,10 @@ struct ov9740_priv {

bool flag_vflip;
bool flag_hflip;

/* For suspend/resume. */
struct v4l2_mbus_framefmt current_mf;
bool current_enable;
};

static const struct ov9740_reg ov9740_defaults[] = {
Expand Down Expand Up @@ -551,6 +555,8 @@ static int ov9740_s_stream(struct v4l2_subdev *sd, int enable)
0x00);
}

priv->current_enable = enable;

return ret;
}

Expand Down Expand Up @@ -702,6 +708,7 @@ static int ov9740_s_fmt(struct v4l2_subdev *sd,
struct v4l2_mbus_framefmt *mf)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
struct ov9740_priv *priv = to_ov9740(sd);
enum v4l2_colorspace cspace;
enum v4l2_mbus_pixelcode code = mf->code;
int ret;
Expand All @@ -728,6 +735,8 @@ static int ov9740_s_fmt(struct v4l2_subdev *sd,
mf->code = code;
mf->colorspace = cspace;

memcpy(&priv->current_mf, mf, sizeof(struct v4l2_mbus_framefmt));

return ret;
}

Expand Down Expand Up @@ -829,6 +838,24 @@ static int ov9740_g_chip_ident(struct v4l2_subdev *sd,
return 0;
}

static int ov9740_s_power(struct v4l2_subdev *sd, int on)
{
struct ov9740_priv *priv = to_ov9740(sd);

if (!priv->current_enable)
return 0;

if (on) {
ov9740_s_fmt(sd, &priv->current_mf);
ov9740_s_stream(sd, priv->current_enable);
} else {
ov9740_s_stream(sd, 0);
priv->current_enable = true;
}

return 0;
}

#ifdef CONFIG_VIDEO_ADV_DEBUG
static int ov9740_get_register(struct v4l2_subdev *sd,
struct v4l2_dbg_register *reg)
Expand Down Expand Up @@ -942,6 +969,7 @@ static struct v4l2_subdev_core_ops ov9740_core_ops = {
.g_ctrl = ov9740_g_ctrl,
.s_ctrl = ov9740_s_ctrl,
.g_chip_ident = ov9740_g_chip_ident,
.s_power = ov9740_s_power,
#ifdef CONFIG_VIDEO_ADV_DEBUG
.g_register = ov9740_get_register,
.s_register = ov9740_set_register,
Expand Down

0 comments on commit 95904d4

Please sign in to comment.