318 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver4 *5 * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>6 *7 * TODO:8 * - add smart card reader support for Conditional Access (CA)9 *10 * Card reader in Anysee is nothing more than ISO 7816 card reader.11 * There is no hardware CAM in any Anysee device sold.12 * In my understanding it should be implemented by making own module13 * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This14 * module registers serial interface that can be used to communicate15 * with any ISO 7816 smart card.16 *17 * Any help according to implement serial smart card reader support18 * is highly welcome!19 */20 21#ifndef _DVB_USB_ANYSEE_H_22#define _DVB_USB_ANYSEE_H_23 24#define DVB_USB_LOG_PREFIX "anysee"25#include "dvb_usb.h"26#include <media/dvb_ca_en50221.h>27 28enum cmd {29 CMD_I2C_READ = 0x33,30 CMD_I2C_WRITE = 0x31,31 CMD_REG_READ = 0xb0,32 CMD_REG_WRITE = 0xb1,33 CMD_STREAMING_CTRL = 0x12,34 CMD_LED_AND_IR_CTRL = 0x16,35 CMD_GET_IR_CODE = 0x41,36 CMD_GET_HW_INFO = 0x19,37 CMD_SMARTCARD = 0x34,38 CMD_CI = 0x37,39};40 41struct anysee_state {42 u8 buf[64];43 u8 seq;44 u8 hw; /* PCB ID */45 #define ANYSEE_I2C_CLIENT_MAX 146 struct i2c_client *i2c_client[ANYSEE_I2C_CLIENT_MAX];47 u8 fe_id:1; /* frondend ID */48 u8 has_ci:1;49 u8 has_tda18212:1;50 u8 ci_attached:1;51 struct dvb_ca_en50221 ci;52 unsigned long ci_cam_ready; /* jiffies */53};54 55#define ANYSEE_HW_507T 2 /* E30 */56#define ANYSEE_HW_507CD 6 /* E30 Plus */57#define ANYSEE_HW_507DC 10 /* E30 C Plus */58#define ANYSEE_HW_507SI 11 /* E30 S2 Plus */59#define ANYSEE_HW_507FA 15 /* E30 Combo Plus / E30 C Plus */60#define ANYSEE_HW_508TC 18 /* E7 TC */61#define ANYSEE_HW_508S2 19 /* E7 S2 */62#define ANYSEE_HW_508T2C 20 /* E7 T2C */63#define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */64#define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */65 66#define REG_IOA 0x80 /* Port A (bit addressable) */67#define REG_IOB 0x90 /* Port B (bit addressable) */68#define REG_IOC 0xa0 /* Port C (bit addressable) */69#define REG_IOD 0xb0 /* Port D (bit addressable) */70#define REG_IOE 0xb1 /* Port E (NOT bit addressable) */71#define REG_OEA 0xb2 /* Port A Output Enable */72#define REG_OEB 0xb3 /* Port B Output Enable */73#define REG_OEC 0xb4 /* Port C Output Enable */74#define REG_OED 0xb5 /* Port D Output Enable */75#define REG_OEE 0xb6 /* Port E Output Enable */76 77#endif78 79/***************************************************************************80 * USB API description (reverse engineered)81 ***************************************************************************82 83Transaction flow:84=================85BULK[00001] >>> REQUEST PACKET 64 bytes86BULK[00081] <<< REPLY PACKET #1 64 bytes (PREVIOUS TRANSACTION REPLY)87BULK[00081] <<< REPLY PACKET #2 64 bytes (CURRENT TRANSACTION REPLY)88 89General reply packet(s) are always used if not own reply defined.90 91============================================================================92| 00-63 | GENERAL REPLY PACKET #1 (PREVIOUS REPLY)93============================================================================94| 00 | reply data (if any) from previous transaction95| | Just same reply packet as returned during previous transaction.96| | Needed only if reply is missed in previous transaction.97| | Just skip normally.98----------------------------------------------------------------------------99| 01-59 | don't care100----------------------------------------------------------------------------101| 60 | packet sequence number102----------------------------------------------------------------------------103| 61-63 | don't care104----------------------------------------------------------------------------105 106============================================================================107| 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY)108============================================================================109| 00 | reply data (if any)110----------------------------------------------------------------------------111| 01-59 | don't care112----------------------------------------------------------------------------113| 60 | packet sequence number114----------------------------------------------------------------------------115| 61-63 | don't care116----------------------------------------------------------------------------117 118============================================================================119| 00-63 | I2C WRITE REQUEST PACKET120============================================================================121| 00 | 0x31 I2C write command122----------------------------------------------------------------------------123| 01 | i2c address124----------------------------------------------------------------------------125| 02 | data length126| | 0x02 (for typical I2C reg / val pair)127----------------------------------------------------------------------------128| 03 | 0x01129----------------------------------------------------------------------------130| 04- | data131----------------------------------------------------------------------------132| -59 | don't care133----------------------------------------------------------------------------134| 60 | packet sequence number135----------------------------------------------------------------------------136| 61-63 | don't care137----------------------------------------------------------------------------138 139============================================================================140| 00-63 | I2C READ REQUEST PACKET141============================================================================142| 00 | 0x33 I2C read command143----------------------------------------------------------------------------144| 01 | i2c address + 1145----------------------------------------------------------------------------146| 02 | register147----------------------------------------------------------------------------148| 03 | 0x00149----------------------------------------------------------------------------150| 04 | 0x00151----------------------------------------------------------------------------152| 05 | data length153----------------------------------------------------------------------------154| 06-59 | don't care155----------------------------------------------------------------------------156| 60 | packet sequence number157----------------------------------------------------------------------------158| 61-63 | don't care159----------------------------------------------------------------------------160 161============================================================================162| 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET163============================================================================164| 00 | 0xb1 register write command165----------------------------------------------------------------------------166| 01-02 | register167----------------------------------------------------------------------------168| 03 | 0x01169----------------------------------------------------------------------------170| 04 | value171----------------------------------------------------------------------------172| 05-59 | don't care173----------------------------------------------------------------------------174| 60 | packet sequence number175----------------------------------------------------------------------------176| 61-63 | don't care177----------------------------------------------------------------------------178 179============================================================================180| 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET181============================================================================182| 00 | 0xb0 register read command183----------------------------------------------------------------------------184| 01-02 | register185----------------------------------------------------------------------------186| 03 | 0x01187----------------------------------------------------------------------------188| 04-59 | don't care189----------------------------------------------------------------------------190| 60 | packet sequence number191----------------------------------------------------------------------------192| 61-63 | don't care193----------------------------------------------------------------------------194 195============================================================================196| 00-63 | LED CONTROL REQUEST PACKET197============================================================================198| 00 | 0x16 LED and IR control command199----------------------------------------------------------------------------200| 01 | 0x01 (LED)201----------------------------------------------------------------------------202| 03 | 0x00 blink203| | 0x01 lights continuously204----------------------------------------------------------------------------205| 04 | blink interval206| | 0x00 fastest (looks like LED lights continuously)207| | 0xff slowest208----------------------------------------------------------------------------209| 05-59 | don't care210----------------------------------------------------------------------------211| 60 | packet sequence number212----------------------------------------------------------------------------213| 61-63 | don't care214----------------------------------------------------------------------------215 216============================================================================217| 00-63 | IR CONTROL REQUEST PACKET218============================================================================219| 00 | 0x16 LED and IR control command220----------------------------------------------------------------------------221| 01 | 0x02 (IR)222----------------------------------------------------------------------------223| 03 | 0x00 IR disabled224| | 0x01 IR enabled225----------------------------------------------------------------------------226| 04-59 | don't care227----------------------------------------------------------------------------228| 60 | packet sequence number229----------------------------------------------------------------------------230| 61-63 | don't care231----------------------------------------------------------------------------232 233============================================================================234| 00-63 | STREAMING CONTROL REQUEST PACKET235============================================================================236| 00 | 0x12 streaming control command237----------------------------------------------------------------------------238| 01 | 0x00 streaming disabled239| | 0x01 streaming enabled240----------------------------------------------------------------------------241| 02 | 0x00242----------------------------------------------------------------------------243| 03-59 | don't care244----------------------------------------------------------------------------245| 60 | packet sequence number246----------------------------------------------------------------------------247| 61-63 | don't care248----------------------------------------------------------------------------249 250============================================================================251| 00-63 | REMOTE CONTROL REQUEST PACKET252============================================================================253| 00 | 0x41 remote control command254----------------------------------------------------------------------------255| 01-59 | don't care256----------------------------------------------------------------------------257| 60 | packet sequence number258----------------------------------------------------------------------------259| 61-63 | don't care260----------------------------------------------------------------------------261 262============================================================================263| 00-63 | REMOTE CONTROL REPLY PACKET264============================================================================265| 00 | 0x00 code not received266| | 0x01 code received267----------------------------------------------------------------------------268| 01 | remote control code269----------------------------------------------------------------------------270| 02-59 | don't care271----------------------------------------------------------------------------272| 60 | packet sequence number273----------------------------------------------------------------------------274| 61-63 | don't care275----------------------------------------------------------------------------276 277============================================================================278| 00-63 | GET HARDWARE INFO REQUEST PACKET279============================================================================280| 00 | 0x19 get hardware info command281----------------------------------------------------------------------------282| 01-59 | don't care283----------------------------------------------------------------------------284| 60 | packet sequence number285----------------------------------------------------------------------------286| 61-63 | don't care287----------------------------------------------------------------------------288 289============================================================================290| 00-63 | GET HARDWARE INFO REPLY PACKET291============================================================================292| 00 | hardware id293----------------------------------------------------------------------------294| 01-02 | firmware version295----------------------------------------------------------------------------296| 03-59 | don't care297----------------------------------------------------------------------------298| 60 | packet sequence number299----------------------------------------------------------------------------300| 61-63 | don't care301----------------------------------------------------------------------------302 303============================================================================304| 00-63 | SMART CARD READER PACKET305============================================================================306| 00 | 0x34 smart card reader command307----------------------------------------------------------------------------308| xx |309----------------------------------------------------------------------------310| xx-59 | don't care311----------------------------------------------------------------------------312| 60 | packet sequence number313----------------------------------------------------------------------------314| 61-63 | don't care315----------------------------------------------------------------------------316 317*/318