Merge changes Ie58972a0,I72bdbab3 into msm-3.4
* changes:
msm: mpq8064: Allow any client to control noise reduction parms
msm: mpq8064: Prevent VC from running after error reported
diff --git a/drivers/media/video/vcap_v4l2.c b/drivers/media/video/vcap_v4l2.c
index cb33550..28abb36 100644
--- a/drivers/media/video/vcap_v4l2.c
+++ b/drivers/media/video/vcap_v4l2.c
@@ -1222,7 +1222,7 @@
rc = init_motion_buf(c_data);
if (rc < 0)
goto free_res;
- if (c_data->vp_action.nr_param.mode) {
+ if (dev->nr_param.mode) {
rc = init_nr_buf(c_data);
if (rc < 0)
goto s_on_deinit_m_buf;
@@ -1311,7 +1311,7 @@
if (rc < 0)
goto free_res;
- if (c_data->vp_action.nr_param.mode) {
+ if (dev->nr_param.mode) {
rc = init_nr_buf(c_data);
if (rc < 0)
goto s_on_deinit_m_buf;
@@ -1344,7 +1344,7 @@
return 0;
s_on_deinit_nr_buf:
- if (c_data->vp_action.nr_param.mode)
+ if (dev->nr_param.mode)
deinit_nr_buf(c_data);
s_on_deinit_m_buf:
deinit_motion_buf(c_data);
@@ -1439,7 +1439,7 @@
return rc;
deinit_motion_buf(c_data);
- if (c_data->vp_action.nr_param.mode)
+ if (dev->nr_param.mode)
deinit_nr_buf(c_data);
atomic_set(&c_data->dev->vp_enabled, 0);
return rc;
@@ -1487,7 +1487,7 @@
return rc;
deinit_motion_buf(c_data);
- if (c_data->vp_action.nr_param.mode)
+ if (dev->nr_param.mode)
deinit_nr_buf(c_data);
atomic_set(&c_data->dev->vc_enabled, 0);
atomic_set(&c_data->dev->vp_enabled, 0);
@@ -1549,7 +1549,7 @@
if (c_data->streaming != 0 &&
(!(!((struct nr_param *) arg)->mode) !=
- !(!(c_data->vp_action.nr_param.mode)))) {
+ !(!(dev->nr_param.mode)))) {
pr_err("ERR: Trying to toggle on/off while VP is already running");
return -EBUSY;
}
@@ -1562,20 +1562,20 @@
return ret;
}
param = (struct nr_param *) arg;
- c_data->vp_action.nr_param = *param;
+ dev->nr_param = *param;
if (param->mode == NR_AUTO)
- s_default_nr_val(&c_data->vp_action.nr_param);
- c_data->vp_action.nr_update = true;
+ s_default_nr_val(&dev->nr_param);
+ dev->nr_update = true;
spin_unlock_irqrestore(&c_data->cap_slock, flags);
break;
case VCAPIOC_NR_G_PARAMS:
- *((struct nr_param *)arg) = c_data->vp_action.nr_param;
- if (c_data->vp_action.nr_param.mode != NR_DISABLE) {
+ *((struct nr_param *)arg) = dev->nr_param;
+ if (dev->nr_param.mode != NR_DISABLE) {
if (c_data->streaming)
nr_g_param(c_data, (struct nr_param *) arg);
else
(*(struct nr_param *) arg) =
- c_data->vp_action.nr_param;
+ dev->nr_param;
}
break;
case VCAPIOC_S_NUM_VC_BUF:
diff --git a/drivers/media/video/vcap_vc.c b/drivers/media/video/vcap_vc.c
index 1825352..78e108f 100644
--- a/drivers/media/video/vcap_vc.c
+++ b/drivers/media/video/vcap_vc.c
@@ -145,26 +145,31 @@
v4l2_evt.id = 0;
if (irq & 0x8000200) {
+ writel_iowmb(0x00000102, VCAP_VC_NPL_CTRL);
v4l2_evt.type = V4L2_EVENT_PRIVATE_START +
VCAP_VC_PIX_ERR_EVENT;
v4l2_event_queue(dev->vfd, &v4l2_evt);
}
if (irq & 0x40000200) {
+ writel_iowmb(0x00000102, VCAP_VC_NPL_CTRL);
v4l2_evt.type = V4L2_EVENT_PRIVATE_START +
VCAP_VC_LINE_ERR_EVENT;
v4l2_event_queue(dev->vfd, &v4l2_evt);
}
if (irq & 0x20000200) {
+ writel_iowmb(0x00000102, VCAP_VC_NPL_CTRL);
v4l2_evt.type = V4L2_EVENT_PRIVATE_START +
VCAP_VC_VSYNC_ERR_EVENT;
v4l2_event_queue(dev->vfd, &v4l2_evt);
}
if (irq & 0x00000800) {
+ writel_iowmb(0x00000102, VCAP_VC_NPL_CTRL);
v4l2_evt.type = V4L2_EVENT_PRIVATE_START +
VCAP_VC_NPL_OFLOW_ERR_EVENT;
v4l2_event_queue(dev->vfd, &v4l2_evt);
}
if (irq & 0x00000400) {
+ writel_iowmb(0x00000102, VCAP_VC_NPL_CTRL);
v4l2_evt.type = V4L2_EVENT_PRIVATE_START +
VCAP_VC_LBUF_OFLOW_ERR_EVENT;
v4l2_event_queue(dev->vfd, &v4l2_evt);
diff --git a/drivers/media/video/vcap_vp.c b/drivers/media/video/vcap_vp.c
index 12b3208..139de28 100644
--- a/drivers/media/video/vcap_vp.c
+++ b/drivers/media/video/vcap_vp.c
@@ -169,11 +169,10 @@
}
}
-void update_nr_value(struct vcap_client_data *c_data)
+void update_nr_value(struct vcap_dev *dev)
{
- struct vcap_dev *dev = c_data->dev;
struct nr_param *par;
- par = &c_data->vp_action.nr_param;
+ par = &dev->nr_param;
if (par->mode == NR_MANUAL) {
writel_relaxed(par->window << 24 | par->decay_ratio << 20,
VCAP_VP_NR_CONFIG);
@@ -190,7 +189,7 @@
par->chroma.blend_limit_ratio << 0,
VCAP_VP_NR_CHROMA_CONFIG);
}
- c_data->vp_action.nr_update = false;
+ dev->nr_update = false;
}
static void vp_wq_fnc(struct work_struct *work)
@@ -222,8 +221,8 @@
writel_relaxed(0x40000000, VCAP_VP_REDUCT_AVG_MOTION2);
spin_lock_irqsave(&dev->vp_client->cap_slock, flags);
- if (vp_act->nr_update == true)
- update_nr_value(dev->vp_client);
+ if (dev->nr_update == true)
+ update_nr_value(dev);
spin_unlock_irqrestore(&dev->vp_client->cap_slock, flags);
/* Queue the done buffers */
@@ -244,7 +243,7 @@
#endif
/* Cycle Buffers*/
- if (vp_work->cd->vp_action.nr_param.mode) {
+ if (dev->nr_param.mode) {
if (vp_act->bufNR.nr_pos == TM1_BUF)
vp_act->bufNR.nr_pos = BUF_NOT_IN_USE;
@@ -558,7 +557,7 @@
}
c_data->vp_action.bufNR.nr_handle = handle;
- update_nr_value(c_data);
+ update_nr_value(dev);
c_data->vp_action.bufNR.paddr = paddr;
rc = readl_relaxed(VCAP_VP_NR_CONFIG2);
@@ -598,27 +597,27 @@
return 0;
/* Verify values in range */
- if (param->window < VP_NR_MAX_WINDOW)
+ if (param->window > VP_NR_MAX_WINDOW)
return -EINVAL;
- if (param->luma.max_blend_ratio < VP_NR_MAX_RATIO)
+ if (param->luma.max_blend_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->luma.scale_diff_ratio < VP_NR_MAX_RATIO)
+ if (param->luma.scale_diff_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->luma.diff_limit_ratio < VP_NR_MAX_RATIO)
+ if (param->luma.diff_limit_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->luma.scale_motion_ratio < VP_NR_MAX_RATIO)
+ if (param->luma.scale_motion_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->luma.blend_limit_ratio < VP_NR_MAX_RATIO)
+ if (param->luma.blend_limit_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->chroma.max_blend_ratio < VP_NR_MAX_RATIO)
+ if (param->chroma.max_blend_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->chroma.scale_diff_ratio < VP_NR_MAX_RATIO)
+ if (param->chroma.scale_diff_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->chroma.diff_limit_ratio < VP_NR_MAX_RATIO)
+ if (param->chroma.diff_limit_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->chroma.scale_motion_ratio < VP_NR_MAX_RATIO)
+ if (param->chroma.scale_motion_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
- if (param->chroma.blend_limit_ratio < VP_NR_MAX_RATIO)
+ if (param->chroma.blend_limit_ratio > VP_NR_MAX_RATIO)
return -EINVAL;
return 0;
}
diff --git a/include/media/vcap_v4l2.h b/include/media/vcap_v4l2.h
index 81f7922..1e18c9e 100644
--- a/include/media/vcap_v4l2.h
+++ b/include/media/vcap_v4l2.h
@@ -119,8 +119,6 @@
struct ion_handle *motionHandle;
void *bufMotion;
struct nr_buffer bufNR;
- struct nr_param nr_param;
- bool nr_update;
};
struct vp_work_t {
@@ -173,6 +171,9 @@
struct vp_work_t vp_work;
struct vp_work_t vc_to_vp_work;
struct vp_work_t vp_to_vc_work;
+
+ struct nr_param nr_param;
+ bool nr_update;
};
struct vp_format_data {