123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- The cx88 driver
- ===============
- Author: Gerd Hoffmann
- This is a v4l2 device driver for the cx2388x chip.
- Current status
- video
- - Works.
- - Overlay isn't supported.
- audio
- - Works. The TV standard detection is made by the driver, as the
- hardware has bugs to auto-detect.
- - audio data dma (i.e. recording without loopback cable to the
- sound card) is supported via cx88-alsa.
- vbi
- - Works.
- How to add support for new cards
- The driver needs some config info for the TV cards. This stuff is in
- cx88-cards.c. If the driver doesn't work well you likely need a new
- entry for your card in that file. Check the kernel log (using dmesg)
- to see whenever the driver knows your card or not. There is a line
- like this one:
- .. code-block:: none
- cx8800[0]: subsystem: 0070:3400, board: Hauppauge WinTV \
- 34xxx models [card=1,autodetected]
- If your card is listed as "board: UNKNOWN/GENERIC" it is unknown to
- the driver. What to do then?
- 1) Try upgrading to the latest snapshot, maybe it has been added
- meanwhile.
- 2) You can try to create a new entry yourself, have a look at
- cx88-cards.c. If that worked, mail me your changes as unified
- diff ("diff -u").
- 3) Or you can mail me the config information. We need at least the
- following information to add the card:
- - the PCI Subsystem ID ("0070:3400" from the line above,
- "lspci -v" output is fine too).
- - the tuner type used by the card. You can try to find one by
- trial-and-error using the tuner=<n> insmod option. If you
- know which one the card has you can also have a look at the
- list in CARDLIST.tuner
- Documentation missing at the cx88 datasheet
- MO_OUTPUT_FORMAT (0x310164)
- .. code-block:: none
- Previous default from DScaler: 0x1c1f0008
- Digit 8: 31-28
- 28: PREVREMOD = 1
- Digit 7: 27-24 (0xc = 12 = b1100 )
- 27: COMBALT = 1
- 26: PAL_INV_PHASE
- (DScaler apparently set this to 1, resulted in sucky picture)
- Digits 6,5: 23-16
- 25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512)
- Digit 4: 15-12
- 15: DISIFX = 0
- 14: INVCBF = 0
- 13: DISADAPT = 0
- 12: NARROWADAPT = 0
- Digit 3: 11-8
- 11: FORCE2H
- 10: FORCEREMD
- 9: NCHROMAEN
- 8: NREMODEN
- Digit 2: 7-4
- 7-6: YCORE
- 5-4: CCORE
- Digit 1: 3-0
- 3: RANGE = 1
- 2: HACTEXT
- 1: HSFMT
- 0x47 is the sync byte for MPEG-2 transport stream packets.
- Datasheet incorrectly states to use 47 decimal. 188 is the length.
- All DVB compliant frontends output packets with this start code.
- Hauppauge WinTV cx88 IR information
- The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting.
- ====== ======== =================================================
- GPIO0 GPIO1
- ====== ======== =================================================
- 0 0 TV Audio
- 1 0 FM radio
- 0 1 Line-In
- 1 1 Mono tuner bypass or CD passthru (tuner specific)
- ====== ======== =================================================
- GPIO 16(I believe) is tied to the IR port (if present).
- From the data sheet:
- - Register 24'h20004 PCI Interrupt Status
- - bit [18] IR_SMP_INT Set when 32 input samples have been collected over
- - gpio[16] pin into GP_SAMPLE register.
- What's missing from the data sheet:
- - Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5
- compat remote)
- - set register 0x35C050 to 0xa80a80
- - enable sampling
- - set register 0x35C054 to 0x5
- - enable the IRQ bit 18 in the interrupt mask register (and
- provide for a handler)
- GP_SAMPLE register is at 0x35C058
- Bits are then right shifted into the GP_SAMPLE register at the specified
- rate; you get an interrupt when a full DWORD is received.
- You need to recover the actual RC5 bits out of the (oversampled) IR sensor
- bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An
- actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
- I'm pretty sure when no IR signal is present the receiver is always in a
- marking state(1); but stray light, etc can cause intermittent noise values
- as well. Remember, this is a free running sample of the IR receiver state
- over time, so don't assume any sample starts at any particular place.
- Additional info
- ~~~~~~~~~~~~~~~
- This data sheet (google search) seems to have a lovely description of the
- RC5 basics:
- http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf
- This document has more data:
- http://www.nenya.be/beor/electronics/rc5.htm
- This document has a how to decode a bi-phase data stream:
- http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt
- This document has still more info:
- http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm
|