1 /* cx25840 - Conexant CX25840 audio/video decoder driver
3 * Copyright (C) 2004 Ulf Eklund
5 * Based on the saa7115 driver and on the first version of Chris Kennedy's
8 * Changes by Tyler Trafford <tatrafford@comcast.net>
9 * - cleanup/rewrite for V4L2 API (2005)
11 * VBI support by Hans Verkuil <hverkuil@xs4all.nl>.
13 * NTSC sliced VBI support by Christopher Neufeld <television@cneufeld.ca>
14 * with additional fixes by Hans Verkuil <hverkuil@xs4all.nl>.
16 * CX23885 support by Steven Toth <stoth@linuxtv.org>.
18 * CX2388[578] IRQ handling, IO Pin mux configuration and other small fixes are
19 * Copyright (C) 2010 Andy Walls <awalls@md.metrocast.net>
21 * This program is free software; you can redistribute it and/or
22 * modify it under the terms of the GNU General Public License
23 * as published by the Free Software Foundation; either version 2
24 * of the License, or (at your option) any later version.
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
31 * You should have received a copy of the GNU General Public License
32 * along with this program; if not, write to the Free Software
33 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
37 #include <linux/kernel.h>
38 #include <linux/module.h>
39 #include <linux/slab.h>
40 #include <linux/videodev2.h>
41 #include <linux/i2c.h>
42 #include <linux/delay.h>
43 #include <media/v4l2-common.h>
44 #include <media/v4l2-chip-ident.h>
45 #include <media/cx25840.h>
47 #include "cx25840-core.h"
49 MODULE_DESCRIPTION("Conexant CX25840 audio/video decoder driver");
50 MODULE_AUTHOR("Ulf Eklund, Chris Kennedy, Hans Verkuil, Tyler Trafford");
51 MODULE_LICENSE("GPL");
53 #define CX25840_VID_INT_STAT_REG 0x410
54 #define CX25840_VID_INT_STAT_BITS 0x0000ffff
55 #define CX25840_VID_INT_MASK_BITS 0xffff0000
56 #define CX25840_VID_INT_MASK_SHFT 16
57 #define CX25840_VID_INT_MASK_REG 0x412
59 #define CX23885_AUD_MC_INT_MASK_REG 0x80c
60 #define CX23885_AUD_MC_INT_STAT_BITS 0xffff0000
61 #define CX23885_AUD_MC_INT_CTRL_BITS 0x0000ffff
62 #define CX23885_AUD_MC_INT_STAT_SHFT 16
64 #define CX25840_AUD_INT_CTRL_REG 0x812
65 #define CX25840_AUD_INT_STAT_REG 0x813
67 #define CX23885_PIN_CTRL_IRQ_REG 0x123
68 #define CX23885_PIN_CTRL_IRQ_IR_STAT 0x40
69 #define CX23885_PIN_CTRL_IRQ_AUD_STAT 0x20
70 #define CX23885_PIN_CTRL_IRQ_VID_STAT 0x10
72 #define CX25840_IR_STATS_REG 0x210
73 #define CX25840_IR_IRQEN_REG 0x214
75 static int cx25840_debug
;
77 module_param_named(debug
,cx25840_debug
, int, 0644);
79 MODULE_PARM_DESC(debug
, "Debugging messages [0=Off (default) 1=On]");
82 /* ----------------------------------------------------------------------- */
84 int cx25840_write(struct i2c_client
*client
, u16 addr
, u8 value
)
87 buffer
[0] = addr
>> 8;
88 buffer
[1] = addr
& 0xff;
90 return i2c_master_send(client
, buffer
, 3);
93 int cx25840_write4(struct i2c_client
*client
, u16 addr
, u32 value
)
96 buffer
[0] = addr
>> 8;
97 buffer
[1] = addr
& 0xff;
98 buffer
[2] = value
& 0xff;
99 buffer
[3] = (value
>> 8) & 0xff;
100 buffer
[4] = (value
>> 16) & 0xff;
101 buffer
[5] = value
>> 24;
102 return i2c_master_send(client
, buffer
, 6);
105 u8
cx25840_read(struct i2c_client
* client
, u16 addr
)
107 struct i2c_msg msgs
[2];
108 u8 tx_buf
[2], rx_buf
[1];
110 /* Write register address */
111 tx_buf
[0] = addr
>> 8;
112 tx_buf
[1] = addr
& 0xff;
113 msgs
[0].addr
= client
->addr
;
116 msgs
[0].buf
= (char *) tx_buf
;
118 /* Read data from register */
119 msgs
[1].addr
= client
->addr
;
120 msgs
[1].flags
= I2C_M_RD
;
122 msgs
[1].buf
= (char *) rx_buf
;
124 if (i2c_transfer(client
->adapter
, msgs
, 2) < 2)
130 u32
cx25840_read4(struct i2c_client
* client
, u16 addr
)
132 struct i2c_msg msgs
[2];
133 u8 tx_buf
[2], rx_buf
[4];
135 /* Write register address */
136 tx_buf
[0] = addr
>> 8;
137 tx_buf
[1] = addr
& 0xff;
138 msgs
[0].addr
= client
->addr
;
141 msgs
[0].buf
= (char *) tx_buf
;
143 /* Read data from registers */
144 msgs
[1].addr
= client
->addr
;
145 msgs
[1].flags
= I2C_M_RD
;
147 msgs
[1].buf
= (char *) rx_buf
;
149 if (i2c_transfer(client
->adapter
, msgs
, 2) < 2)
152 return (rx_buf
[3] << 24) | (rx_buf
[2] << 16) | (rx_buf
[1] << 8) |
156 int cx25840_and_or(struct i2c_client
*client
, u16 addr
, unsigned and_mask
,
159 return cx25840_write(client
, addr
,
160 (cx25840_read(client
, addr
) & and_mask
) |
164 int cx25840_and_or4(struct i2c_client
*client
, u16 addr
, u32 and_mask
,
167 return cx25840_write4(client
, addr
,
168 (cx25840_read4(client
, addr
) & and_mask
) |
172 /* ----------------------------------------------------------------------- */
174 static int set_input(struct i2c_client
*client
, enum cx25840_video_input vid_input
,
175 enum cx25840_audio_input aud_input
);
177 /* ----------------------------------------------------------------------- */
179 static int cx23885_s_io_pin_config(struct v4l2_subdev
*sd
, size_t n
,
180 struct v4l2_subdev_io_pin_config
*p
)
182 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
185 u8 gpio_oe
, gpio_data
, strength
;
187 pin_ctrl
= cx25840_read4(client
, 0x120);
188 gpio_oe
= cx25840_read(client
, 0x160);
189 gpio_data
= cx25840_read(client
, 0x164);
191 for (i
= 0; i
< n
; i
++) {
192 strength
= p
[i
].strength
;
193 if (strength
> CX25840_PIN_DRIVE_FAST
)
194 strength
= CX25840_PIN_DRIVE_FAST
;
197 case CX23885_PIN_IRQ_N_GPIO16
:
198 if (p
[i
].function
!= CX23885_PAD_IRQ_N
) {
200 pin_ctrl
&= ~(0x1 << 25);
204 (V4L2_SUBDEV_IO_PIN_DISABLE
|
205 V4L2_SUBDEV_IO_PIN_INPUT
)) {
206 pin_ctrl
&= ~(0x1 << 25);
208 pin_ctrl
|= (0x1 << 25);
211 V4L2_SUBDEV_IO_PIN_ACTIVE_LOW
) {
212 pin_ctrl
&= ~(0x1 << 24);
214 pin_ctrl
|= (0x1 << 24);
218 case CX23885_PIN_IR_RX_GPIO19
:
219 if (p
[i
].function
!= CX23885_PAD_GPIO19
) {
221 gpio_oe
|= (0x1 << 0);
222 pin_ctrl
&= ~(0x3 << 18);
223 pin_ctrl
|= (strength
<< 18);
226 gpio_oe
&= ~(0x1 << 0);
227 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_SET_VALUE
) {
228 gpio_data
&= ~(0x1 << 0);
229 gpio_data
|= ((p
[i
].value
& 0x1) << 0);
231 pin_ctrl
&= ~(0x3 << 12);
232 pin_ctrl
|= (strength
<< 12);
235 case CX23885_PIN_IR_TX_GPIO20
:
236 if (p
[i
].function
!= CX23885_PAD_GPIO20
) {
238 gpio_oe
|= (0x1 << 1);
239 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_DISABLE
)
240 pin_ctrl
&= ~(0x1 << 10);
242 pin_ctrl
|= (0x1 << 10);
243 pin_ctrl
&= ~(0x3 << 18);
244 pin_ctrl
|= (strength
<< 18);
247 gpio_oe
&= ~(0x1 << 1);
248 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_SET_VALUE
) {
249 gpio_data
&= ~(0x1 << 1);
250 gpio_data
|= ((p
[i
].value
& 0x1) << 1);
252 pin_ctrl
&= ~(0x3 << 12);
253 pin_ctrl
|= (strength
<< 12);
256 case CX23885_PIN_I2S_SDAT_GPIO21
:
257 if (p
[i
].function
!= CX23885_PAD_GPIO21
) {
259 /* TODO: Input or Output config */
260 gpio_oe
|= (0x1 << 2);
261 pin_ctrl
&= ~(0x3 << 22);
262 pin_ctrl
|= (strength
<< 22);
265 gpio_oe
&= ~(0x1 << 2);
266 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_SET_VALUE
) {
267 gpio_data
&= ~(0x1 << 2);
268 gpio_data
|= ((p
[i
].value
& 0x1) << 2);
270 pin_ctrl
&= ~(0x3 << 12);
271 pin_ctrl
|= (strength
<< 12);
274 case CX23885_PIN_I2S_WCLK_GPIO22
:
275 if (p
[i
].function
!= CX23885_PAD_GPIO22
) {
277 /* TODO: Input or Output config */
278 gpio_oe
|= (0x1 << 3);
279 pin_ctrl
&= ~(0x3 << 22);
280 pin_ctrl
|= (strength
<< 22);
283 gpio_oe
&= ~(0x1 << 3);
284 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_SET_VALUE
) {
285 gpio_data
&= ~(0x1 << 3);
286 gpio_data
|= ((p
[i
].value
& 0x1) << 3);
288 pin_ctrl
&= ~(0x3 << 12);
289 pin_ctrl
|= (strength
<< 12);
292 case CX23885_PIN_I2S_BCLK_GPIO23
:
293 if (p
[i
].function
!= CX23885_PAD_GPIO23
) {
295 /* TODO: Input or Output config */
296 gpio_oe
|= (0x1 << 4);
297 pin_ctrl
&= ~(0x3 << 22);
298 pin_ctrl
|= (strength
<< 22);
301 gpio_oe
&= ~(0x1 << 4);
302 if (p
[i
].flags
& V4L2_SUBDEV_IO_PIN_SET_VALUE
) {
303 gpio_data
&= ~(0x1 << 4);
304 gpio_data
|= ((p
[i
].value
& 0x1) << 4);
306 pin_ctrl
&= ~(0x3 << 12);
307 pin_ctrl
|= (strength
<< 12);
313 cx25840_write(client
, 0x164, gpio_data
);
314 cx25840_write(client
, 0x160, gpio_oe
);
315 cx25840_write4(client
, 0x120, pin_ctrl
);
319 static int common_s_io_pin_config(struct v4l2_subdev
*sd
, size_t n
,
320 struct v4l2_subdev_io_pin_config
*pincfg
)
322 struct cx25840_state
*state
= to_state(sd
);
324 if (is_cx2388x(state
))
325 return cx23885_s_io_pin_config(sd
, n
, pincfg
);
329 /* ----------------------------------------------------------------------- */
331 static void init_dll1(struct i2c_client
*client
)
333 /* This is the Hauppauge sequence used to
334 * initialize the Delay Lock Loop 1 (ADC DLL). */
335 cx25840_write(client
, 0x159, 0x23);
336 cx25840_write(client
, 0x15a, 0x87);
337 cx25840_write(client
, 0x15b, 0x06);
339 cx25840_write(client
, 0x159, 0xe1);
341 cx25840_write(client
, 0x15a, 0x86);
342 cx25840_write(client
, 0x159, 0xe0);
343 cx25840_write(client
, 0x159, 0xe1);
344 cx25840_write(client
, 0x15b, 0x10);
347 static void init_dll2(struct i2c_client
*client
)
349 /* This is the Hauppauge sequence used to
350 * initialize the Delay Lock Loop 2 (ADC DLL). */
351 cx25840_write(client
, 0x15d, 0xe3);
352 cx25840_write(client
, 0x15e, 0x86);
353 cx25840_write(client
, 0x15f, 0x06);
355 cx25840_write(client
, 0x15d, 0xe1);
356 cx25840_write(client
, 0x15d, 0xe0);
357 cx25840_write(client
, 0x15d, 0xe1);
360 static void cx25836_initialize(struct i2c_client
*client
)
362 /* reset configuration is described on page 3-77 of the CX25836 datasheet */
364 cx25840_and_or(client
, 0x000, ~0x01, 0x01);
365 cx25840_and_or(client
, 0x000, ~0x01, 0x00);
367 cx25840_and_or(client
, 0x15a, ~0x70, 0x00);
369 cx25840_and_or(client
, 0x15b, ~0x1e, 0x06);
371 cx25840_and_or(client
, 0x159, ~0x02, 0x02);
375 cx25840_and_or(client
, 0x159, ~0x02, 0x00);
377 cx25840_and_or(client
, 0x159, ~0xc0, 0xc0);
379 cx25840_and_or(client
, 0x159, ~0x01, 0x00);
380 cx25840_and_or(client
, 0x159, ~0x01, 0x01);
382 cx25840_and_or(client
, 0x15b, ~0x1e, 0x10);
385 static void cx25840_work_handler(struct work_struct
*work
)
387 struct cx25840_state
*state
= container_of(work
, struct cx25840_state
, fw_work
);
388 cx25840_loadfw(state
->c
);
389 wake_up(&state
->fw_wait
);
392 static void cx25840_initialize(struct i2c_client
*client
)
395 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
396 struct workqueue_struct
*q
;
398 /* datasheet startup in numbered steps, refer to page 3-77 */
400 cx25840_and_or(client
, 0x803, ~0x10, 0x00);
401 /* The default of this register should be 4, but I get 0 instead.
402 * Set this register to 4 manually. */
403 cx25840_write(client
, 0x000, 0x04);
407 cx25840_write(client
, 0x136, 0x0a);
409 cx25840_write(client
, 0x13c, 0x01);
410 cx25840_write(client
, 0x13c, 0x00);
412 /* Do the firmware load in a work handler to prevent.
413 Otherwise the kernel is blocked waiting for the
414 bit-banging i2c interface to finish uploading the
416 INIT_WORK(&state
->fw_work
, cx25840_work_handler
);
417 init_waitqueue_head(&state
->fw_wait
);
418 q
= create_singlethread_workqueue("cx25840_fw");
419 prepare_to_wait(&state
->fw_wait
, &wait
, TASK_UNINTERRUPTIBLE
);
420 queue_work(q
, &state
->fw_work
);
422 finish_wait(&state
->fw_wait
, &wait
);
423 destroy_workqueue(q
);
426 cx25840_write(client
, 0x115, 0x8c);
427 cx25840_write(client
, 0x116, 0x07);
428 cx25840_write(client
, 0x118, 0x02);
430 cx25840_write(client
, 0x4a5, 0x80);
431 cx25840_write(client
, 0x4a5, 0x00);
432 cx25840_write(client
, 0x402, 0x00);
434 cx25840_and_or(client
, 0x401, ~0x18, 0);
435 cx25840_and_or(client
, 0x4a2, ~0x10, 0x10);
436 /* steps 8c and 8d are done in change_input() */
438 cx25840_write(client
, 0x8d3, 0x1f);
439 cx25840_write(client
, 0x8e3, 0x03);
441 cx25840_std_setup(client
);
443 /* trial and error says these are needed to get audio */
444 cx25840_write(client
, 0x914, 0xa0);
445 cx25840_write(client
, 0x918, 0xa0);
446 cx25840_write(client
, 0x919, 0x01);
448 /* stereo preferred */
449 cx25840_write(client
, 0x809, 0x04);
451 cx25840_write(client
, 0x8cf, 0x0f);
454 set_input(client
, state
->vid_input
, state
->aud_input
);
456 /* start microcontroller */
457 cx25840_and_or(client
, 0x803, ~0x10, 0x10);
460 static void cx23885_initialize(struct i2c_client
*client
)
463 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
464 struct workqueue_struct
*q
;
467 * Come out of digital power down
468 * The CX23888, at least, needs this, otherwise registers aside from
469 * 0x0-0x2 can't be read or written.
471 cx25840_write(client
, 0x000, 0);
474 cx25840_and_or(client
, 0x102, ~0x01, 0x01);
475 cx25840_and_or(client
, 0x102, ~0x01, 0x00);
477 /* Stop microcontroller */
478 cx25840_and_or(client
, 0x803, ~0x10, 0x00);
481 cx25840_write(client
, 0x398, 0);
484 * Trust the default xtal, no division
485 * '885: 28.636363... MHz
486 * '887: 25.000000 MHz
487 * '888: 50.000000 MHz
489 cx25840_write(client
, 0x2, 0x76);
491 /* Power up all the PLL's and DLL */
492 cx25840_write(client
, 0x1, 0x40);
496 case V4L2_IDENT_CX23888_AV
:
498 * 50.0 MHz * (0xb + 0xe8ba26/0x2000000)/4 = 5 * 28.636363 MHz
499 * 572.73 MHz before post divide
501 cx25840_write4(client
, 0x11c, 0x00e8ba26);
502 cx25840_write4(client
, 0x118, 0x0000040b);
504 case V4L2_IDENT_CX23887_AV
:
506 * 25.0 MHz * (0x16 + 0x1d1744c/0x2000000)/4 = 5 * 28.636363 MHz
507 * 572.73 MHz before post divide
509 cx25840_write4(client
, 0x11c, 0x01d1744c);
510 cx25840_write4(client
, 0x118, 0x00000416);
512 case V4L2_IDENT_CX23885_AV
:
515 * 28.636363 MHz * (0x14 + 0x0/0x2000000)/4 = 5 * 28.636363 MHz
516 * 572.73 MHz before post divide
518 cx25840_write4(client
, 0x11c, 0x00000000);
519 cx25840_write4(client
, 0x118, 0x00000414);
523 /* Disable DIF bypass */
524 cx25840_write4(client
, 0x33c, 0x00000001);
526 /* DIF Src phase inc */
527 cx25840_write4(client
, 0x340, 0x0df7df83);
531 * Setup for a BT.656 pixel clock of 13.5 Mpixels/second
533 * 28.636363 MHz * (0xf + 0x02be2c9/0x2000000)/4 = 8 * 13.5 MHz
534 * 432.0 MHz before post divide
536 cx25840_write4(client
, 0x10c, 0x002be2c9);
537 cx25840_write4(client
, 0x108, 0x0000040f);
540 cx25840_write4(client
, 0x414, 0x00107d12);
543 cx25840_write4(client
, 0x420, 0x3d008282);
547 * Initial setup for audio sample clock:
548 * 48 ksps, 16 bits/sample, x160 multiplier = 122.88 MHz
549 * Initial I2S output/master clock(?):
550 * 48 ksps, 16 bits/sample, x16 multiplier = 12.288 MHz
553 case V4L2_IDENT_CX23888_AV
:
555 * 50.0 MHz * (0x7 + 0x0bedfa4/0x2000000)/3 = 122.88 MHz
556 * 368.64 MHz before post divide
557 * 122.88 MHz / 0xa = 12.288 MHz
559 cx25840_write4(client
, 0x114, 0x00bedfa4);
560 cx25840_write4(client
, 0x110, 0x000a0307);
562 case V4L2_IDENT_CX23887_AV
:
564 * 25.0 MHz * (0xe + 0x17dbf48/0x2000000)/3 = 122.88 MHz
565 * 368.64 MHz before post divide
566 * 122.88 MHz / 0xa = 12.288 MHz
568 cx25840_write4(client
, 0x114, 0x017dbf48);
569 cx25840_write4(client
, 0x110, 0x000a030e);
571 case V4L2_IDENT_CX23885_AV
:
574 * 28.636363 MHz * (0xc + 0x1bf0c9e/0x2000000)/3 = 122.88 MHz
575 * 368.64 MHz before post divide
576 * 122.88 MHz / 0xa = 12.288 MHz
578 cx25840_write4(client
, 0x114, 0x01bf0c9e);
579 cx25840_write4(client
, 0x110, 0x000a030c);
583 /* ADC2 input select */
584 cx25840_write(client
, 0x102, 0x10);
587 cx25840_write(client
, 0x103, 0x11);
589 /* Enable format auto detect */
590 cx25840_write(client
, 0x400, 0);
591 /* Fast subchroma lock */
592 /* White crush, Chroma AGC & Chroma Killer enabled */
593 cx25840_write(client
, 0x401, 0xe8);
595 /* Select AFE clock pad output source */
596 cx25840_write(client
, 0x144, 0x05);
598 /* Drive GPIO2 direction and values for HVR1700
599 * where an onboard mux selects the output of demodulator
600 * vs the 417. Failure to set this results in no DTV.
601 * It's safe to set this across all Hauppauge boards
602 * currently, regardless of the board type.
604 cx25840_write(client
, 0x160, 0x1d);
605 cx25840_write(client
, 0x164, 0x00);
607 /* Do the firmware load in a work handler to prevent.
608 Otherwise the kernel is blocked waiting for the
609 bit-banging i2c interface to finish uploading the
611 INIT_WORK(&state
->fw_work
, cx25840_work_handler
);
612 init_waitqueue_head(&state
->fw_wait
);
613 q
= create_singlethread_workqueue("cx25840_fw");
614 prepare_to_wait(&state
->fw_wait
, &wait
, TASK_UNINTERRUPTIBLE
);
615 queue_work(q
, &state
->fw_work
);
617 finish_wait(&state
->fw_wait
, &wait
);
618 destroy_workqueue(q
);
620 cx25840_std_setup(client
);
623 set_input(client
, state
->vid_input
, state
->aud_input
);
625 /* start microcontroller */
626 cx25840_and_or(client
, 0x803, ~0x10, 0x10);
628 /* Disable and clear video interrupts - we don't use them */
629 cx25840_write4(client
, CX25840_VID_INT_STAT_REG
, 0xffffffff);
631 /* Disable and clear audio interrupts - we don't use them */
632 cx25840_write(client
, CX25840_AUD_INT_CTRL_REG
, 0xff);
633 cx25840_write(client
, CX25840_AUD_INT_STAT_REG
, 0xff);
636 /* ----------------------------------------------------------------------- */
638 static void cx231xx_initialize(struct i2c_client
*client
)
641 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
642 struct workqueue_struct
*q
;
645 cx25840_and_or(client
, 0x102, ~0x01, 0x01);
646 cx25840_and_or(client
, 0x102, ~0x01, 0x00);
648 /* Stop microcontroller */
649 cx25840_and_or(client
, 0x803, ~0x10, 0x00);
652 cx25840_write(client
, 0x398, 0);
654 /* Trust the default xtal, no division */
655 /* This changes for the cx23888 products */
656 cx25840_write(client
, 0x2, 0x76);
658 /* Bring down the regulator for AUX clk */
659 cx25840_write(client
, 0x1, 0x40);
661 /* Disable DIF bypass */
662 cx25840_write4(client
, 0x33c, 0x00000001);
664 /* DIF Src phase inc */
665 cx25840_write4(client
, 0x340, 0x0df7df83);
668 cx25840_write4(client
, 0x414, 0x00107d12);
671 cx25840_write4(client
, 0x420, 0x3d008282);
673 /* ADC2 input select */
674 cx25840_write(client
, 0x102, 0x10);
677 cx25840_write(client
, 0x103, 0x11);
679 /* Enable format auto detect */
680 cx25840_write(client
, 0x400, 0);
681 /* Fast subchroma lock */
682 /* White crush, Chroma AGC & Chroma Killer enabled */
683 cx25840_write(client
, 0x401, 0xe8);
685 /* Do the firmware load in a work handler to prevent.
686 Otherwise the kernel is blocked waiting for the
687 bit-banging i2c interface to finish uploading the
689 INIT_WORK(&state
->fw_work
, cx25840_work_handler
);
690 init_waitqueue_head(&state
->fw_wait
);
691 q
= create_singlethread_workqueue("cx25840_fw");
692 prepare_to_wait(&state
->fw_wait
, &wait
, TASK_UNINTERRUPTIBLE
);
693 queue_work(q
, &state
->fw_work
);
695 finish_wait(&state
->fw_wait
, &wait
);
696 destroy_workqueue(q
);
698 cx25840_std_setup(client
);
701 set_input(client
, state
->vid_input
, state
->aud_input
);
703 /* start microcontroller */
704 cx25840_and_or(client
, 0x803, ~0x10, 0x10);
707 /* ----------------------------------------------------------------------- */
709 void cx25840_std_setup(struct i2c_client
*client
)
711 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
712 v4l2_std_id std
= state
->std
;
713 int hblank
, hactive
, burst
, vblank
, vactive
, sc
;
714 int vblank656
, src_decimation
;
715 int luma_lpf
, uv_lpf
, comb
;
716 u32 pll_int
, pll_frac
, pll_post
;
718 /* datasheet startup, step 8d */
719 if (std
& ~V4L2_STD_NTSC
)
720 cx25840_write(client
, 0x49f, 0x11);
722 cx25840_write(client
, 0x49f, 0x14);
724 if (std
& V4L2_STD_625_50
) {
731 src_decimation
= 0x21f;
734 if (std
& V4L2_STD_SECAM
) {
738 } else if (std
== V4L2_STD_PAL_Nc
) {
754 src_decimation
= 0x21f;
755 if (std
== V4L2_STD_PAL_60
) {
762 } else if (std
== V4L2_STD_PAL_M
) {
777 /* DEBUG: Displays configured PLL frequency */
778 if (!is_cx231xx(state
)) {
779 pll_int
= cx25840_read(client
, 0x108);
780 pll_frac
= cx25840_read4(client
, 0x10c) & 0x1ffffff;
781 pll_post
= cx25840_read(client
, 0x109);
782 v4l_dbg(1, cx25840_debug
, client
,
783 "PLL regs = int: %u, frac: %u, post: %u\n",
784 pll_int
, pll_frac
, pll_post
);
788 int pll
= (28636363L * ((((u64
)pll_int
) << 25L) + pll_frac
)) >> 25L;
791 v4l_dbg(1, cx25840_debug
, client
, "PLL = %d.%06d MHz\n",
792 pll
/ 1000000, pll
% 1000000);
793 v4l_dbg(1, cx25840_debug
, client
, "PLL/8 = %d.%06d MHz\n",
794 pll
/ 8000000, (pll
/ 8) % 1000000);
796 fin
= ((u64
)src_decimation
* pll
) >> 12;
797 v4l_dbg(1, cx25840_debug
, client
,
798 "ADC Sampling freq = %d.%06d MHz\n",
799 fin
/ 1000000, fin
% 1000000);
801 fsc
= (((u64
)sc
) * pll
) >> 24L;
802 v4l_dbg(1, cx25840_debug
, client
,
803 "Chroma sub-carrier freq = %d.%06d MHz\n",
804 fsc
/ 1000000, fsc
% 1000000);
806 v4l_dbg(1, cx25840_debug
, client
, "hblank %i, hactive %i, "
807 "vblank %i, vactive %i, vblank656 %i, src_dec %i, "
808 "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
810 hblank
, hactive
, vblank
, vactive
, vblank656
,
811 src_decimation
, burst
, luma_lpf
, uv_lpf
, comb
, sc
);
815 /* Sets horizontal blanking delay and active lines */
816 cx25840_write(client
, 0x470, hblank
);
817 cx25840_write(client
, 0x471,
818 0xff & (((hblank
>> 8) & 0x3) | (hactive
<< 4)));
819 cx25840_write(client
, 0x472, hactive
>> 4);
821 /* Sets burst gate delay */
822 cx25840_write(client
, 0x473, burst
);
824 /* Sets vertical blanking delay and active duration */
825 cx25840_write(client
, 0x474, vblank
);
826 cx25840_write(client
, 0x475,
827 0xff & (((vblank
>> 8) & 0x3) | (vactive
<< 4)));
828 cx25840_write(client
, 0x476, vactive
>> 4);
829 cx25840_write(client
, 0x477, vblank656
);
831 /* Sets src decimation rate */
832 cx25840_write(client
, 0x478, 0xff & src_decimation
);
833 cx25840_write(client
, 0x479, 0xff & (src_decimation
>> 8));
835 /* Sets Luma and UV Low pass filters */
836 cx25840_write(client
, 0x47a, luma_lpf
<< 6 | ((uv_lpf
<< 4) & 0x30));
838 /* Enables comb filters */
839 cx25840_write(client
, 0x47b, comb
);
842 cx25840_write(client
, 0x47c, sc
);
843 cx25840_write(client
, 0x47d, 0xff & sc
>> 8);
844 cx25840_write(client
, 0x47e, 0xff & sc
>> 16);
846 /* Sets VBI parameters */
847 if (std
& V4L2_STD_625_50
) {
848 cx25840_write(client
, 0x47f, 0x01);
849 state
->vbi_line_offset
= 5;
851 cx25840_write(client
, 0x47f, 0x00);
852 state
->vbi_line_offset
= 8;
856 /* ----------------------------------------------------------------------- */
858 static void input_change(struct i2c_client
*client
)
860 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
861 v4l2_std_id std
= state
->std
;
863 /* Follow step 8c and 8d of section 3.16 in the cx25840 datasheet */
864 if (std
& V4L2_STD_SECAM
) {
865 cx25840_write(client
, 0x402, 0);
868 cx25840_write(client
, 0x402, 0x04);
869 cx25840_write(client
, 0x49f, (std
& V4L2_STD_NTSC
) ? 0x14 : 0x11);
871 cx25840_and_or(client
, 0x401, ~0x60, 0);
872 cx25840_and_or(client
, 0x401, ~0x60, 0x60);
874 /* Don't write into audio registers on cx2583x chips */
875 if (is_cx2583x(state
))
878 cx25840_and_or(client
, 0x810, ~0x01, 1);
881 cx25840_write(client
, 0x808, 0xf9);
882 cx25840_write(client
, 0x80b, 0x00);
884 else if (std
& V4L2_STD_525_60
) {
885 /* Certain Hauppauge PVR150 models have a hardware bug
886 that causes audio to drop out. For these models the
887 audio standard must be set explicitly.
888 To be precise: it affects cards with tuner models
889 85, 99 and 112 (model numbers from tveeprom). */
890 int hw_fix
= state
->pvr150_workaround
;
892 if (std
== V4L2_STD_NTSC_M_JP
) {
893 /* Japan uses EIAJ audio standard */
894 cx25840_write(client
, 0x808, hw_fix
? 0x2f : 0xf7);
895 } else if (std
== V4L2_STD_NTSC_M_KR
) {
896 /* South Korea uses A2 audio standard */
897 cx25840_write(client
, 0x808, hw_fix
? 0x3f : 0xf8);
899 /* Others use the BTSC audio standard */
900 cx25840_write(client
, 0x808, hw_fix
? 0x1f : 0xf6);
902 cx25840_write(client
, 0x80b, 0x00);
903 } else if (std
& V4L2_STD_PAL
) {
904 /* Autodetect audio standard and audio system */
905 cx25840_write(client
, 0x808, 0xff);
906 /* Since system PAL-L is pretty much non-existent and
907 not used by any public broadcast network, force
908 6.5 MHz carrier to be interpreted as System DK,
909 this avoids DK audio detection instability */
910 cx25840_write(client
, 0x80b, 0x00);
911 } else if (std
& V4L2_STD_SECAM
) {
912 /* Autodetect audio standard and audio system */
913 cx25840_write(client
, 0x808, 0xff);
914 /* If only one of SECAM-DK / SECAM-L is required, then force
915 6.5MHz carrier, else autodetect it */
916 if ((std
& V4L2_STD_SECAM_DK
) &&
917 !(std
& (V4L2_STD_SECAM_L
| V4L2_STD_SECAM_LC
))) {
918 /* 6.5 MHz carrier to be interpreted as System DK */
919 cx25840_write(client
, 0x80b, 0x00);
920 } else if (!(std
& V4L2_STD_SECAM_DK
) &&
921 (std
& (V4L2_STD_SECAM_L
| V4L2_STD_SECAM_LC
))) {
922 /* 6.5 MHz carrier to be interpreted as System L */
923 cx25840_write(client
, 0x80b, 0x08);
925 /* 6.5 MHz carrier to be autodetected */
926 cx25840_write(client
, 0x80b, 0x10);
930 cx25840_and_or(client
, 0x810, ~0x01, 0);
933 static int set_input(struct i2c_client
*client
, enum cx25840_video_input vid_input
,
934 enum cx25840_audio_input aud_input
)
936 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
937 u8 is_composite
= (vid_input
>= CX25840_COMPOSITE1
&&
938 vid_input
<= CX25840_COMPOSITE8
);
939 u8 is_component
= (vid_input
& CX25840_COMPONENT_ON
) ==
940 CX25840_COMPONENT_ON
;
941 int luma
= vid_input
& 0xf0;
942 int chroma
= vid_input
& 0xf00;
945 v4l_dbg(1, cx25840_debug
, client
,
946 "decoder set video input %d, audio input %d\n",
947 vid_input
, aud_input
);
949 if (vid_input
>= CX25840_VIN1_CH1
) {
950 v4l_dbg(1, cx25840_debug
, client
, "vid_input 0x%x\n",
952 reg
= vid_input
& 0xff;
953 is_composite
= !is_component
&&
954 ((vid_input
& CX25840_SVIDEO_ON
) != CX25840_SVIDEO_ON
);
956 v4l_dbg(1, cx25840_debug
, client
, "mux cfg 0x%x comp=%d\n",
958 } else if (is_composite
) {
959 reg
= 0xf0 + (vid_input
- CX25840_COMPOSITE1
);
961 if ((vid_input
& ~0xff0) ||
962 luma
< CX25840_SVIDEO_LUMA1
|| luma
> CX25840_SVIDEO_LUMA8
||
963 chroma
< CX25840_SVIDEO_CHROMA4
|| chroma
> CX25840_SVIDEO_CHROMA8
) {
964 v4l_err(client
, "0x%04x is not a valid video input!\n",
968 reg
= 0xf0 + ((luma
- CX25840_SVIDEO_LUMA1
) >> 4);
969 if (chroma
>= CX25840_SVIDEO_CHROMA7
) {
971 reg
|= (chroma
- CX25840_SVIDEO_CHROMA7
) >> 2;
974 reg
|= (chroma
- CX25840_SVIDEO_CHROMA4
) >> 4;
978 /* The caller has previously prepared the correct routing
979 * configuration in reg (for the cx23885) so we have no
980 * need to attempt to flip bits for earlier av decoders.
982 if (!is_cx2388x(state
) && !is_cx231xx(state
)) {
984 case CX25840_AUDIO_SERIAL
:
985 /* do nothing, use serial audio input */
987 case CX25840_AUDIO4
: reg
&= ~0x30; break;
988 case CX25840_AUDIO5
: reg
&= ~0x30; reg
|= 0x10; break;
989 case CX25840_AUDIO6
: reg
&= ~0x30; reg
|= 0x20; break;
990 case CX25840_AUDIO7
: reg
&= ~0xc0; break;
991 case CX25840_AUDIO8
: reg
&= ~0xc0; reg
|= 0x40; break;
994 v4l_err(client
, "0x%04x is not a valid audio input!\n",
1000 cx25840_write(client
, 0x103, reg
);
1002 /* Set INPUT_MODE to Composite, S-Video or Component */
1004 cx25840_and_or(client
, 0x401, ~0x6, 0x6);
1006 cx25840_and_or(client
, 0x401, ~0x6, is_composite
? 0 : 0x02);
1008 if (!is_cx2388x(state
) && !is_cx231xx(state
)) {
1009 /* Set CH_SEL_ADC2 to 1 if input comes from CH3 */
1010 cx25840_and_or(client
, 0x102, ~0x2, (reg
& 0x80) == 0 ? 2 : 0);
1011 /* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */
1012 if ((reg
& 0xc0) != 0xc0 && (reg
& 0x30) != 0x30)
1013 cx25840_and_or(client
, 0x102, ~0x4, 4);
1015 cx25840_and_or(client
, 0x102, ~0x4, 0);
1017 /* Set DUAL_MODE_ADC2 to 1 if component*/
1018 cx25840_and_or(client
, 0x102, ~0x4, is_component
? 0x4 : 0x0);
1020 /* ADC2 input select channel 2 */
1021 cx25840_and_or(client
, 0x102, ~0x2, 0);
1022 } else if (!is_component
) {
1024 if (chroma
>= CX25840_SVIDEO_CHROMA7
) {
1025 /* ADC2 input select channel 3 */
1026 cx25840_and_or(client
, 0x102, ~0x2, 2);
1028 /* ADC2 input select channel 2 */
1029 cx25840_and_or(client
, 0x102, ~0x2, 0);
1034 state
->vid_input
= vid_input
;
1035 state
->aud_input
= aud_input
;
1036 cx25840_audio_set_path(client
);
1037 input_change(client
);
1039 if (is_cx2388x(state
)) {
1040 /* Audio channel 1 src : Parallel 1 */
1041 cx25840_write(client
, 0x124, 0x03);
1043 /* Select AFE clock pad output source */
1044 cx25840_write(client
, 0x144, 0x05);
1046 /* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
1047 cx25840_write(client
, 0x914, 0xa0);
1050 * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
1051 * I2S_OUT_MASTER_MODE = Master
1053 cx25840_write(client
, 0x918, 0xa0);
1054 cx25840_write(client
, 0x919, 0x01);
1055 } else if (is_cx231xx(state
)) {
1056 /* Audio channel 1 src : Parallel 1 */
1057 cx25840_write(client
, 0x124, 0x03);
1059 /* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
1060 cx25840_write(client
, 0x914, 0xa0);
1063 * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
1064 * I2S_OUT_MASTER_MODE = Master
1066 cx25840_write(client
, 0x918, 0xa0);
1067 cx25840_write(client
, 0x919, 0x01);
1073 /* ----------------------------------------------------------------------- */
1075 static int set_v4lstd(struct i2c_client
*client
)
1077 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
1078 u8 fmt
= 0; /* zero is autodetect */
1081 /* First tests should be against specific std */
1082 if (state
->std
== V4L2_STD_NTSC_M_JP
) {
1084 } else if (state
->std
== V4L2_STD_NTSC_443
) {
1086 } else if (state
->std
== V4L2_STD_PAL_M
) {
1089 } else if (state
->std
== V4L2_STD_PAL_N
) {
1091 } else if (state
->std
== V4L2_STD_PAL_Nc
) {
1093 } else if (state
->std
== V4L2_STD_PAL_60
) {
1096 /* Then, test against generic ones */
1097 if (state
->std
& V4L2_STD_NTSC
)
1099 else if (state
->std
& V4L2_STD_PAL
)
1101 else if (state
->std
& V4L2_STD_SECAM
)
1105 v4l_dbg(1, cx25840_debug
, client
, "changing video std to fmt %i\n",fmt
);
1107 /* Follow step 9 of section 3.16 in the cx25840 datasheet.
1108 Without this PAL may display a vertical ghosting effect.
1109 This happens for example with the Yuan MPC622. */
1110 if (fmt
>= 4 && fmt
< 8) {
1111 /* Set format to NTSC-M */
1112 cx25840_and_or(client
, 0x400, ~0xf, 1);
1113 /* Turn off LCOMB */
1114 cx25840_and_or(client
, 0x47b, ~6, 0);
1116 cx25840_and_or(client
, 0x400, ~0xf, fmt
);
1117 cx25840_and_or(client
, 0x403, ~0x3, pal_m
);
1118 cx25840_std_setup(client
);
1119 if (!is_cx2583x(state
))
1120 input_change(client
);
1124 /* ----------------------------------------------------------------------- */
1126 static int cx25840_s_ctrl(struct v4l2_ctrl
*ctrl
)
1128 struct v4l2_subdev
*sd
= to_sd(ctrl
);
1129 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1132 case V4L2_CID_BRIGHTNESS
:
1133 cx25840_write(client
, 0x414, ctrl
->val
- 128);
1136 case V4L2_CID_CONTRAST
:
1137 cx25840_write(client
, 0x415, ctrl
->val
<< 1);
1140 case V4L2_CID_SATURATION
:
1141 cx25840_write(client
, 0x420, ctrl
->val
<< 1);
1142 cx25840_write(client
, 0x421, ctrl
->val
<< 1);
1146 cx25840_write(client
, 0x422, ctrl
->val
);
1156 /* ----------------------------------------------------------------------- */
1158 static int cx25840_s_mbus_fmt(struct v4l2_subdev
*sd
, struct v4l2_mbus_framefmt
*fmt
)
1160 struct cx25840_state
*state
= to_state(sd
);
1161 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1162 int HSC
, VSC
, Vsrc
, Hsrc
, filter
, Vlines
;
1163 int is_50Hz
= !(state
->std
& V4L2_STD_525_60
);
1165 if (fmt
->code
!= V4L2_MBUS_FMT_FIXED
)
1168 fmt
->field
= V4L2_FIELD_INTERLACED
;
1169 fmt
->colorspace
= V4L2_COLORSPACE_SMPTE170M
;
1171 Vsrc
= (cx25840_read(client
, 0x476) & 0x3f) << 4;
1172 Vsrc
|= (cx25840_read(client
, 0x475) & 0xf0) >> 4;
1174 Hsrc
= (cx25840_read(client
, 0x472) & 0x3f) << 4;
1175 Hsrc
|= (cx25840_read(client
, 0x471) & 0xf0) >> 4;
1177 Vlines
= fmt
->height
+ (is_50Hz
? 4 : 7);
1179 if ((fmt
->width
* 16 < Hsrc
) || (Hsrc
< fmt
->width
) ||
1180 (Vlines
* 8 < Vsrc
) || (Vsrc
< Vlines
)) {
1181 v4l_err(client
, "%dx%d is not a valid size!\n",
1182 fmt
->width
, fmt
->height
);
1186 HSC
= (Hsrc
* (1 << 20)) / fmt
->width
- (1 << 20);
1187 VSC
= (1 << 16) - (Vsrc
* (1 << 9) / Vlines
- (1 << 9));
1190 if (fmt
->width
>= 385)
1192 else if (fmt
->width
> 192)
1194 else if (fmt
->width
> 96)
1199 v4l_dbg(1, cx25840_debug
, client
, "decoder set size %dx%d -> scale %ux%u\n",
1200 fmt
->width
, fmt
->height
, HSC
, VSC
);
1203 cx25840_write(client
, 0x418, HSC
& 0xff);
1204 cx25840_write(client
, 0x419, (HSC
>> 8) & 0xff);
1205 cx25840_write(client
, 0x41a, HSC
>> 16);
1207 cx25840_write(client
, 0x41c, VSC
& 0xff);
1208 cx25840_write(client
, 0x41d, VSC
>> 8);
1209 /* VS_INTRLACE=1 VFILT=filter */
1210 cx25840_write(client
, 0x41e, 0x8 | filter
);
1214 /* ----------------------------------------------------------------------- */
1216 static void log_video_status(struct i2c_client
*client
)
1218 static const char *const fmt_strs
[] = {
1220 "NTSC-M", "NTSC-J", "NTSC-4.43",
1221 "PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
1222 "0x9", "0xA", "0xB",
1227 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
1228 u8 vidfmt_sel
= cx25840_read(client
, 0x400) & 0xf;
1229 u8 gen_stat1
= cx25840_read(client
, 0x40d);
1230 u8 gen_stat2
= cx25840_read(client
, 0x40e);
1231 int vid_input
= state
->vid_input
;
1233 v4l_info(client
, "Video signal: %spresent\n",
1234 (gen_stat2
& 0x20) ? "" : "not ");
1235 v4l_info(client
, "Detected format: %s\n",
1236 fmt_strs
[gen_stat1
& 0xf]);
1238 v4l_info(client
, "Specified standard: %s\n",
1239 vidfmt_sel
? fmt_strs
[vidfmt_sel
] : "automatic detection");
1241 if (vid_input
>= CX25840_COMPOSITE1
&&
1242 vid_input
<= CX25840_COMPOSITE8
) {
1243 v4l_info(client
, "Specified video input: Composite %d\n",
1244 vid_input
- CX25840_COMPOSITE1
+ 1);
1246 v4l_info(client
, "Specified video input: S-Video (Luma In%d, Chroma In%d)\n",
1247 (vid_input
& 0xf0) >> 4, (vid_input
& 0xf00) >> 8);
1250 v4l_info(client
, "Specified audioclock freq: %d Hz\n", state
->audclk_freq
);
1253 /* ----------------------------------------------------------------------- */
1255 static void log_audio_status(struct i2c_client
*client
)
1257 struct cx25840_state
*state
= to_state(i2c_get_clientdata(client
));
1258 u8 download_ctl
= cx25840_read(client
, 0x803);
1259 u8 mod_det_stat0
= cx25840_read(client
, 0x804);
1260 u8 mod_det_stat1
= cx25840_read(client
, 0x805);
1261 u8 audio_config
= cx25840_read(client
, 0x808);
1262 u8 pref_mode
= cx25840_read(client
, 0x809);
1263 u8 afc0
= cx25840_read(client
, 0x80b);
1264 u8 mute_ctl
= cx25840_read(client
, 0x8d3);
1265 int aud_input
= state
->aud_input
;
1268 switch (mod_det_stat0
) {
1269 case 0x00: p
= "mono"; break;
1270 case 0x01: p
= "stereo"; break;
1271 case 0x02: p
= "dual"; break;
1272 case 0x04: p
= "tri"; break;
1273 case 0x10: p
= "mono with SAP"; break;
1274 case 0x11: p
= "stereo with SAP"; break;
1275 case 0x12: p
= "dual with SAP"; break;
1276 case 0x14: p
= "tri with SAP"; break;
1277 case 0xfe: p
= "forced mode"; break;
1278 default: p
= "not defined";
1280 v4l_info(client
, "Detected audio mode: %s\n", p
);
1282 switch (mod_det_stat1
) {
1283 case 0x00: p
= "not defined"; break;
1284 case 0x01: p
= "EIAJ"; break;
1285 case 0x02: p
= "A2-M"; break;
1286 case 0x03: p
= "A2-BG"; break;
1287 case 0x04: p
= "A2-DK1"; break;
1288 case 0x05: p
= "A2-DK2"; break;
1289 case 0x06: p
= "A2-DK3"; break;
1290 case 0x07: p
= "A1 (6.0 MHz FM Mono)"; break;
1291 case 0x08: p
= "AM-L"; break;
1292 case 0x09: p
= "NICAM-BG"; break;
1293 case 0x0a: p
= "NICAM-DK"; break;
1294 case 0x0b: p
= "NICAM-I"; break;
1295 case 0x0c: p
= "NICAM-L"; break;
1296 case 0x0d: p
= "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
1297 case 0x0e: p
= "IF FM Radio"; break;
1298 case 0x0f: p
= "BTSC"; break;
1299 case 0x10: p
= "high-deviation FM"; break;
1300 case 0x11: p
= "very high-deviation FM"; break;
1301 case 0xfd: p
= "unknown audio standard"; break;
1302 case 0xfe: p
= "forced audio standard"; break;
1303 case 0xff: p
= "no detected audio standard"; break;
1304 default: p
= "not defined";
1306 v4l_info(client
, "Detected audio standard: %s\n", p
);
1307 v4l_info(client
, "Audio microcontroller: %s\n",
1308 (download_ctl
& 0x10) ?
1309 ((mute_ctl
& 0x2) ? "detecting" : "running") : "stopped");
1311 switch (audio_config
>> 4) {
1312 case 0x00: p
= "undefined"; break;
1313 case 0x01: p
= "BTSC"; break;
1314 case 0x02: p
= "EIAJ"; break;
1315 case 0x03: p
= "A2-M"; break;
1316 case 0x04: p
= "A2-BG"; break;
1317 case 0x05: p
= "A2-DK1"; break;
1318 case 0x06: p
= "A2-DK2"; break;
1319 case 0x07: p
= "A2-DK3"; break;
1320 case 0x08: p
= "A1 (6.0 MHz FM Mono)"; break;
1321 case 0x09: p
= "AM-L"; break;
1322 case 0x0a: p
= "NICAM-BG"; break;
1323 case 0x0b: p
= "NICAM-DK"; break;
1324 case 0x0c: p
= "NICAM-I"; break;
1325 case 0x0d: p
= "NICAM-L"; break;
1326 case 0x0e: p
= "FM radio"; break;
1327 case 0x0f: p
= "automatic detection"; break;
1328 default: p
= "undefined";
1330 v4l_info(client
, "Configured audio standard: %s\n", p
);
1332 if ((audio_config
>> 4) < 0xF) {
1333 switch (audio_config
& 0xF) {
1334 case 0x00: p
= "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
1335 case 0x01: p
= "MONO2 (LANGUAGE B)"; break;
1336 case 0x02: p
= "MONO3 (STEREO forced MONO)"; break;
1337 case 0x03: p
= "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
1338 case 0x04: p
= "STEREO"; break;
1339 case 0x05: p
= "DUAL1 (AB)"; break;
1340 case 0x06: p
= "DUAL2 (AC) (FM)"; break;
1341 case 0x07: p
= "DUAL3 (BC) (FM)"; break;
1342 case 0x08: p
= "DUAL4 (AC) (AM)"; break;
1343 case 0x09: p
= "DUAL5 (BC) (AM)"; break;
1344 case 0x0a: p
= "SAP"; break;
1345 default: p
= "undefined";
1347 v4l_info(client
, "Configured audio mode: %s\n", p
);
1349 switch (audio_config
& 0xF) {
1350 case 0x00: p
= "BG"; break;
1351 case 0x01: p
= "DK1"; break;
1352 case 0x02: p
= "DK2"; break;
1353 case 0x03: p
= "DK3"; break;
1354 case 0x04: p
= "I"; break;
1355 case 0x05: p
= "L"; break;
1356 case 0x06: p
= "BTSC"; break;
1357 case 0x07: p
= "EIAJ"; break;
1358 case 0x08: p
= "A2-M"; break;
1359 case 0x09: p
= "FM Radio"; break;
1360 case 0x0f: p
= "automatic standard and mode detection"; break;
1361 default: p
= "undefined";
1363 v4l_info(client
, "Configured audio system: %s\n", p
);
1367 v4l_info(client
, "Specified audio input: Tuner (In%d)\n", aud_input
);
1369 v4l_info(client
, "Specified audio input: External\n");
1372 switch (pref_mode
& 0xf) {
1373 case 0: p
= "mono/language A"; break;
1374 case 1: p
= "language B"; break;
1375 case 2: p
= "language C"; break;
1376 case 3: p
= "analog fallback"; break;
1377 case 4: p
= "stereo"; break;
1378 case 5: p
= "language AC"; break;
1379 case 6: p
= "language BC"; break;
1380 case 7: p
= "language AB"; break;
1381 default: p
= "undefined";
1383 v4l_info(client
, "Preferred audio mode: %s\n", p
);
1385 if ((audio_config
& 0xf) == 0xf) {
1386 switch ((afc0
>> 3) & 0x3) {
1387 case 0: p
= "system DK"; break;
1388 case 1: p
= "system L"; break;
1389 case 2: p
= "autodetect"; break;
1390 default: p
= "undefined";
1392 v4l_info(client
, "Selected 65 MHz format: %s\n", p
);
1394 switch (afc0
& 0x7) {
1395 case 0: p
= "chroma"; break;
1396 case 1: p
= "BTSC"; break;
1397 case 2: p
= "EIAJ"; break;
1398 case 3: p
= "A2-M"; break;
1399 case 4: p
= "autodetect"; break;
1400 default: p
= "undefined";
1402 v4l_info(client
, "Selected 45 MHz format: %s\n", p
);
1406 /* ----------------------------------------------------------------------- */
1408 /* This load_fw operation must be called to load the driver's firmware.
1409 Without this the audio standard detection will fail and you will
1412 Since loading the firmware is often problematic when the driver is
1413 compiled into the kernel I recommend postponing calling this function
1414 until the first open of the video device. Another reason for
1415 postponing it is that loading this firmware takes a long time (seconds)
1416 due to the slow i2c bus speed. So it will speed up the boot process if
1417 you can avoid loading the fw as long as the video device isn't used. */
1418 static int cx25840_load_fw(struct v4l2_subdev
*sd
)
1420 struct cx25840_state
*state
= to_state(sd
);
1421 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1423 if (!state
->is_initialized
) {
1424 /* initialize and load firmware */
1425 state
->is_initialized
= 1;
1426 if (is_cx2583x(state
))
1427 cx25836_initialize(client
);
1428 else if (is_cx2388x(state
))
1429 cx23885_initialize(client
);
1430 else if (is_cx231xx(state
))
1431 cx231xx_initialize(client
);
1433 cx25840_initialize(client
);
1438 #ifdef CONFIG_VIDEO_ADV_DEBUG
1439 static int cx25840_g_register(struct v4l2_subdev
*sd
, struct v4l2_dbg_register
*reg
)
1441 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1443 if (!v4l2_chip_match_i2c_client(client
, ®
->match
))
1445 if (!capable(CAP_SYS_ADMIN
))
1448 reg
->val
= cx25840_read(client
, reg
->reg
& 0x0fff);
1452 static int cx25840_s_register(struct v4l2_subdev
*sd
, struct v4l2_dbg_register
*reg
)
1454 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1456 if (!v4l2_chip_match_i2c_client(client
, ®
->match
))
1458 if (!capable(CAP_SYS_ADMIN
))
1460 cx25840_write(client
, reg
->reg
& 0x0fff, reg
->val
& 0xff);
1465 static int cx25840_s_audio_stream(struct v4l2_subdev
*sd
, int enable
)
1467 struct cx25840_state
*state
= to_state(sd
);
1468 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1471 if (is_cx2583x(state
) || is_cx2388x(state
) || is_cx231xx(state
))
1474 v4l_dbg(1, cx25840_debug
, client
, "%s audio output\n",
1475 enable
? "enable" : "disable");
1478 v
= cx25840_read(client
, 0x115) | 0x80;
1479 cx25840_write(client
, 0x115, v
);
1480 v
= cx25840_read(client
, 0x116) | 0x03;
1481 cx25840_write(client
, 0x116, v
);
1483 v
= cx25840_read(client
, 0x115) & ~(0x80);
1484 cx25840_write(client
, 0x115, v
);
1485 v
= cx25840_read(client
, 0x116) & ~(0x03);
1486 cx25840_write(client
, 0x116, v
);
1491 static int cx25840_s_stream(struct v4l2_subdev
*sd
, int enable
)
1493 struct cx25840_state
*state
= to_state(sd
);
1494 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1497 v4l_dbg(1, cx25840_debug
, client
, "%s video output\n",
1498 enable
? "enable" : "disable");
1500 if (is_cx2388x(state
) || is_cx231xx(state
)) {
1501 v
= cx25840_read(client
, 0x421) | 0x0b;
1502 cx25840_write(client
, 0x421, v
);
1504 v
= cx25840_read(client
, 0x115) | 0x0c;
1505 cx25840_write(client
, 0x115, v
);
1506 v
= cx25840_read(client
, 0x116) | 0x04;
1507 cx25840_write(client
, 0x116, v
);
1510 if (is_cx2388x(state
) || is_cx231xx(state
)) {
1511 v
= cx25840_read(client
, 0x421) & ~(0x0b);
1512 cx25840_write(client
, 0x421, v
);
1514 v
= cx25840_read(client
, 0x115) & ~(0x0c);
1515 cx25840_write(client
, 0x115, v
);
1516 v
= cx25840_read(client
, 0x116) & ~(0x04);
1517 cx25840_write(client
, 0x116, v
);
1523 static int cx25840_s_std(struct v4l2_subdev
*sd
, v4l2_std_id std
)
1525 struct cx25840_state
*state
= to_state(sd
);
1526 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1528 if (state
->radio
== 0 && state
->std
== std
)
1532 return set_v4lstd(client
);
1535 static int cx25840_s_radio(struct v4l2_subdev
*sd
)
1537 struct cx25840_state
*state
= to_state(sd
);
1543 static int cx25840_s_video_routing(struct v4l2_subdev
*sd
,
1544 u32 input
, u32 output
, u32 config
)
1546 struct cx25840_state
*state
= to_state(sd
);
1547 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1549 return set_input(client
, input
, state
->aud_input
);
1552 static int cx25840_s_audio_routing(struct v4l2_subdev
*sd
,
1553 u32 input
, u32 output
, u32 config
)
1555 struct cx25840_state
*state
= to_state(sd
);
1556 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1558 return set_input(client
, state
->vid_input
, input
);
1561 static int cx25840_s_frequency(struct v4l2_subdev
*sd
, struct v4l2_frequency
*freq
)
1563 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1565 input_change(client
);
1569 static int cx25840_g_tuner(struct v4l2_subdev
*sd
, struct v4l2_tuner
*vt
)
1571 struct cx25840_state
*state
= to_state(sd
);
1572 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1573 u8 vpres
= cx25840_read(client
, 0x40e) & 0x20;
1580 vt
->signal
= vpres
? 0xffff : 0x0;
1581 if (is_cx2583x(state
))
1585 V4L2_TUNER_CAP_STEREO
| V4L2_TUNER_CAP_LANG1
|
1586 V4L2_TUNER_CAP_LANG2
| V4L2_TUNER_CAP_SAP
;
1588 mode
= cx25840_read(client
, 0x804);
1590 /* get rxsubchans and audmode */
1591 if ((mode
& 0xf) == 1)
1592 val
|= V4L2_TUNER_SUB_STEREO
;
1594 val
|= V4L2_TUNER_SUB_MONO
;
1596 if (mode
== 2 || mode
== 4)
1597 val
= V4L2_TUNER_SUB_LANG1
| V4L2_TUNER_SUB_LANG2
;
1600 val
|= V4L2_TUNER_SUB_SAP
;
1602 vt
->rxsubchans
= val
;
1603 vt
->audmode
= state
->audmode
;
1607 static int cx25840_s_tuner(struct v4l2_subdev
*sd
, struct v4l2_tuner
*vt
)
1609 struct cx25840_state
*state
= to_state(sd
);
1610 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1612 if (state
->radio
|| is_cx2583x(state
))
1615 switch (vt
->audmode
) {
1616 case V4L2_TUNER_MODE_MONO
:
1619 bilingual -> lang1 */
1620 cx25840_and_or(client
, 0x809, ~0xf, 0x00);
1622 case V4L2_TUNER_MODE_STEREO
:
1623 case V4L2_TUNER_MODE_LANG1
:
1626 bilingual -> lang1 */
1627 cx25840_and_or(client
, 0x809, ~0xf, 0x04);
1629 case V4L2_TUNER_MODE_LANG1_LANG2
:
1632 bilingual -> lang1/lang2 */
1633 cx25840_and_or(client
, 0x809, ~0xf, 0x07);
1635 case V4L2_TUNER_MODE_LANG2
:
1638 bilingual -> lang2 */
1639 cx25840_and_or(client
, 0x809, ~0xf, 0x01);
1644 state
->audmode
= vt
->audmode
;
1648 static int cx25840_reset(struct v4l2_subdev
*sd
, u32 val
)
1650 struct cx25840_state
*state
= to_state(sd
);
1651 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1653 if (is_cx2583x(state
))
1654 cx25836_initialize(client
);
1655 else if (is_cx2388x(state
))
1656 cx23885_initialize(client
);
1657 else if (is_cx231xx(state
))
1658 cx231xx_initialize(client
);
1660 cx25840_initialize(client
);
1664 static int cx25840_g_chip_ident(struct v4l2_subdev
*sd
, struct v4l2_dbg_chip_ident
*chip
)
1666 struct cx25840_state
*state
= to_state(sd
);
1667 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1669 return v4l2_chip_ident_i2c_client(client
, chip
, state
->id
, state
->rev
);
1672 static int cx25840_log_status(struct v4l2_subdev
*sd
)
1674 struct cx25840_state
*state
= to_state(sd
);
1675 struct i2c_client
*client
= v4l2_get_subdevdata(sd
);
1677 log_video_status(client
);
1678 if (!is_cx2583x(state
))
1679 log_audio_status(client
);
1680 cx25840_ir_log_status(sd
);
1681 v4l2_ctrl_handler_log_status(&state
->hdl
, sd
->name
);
1685 static int cx23885_irq_handler(struct v4l2_subdev
*sd
, u32 status
,
1688 struct cx25840_state
*state
= to_state(sd
);
1689 struct i2c_client
*c
= v4l2_get_subdevdata(sd
);
1690 u8 irq_stat
, aud_stat
, aud_en
, ir_stat
, ir_en
;
1691 u32 vid_stat
, aud_mc_stat
;
1695 irq_stat
= cx25840_read(c
, CX23885_PIN_CTRL_IRQ_REG
);
1696 v4l_dbg(2, cx25840_debug
, c
, "AV Core IRQ status (entry): %s %s %s\n",
1697 irq_stat
& CX23885_PIN_CTRL_IRQ_IR_STAT
? "ir" : " ",
1698 irq_stat
& CX23885_PIN_CTRL_IRQ_AUD_STAT
? "aud" : " ",
1699 irq_stat
& CX23885_PIN_CTRL_IRQ_VID_STAT
? "vid" : " ");
1701 if ((is_cx23885(state
) || is_cx23887(state
))) {
1702 ir_stat
= cx25840_read(c
, CX25840_IR_STATS_REG
);
1703 ir_en
= cx25840_read(c
, CX25840_IR_IRQEN_REG
);
1704 v4l_dbg(2, cx25840_debug
, c
,
1705 "AV Core ir IRQ status: %#04x disables: %#04x\n",
1707 if (irq_stat
& CX23885_PIN_CTRL_IRQ_IR_STAT
) {
1708 block_handled
= false;
1709 ret
= cx25840_ir_irq_handler(sd
,
1710 status
, &block_handled
);
1716 aud_stat
= cx25840_read(c
, CX25840_AUD_INT_STAT_REG
);
1717 aud_en
= cx25840_read(c
, CX25840_AUD_INT_CTRL_REG
);
1718 v4l_dbg(2, cx25840_debug
, c
,
1719 "AV Core audio IRQ status: %#04x disables: %#04x\n",
1721 aud_mc_stat
= cx25840_read4(c
, CX23885_AUD_MC_INT_MASK_REG
);
1722 v4l_dbg(2, cx25840_debug
, c
,
1723 "AV Core audio MC IRQ status: %#06x enables: %#06x\n",
1724 aud_mc_stat
>> CX23885_AUD_MC_INT_STAT_SHFT
,
1725 aud_mc_stat
& CX23885_AUD_MC_INT_CTRL_BITS
);
1726 if (irq_stat
& CX23885_PIN_CTRL_IRQ_AUD_STAT
) {
1728 cx25840_write(c
, CX25840_AUD_INT_STAT_REG
, aud_stat
);
1733 vid_stat
= cx25840_read4(c
, CX25840_VID_INT_STAT_REG
);
1734 v4l_dbg(2, cx25840_debug
, c
,
1735 "AV Core video IRQ status: %#06x disables: %#06x\n",
1736 vid_stat
& CX25840_VID_INT_STAT_BITS
,
1737 vid_stat
>> CX25840_VID_INT_MASK_SHFT
);
1738 if (irq_stat
& CX23885_PIN_CTRL_IRQ_VID_STAT
) {
1739 if (vid_stat
& CX25840_VID_INT_STAT_BITS
) {
1740 cx25840_write4(c
, CX25840_VID_INT_STAT_REG
, vid_stat
);
1745 irq_stat
= cx25840_read(c
, CX23885_PIN_CTRL_IRQ_REG
);
1746 v4l_dbg(2, cx25840_debug
, c
, "AV Core IRQ status (exit): %s %s %s\n",
1747 irq_stat
& CX23885_PIN_CTRL_IRQ_IR_STAT
? "ir" : " ",
1748 irq_stat
& CX23885_PIN_CTRL_IRQ_AUD_STAT
? "aud" : " ",
1749 irq_stat
& CX23885_PIN_CTRL_IRQ_VID_STAT
? "vid" : " ");
1754 static int cx25840_irq_handler(struct v4l2_subdev
*sd
, u32 status
,
1757 struct cx25840_state
*state
= to_state(sd
);
1761 /* Only support the CX2388[578] AV Core for now */
1762 if (is_cx2388x(state
))
1763 return cx23885_irq_handler(sd
, status
, handled
);
1768 /* ----------------------------------------------------------------------- */
1770 static const struct v4l2_ctrl_ops cx25840_ctrl_ops
= {
1771 .s_ctrl
= cx25840_s_ctrl
,
1774 static const struct v4l2_subdev_core_ops cx25840_core_ops
= {
1775 .log_status
= cx25840_log_status
,
1776 .g_chip_ident
= cx25840_g_chip_ident
,
1777 .g_ctrl
= v4l2_subdev_g_ctrl
,
1778 .s_ctrl
= v4l2_subdev_s_ctrl
,
1779 .s_ext_ctrls
= v4l2_subdev_s_ext_ctrls
,
1780 .try_ext_ctrls
= v4l2_subdev_try_ext_ctrls
,
1781 .g_ext_ctrls
= v4l2_subdev_g_ext_ctrls
,
1782 .queryctrl
= v4l2_subdev_queryctrl
,
1783 .querymenu
= v4l2_subdev_querymenu
,
1784 .s_std
= cx25840_s_std
,
1785 .reset
= cx25840_reset
,
1786 .load_fw
= cx25840_load_fw
,
1787 .s_io_pin_config
= common_s_io_pin_config
,
1788 #ifdef CONFIG_VIDEO_ADV_DEBUG
1789 .g_register
= cx25840_g_register
,
1790 .s_register
= cx25840_s_register
,
1792 .interrupt_service_routine
= cx25840_irq_handler
,
1795 static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops
= {
1796 .s_frequency
= cx25840_s_frequency
,
1797 .s_radio
= cx25840_s_radio
,
1798 .g_tuner
= cx25840_g_tuner
,
1799 .s_tuner
= cx25840_s_tuner
,
1802 static const struct v4l2_subdev_audio_ops cx25840_audio_ops
= {
1803 .s_clock_freq
= cx25840_s_clock_freq
,
1804 .s_routing
= cx25840_s_audio_routing
,
1805 .s_stream
= cx25840_s_audio_stream
,
1808 static const struct v4l2_subdev_video_ops cx25840_video_ops
= {
1809 .s_routing
= cx25840_s_video_routing
,
1810 .s_mbus_fmt
= cx25840_s_mbus_fmt
,
1811 .s_stream
= cx25840_s_stream
,
1814 static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops
= {
1815 .decode_vbi_line
= cx25840_decode_vbi_line
,
1816 .s_raw_fmt
= cx25840_s_raw_fmt
,
1817 .s_sliced_fmt
= cx25840_s_sliced_fmt
,
1818 .g_sliced_fmt
= cx25840_g_sliced_fmt
,
1821 static const struct v4l2_subdev_ops cx25840_ops
= {
1822 .core
= &cx25840_core_ops
,
1823 .tuner
= &cx25840_tuner_ops
,
1824 .audio
= &cx25840_audio_ops
,
1825 .video
= &cx25840_video_ops
,
1826 .vbi
= &cx25840_vbi_ops
,
1827 .ir
= &cx25840_ir_ops
,
1830 /* ----------------------------------------------------------------------- */
1832 static u32
get_cx2388x_ident(struct i2c_client
*client
)
1836 /* Come out of digital power down */
1837 cx25840_write(client
, 0x000, 0);
1839 /* Detecting whether the part is cx23885/7/8 is more
1840 * difficult than it needs to be. No ID register. Instead we
1841 * probe certain registers indicated in the datasheets to look
1842 * for specific defaults that differ between the silicon designs. */
1844 /* It's either 885/7 if the IR Tx Clk Divider register exists */
1845 if (cx25840_read4(client
, 0x204) & 0xffff) {
1846 /* CX23885 returns bogus repetitive byte values for the DIF,
1847 * which doesn't exist for it. (Ex. 8a8a8a8a or 31313131) */
1848 ret
= cx25840_read4(client
, 0x300);
1849 if (((ret
& 0xffff0000) >> 16) == (ret
& 0xffff)) {
1851 ret
= V4L2_IDENT_CX23885_AV
;
1853 /* CX23887 has a broken DIF, but the registers
1854 * appear valid (but unused), good enough to detect. */
1855 ret
= V4L2_IDENT_CX23887_AV
;
1857 } else if (cx25840_read4(client
, 0x300) & 0x0fffffff) {
1858 /* DIF PLL Freq Word reg exists; chip must be a CX23888 */
1859 ret
= V4L2_IDENT_CX23888_AV
;
1861 v4l_err(client
, "Unable to detect h/w, assuming cx23887\n");
1862 ret
= V4L2_IDENT_CX23887_AV
;
1865 /* Back into digital power down */
1866 cx25840_write(client
, 0x000, 2);
1870 static int cx25840_probe(struct i2c_client
*client
,
1871 const struct i2c_device_id
*did
)
1873 struct cx25840_state
*state
;
1874 struct v4l2_subdev
*sd
;
1876 u32 id
= V4L2_IDENT_NONE
;
1879 /* Check if the adapter supports the needed features */
1880 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_BYTE_DATA
))
1883 v4l_dbg(1, cx25840_debug
, client
, "detecting cx25840 client on address 0x%x\n", client
->addr
<< 1);
1885 device_id
= cx25840_read(client
, 0x101) << 8;
1886 device_id
|= cx25840_read(client
, 0x100);
1887 v4l_dbg(1, cx25840_debug
, client
, "device_id = 0x%04x\n", device_id
);
1889 /* The high byte of the device ID should be
1890 * 0x83 for the cx2583x and 0x84 for the cx2584x */
1891 if ((device_id
& 0xff00) == 0x8300) {
1892 id
= V4L2_IDENT_CX25836
+ ((device_id
>> 4) & 0xf) - 6;
1893 } else if ((device_id
& 0xff00) == 0x8400) {
1894 id
= V4L2_IDENT_CX25840
+ ((device_id
>> 4) & 0xf);
1895 } else if (device_id
== 0x0000) {
1896 id
= get_cx2388x_ident(client
);
1897 } else if ((device_id
& 0xfff0) == 0x5A30) {
1898 /* The CX23100 (0x5A3C = 23100) doesn't have an A/V decoder */
1899 id
= V4L2_IDENT_CX2310X_AV
;
1900 } else if ((device_id
& 0xff) == (device_id
>> 8)) {
1902 "likely a confused/unresponsive cx2388[578] A/V decoder"
1903 " found @ 0x%x (%s)\n",
1904 client
->addr
<< 1, client
->adapter
->name
);
1905 v4l_err(client
, "A method to reset it from the cx25840 driver"
1906 " software is not known at this time\n");
1909 v4l_dbg(1, cx25840_debug
, client
, "cx25840 not found\n");
1913 state
= kzalloc(sizeof(struct cx25840_state
), GFP_KERNEL
);
1918 v4l2_i2c_subdev_init(sd
, client
, &cx25840_ops
);
1921 case V4L2_IDENT_CX23885_AV
:
1922 v4l_info(client
, "cx23885 A/V decoder found @ 0x%x (%s)\n",
1923 client
->addr
<< 1, client
->adapter
->name
);
1925 case V4L2_IDENT_CX23887_AV
:
1926 v4l_info(client
, "cx23887 A/V decoder found @ 0x%x (%s)\n",
1927 client
->addr
<< 1, client
->adapter
->name
);
1929 case V4L2_IDENT_CX23888_AV
:
1930 v4l_info(client
, "cx23888 A/V decoder found @ 0x%x (%s)\n",
1931 client
->addr
<< 1, client
->adapter
->name
);
1933 case V4L2_IDENT_CX2310X_AV
:
1934 v4l_info(client
, "cx%d A/V decoder found @ 0x%x (%s)\n",
1935 device_id
, client
->addr
<< 1, client
->adapter
->name
);
1937 case V4L2_IDENT_CX25840
:
1938 case V4L2_IDENT_CX25841
:
1939 case V4L2_IDENT_CX25842
:
1940 case V4L2_IDENT_CX25843
:
1941 /* Note: revision '(device_id & 0x0f) == 2' was never built. The
1942 marking skips from 0x1 == 22 to 0x3 == 23. */
1943 v4l_info(client
, "cx25%3x-2%x found @ 0x%x (%s)\n",
1944 (device_id
& 0xfff0) >> 4,
1945 (device_id
& 0x0f) < 3 ? (device_id
& 0x0f) + 1
1946 : (device_id
& 0x0f),
1947 client
->addr
<< 1, client
->adapter
->name
);
1949 case V4L2_IDENT_CX25836
:
1950 case V4L2_IDENT_CX25837
:
1952 v4l_info(client
, "cx25%3x-%x found @ 0x%x (%s)\n",
1953 (device_id
& 0xfff0) >> 4, device_id
& 0x0f,
1954 client
->addr
<< 1, client
->adapter
->name
);
1959 state
->vid_input
= CX25840_COMPOSITE7
;
1960 state
->aud_input
= CX25840_AUDIO8
;
1961 state
->audclk_freq
= 48000;
1962 state
->audmode
= V4L2_TUNER_MODE_LANG1
;
1963 state
->vbi_line_offset
= 8;
1965 state
->rev
= device_id
;
1966 v4l2_ctrl_handler_init(&state
->hdl
, 9);
1967 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_ctrl_ops
,
1968 V4L2_CID_BRIGHTNESS
, 0, 255, 1, 128);
1969 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_ctrl_ops
,
1970 V4L2_CID_CONTRAST
, 0, 127, 1, 64);
1971 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_ctrl_ops
,
1972 V4L2_CID_SATURATION
, 0, 127, 1, 64);
1973 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_ctrl_ops
,
1974 V4L2_CID_HUE
, -128, 127, 1, 0);
1975 if (!is_cx2583x(state
)) {
1976 default_volume
= cx25840_read(client
, 0x8d4);
1978 * Enforce the legacy PVR-350/MSP3400 to PVR-150/CX25843 volume
1979 * scale mapping limits to avoid -ERANGE errors when
1980 * initializing the volume control
1982 if (default_volume
> 228) {
1983 /* Bottom out at -96 dB, v4l2 vol range 0x2e00-0x2fff */
1984 default_volume
= 228;
1985 cx25840_write(client
, 0x8d4, 228);
1987 else if (default_volume
< 20) {
1988 /* Top out at + 8 dB, v4l2 vol range 0xfe00-0xffff */
1989 default_volume
= 20;
1990 cx25840_write(client
, 0x8d4, 20);
1992 default_volume
= (((228 - default_volume
) >> 1) + 23) << 9;
1994 state
->volume
= v4l2_ctrl_new_std(&state
->hdl
,
1995 &cx25840_audio_ctrl_ops
, V4L2_CID_AUDIO_VOLUME
,
1996 0, 65535, 65535 / 100, default_volume
);
1997 state
->mute
= v4l2_ctrl_new_std(&state
->hdl
,
1998 &cx25840_audio_ctrl_ops
, V4L2_CID_AUDIO_MUTE
,
2000 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_audio_ctrl_ops
,
2001 V4L2_CID_AUDIO_BALANCE
,
2002 0, 65535, 65535 / 100, 32768);
2003 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_audio_ctrl_ops
,
2004 V4L2_CID_AUDIO_BASS
,
2005 0, 65535, 65535 / 100, 32768);
2006 v4l2_ctrl_new_std(&state
->hdl
, &cx25840_audio_ctrl_ops
,
2007 V4L2_CID_AUDIO_TREBLE
,
2008 0, 65535, 65535 / 100, 32768);
2010 sd
->ctrl_handler
= &state
->hdl
;
2011 if (state
->hdl
.error
) {
2012 int err
= state
->hdl
.error
;
2014 v4l2_ctrl_handler_free(&state
->hdl
);
2018 if (!is_cx2583x(state
))
2019 v4l2_ctrl_cluster(2, &state
->volume
);
2020 v4l2_ctrl_handler_setup(&state
->hdl
);
2022 if (client
->dev
.platform_data
) {
2023 struct cx25840_platform_data
*pdata
= client
->dev
.platform_data
;
2025 state
->pvr150_workaround
= pdata
->pvr150_workaround
;
2028 cx25840_ir_probe(sd
);
2032 static int cx25840_remove(struct i2c_client
*client
)
2034 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
2035 struct cx25840_state
*state
= to_state(sd
);
2037 cx25840_ir_remove(sd
);
2038 v4l2_device_unregister_subdev(sd
);
2039 v4l2_ctrl_handler_free(&state
->hdl
);
2044 static const struct i2c_device_id cx25840_id
[] = {
2048 MODULE_DEVICE_TABLE(i2c
, cx25840_id
);
2050 static struct i2c_driver cx25840_driver
= {
2052 .owner
= THIS_MODULE
,
2055 .probe
= cx25840_probe
,
2056 .remove
= cx25840_remove
,
2057 .id_table
= cx25840_id
,
2060 static __init
int init_cx25840(void)
2062 return i2c_add_driver(&cx25840_driver
);
2065 static __exit
void exit_cx25840(void)
2067 i2c_del_driver(&cx25840_driver
);
2070 module_init(init_cx25840
);
2071 module_exit(exit_cx25840
);