Эх сурвалжийг харах

[media] v4l2-ctrls: use ptrs for all but the s32 type

Rather than having two unions for all types just keep 'val' and
'cur.val' and use the p_cur and p_new unions to access all others.

The only reason for keeping 'val' and 'cur.val' is that it is used
all over, so converting this as well would be a huge job.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Hans Verkuil 11 жил өмнө
parent
commit
2a9ec37311

+ 1 - 1
Documentation/video4linux/v4l2-controls.txt

@@ -362,7 +362,7 @@ will result in a deadlock since these helpers lock the handler as well.
 You can also take the handler lock yourself:
 You can also take the handler lock yourself:
 
 
 	mutex_lock(&state->ctrl_handler.lock);
 	mutex_lock(&state->ctrl_handler.lock);
-	printk(KERN_INFO "String value is '%s'\n", ctrl1->cur.string);
+	pr_info("String value is '%s'\n", ctrl1->p_cur.p_char);
 	printk(KERN_INFO "Integer value is '%s'\n", ctrl2->cur.val);
 	printk(KERN_INFO "Integer value is '%s'\n", ctrl2->cur.val);
 	mutex_unlock(&state->ctrl_handler.lock);
 	mutex_unlock(&state->ctrl_handler.lock);
 
 

+ 1 - 1
drivers/media/i2c/mt9v032.c

@@ -667,7 +667,7 @@ static int mt9v032_s_ctrl(struct v4l2_ctrl *ctrl)
 			break;
 			break;
 
 
 		freq = mt9v032->pdata->link_freqs[mt9v032->link_freq->val];
 		freq = mt9v032->pdata->link_freqs[mt9v032->link_freq->val];
-		mt9v032->pixel_rate->val64 = freq;
+		*mt9v032->pixel_rate->p_new.p_s64 = freq;
 		mt9v032->sysclk = freq;
 		mt9v032->sysclk = freq;
 		break;
 		break;
 
 

+ 2 - 2
drivers/media/i2c/smiapp/smiapp-core.c

@@ -297,8 +297,8 @@ static int smiapp_pll_update(struct smiapp_sensor *sensor)
 	if (rval < 0)
 	if (rval < 0)
 		return rval;
 		return rval;
 
 
-	sensor->pixel_rate_parray->cur.val64 = pll->vt_pix_clk_freq_hz;
-	sensor->pixel_rate_csi->cur.val64 = pll->pixel_rate_csi;
+	*sensor->pixel_rate_parray->p_cur.p_s64 = pll->vt_pix_clk_freq_hz;
+	*sensor->pixel_rate_csi->p_cur.p_s64 = pll->pixel_rate_csi;
 
 
 	return 0;
 	return 0;
 }
 }

+ 2 - 2
drivers/media/pci/ivtv/ivtv-controls.c

@@ -135,8 +135,8 @@ static int ivtv_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 	/* V4L2_CID_MPEG_VIDEO_DEC_PTS and V4L2_CID_MPEG_VIDEO_DEC_FRAME
 	/* V4L2_CID_MPEG_VIDEO_DEC_PTS and V4L2_CID_MPEG_VIDEO_DEC_FRAME
 	   control cluster */
 	   control cluster */
 	case V4L2_CID_MPEG_VIDEO_DEC_PTS:
 	case V4L2_CID_MPEG_VIDEO_DEC_PTS:
-		return ivtv_g_pts_frame(itv, &itv->ctrl_pts->val64,
-					     &itv->ctrl_frame->val64);
+		return ivtv_g_pts_frame(itv, itv->ctrl_pts->p_new.p_s64,
+					     itv->ctrl_frame->p_new.p_s64);
 	}
 	}
 	return 0;
 	return 0;
 }
 }

+ 2 - 2
drivers/media/platform/vivi.c

@@ -648,13 +648,13 @@ static void vivi_fillbuff(struct vivi_dev *dev, struct vivi_buffer *buf)
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	snprintf(str, sizeof(str), " int32 %d, int64 %lld, bitmask %08x ",
 	snprintf(str, sizeof(str), " int32 %d, int64 %lld, bitmask %08x ",
 			dev->int32->cur.val,
 			dev->int32->cur.val,
-			dev->int64->cur.val64,
+			*dev->int64->p_cur.p_s64,
 			dev->bitmask->cur.val);
 			dev->bitmask->cur.val);
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	snprintf(str, sizeof(str), " boolean %d, menu %s, string \"%s\" ",
 	snprintf(str, sizeof(str), " boolean %d, menu %s, string \"%s\" ",
 			dev->boolean->cur.val,
 			dev->boolean->cur.val,
 			dev->menu->qmenu[dev->menu->cur.val],
 			dev->menu->qmenu[dev->menu->cur.val],
-			dev->string->cur.string);
+			dev->string->p_cur.p_char);
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	gen_text(dev, vbuf, line++ * 16, 16, str);
 	snprintf(str, sizeof(str), " integer_menu %lld, value %d ",
 	snprintf(str, sizeof(str), " integer_menu %lld, value %d ",
 			dev->int_menu->qmenu_int[dev->int_menu->cur.val],
 			dev->int_menu->qmenu_int[dev->int_menu->cur.val],

+ 2 - 2
drivers/media/radio/si4713/si4713.c

@@ -1098,11 +1098,11 @@ static int si4713_s_ctrl(struct v4l2_ctrl *ctrl)
 
 
 		switch (ctrl->id) {
 		switch (ctrl->id) {
 		case V4L2_CID_RDS_TX_PS_NAME:
 		case V4L2_CID_RDS_TX_PS_NAME:
-			ret = si4713_set_rds_ps_name(sdev, ctrl->string);
+			ret = si4713_set_rds_ps_name(sdev, ctrl->p_new.p_char);
 			break;
 			break;
 
 
 		case V4L2_CID_RDS_TX_RADIO_TEXT:
 		case V4L2_CID_RDS_TX_RADIO_TEXT:
-			ret = si4713_set_rds_radio_text(sdev, ctrl->string);
+			ret = si4713_set_rds_radio_text(sdev, ctrl->p_new.p_char);
 			break;
 			break;
 
 
 		case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
 		case V4L2_CID_TUNE_ANTENNA_CAPACITOR:

+ 9 - 7
drivers/media/v4l2-core/v4l2-ctrls.c

@@ -1135,7 +1135,7 @@ static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 change
 	if (ctrl->is_ptr)
 	if (ctrl->is_ptr)
 		ev->u.ctrl.value64 = 0;
 		ev->u.ctrl.value64 = 0;
 	else
 	else
-		ev->u.ctrl.value64 = ctrl->cur.val64;
+		ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
 	ev->u.ctrl.minimum = ctrl->minimum;
 	ev->u.ctrl.minimum = ctrl->minimum;
 	ev->u.ctrl.maximum = ctrl->maximum;
 	ev->u.ctrl.maximum = ctrl->maximum;
 	if (ctrl->type == V4L2_CTRL_TYPE_MENU
 	if (ctrl->type == V4L2_CTRL_TYPE_MENU
@@ -1801,7 +1801,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
-	else if (type == V4L2_CTRL_TYPE_STRING || type >= V4L2_CTRL_COMPOUND_TYPES)
+	else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
+		 type == V4L2_CTRL_TYPE_STRING ||
+		 type >= V4L2_CTRL_COMPOUND_TYPES)
 		sz_extra += 2 * elem_size;
 		sz_extra += 2 * elem_size;
 
 
 	ctrl = kzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
 	ctrl = kzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
@@ -1833,10 +1835,10 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		ctrl->qmenu_int = qmenu_int;
 		ctrl->qmenu_int = qmenu_int;
 	ctrl->priv = priv;
 	ctrl->priv = priv;
 	ctrl->cur.val = ctrl->val = def;
 	ctrl->cur.val = ctrl->val = def;
-	data = &ctrl->cur + 1;
+	data = &ctrl[1];
 
 
-	if (ctrl->is_ptr) {
-		ctrl->p = ctrl->p_new.p = data;
+	if (!ctrl->is_int) {
+		ctrl->p_new.p = data;
 		ctrl->p_cur.p = data + elem_size;
 		ctrl->p_cur.p = data + elem_size;
 	} else {
 	} else {
 		ctrl->p_new.p = &ctrl->val;
 		ctrl->p_new.p = &ctrl->val;
@@ -3103,10 +3105,10 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
 	ctrl->maximum = max;
 	ctrl->maximum = max;
 	ctrl->step = step;
 	ctrl->step = step;
 	ctrl->default_value = def;
 	ctrl->default_value = def;
-	c.value = ctrl->cur.val;
+	c.value = *ctrl->p_cur.p_s32;
 	if (validate_new(ctrl, &c))
 	if (validate_new(ctrl, &c))
 		c.value = def;
 		c.value = def;
-	if (c.value != ctrl->cur.val)
+	if (c.value != *ctrl->p_cur.p_s32)
 		ret = set_ctrl(NULL, ctrl, &c, V4L2_EVENT_CTRL_CH_RANGE);
 		ret = set_ctrl(NULL, ctrl, &c, V4L2_EVENT_CTRL_CH_RANGE);
 	else
 	else
 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);

+ 1 - 1
drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c

@@ -1131,7 +1131,7 @@ static int solo_s_ctrl(struct v4l2_ctrl *ctrl)
 		solo_motion_toggle(solo_enc, ctrl->val);
 		solo_motion_toggle(solo_enc, ctrl->val);
 		return 0;
 		return 0;
 	case V4L2_CID_OSD_TEXT:
 	case V4L2_CID_OSD_TEXT:
-		strcpy(solo_enc->osd_text, ctrl->string);
+		strcpy(solo_enc->osd_text, ctrl->p_new.p_char);
 		err = solo_osd_print(solo_enc);
 		err = solo_osd_print(solo_enc);
 		return err;
 		return err;
 	default:
 	default:

+ 2 - 10
include/media/v4l2-ctrls.h

@@ -187,17 +187,9 @@ struct v4l2_ctrl {
 	};
 	};
 	unsigned long flags;
 	unsigned long flags;
 	void *priv;
 	void *priv;
-	union {
-		s32 val;
-		s64 val64;
-		char *string;
-		void *p;
-	};
-	union {
+	s32 val;
+	struct {
 		s32 val;
 		s32 val;
-		s64 val64;
-		char *string;
-		void *p;
 	} cur;
 	} cur;
 
 
 	union v4l2_ctrl_ptr p_new;
 	union v4l2_ctrl_ptr p_new;