linux/drivers/media/usb/dvb-usb-v2/anysee.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver
   4 *
   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 module
  13 * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
  14 * module registers serial interface that can be used to communicate
  15 * with any ISO 7816 smart card.
  16 *
  17 * Any help according to implement serial smart card reader support
  18 * 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 1
  46        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#endif
  78
  79/***************************************************************************
  80 * USB API description (reverse engineered)
  81 ***************************************************************************
  82
  83Transaction flow:
  84=================
  85BULK[00001] >>> REQUEST PACKET 64 bytes
  86BULK[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 transaction
  95|       | 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 care
 100----------------------------------------------------------------------------
 101|    60 | packet sequence number
 102----------------------------------------------------------------------------
 103| 61-63 | don't care
 104----------------------------------------------------------------------------
 105
 106============================================================================
 107| 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY)
 108============================================================================
 109|    00 | reply data (if any)
 110----------------------------------------------------------------------------
 111| 01-59 | don't care
 112----------------------------------------------------------------------------
 113|    60 | packet sequence number
 114----------------------------------------------------------------------------
 115| 61-63 | don't care
 116----------------------------------------------------------------------------
 117
 118============================================================================
 119| 00-63 | I2C WRITE REQUEST PACKET
 120============================================================================
 121|    00 | 0x31 I2C write command
 122----------------------------------------------------------------------------
 123|    01 | i2c address
 124----------------------------------------------------------------------------
 125|    02 | data length
 126|       | 0x02 (for typical I2C reg / val pair)
 127----------------------------------------------------------------------------
 128|    03 | 0x01
 129----------------------------------------------------------------------------
 130| 04-   | data
 131----------------------------------------------------------------------------
 132|   -59 | don't care
 133----------------------------------------------------------------------------
 134|    60 | packet sequence number
 135----------------------------------------------------------------------------
 136| 61-63 | don't care
 137----------------------------------------------------------------------------
 138
 139============================================================================
 140| 00-63 | I2C READ REQUEST PACKET
 141============================================================================
 142|    00 | 0x33 I2C read command
 143----------------------------------------------------------------------------
 144|    01 | i2c address + 1
 145----------------------------------------------------------------------------
 146|    02 | register
 147----------------------------------------------------------------------------
 148|    03 | 0x00
 149----------------------------------------------------------------------------
 150|    04 | 0x00
 151----------------------------------------------------------------------------
 152|    05 | data length
 153----------------------------------------------------------------------------
 154| 06-59 | don't care
 155----------------------------------------------------------------------------
 156|    60 | packet sequence number
 157----------------------------------------------------------------------------
 158| 61-63 | don't care
 159----------------------------------------------------------------------------
 160
 161============================================================================
 162| 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET
 163============================================================================
 164|    00 | 0xb1 register write command
 165----------------------------------------------------------------------------
 166| 01-02 | register
 167----------------------------------------------------------------------------
 168|    03 | 0x01
 169----------------------------------------------------------------------------
 170|    04 | value
 171----------------------------------------------------------------------------
 172| 05-59 | don't care
 173----------------------------------------------------------------------------
 174|    60 | packet sequence number
 175----------------------------------------------------------------------------
 176| 61-63 | don't care
 177----------------------------------------------------------------------------
 178
 179============================================================================
 180| 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET
 181============================================================================
 182|    00 | 0xb0 register read command
 183----------------------------------------------------------------------------
 184| 01-02 | register
 185----------------------------------------------------------------------------
 186|    03 | 0x01
 187----------------------------------------------------------------------------
 188| 04-59 | don't care
 189----------------------------------------------------------------------------
 190|    60 | packet sequence number
 191----------------------------------------------------------------------------
 192| 61-63 | don't care
 193----------------------------------------------------------------------------
 194
 195============================================================================
 196| 00-63 | LED CONTROL REQUEST PACKET
 197============================================================================
 198|    00 | 0x16 LED and IR control command
 199----------------------------------------------------------------------------
 200|    01 | 0x01 (LED)
 201----------------------------------------------------------------------------
 202|    03 | 0x00 blink
 203|       | 0x01 lights continuously
 204----------------------------------------------------------------------------
 205|    04 | blink interval
 206|       | 0x00 fastest (looks like LED lights continuously)
 207|       | 0xff slowest
 208----------------------------------------------------------------------------
 209| 05-59 | don't care
 210----------------------------------------------------------------------------
 211|    60 | packet sequence number
 212----------------------------------------------------------------------------
 213| 61-63 | don't care
 214----------------------------------------------------------------------------
 215
 216============================================================================
 217| 00-63 | IR CONTROL REQUEST PACKET
 218============================================================================
 219|    00 | 0x16 LED and IR control command
 220----------------------------------------------------------------------------
 221|    01 | 0x02 (IR)
 222----------------------------------------------------------------------------
 223|    03 | 0x00 IR disabled
 224|       | 0x01 IR enabled
 225----------------------------------------------------------------------------
 226| 04-59 | don't care
 227----------------------------------------------------------------------------
 228|    60 | packet sequence number
 229----------------------------------------------------------------------------
 230| 61-63 | don't care
 231----------------------------------------------------------------------------
 232
 233============================================================================
 234| 00-63 | STREAMING CONTROL REQUEST PACKET
 235============================================================================
 236|    00 | 0x12 streaming control command
 237----------------------------------------------------------------------------
 238|    01 | 0x00 streaming disabled
 239|       | 0x01 streaming enabled
 240----------------------------------------------------------------------------
 241|    02 | 0x00
 242----------------------------------------------------------------------------
 243| 03-59 | don't care
 244----------------------------------------------------------------------------
 245|    60 | packet sequence number
 246----------------------------------------------------------------------------
 247| 61-63 | don't care
 248----------------------------------------------------------------------------
 249
 250============================================================================
 251| 00-63 | REMOTE CONTROL REQUEST PACKET
 252============================================================================
 253|    00 | 0x41 remote control command
 254----------------------------------------------------------------------------
 255| 01-59 | don't care
 256----------------------------------------------------------------------------
 257|    60 | packet sequence number
 258----------------------------------------------------------------------------
 259| 61-63 | don't care
 260----------------------------------------------------------------------------
 261
 262============================================================================
 263| 00-63 | REMOTE CONTROL REPLY PACKET
 264============================================================================
 265|    00 | 0x00 code not received
 266|       | 0x01 code received
 267----------------------------------------------------------------------------
 268|    01 | remote control code
 269----------------------------------------------------------------------------
 270| 02-59 | don't care
 271----------------------------------------------------------------------------
 272|    60 | packet sequence number
 273----------------------------------------------------------------------------
 274| 61-63 | don't care
 275----------------------------------------------------------------------------
 276
 277============================================================================
 278| 00-63 | GET HARDWARE INFO REQUEST PACKET
 279============================================================================
 280|    00 | 0x19 get hardware info command
 281----------------------------------------------------------------------------
 282| 01-59 | don't care
 283----------------------------------------------------------------------------
 284|    60 | packet sequence number
 285----------------------------------------------------------------------------
 286| 61-63 | don't care
 287----------------------------------------------------------------------------
 288
 289============================================================================
 290| 00-63 | GET HARDWARE INFO REPLY PACKET
 291============================================================================
 292|    00 | hardware id
 293----------------------------------------------------------------------------
 294| 01-02 | firmware version
 295----------------------------------------------------------------------------
 296| 03-59 | don't care
 297----------------------------------------------------------------------------
 298|    60 | packet sequence number
 299----------------------------------------------------------------------------
 300| 61-63 | don't care
 301----------------------------------------------------------------------------
 302
 303============================================================================
 304| 00-63 | SMART CARD READER PACKET
 305============================================================================
 306|    00 | 0x34 smart card reader command
 307----------------------------------------------------------------------------
 308|    xx |
 309----------------------------------------------------------------------------
 310| xx-59 | don't care
 311----------------------------------------------------------------------------
 312|    60 | packet sequence number
 313----------------------------------------------------------------------------
 314| 61-63 | don't care
 315----------------------------------------------------------------------------
 316
 317*/
 318