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