|
@@ -104,7 +104,8 @@ int cx25840_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *
|
|
|
|
|
|
if (is_pal) {
|
|
|
for (i = 7; i <= 23; i++) {
|
|
|
- u8 v = cx25840_read(client, 0x424 + i - 7);
|
|
|
+ u8 v = cx25840_read(client,
|
|
|
+ state->vbi_regs_offset + 0x424 + i - 7);
|
|
|
|
|
|
svbi->service_lines[0][i] = lcr2vbi[v >> 4];
|
|
|
svbi->service_lines[1][i] = lcr2vbi[v & 0xf];
|
|
@@ -113,7 +114,8 @@ int cx25840_g_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *
|
|
|
}
|
|
|
} else {
|
|
|
for (i = 10; i <= 21; i++) {
|
|
|
- u8 v = cx25840_read(client, 0x424 + i - 10);
|
|
|
+ u8 v = cx25840_read(client,
|
|
|
+ state->vbi_regs_offset + 0x424 + i - 10);
|
|
|
|
|
|
svbi->service_lines[0][i] = lcr2vbi[v >> 4];
|
|
|
svbi->service_lines[1][i] = lcr2vbi[v & 0xf];
|
|
@@ -135,7 +137,10 @@ int cx25840_s_raw_fmt(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt)
|
|
|
cx25840_std_setup(client);
|
|
|
|
|
|
/* VBI Offset */
|
|
|
- cx25840_write(client, 0x47f, vbi_offset);
|
|
|
+ if (is_cx23888(state))
|
|
|
+ cx25840_write(client, 0x54f, vbi_offset);
|
|
|
+ else
|
|
|
+ cx25840_write(client, 0x47f, vbi_offset);
|
|
|
cx25840_write(client, 0x404, 0x2e);
|
|
|
return 0;
|
|
|
}
|
|
@@ -158,7 +163,10 @@ int cx25840_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *
|
|
|
/* Sliced VBI */
|
|
|
cx25840_write(client, 0x404, 0x32); /* Ancillary data */
|
|
|
cx25840_write(client, 0x406, 0x13);
|
|
|
- cx25840_write(client, 0x47f, vbi_offset);
|
|
|
+ if (is_cx23888(state))
|
|
|
+ cx25840_write(client, 0x54f, vbi_offset);
|
|
|
+ else
|
|
|
+ cx25840_write(client, 0x47f, vbi_offset);
|
|
|
|
|
|
if (is_pal) {
|
|
|
for (i = 0; i <= 6; i++)
|
|
@@ -194,17 +202,23 @@ int cx25840_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *
|
|
|
}
|
|
|
|
|
|
if (is_pal) {
|
|
|
- for (x = 1, i = 0x424; i <= 0x434; i++, x++)
|
|
|
+ for (x = 1, i = state->vbi_regs_offset + 0x424;
|
|
|
+ i <= state->vbi_regs_offset + 0x434; i++, x++)
|
|
|
cx25840_write(client, i, lcr[6 + x]);
|
|
|
} else {
|
|
|
- for (x = 1, i = 0x424; i <= 0x430; i++, x++)
|
|
|
+ for (x = 1, i = state->vbi_regs_offset + 0x424;
|
|
|
+ i <= state->vbi_regs_offset + 0x430; i++, x++)
|
|
|
cx25840_write(client, i, lcr[9 + x]);
|
|
|
- for (i = 0x431; i <= 0x434; i++)
|
|
|
+ for (i = state->vbi_regs_offset + 0x431;
|
|
|
+ i <= state->vbi_regs_offset + 0x434; i++)
|
|
|
cx25840_write(client, i, 0);
|
|
|
}
|
|
|
|
|
|
- cx25840_write(client, 0x43c, 0x16);
|
|
|
- cx25840_write(client, 0x474, is_pal ? 0x2a : 0x22);
|
|
|
+ cx25840_write(client, state->vbi_regs_offset + 0x43c, 0x16);
|
|
|
+ if (is_cx23888(state))
|
|
|
+ cx25840_write(client, 0x428, is_pal ? 0x2a : 0x22);
|
|
|
+ else
|
|
|
+ cx25840_write(client, 0x474, is_pal ? 0x2a : 0x22);
|
|
|
return 0;
|
|
|
}
|
|
|
|