blob: d8f3a014726a9785a42401fde1457d73647c3f7a [file] [log] [blame]
Mauro Carvalho Chehabc009e682016-07-17 17:28:40 -03001The cx88 driver
2===============
3
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -03004Author: Gerd Hoffmann
Linus Torvalds1da177e2005-04-16 15:20:36 -07005
6This is a v4l2 device driver for the cx2388x chip.
7
8
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -03009Current status
Mauro Carvalho Chehabc009e682016-07-17 17:28:40 -030010--------------
Linus Torvalds1da177e2005-04-16 15:20:36 -070011
12video
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030013 - Works.
14 - Overlay isn't supported.
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16audio
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030017 - Works. The TV standard detection is made by the driver, as the
18 hardware has bugs to auto-detect.
Linus Torvalds1da177e2005-04-16 15:20:36 -070019 - audio data dma (i.e. recording without loopback cable to the
Mauro Carvalho Chehab2b1b9452008-10-24 23:13:57 -030020 sound card) is supported via cx88-alsa.
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
22vbi
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030023 - Works.
Linus Torvalds1da177e2005-04-16 15:20:36 -070024
25
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030026How to add support for new cards
Mauro Carvalho Chehabc009e682016-07-17 17:28:40 -030027--------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
29The driver needs some config info for the TV cards. This stuff is in
30cx88-cards.c. If the driver doesn't work well you likely need a new
31entry for your card in that file. Check the kernel log (using dmesg)
32to see whenever the driver knows your card or not. There is a line
33like this one:
34
Mauro Carvalho Chehabc009e682016-07-17 17:28:40 -030035.. code-block:: none
36
Linus Torvalds1da177e2005-04-16 15:20:36 -070037 cx8800[0]: subsystem: 0070:3400, board: Hauppauge WinTV \
38 34xxx models [card=1,autodetected]
39
40If your card is listed as "board: UNKNOWN/GENERIC" it is unknown to
41the driver. What to do then?
42
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -0300431) Try upgrading to the latest snapshot, maybe it has been added
44 meanwhile.
452) You can try to create a new entry yourself, have a look at
46 cx88-cards.c. If that worked, mail me your changes as unified
47 diff ("diff -u").
483) Or you can mail me the config information. We need at least the
49 following information to add the card:
Linus Torvalds1da177e2005-04-16 15:20:36 -070050
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030051 - the PCI Subsystem ID ("0070:3400" from the line above,
Linus Torvalds1da177e2005-04-16 15:20:36 -070052 "lspci -v" output is fine too).
Mauro Carvalho Chehab55aa32f2016-07-17 17:44:45 -030053 - the tuner type used by the card. You can try to find one by
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 trial-and-error using the tuner=<n> insmod option. If you
55 know which one the card has you can also have a look at the
56 list in CARDLIST.tuner
57
Mauro Carvalho Chehab2b8de4e2016-07-18 14:10:40 -030058Documentation missing at the cx88 datasheet
59-------------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -070060
Mauro Carvalho Chehab2b8de4e2016-07-18 14:10:40 -030061MO_OUTPUT_FORMAT (0x310164)
62
63.. code-block:: none
64
65 Previous default from DScaler: 0x1c1f0008
66 Digit 8: 31-28
67 28: PREVREMOD = 1
68
69 Digit 7: 27-24 (0xc = 12 = b1100 )
70 27: COMBALT = 1
71 26: PAL_INV_PHASE
72 (DScaler apparently set this to 1, resulted in sucky picture)
73
74 Digits 6,5: 23-16
75 25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512)
76
77 Digit 4: 15-12
78 15: DISIFX = 0
79 14: INVCBF = 0
80 13: DISADAPT = 0
81 12: NARROWADAPT = 0
82
83 Digit 3: 11-8
84 11: FORCE2H
85 10: FORCEREMD
86 9: NCHROMAEN
87 8: NREMODEN
88
89 Digit 2: 7-4
90 7-6: YCORE
91 5-4: CCORE
92
93 Digit 1: 3-0
94 3: RANGE = 1
95 2: HACTEXT
96 1: HSFMT
97
980x47 is the sync byte for MPEG-2 transport stream packets.
99Datasheet incorrectly states to use 47 decimal. 188 is the length.
100All DVB compliant frontends output packets with this start code.
Mauro Carvalho Chehabf0d17222016-07-18 14:18:10 -0300101
102Hauppauge WinTV cx88 IR information
103-----------------------------------
104
105The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting.
106
107====== ======== =================================================
108GPIO0 GPIO1
109====== ======== =================================================
110 0 0 TV Audio
111 1 0 FM radio
112 0 1 Line-In
113 1 1 Mono tuner bypass or CD passthru (tuner specific)
114====== ======== =================================================
115
116GPIO 16(I believe) is tied to the IR port (if present).
117
118
119From the data sheet:
120
121- Register 24'h20004 PCI Interrupt Status
Mauro Carvalho Chehab5b8700e2016-07-20 09:22:38 -0300122
Mauro Carvalho Chehabf0d17222016-07-18 14:18:10 -0300123 - bit [18] IR_SMP_INT Set when 32 input samples have been collected over
124 - gpio[16] pin into GP_SAMPLE register.
125
126What's missing from the data sheet:
127
128- Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5
129 compat remote)
130- set register 0x35C050 to 0xa80a80
131- enable sampling
132- set register 0x35C054 to 0x5
133- enable the IRQ bit 18 in the interrupt mask register (and
134 provide for a handler)
135
136GP_SAMPLE register is at 0x35C058
137
138Bits are then right shifted into the GP_SAMPLE register at the specified
139rate; you get an interrupt when a full DWORD is received.
140You need to recover the actual RC5 bits out of the (oversampled) IR sensor
141bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An
142actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
143
144I'm pretty sure when no IR signal is present the receiver is always in a
145marking state(1); but stray light, etc can cause intermittent noise values
146as well. Remember, this is a free running sample of the IR receiver state
147over time, so don't assume any sample starts at any particular place.
148
149Additional info
150~~~~~~~~~~~~~~~
151
152This data sheet (google search) seems to have a lovely description of the
153RC5 basics:
154http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf
155
156This document has more data:
157http://www.nenya.be/beor/electronics/rc5.htm
158
159This document has a how to decode a bi-phase data stream:
160http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt
161
162This document has still more info:
163http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm