Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 306369
b: refs/heads/master
c: 44b153c
h: refs/heads/master
i:
  306367: 6143910
v: v3
  • Loading branch information
Sylwester Nawrocki authored and Mauro Carvalho Chehab committed May 14, 2012
1 parent bd9c711 commit f14f2ab
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0373e97496793fd91cd7fb1a26840ee43d70f77e
refs/heads/master: 44b153ca639f7299a94c27fc48708bbbeccf5050
7 changes: 7 additions & 0 deletions trunk/drivers/media/video/m5mols/m5mols.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ struct m5mols_version {
* @handle: control handler
* @auto_exposure: auto/manual exposure control
* @exposure: manual exposure control
* @auto_iso: auto/manual ISO sensitivity control
* @iso: manual ISO sensitivity control
* @autowb: Auto White Balance control
* @colorfx: color effect control
* @saturation: saturation control
Expand Down Expand Up @@ -193,6 +195,11 @@ struct m5mols_info {
struct v4l2_ctrl *auto_exposure;
struct v4l2_ctrl *exposure;
};
struct {
/* iso/auto iso cluster */
struct v4l2_ctrl *auto_iso;
struct v4l2_ctrl *iso;
};

struct v4l2_ctrl *auto_wb;
struct v4l2_ctrl *colorfx;
Expand Down
56 changes: 56 additions & 0 deletions trunk/drivers/media/video/m5mols/m5mols_controls.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,39 @@ static int m5mols_set_color_effect(struct m5mols_info *info, int val)
return ret;
}

static int m5mols_set_iso(struct m5mols_info *info, int auto_iso)
{
u32 iso = auto_iso ? 0 : info->iso->val + 1;

return m5mols_write(&info->sd, AE_ISO, iso);
}

static int m5mols_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
{
struct v4l2_subdev *sd = to_sd(ctrl);
struct m5mols_info *info = to_m5mols(sd);
int ret = 0;
u8 status;

v4l2_dbg(1, m5mols_debug, sd, "%s: ctrl: %s (%d)\n",
__func__, ctrl->name, info->isp_ready);

if (!info->isp_ready)
return -EBUSY;

switch (ctrl->id) {
case V4L2_CID_ISO_SENSITIVITY_AUTO:
ret = m5mols_read_u8(sd, AE_ISO, &status);
if (ret == 0)
ctrl->val = !status;
if (status != REG_ISO_AUTO)
info->iso->val = status - 1;
break;
}

return ret;
}

static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl)
{
unsigned int ctrl_mode = m5mols_get_ctrl_mode(ctrl);
Expand Down Expand Up @@ -354,6 +387,10 @@ static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl)
ret = m5mols_set_exposure(info, ctrl->val);
break;

case V4L2_CID_ISO_SENSITIVITY:
ret = m5mols_set_iso(info, ctrl->val);
break;

case V4L2_CID_AUTO_WHITE_BALANCE:
ret = m5mols_set_white_balance(info, ctrl->val);
break;
Expand All @@ -374,9 +411,16 @@ static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl)
}

static const struct v4l2_ctrl_ops m5mols_ctrl_ops = {
.g_volatile_ctrl = m5mols_g_volatile_ctrl,
.s_ctrl = m5mols_s_ctrl,
};

/* Supported manual ISO values */
static const s64 iso_qmenu[] = {
/* AE_ISO: 0x01...0x07 */
50, 100, 200, 400, 800, 1600, 3200
};

int m5mols_init_controls(struct v4l2_subdev *sd)
{
struct m5mols_info *info = to_m5mols(sd);
Expand Down Expand Up @@ -404,6 +448,14 @@ int m5mols_init_controls(struct v4l2_subdev *sd)
&m5mols_ctrl_ops, V4L2_CID_EXPOSURE,
0, exposure_max, 1, exposure_max / 2);

/* ISO control cluster */
info->auto_iso = v4l2_ctrl_new_std_menu(&info->handle, &m5mols_ctrl_ops,
V4L2_CID_ISO_SENSITIVITY_AUTO, 1, ~0x03, 1);

info->iso = v4l2_ctrl_new_int_menu(&info->handle, &m5mols_ctrl_ops,
V4L2_CID_ISO_SENSITIVITY, ARRAY_SIZE(iso_qmenu) - 1,
ARRAY_SIZE(iso_qmenu)/2 - 1, iso_qmenu);

info->saturation = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops,
V4L2_CID_SATURATION, 1, 5, 1, 3);

Expand All @@ -422,6 +474,10 @@ int m5mols_init_controls(struct v4l2_subdev *sd)

v4l2_ctrl_auto_cluster(2, &info->auto_exposure, 1, false);

info->auto_iso->flags |= V4L2_CTRL_FLAG_VOLATILE |
V4L2_CTRL_FLAG_UPDATE;
v4l2_ctrl_auto_cluster(2, &info->auto_iso, 0, false);

m5mols_set_ctrl_mode(info->auto_exposure, REG_PARAMETER);
m5mols_set_ctrl_mode(info->auto_wb, REG_PARAMETER);
m5mols_set_ctrl_mode(info->colorfx, REG_MONITOR);
Expand Down

0 comments on commit f14f2ab

Please sign in to comment.