18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * TODO:
88c2ecf20Sopenharmony_ci * - add smart card reader support for Conditional Access (CA)
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci * Card reader in Anysee is nothing more than ISO 7816 card reader.
118c2ecf20Sopenharmony_ci * There is no hardware CAM in any Anysee device sold.
128c2ecf20Sopenharmony_ci * In my understanding it should be implemented by making own module
138c2ecf20Sopenharmony_ci * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
148c2ecf20Sopenharmony_ci * module registers serial interface that can be used to communicate
158c2ecf20Sopenharmony_ci * with any ISO 7816 smart card.
168c2ecf20Sopenharmony_ci *
178c2ecf20Sopenharmony_ci * Any help according to implement serial smart card reader support
188c2ecf20Sopenharmony_ci * is highly welcome!
198c2ecf20Sopenharmony_ci */
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#ifndef _DVB_USB_ANYSEE_H_
228c2ecf20Sopenharmony_ci#define _DVB_USB_ANYSEE_H_
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define DVB_USB_LOG_PREFIX "anysee"
258c2ecf20Sopenharmony_ci#include "dvb_usb.h"
268c2ecf20Sopenharmony_ci#include <media/dvb_ca_en50221.h>
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cienum cmd {
298c2ecf20Sopenharmony_ci	CMD_I2C_READ            = 0x33,
308c2ecf20Sopenharmony_ci	CMD_I2C_WRITE           = 0x31,
318c2ecf20Sopenharmony_ci	CMD_REG_READ            = 0xb0,
328c2ecf20Sopenharmony_ci	CMD_REG_WRITE           = 0xb1,
338c2ecf20Sopenharmony_ci	CMD_STREAMING_CTRL      = 0x12,
348c2ecf20Sopenharmony_ci	CMD_LED_AND_IR_CTRL     = 0x16,
358c2ecf20Sopenharmony_ci	CMD_GET_IR_CODE         = 0x41,
368c2ecf20Sopenharmony_ci	CMD_GET_HW_INFO         = 0x19,
378c2ecf20Sopenharmony_ci	CMD_SMARTCARD           = 0x34,
388c2ecf20Sopenharmony_ci	CMD_CI                  = 0x37,
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cistruct anysee_state {
428c2ecf20Sopenharmony_ci	u8 buf[64];
438c2ecf20Sopenharmony_ci	u8 seq;
448c2ecf20Sopenharmony_ci	u8 hw; /* PCB ID */
458c2ecf20Sopenharmony_ci	#define ANYSEE_I2C_CLIENT_MAX 1
468c2ecf20Sopenharmony_ci	struct i2c_client *i2c_client[ANYSEE_I2C_CLIENT_MAX];
478c2ecf20Sopenharmony_ci	u8 fe_id:1; /* frondend ID */
488c2ecf20Sopenharmony_ci	u8 has_ci:1;
498c2ecf20Sopenharmony_ci	u8 has_tda18212:1;
508c2ecf20Sopenharmony_ci	u8 ci_attached:1;
518c2ecf20Sopenharmony_ci	struct dvb_ca_en50221 ci;
528c2ecf20Sopenharmony_ci	unsigned long ci_cam_ready; /* jiffies */
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci#define ANYSEE_HW_507T    2 /* E30 */
568c2ecf20Sopenharmony_ci#define ANYSEE_HW_507CD   6 /* E30 Plus */
578c2ecf20Sopenharmony_ci#define ANYSEE_HW_507DC  10 /* E30 C Plus */
588c2ecf20Sopenharmony_ci#define ANYSEE_HW_507SI  11 /* E30 S2 Plus */
598c2ecf20Sopenharmony_ci#define ANYSEE_HW_507FA  15 /* E30 Combo Plus / E30 C Plus */
608c2ecf20Sopenharmony_ci#define ANYSEE_HW_508TC  18 /* E7 TC */
618c2ecf20Sopenharmony_ci#define ANYSEE_HW_508S2  19 /* E7 S2 */
628c2ecf20Sopenharmony_ci#define ANYSEE_HW_508T2C 20 /* E7 T2C */
638c2ecf20Sopenharmony_ci#define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */
648c2ecf20Sopenharmony_ci#define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci#define REG_IOA       0x80 /* Port A (bit addressable) */
678c2ecf20Sopenharmony_ci#define REG_IOB       0x90 /* Port B (bit addressable) */
688c2ecf20Sopenharmony_ci#define REG_IOC       0xa0 /* Port C (bit addressable) */
698c2ecf20Sopenharmony_ci#define REG_IOD       0xb0 /* Port D (bit addressable) */
708c2ecf20Sopenharmony_ci#define REG_IOE       0xb1 /* Port E (NOT bit addressable) */
718c2ecf20Sopenharmony_ci#define REG_OEA       0xb2 /* Port A Output Enable */
728c2ecf20Sopenharmony_ci#define REG_OEB       0xb3 /* Port B Output Enable */
738c2ecf20Sopenharmony_ci#define REG_OEC       0xb4 /* Port C Output Enable */
748c2ecf20Sopenharmony_ci#define REG_OED       0xb5 /* Port D Output Enable */
758c2ecf20Sopenharmony_ci#define REG_OEE       0xb6 /* Port E Output Enable */
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci#endif
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci/***************************************************************************
808c2ecf20Sopenharmony_ci * USB API description (reverse engineered)
818c2ecf20Sopenharmony_ci ***************************************************************************
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciTransaction flow:
848c2ecf20Sopenharmony_ci=================
858c2ecf20Sopenharmony_ciBULK[00001] >>> REQUEST PACKET 64 bytes
868c2ecf20Sopenharmony_ciBULK[00081] <<< REPLY PACKET #1 64 bytes (PREVIOUS TRANSACTION REPLY)
878c2ecf20Sopenharmony_ciBULK[00081] <<< REPLY PACKET #2 64 bytes (CURRENT TRANSACTION REPLY)
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ciGeneral reply packet(s) are always used if not own reply defined.
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci============================================================================
928c2ecf20Sopenharmony_ci| 00-63 | GENERAL REPLY PACKET #1 (PREVIOUS REPLY)
938c2ecf20Sopenharmony_ci============================================================================
948c2ecf20Sopenharmony_ci|    00 | reply data (if any) from previous transaction
958c2ecf20Sopenharmony_ci|       | Just same reply packet as returned during previous transaction.
968c2ecf20Sopenharmony_ci|       | Needed only if reply is missed in previous transaction.
978c2ecf20Sopenharmony_ci|       | Just skip normally.
988c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
998c2ecf20Sopenharmony_ci| 01-59 | don't care
1008c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1018c2ecf20Sopenharmony_ci|    60 | packet sequence number
1028c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1038c2ecf20Sopenharmony_ci| 61-63 | don't care
1048c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci============================================================================
1078c2ecf20Sopenharmony_ci| 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY)
1088c2ecf20Sopenharmony_ci============================================================================
1098c2ecf20Sopenharmony_ci|    00 | reply data (if any)
1108c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1118c2ecf20Sopenharmony_ci| 01-59 | don't care
1128c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1138c2ecf20Sopenharmony_ci|    60 | packet sequence number
1148c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1158c2ecf20Sopenharmony_ci| 61-63 | don't care
1168c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci============================================================================
1198c2ecf20Sopenharmony_ci| 00-63 | I2C WRITE REQUEST PACKET
1208c2ecf20Sopenharmony_ci============================================================================
1218c2ecf20Sopenharmony_ci|    00 | 0x31 I2C write command
1228c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1238c2ecf20Sopenharmony_ci|    01 | i2c address
1248c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1258c2ecf20Sopenharmony_ci|    02 | data length
1268c2ecf20Sopenharmony_ci|       | 0x02 (for typical I2C reg / val pair)
1278c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1288c2ecf20Sopenharmony_ci|    03 | 0x01
1298c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1308c2ecf20Sopenharmony_ci| 04-   | data
1318c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1328c2ecf20Sopenharmony_ci|   -59 | don't care
1338c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1348c2ecf20Sopenharmony_ci|    60 | packet sequence number
1358c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1368c2ecf20Sopenharmony_ci| 61-63 | don't care
1378c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci============================================================================
1408c2ecf20Sopenharmony_ci| 00-63 | I2C READ REQUEST PACKET
1418c2ecf20Sopenharmony_ci============================================================================
1428c2ecf20Sopenharmony_ci|    00 | 0x33 I2C read command
1438c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1448c2ecf20Sopenharmony_ci|    01 | i2c address + 1
1458c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1468c2ecf20Sopenharmony_ci|    02 | register
1478c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1488c2ecf20Sopenharmony_ci|    03 | 0x00
1498c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1508c2ecf20Sopenharmony_ci|    04 | 0x00
1518c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1528c2ecf20Sopenharmony_ci|    05 | data length
1538c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1548c2ecf20Sopenharmony_ci| 06-59 | don't care
1558c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1568c2ecf20Sopenharmony_ci|    60 | packet sequence number
1578c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1588c2ecf20Sopenharmony_ci| 61-63 | don't care
1598c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_ci============================================================================
1628c2ecf20Sopenharmony_ci| 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET
1638c2ecf20Sopenharmony_ci============================================================================
1648c2ecf20Sopenharmony_ci|    00 | 0xb1 register write command
1658c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1668c2ecf20Sopenharmony_ci| 01-02 | register
1678c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1688c2ecf20Sopenharmony_ci|    03 | 0x01
1698c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1708c2ecf20Sopenharmony_ci|    04 | value
1718c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1728c2ecf20Sopenharmony_ci| 05-59 | don't care
1738c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1748c2ecf20Sopenharmony_ci|    60 | packet sequence number
1758c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1768c2ecf20Sopenharmony_ci| 61-63 | don't care
1778c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci============================================================================
1808c2ecf20Sopenharmony_ci| 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET
1818c2ecf20Sopenharmony_ci============================================================================
1828c2ecf20Sopenharmony_ci|    00 | 0xb0 register read command
1838c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1848c2ecf20Sopenharmony_ci| 01-02 | register
1858c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1868c2ecf20Sopenharmony_ci|    03 | 0x01
1878c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1888c2ecf20Sopenharmony_ci| 04-59 | don't care
1898c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1908c2ecf20Sopenharmony_ci|    60 | packet sequence number
1918c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1928c2ecf20Sopenharmony_ci| 61-63 | don't care
1938c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci============================================================================
1968c2ecf20Sopenharmony_ci| 00-63 | LED CONTROL REQUEST PACKET
1978c2ecf20Sopenharmony_ci============================================================================
1988c2ecf20Sopenharmony_ci|    00 | 0x16 LED and IR control command
1998c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2008c2ecf20Sopenharmony_ci|    01 | 0x01 (LED)
2018c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2028c2ecf20Sopenharmony_ci|    03 | 0x00 blink
2038c2ecf20Sopenharmony_ci|       | 0x01 lights continuously
2048c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2058c2ecf20Sopenharmony_ci|    04 | blink interval
2068c2ecf20Sopenharmony_ci|       | 0x00 fastest (looks like LED lights continuously)
2078c2ecf20Sopenharmony_ci|       | 0xff slowest
2088c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2098c2ecf20Sopenharmony_ci| 05-59 | don't care
2108c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2118c2ecf20Sopenharmony_ci|    60 | packet sequence number
2128c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2138c2ecf20Sopenharmony_ci| 61-63 | don't care
2148c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2158c2ecf20Sopenharmony_ci
2168c2ecf20Sopenharmony_ci============================================================================
2178c2ecf20Sopenharmony_ci| 00-63 | IR CONTROL REQUEST PACKET
2188c2ecf20Sopenharmony_ci============================================================================
2198c2ecf20Sopenharmony_ci|    00 | 0x16 LED and IR control command
2208c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2218c2ecf20Sopenharmony_ci|    01 | 0x02 (IR)
2228c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2238c2ecf20Sopenharmony_ci|    03 | 0x00 IR disabled
2248c2ecf20Sopenharmony_ci|       | 0x01 IR enabled
2258c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2268c2ecf20Sopenharmony_ci| 04-59 | don't care
2278c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2288c2ecf20Sopenharmony_ci|    60 | packet sequence number
2298c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2308c2ecf20Sopenharmony_ci| 61-63 | don't care
2318c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_ci============================================================================
2348c2ecf20Sopenharmony_ci| 00-63 | STREAMING CONTROL REQUEST PACKET
2358c2ecf20Sopenharmony_ci============================================================================
2368c2ecf20Sopenharmony_ci|    00 | 0x12 streaming control command
2378c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2388c2ecf20Sopenharmony_ci|    01 | 0x00 streaming disabled
2398c2ecf20Sopenharmony_ci|       | 0x01 streaming enabled
2408c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2418c2ecf20Sopenharmony_ci|    02 | 0x00
2428c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2438c2ecf20Sopenharmony_ci| 03-59 | don't care
2448c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2458c2ecf20Sopenharmony_ci|    60 | packet sequence number
2468c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2478c2ecf20Sopenharmony_ci| 61-63 | don't care
2488c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ci============================================================================
2518c2ecf20Sopenharmony_ci| 00-63 | REMOTE CONTROL REQUEST PACKET
2528c2ecf20Sopenharmony_ci============================================================================
2538c2ecf20Sopenharmony_ci|    00 | 0x41 remote control command
2548c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2558c2ecf20Sopenharmony_ci| 01-59 | don't care
2568c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2578c2ecf20Sopenharmony_ci|    60 | packet sequence number
2588c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2598c2ecf20Sopenharmony_ci| 61-63 | don't care
2608c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_ci============================================================================
2638c2ecf20Sopenharmony_ci| 00-63 | REMOTE CONTROL REPLY PACKET
2648c2ecf20Sopenharmony_ci============================================================================
2658c2ecf20Sopenharmony_ci|    00 | 0x00 code not received
2668c2ecf20Sopenharmony_ci|       | 0x01 code received
2678c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2688c2ecf20Sopenharmony_ci|    01 | remote control code
2698c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2708c2ecf20Sopenharmony_ci| 02-59 | don't care
2718c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2728c2ecf20Sopenharmony_ci|    60 | packet sequence number
2738c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2748c2ecf20Sopenharmony_ci| 61-63 | don't care
2758c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ci============================================================================
2788c2ecf20Sopenharmony_ci| 00-63 | GET HARDWARE INFO REQUEST PACKET
2798c2ecf20Sopenharmony_ci============================================================================
2808c2ecf20Sopenharmony_ci|    00 | 0x19 get hardware info command
2818c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2828c2ecf20Sopenharmony_ci| 01-59 | don't care
2838c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2848c2ecf20Sopenharmony_ci|    60 | packet sequence number
2858c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2868c2ecf20Sopenharmony_ci| 61-63 | don't care
2878c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2888c2ecf20Sopenharmony_ci
2898c2ecf20Sopenharmony_ci============================================================================
2908c2ecf20Sopenharmony_ci| 00-63 | GET HARDWARE INFO REPLY PACKET
2918c2ecf20Sopenharmony_ci============================================================================
2928c2ecf20Sopenharmony_ci|    00 | hardware id
2938c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2948c2ecf20Sopenharmony_ci| 01-02 | firmware version
2958c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2968c2ecf20Sopenharmony_ci| 03-59 | don't care
2978c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
2988c2ecf20Sopenharmony_ci|    60 | packet sequence number
2998c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3008c2ecf20Sopenharmony_ci| 61-63 | don't care
3018c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3028c2ecf20Sopenharmony_ci
3038c2ecf20Sopenharmony_ci============================================================================
3048c2ecf20Sopenharmony_ci| 00-63 | SMART CARD READER PACKET
3058c2ecf20Sopenharmony_ci============================================================================
3068c2ecf20Sopenharmony_ci|    00 | 0x34 smart card reader command
3078c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3088c2ecf20Sopenharmony_ci|    xx |
3098c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3108c2ecf20Sopenharmony_ci| xx-59 | don't care
3118c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3128c2ecf20Sopenharmony_ci|    60 | packet sequence number
3138c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3148c2ecf20Sopenharmony_ci| 61-63 | don't care
3158c2ecf20Sopenharmony_ci----------------------------------------------------------------------------
3168c2ecf20Sopenharmony_ci
3178c2ecf20Sopenharmony_ci*/
318