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