aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c9
-rw-r--r--drivers/media/video/cx25840/cx25840-core.h5
-rw-r--r--drivers/media/video/cx25840/cx25840-vbi.c40
3 files changed, 26 insertions, 28 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index a0f6f82993bc..a20df8c184ed 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -1018,7 +1018,7 @@ static int cx25840_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
1018{ 1018{
1019 switch (fmt->type) { 1019 switch (fmt->type) {
1020 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 1020 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
1021 return cx25840_vbi_g_fmt(sd, fmt); 1021 return cx25840_g_sliced_fmt(sd, &fmt->fmt.sliced);
1022 default: 1022 default:
1023 return -EINVAL; 1023 return -EINVAL;
1024 } 1024 }
@@ -1080,10 +1080,10 @@ static int cx25840_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
1080 break; 1080 break;
1081 1081
1082 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 1082 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
1083 return cx25840_vbi_s_fmt(sd, fmt); 1083 return cx25840_s_sliced_fmt(sd, &fmt->fmt.sliced);
1084 1084
1085 case V4L2_BUF_TYPE_VBI_CAPTURE: 1085 case V4L2_BUF_TYPE_VBI_CAPTURE:
1086 return cx25840_vbi_s_fmt(sd, fmt); 1086 return cx25840_s_raw_fmt(sd, &fmt->fmt.vbi);
1087 1087
1088 default: 1088 default:
1089 return -EINVAL; 1089 return -EINVAL;
@@ -1640,6 +1640,9 @@ static const struct v4l2_subdev_video_ops cx25840_video_ops = {
1640 1640
1641static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops = { 1641static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops = {
1642 .decode_vbi_line = cx25840_decode_vbi_line, 1642 .decode_vbi_line = cx25840_decode_vbi_line,
1643 .s_raw_fmt = cx25840_s_raw_fmt,
1644 .s_sliced_fmt = cx25840_s_sliced_fmt,
1645 .g_sliced_fmt = cx25840_g_sliced_fmt,
1643}; 1646};
1644 1647
1645static const struct v4l2_subdev_ops cx25840_ops = { 1648static const struct v4l2_subdev_ops cx25840_ops = {
diff --git a/drivers/media/video/cx25840/cx25840-core.h b/drivers/media/video/cx25840/cx25840-core.h
index 55345444417f..04393b971567 100644
--- a/drivers/media/video/cx25840/cx25840-core.h
+++ b/drivers/media/video/cx25840/cx25840-core.h
@@ -99,8 +99,9 @@ int cx25840_audio_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
99 99
100/* ----------------------------------------------------------------------- */ 100/* ----------------------------------------------------------------------- */
101/* cx25850-vbi.c */ 101/* cx25850-vbi.c */
102int cx25840_vbi_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt); 102int cx25840_s_raw_fmt(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt);
103int cx25840_vbi_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt); 103int cx25840_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
104int cx25840_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
104int cx25840_decode_vbi_line(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi); 105int cx25840_decode_vbi_line(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi);
105 106
106#endif 107#endif
diff --git a/drivers/media/video/cx25840/cx25840-vbi.c b/drivers/media/video/cx25840/cx25840-vbi.c
index 35f6592f6c47..64a4004f8a97 100644
--- a/drivers/media/video/cx25840/cx25840-vbi.c
+++ b/drivers/media/video/cx25840/cx25840-vbi.c
@@ -82,11 +82,10 @@ static int decode_vps(u8 * dst, u8 * p)
82 return err & 0xf0; 82 return err & 0xf0;
83} 83}
84 84
85int cx25840_vbi_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt) 85int cx25840_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi)
86{ 86{
87 struct i2c_client *client = v4l2_get_subdevdata(sd); 87 struct i2c_client *client = v4l2_get_subdevdata(sd);
88 struct cx25840_state *state = to_state(sd); 88 struct cx25840_state *state = to_state(sd);
89 struct v4l2_sliced_vbi_format *svbi;
90 static const u16 lcr2vbi[] = { 89 static const u16 lcr2vbi[] = {
91 0, V4L2_SLICED_TELETEXT_B, 0, /* 1 */ 90 0, V4L2_SLICED_TELETEXT_B, 0, /* 1 */
92 0, V4L2_SLICED_WSS_625, 0, /* 4 */ 91 0, V4L2_SLICED_WSS_625, 0, /* 4 */
@@ -97,9 +96,6 @@ int cx25840_vbi_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
97 int is_pal = !(state->std & V4L2_STD_525_60); 96 int is_pal = !(state->std & V4L2_STD_525_60);
98 int i; 97 int i;
99 98
100 if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE)
101 return -EINVAL;
102 svbi = &fmt->fmt.sliced;
103 memset(svbi, 0, sizeof(*svbi)); 99 memset(svbi, 0, sizeof(*svbi));
104 /* we're done if raw VBI is active */ 100 /* we're done if raw VBI is active */
105 if ((cx25840_read(client, 0x404) & 0x10) == 0) 101 if ((cx25840_read(client, 0x404) & 0x10) == 0)
@@ -127,32 +123,30 @@ int cx25840_vbi_g_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
127 return 0; 123 return 0;
128} 124}
129 125
130int cx25840_vbi_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt) 126int cx25840_s_raw_fmt(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt)
131{ 127{
132 struct i2c_client *client = v4l2_get_subdevdata(sd); 128 struct i2c_client *client = v4l2_get_subdevdata(sd);
133 struct cx25840_state *state = to_state(sd); 129 struct cx25840_state *state = to_state(sd);
134 struct v4l2_sliced_vbi_format *svbi;
135 int is_pal = !(state->std & V4L2_STD_525_60); 130 int is_pal = !(state->std & V4L2_STD_525_60);
136 int vbi_offset = is_pal ? 1 : 0; 131 int vbi_offset = is_pal ? 1 : 0;
137 int i, x;
138 u8 lcr[24];
139 132
140 if (fmt->type != V4L2_BUF_TYPE_SLICED_VBI_CAPTURE && 133 /* Setup standard */
141 fmt->type != V4L2_BUF_TYPE_VBI_CAPTURE) 134 cx25840_std_setup(client);
142 return -EINVAL;
143 svbi = &fmt->fmt.sliced;
144 if (fmt->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
145 /* raw VBI */
146 memset(svbi, 0, sizeof(*svbi));
147 135
148 /* Setup standard */ 136 /* VBI Offset */
149 cx25840_std_setup(client); 137 cx25840_write(client, 0x47f, vbi_offset);
138 cx25840_write(client, 0x404, 0x2e);
139 return 0;
140}
150 141
151 /* VBI Offset */ 142int cx25840_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *svbi)
152 cx25840_write(client, 0x47f, vbi_offset); 143{
153 cx25840_write(client, 0x404, 0x2e); 144 struct i2c_client *client = v4l2_get_subdevdata(sd);
154 return 0; 145 struct cx25840_state *state = to_state(sd);
155 } 146 int is_pal = !(state->std & V4L2_STD_525_60);
147 int vbi_offset = is_pal ? 1 : 0;
148 int i, x;
149 u8 lcr[24];
156 150
157 for (x = 0; x <= 23; x++) 151 for (x = 0; x <= 23; x++)
158 lcr[x] = 0x00; 152 lcr[x] = 0x00;