static int cx25840_audio_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); struct cx25840_state *state = to_state(sd); struct i2c_client *client = v4l2_get_subdevdata(sd); switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: if (state->mute->val) set_volume(client, 0); else set_volume(client, state->volume->val); break; case V4L2_CID_AUDIO_BASS: /* PATH1_EQ_BASS_VOL */ cx25840_and_or(client, 0x8d9, ~0x3f, 48 - (ctrl->val * 48 / 0xffff)); break; case V4L2_CID_AUDIO_TREBLE: /* PATH1_EQ_TREBLE_VOL */ cx25840_and_or(client, 0x8db, ~0x3f, 48 - (ctrl->val * 48 / 0xffff)); break; case V4L2_CID_AUDIO_BALANCE: set_balance(client, ctrl->val); break; default: return -EINVAL; } return 0; }
static int cx18_av_audio_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); struct cx18 *cx = v4l2_get_subdevdata(sd); switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: set_volume(cx, ctrl->val); break; case V4L2_CID_AUDIO_BASS: set_bass(cx, ctrl->val); break; case V4L2_CID_AUDIO_TREBLE: set_treble(cx, ctrl->val); break; case V4L2_CID_AUDIO_BALANCE: set_balance(cx, ctrl->val); break; case V4L2_CID_AUDIO_MUTE: set_mute(cx, ctrl->val); break; default: return -EINVAL; } return 0; }
static int sensor_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); u32 cmd = ctrl->id; s32 value = ctrl->val; int ret = 0; switch (cmd) { case V4L2_CID_SENSOR_SET_AE_TARGET: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_ae_target(sd, value); break; case V4L2_CID_SENSOR_SET_AE_WEIGHT_1x1_2: case V4L2_CID_SENSOR_SET_AE_WEIGHT_1x3_4: case V4L2_CID_SENSOR_SET_AE_WEIGHT_2x1_2: case V4L2_CID_SENSOR_SET_AE_WEIGHT_2x3_4: case V4L2_CID_SENSOR_SET_AE_WEIGHT_3x1_2: case V4L2_CID_SENSOR_SET_AE_WEIGHT_3x3_4: case V4L2_CID_SENSOR_SET_AE_WEIGHT_4x1_2: case V4L2_CID_SENSOR_SET_AE_WEIGHT_4x3_4: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_ae_weight(sd, cmd, value); break; case V4L2_CID_SENSOR_SET_RG_WEIGHT: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_rg_weight(sd, value); break; case V4L2_CID_SENSOR_SET_AE_SPEED: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_ae_speed(sd, value); break; case V4L2_CID_SENSOR_SET_SHUTTER: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_shutter(sd, value); break; case V4L2_CID_SENSOR_SET_GAIN: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_gain(sd, value); break; case V4L2_CID_SENSOR_SET_BIT_CONVERTING: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_bit_converting(sd, value); break; case V4L2_CID_SENSOR_SET_AUTO_EXPOSURE: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_auto_exposure(sd, value); break; case V4L2_CID_SENSOR_SET_FRAME_RATE: sensor_dbg("ctrl.id = %x, val=%x", cmd, value); ret = sensor_ctrl_frame_rate(sd, value); break; default : sensor_err("Unknown CID(%x)", cmd); ret = -1; break; } return ret; }
static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); int ret; ret = m5mols_set_mode_backup(sd, MODE_PARMSET); if (!ret) ret = m5mols_set_ctrl(ctrl); if (!ret) ret = m5mols_set_mode_restore(sd); return ret; }
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; switch (ctrl->id) { case V4L2_CID_CAM_JPEG_ENCODEDSIZE: ctrl->cur.val = info->cap.total; break; default: ret = -EINVAL; break; } return ret; }
static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); struct m5mols_info *info = to_m5mols(sd); int ret; info->mode_save = info->mode; ret = m5mols_mode(info, REG_PARAMETER); if (!ret) ret = m5mols_set_ctrl(ctrl); if (!ret) ret = m5mols_mode(info, info->mode_save); return ret; }
static int subdev_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); struct ivtv *itv = sd_to_ivtv(sd); u16 mask, data; switch (ctrl->id) { case V4L2_CID_AUDIO_MUTE: mask = itv->card->gpio_audio_mute.mask; data = ctrl->val ? itv->card->gpio_audio_mute.mute : 0; if (mask) write_reg((read_reg(IVTV_REG_GPIO_OUT) & ~mask) | (data & mask), IVTV_REG_GPIO_OUT); return 0; } return -EINVAL; }
static int m5mols_s_ctrl(struct v4l2_ctrl *ctrl) { struct v4l2_subdev *sd = to_sd(ctrl); struct m5mols_info *info = to_m5mols(sd); int ispstate = info->mode; int ret; /* * If needed, defer restoring the controls until * the device is fully initialized. */ if (!info->isp_ready) { info->ctrl_sync = 0; return 0; } ret = m5mols_mode(info, REG_PARAMETER); if (ret < 0) return ret; ret = m5mols_set_ctrl(ctrl); if (ret < 0) return ret; return m5mols_mode(info, ispstate); }