162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ciThe cx88 driver
462306a36Sopenharmony_ci===============
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciAuthor:  Gerd Hoffmann
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciDocumentation missing at the cx88 datasheet
962306a36Sopenharmony_ci-------------------------------------------
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciMO_OUTPUT_FORMAT (0x310164)
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci.. code-block:: none
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci  Previous default from DScaler: 0x1c1f0008
1662306a36Sopenharmony_ci  Digit 8: 31-28
1762306a36Sopenharmony_ci  28: PREVREMOD = 1
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci  Digit 7: 27-24 (0xc = 12 = b1100 )
2062306a36Sopenharmony_ci  27: COMBALT = 1
2162306a36Sopenharmony_ci  26: PAL_INV_PHASE
2262306a36Sopenharmony_ci    (DScaler apparently set this to 1, resulted in sucky picture)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci  Digits 6,5: 23-16
2562306a36Sopenharmony_ci  25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512)
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci  Digit 4: 15-12
2862306a36Sopenharmony_ci  15: DISIFX = 0
2962306a36Sopenharmony_ci  14: INVCBF = 0
3062306a36Sopenharmony_ci  13: DISADAPT = 0
3162306a36Sopenharmony_ci  12: NARROWADAPT = 0
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci  Digit 3: 11-8
3462306a36Sopenharmony_ci  11: FORCE2H
3562306a36Sopenharmony_ci  10: FORCEREMD
3662306a36Sopenharmony_ci  9: NCHROMAEN
3762306a36Sopenharmony_ci  8: NREMODEN
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  Digit 2: 7-4
4062306a36Sopenharmony_ci  7-6: YCORE
4162306a36Sopenharmony_ci  5-4: CCORE
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  Digit 1: 3-0
4462306a36Sopenharmony_ci  3: RANGE = 1
4562306a36Sopenharmony_ci  2: HACTEXT
4662306a36Sopenharmony_ci  1: HSFMT
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci0x47 is the sync byte for MPEG-2 transport stream packets.
4962306a36Sopenharmony_ciDatasheet incorrectly states to use 47 decimal. 188 is the length.
5062306a36Sopenharmony_ciAll DVB compliant frontends output packets with this start code.
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciHauppauge WinTV cx88 IR information
5362306a36Sopenharmony_ci-----------------------------------
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciThe controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting.
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci====== ======== =================================================
5862306a36Sopenharmony_ciGPIO0  GPIO1
5962306a36Sopenharmony_ci====== ======== =================================================
6062306a36Sopenharmony_ci  0        0    TV Audio
6162306a36Sopenharmony_ci  1        0    FM radio
6262306a36Sopenharmony_ci  0        1    Line-In
6362306a36Sopenharmony_ci  1        1    Mono tuner bypass or CD passthru (tuner specific)
6462306a36Sopenharmony_ci====== ======== =================================================
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciGPIO 16(I believe) is tied to the IR port (if present).
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ciFrom the data sheet:
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci- Register 24'h20004  PCI Interrupt Status
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci - bit [18]  IR_SMP_INT Set when 32 input samples have been collected over
7462306a36Sopenharmony_ci - gpio[16] pin into GP_SAMPLE register.
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ciWhat's missing from the data sheet:
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci- Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5
7962306a36Sopenharmony_ci  compat remote)
8062306a36Sopenharmony_ci- set register 0x35C050 to  0xa80a80
8162306a36Sopenharmony_ci- enable sampling
8262306a36Sopenharmony_ci- set register 0x35C054 to 0x5
8362306a36Sopenharmony_ci- enable the IRQ bit 18 in the interrupt mask register (and
8462306a36Sopenharmony_ci  provide for a handler)
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciGP_SAMPLE register is at 0x35C058
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciBits are then right shifted into the GP_SAMPLE register at the specified
8962306a36Sopenharmony_cirate; you get an interrupt when a full DWORD is received.
9062306a36Sopenharmony_ciYou need to recover the actual RC5 bits out of the (oversampled) IR sensor
9162306a36Sopenharmony_cibits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data)  An
9262306a36Sopenharmony_ciactual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciI'm pretty sure when no IR signal is present the receiver is always in a
9562306a36Sopenharmony_cimarking state(1); but stray light, etc can cause intermittent noise values
9662306a36Sopenharmony_cias well.  Remember, this is a free running sample of the IR receiver state
9762306a36Sopenharmony_ciover time, so don't assume any sample starts at any particular place.
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciAdditional info
10062306a36Sopenharmony_ci~~~~~~~~~~~~~~~
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ciThis data sheet (google search) seems to have a lovely description of the
10362306a36Sopenharmony_ciRC5 basics:
10462306a36Sopenharmony_cihttp://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciThis document has more data:
10762306a36Sopenharmony_cihttp://www.nenya.be/beor/electronics/rc5.htm
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ciThis document has a  how to decode a bi-phase data stream:
11062306a36Sopenharmony_cihttp://www.ee.washington.edu/circuit_archive/text/ir_decode.txt
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ciThis document has still more info:
11362306a36Sopenharmony_cihttp://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm
114