/* * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver * * Copyright (C) 2007 Antti Palosaari * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * TODO: * - add smart card reader support for Conditional Access (CA) * * Card reader in Anysee is nothing more than ISO 7816 card reader. * There is no hardware CAM in any Anysee device sold. * In my understanding it should be implemented by making own module * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This * module registers serial interface that can be used to communicate * with any ISO 7816 smart card. * * Any help according to implement serial smart card reader support * is highly welcome! */ #ifndef _DVB_USB_ANYSEE_H_ #define _DVB_USB_ANYSEE_H_ #define DVB_USB_LOG_PREFIX "anysee" #include "dvb-usb.h" #define deb_info(args...) dprintk(dvb_usb_anysee_debug, 0x01, args) #define deb_xfer(args...) dprintk(dvb_usb_anysee_debug, 0x02, args) #define deb_rc(args...) dprintk(dvb_usb_anysee_debug, 0x04, args) #define deb_reg(args...) dprintk(dvb_usb_anysee_debug, 0x08, args) #define deb_i2c(args...) dprintk(dvb_usb_anysee_debug, 0x10, args) #define deb_fw(args...) dprintk(dvb_usb_anysee_debug, 0x20, args) enum cmd { CMD_I2C_READ = 0x33, CMD_I2C_WRITE = 0x31, CMD_REG_READ = 0xb0, CMD_REG_WRITE = 0xb1, CMD_STREAMING_CTRL = 0x12, CMD_LED_AND_IR_CTRL = 0x16, CMD_GET_IR_CODE = 0x41, CMD_GET_HW_INFO = 0x19, CMD_SMARTCARD = 0x34, }; struct anysee_state { u8 hw; /* PCB ID */ u8 seq; u8 fe_id:1; /* frondend ID */ }; #define ANYSEE_HW_507T 2 /* E30 */ #define ANYSEE_HW_507CD 6 /* E30 Plus */ #define ANYSEE_HW_507DC 10 /* E30 C Plus */ #define ANYSEE_HW_507SI 11 /* E30 S2 Plus */ #define ANYSEE_HW_507FA 15 /* E30 Combo Plus / E30 C Plus */ #define ANYSEE_HW_508TC 18 /* E7 TC */ #define ANYSEE_HW_508S2 19 /* E7 S2 */ #define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */ #define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */ #define REG_IOA 0x80 /* Port A (bit addressable) */ #define REG_IOB 0x90 /* Port B (bit addressable) */ #define REG_IOC 0xa0 /* Port C (bit addressable) */ #define REG_IOD 0xb0 /* Port D (bit addressable) */ #define REG_IOE 0xb1 /* Port E (NOT bit addressable) */ #define REG_OEA 0xb2 /* Port A Output Enable */ #define REG_OEB 0xb3 /* Port B Output Enable */ #define REG_OEC 0xb4 /* Port C Output Enable */ #define REG_OED 0xb5 /* Port D Output Enable */ #define REG_OEE 0xb6 /* Port E Output Enable */ #endif /*************************************************************************** * USB API description (reverse engineered) *************************************************************************** Transaction flow: ================= BULK[00001] >>> REQUEST PACKET 64 bytes BULK[00081] <<< REPLY PACKET #1 64 bytes (PREVIOUS TRANSACTION REPLY) BULK[00081] <<< REPLY PACKET #2 64 bytes (CURRENT TRANSACTION REPLY) General reply packet(s) are always used if not own reply defined. ============================================================================ | 00-63 | GENERAL REPLY PACKET #1 (PREVIOUS REPLY) ============================================================================ | 00 | reply data (if any) from previous transaction | | Just same reply packet as returned during previous transaction. | | Needed only if reply is missed in previous transaction. | | Just skip normally. ---------------------------------------------------------------------------- | 01-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY) ============================================================================ | 00 | reply data (if any) ---------------------------------------------------------------------------- | 01-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | I2C WRITE REQUEST PACKET ============================================================================ | 00 | 0x31 I2C write command ---------------------------------------------------------------------------- | 01 | i2c address ---------------------------------------------------------------------------- | 02 | data length | | 0x02 (for typical I2C reg / val pair) ---------------------------------------------------------------------------- | 03 | 0x01 ---------------------------------------------------------------------------- | 04- | data ---------------------------------------------------------------------------- | -59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | I2C READ REQUEST PACKET ============================================================================ | 00 | 0x33 I2C read command ---------------------------------------------------------------------------- | 01 | i2c address + 1 ---------------------------------------------------------------------------- | 02 | register ---------------------------------------------------------------------------- | 03 | 0x00 ---------------------------------------------------------------------------- | 04 | 0x00 ---------------------------------------------------------------------------- | 05 | data length ---------------------------------------------------------------------------- | 06-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET ============================================================================ | 00 | 0xb1 register write command ---------------------------------------------------------------------------- | 01-02 | register ---------------------------------------------------------------------------- | 03 | 0x01 ---------------------------------------------------------------------------- | 04 | value ---------------------------------------------------------------------------- | 05-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET ============================================================================ | 00 | 0xb0 register read command ---------------------------------------------------------------------------- | 01-02 | register ---------------------------------------------------------------------------- | 03 | 0x01 ---------------------------------------------------------------------------- | 04-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | LED CONTROL REQUEST PACKET ============================================================================ | 00 | 0x16 LED and IR control command ---------------------------------------------------------------------------- | 01 | 0x01 (LED) ---------------------------------------------------------------------------- | 03 | 0x00 blink | | 0x01 lights continuously ---------------------------------------------------------------------------- | 04 | blink interval | | 0x00 fastest (looks like LED lights continuously) | | 0xff slowest ---------------------------------------------------------------------------- | 05-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | IR CONTROL REQUEST PACKET ============================================================================ | 00 | 0x16 LED and IR control command ---------------------------------------------------------------------------- | 01 | 0x02 (IR) ---------------------------------------------------------------------------- | 03 | 0x00 IR disabled | | 0x01 IR enabled ---------------------------------------------------------------------------- | 04-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | STREAMING CONTROL REQUEST PACKET ============================================================================ | 00 | 0x12 streaming control command ---------------------------------------------------------------------------- | 01 | 0x00 streaming disabled | | 0x01 streaming enabled ---------------------------------------------------------------------------- | 02 | 0x00 ---------------------------------------------------------------------------- | 03-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | REMOTE CONTROL REQUEST PACKET ============================================================================ | 00 | 0x41 remote control command ---------------------------------------------------------------------------- | 01-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | REMOTE CONTROL REPLY PACKET ============================================================================ | 00 | 0x00 code not received | | 0x01 code received ---------------------------------------------------------------------------- | 01 | remote control code ---------------------------------------------------------------------------- | 02-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | GET HARDWARE INFO REQUEST PACKET ============================================================================ | 00 | 0x19 get hardware info command ---------------------------------------------------------------------------- | 01-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | GET HARDWARE INFO REPLY PACKET ============================================================================ | 00 | hardware id ---------------------------------------------------------------------------- | 01-02 | firmware version ---------------------------------------------------------------------------- | 03-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- ============================================================================ | 00-63 | SMART CARD READER PACKET ============================================================================ | 00 | 0x34 smart card reader command ---------------------------------------------------------------------------- | xx | ---------------------------------------------------------------------------- | xx-59 | don't care ---------------------------------------------------------------------------- | 60 | packet sequence number ---------------------------------------------------------------------------- | 61-63 | don't care ---------------------------------------------------------------------------- */