86
86
/* ----------------------------------------------------------------------- */
87
static void cx23885_std_setup(struct i2c_client *client);
87
static void cx23888_std_setup(struct i2c_client *client);
89
89
int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
638
638
finish_wait(&state->fw_wait, &wait);
639
639
destroy_workqueue(q);
641
/* Call the cx23885 specific std setup func, we no longer rely on
641
/* Call the cx23888 specific std setup func, we no longer rely on
642
642
* the generic cx24840 func.
644
cx23885_std_setup(client);
644
if (is_cx23888(state))
645
cx23888_std_setup(client);
647
cx25840_std_setup(client);
646
649
/* (re)set input */
647
650
set_input(client, state->vid_input, state->aud_input);
1104
1107
cx25840_write4(client, 0x410, 0xffff0dbf);
1105
1108
cx25840_write4(client, 0x414, 0x00137d03);
1106
cx25840_write4(client, 0x418, 0x01008080);
1110
/* on the 887, 0x418 is HSCALE_CTRL, on the 888 it is
1112
if (is_cx23888(state))
1113
cx25840_write4(client, 0x418, 0x01008080);
1115
cx25840_write4(client, 0x418, 0x01000000);
1107
1117
cx25840_write4(client, 0x41c, 0x00000000);
1108
cx25840_write4(client, 0x420, 0x001c3e0f);
1119
/* on the 887, 0x420 is CHROMA_CTRL, on the 888 it is
1121
if (is_cx23888(state))
1122
cx25840_write4(client, 0x420, 0x001c3e0f);
1124
cx25840_write4(client, 0x420, 0x001c8282);
1109
1126
cx25840_write4(client, 0x42c, 0x42600000);
1110
1127
cx25840_write4(client, 0x430, 0x0000039b);
1111
1128
cx25840_write4(client, 0x438, 0x00000000);
1233
1250
cx25840_write4(client, 0x8d0, 0x1f063870);
1236
if (is_cx2388x(state)) {
1253
if (is_cx23888(state)) {
1238
1255
/* AUD_IO_CTRL - I2S Input, Parallel1*/
1239
1256
/* - Channel 1 src - Parallel1 (Merlin out) */
1299
1316
cx25840_and_or(client, 0x400, ~0xf, fmt);
1300
1317
cx25840_and_or(client, 0x403, ~0x3, pal_m);
1301
if (is_cx2388x(state))
1302
cx23885_std_setup(client);
1318
if (is_cx23888(state))
1319
cx23888_std_setup(client);
1304
1321
cx25840_std_setup(client);
1305
1322
if (!is_cx2583x(state))
1326
1344
case V4L2_CID_SATURATION:
1327
cx25840_write(client, 0x420, ctrl->val << 1);
1328
cx25840_write(client, 0x421, ctrl->val << 1);
1345
if (is_cx23888(state)) {
1346
cx25840_write(client, 0x418, ctrl->val << 1);
1347
cx25840_write(client, 0x419, ctrl->val << 1);
1349
cx25840_write(client, 0x420, ctrl->val << 1);
1350
cx25840_write(client, 0x421, ctrl->val << 1);
1331
1354
case V4L2_CID_HUE:
1332
cx25840_write(client, 0x422, ctrl->val);
1355
if (is_cx23888(state))
1356
cx25840_write(client, 0x41a, ctrl->val);
1358
cx25840_write(client, 0x422, ctrl->val);
1354
1380
fmt->field = V4L2_FIELD_INTERLACED;
1355
1381
fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
1357
Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4;
1358
Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4;
1383
if (is_cx23888(state)) {
1384
Vsrc = (cx25840_read(client, 0x42a) & 0x3f) << 4;
1385
Vsrc |= (cx25840_read(client, 0x429) & 0xf0) >> 4;
1387
Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4;
1388
Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4;
1360
Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4;
1361
Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4;
1391
if (is_cx23888(state)) {
1392
Hsrc = (cx25840_read(client, 0x426) & 0x3f) << 4;
1393
Hsrc |= (cx25840_read(client, 0x425) & 0xf0) >> 4;
1395
Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4;
1396
Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4;
1363
1399
Vlines = fmt->height + (is_50Hz ? 4 : 7);
1782
1818
struct cx25840_state *state = to_state(sd);
1783
1819
struct i2c_client *client = v4l2_get_subdevdata(sd);
1785
if (is_cx2388x(state))
1786
cx23885_std_setup(client);
1821
if (is_cx23888(state))
1822
cx23888_std_setup(client);
1788
1824
return set_input(client, input, state->aud_input);
1794
1830
struct cx25840_state *state = to_state(sd);
1795
1831
struct i2c_client *client = v4l2_get_subdevdata(sd);
1797
if (is_cx2388x(state))
1798
cx23885_std_setup(client);
1833
if (is_cx23888(state))
1834
cx23888_std_setup(client);
1799
1835
return set_input(client, state->vid_input, input);
4942
static void cx23885_std_setup(struct i2c_client *client)
4978
static void cx23888_std_setup(struct i2c_client *client)
4944
4980
struct cx25840_state *state = to_state(i2c_get_clientdata(client));
4945
4981
v4l2_std_id std = state->std;