Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
0004  *
0005  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
0006  *
0007  * Thanks to Afatech who kindly provided information.
0008  */
0009 
0010 #ifndef AF9015_H
0011 #define AF9015_H
0012 
0013 #include <linux/hash.h>
0014 #include <linux/regmap.h>
0015 #include "dvb_usb.h"
0016 #include "af9013.h"
0017 #include "dvb-pll.h"
0018 #include "mt2060.h"
0019 #include "qt1010.h"
0020 #include "tda18271.h"
0021 #include "mxl5005s.h"
0022 #include "mc44s803.h"
0023 #include "tda18218.h"
0024 #include "mxl5007t.h"
0025 
0026 #define AF9015_FIRMWARE "dvb-usb-af9015.fw"
0027 
0028 #define AF9015_I2C_EEPROM  0x50
0029 #define AF9015_I2C_DEMOD   0x1c
0030 #define AF9015_USB_TIMEOUT 2000
0031 
0032 /* EEPROM locations */
0033 #define AF9015_EEPROM_IR_MODE        0x18
0034 #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
0035 #define AF9015_EEPROM_TS_MODE        0x31
0036 #define AF9015_EEPROM_DEMOD2_I2C     0x32
0037 
0038 #define AF9015_EEPROM_SAW_BW1        0x35
0039 #define AF9015_EEPROM_XTAL_TYPE1     0x36
0040 #define AF9015_EEPROM_SPEC_INV1      0x37
0041 #define AF9015_EEPROM_IF1L           0x38
0042 #define AF9015_EEPROM_IF1H           0x39
0043 #define AF9015_EEPROM_MT2060_IF1L    0x3a
0044 #define AF9015_EEPROM_MT2060_IF1H    0x3b
0045 #define AF9015_EEPROM_TUNER_ID1      0x3c
0046 
0047 #define AF9015_EEPROM_SAW_BW2        0x45
0048 #define AF9015_EEPROM_XTAL_TYPE2     0x46
0049 #define AF9015_EEPROM_SPEC_INV2      0x47
0050 #define AF9015_EEPROM_IF2L           0x48
0051 #define AF9015_EEPROM_IF2H           0x49
0052 #define AF9015_EEPROM_MT2060_IF2L    0x4a
0053 #define AF9015_EEPROM_MT2060_IF2H    0x4b
0054 #define AF9015_EEPROM_TUNER_ID2      0x4c
0055 
0056 #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
0057 
0058 struct req_t {
0059     u8  cmd;       /* [0] */
0060     /*  seq */     /* [1] */
0061     u8  i2c_addr;  /* [2] */
0062     u16 addr;      /* [3|4] */
0063     u8  mbox;      /* [5] */
0064     u8  addr_len;  /* [6] */
0065     u8  data_len;  /* [7] */
0066     u8  *data;
0067 };
0068 
0069 enum af9015_cmd {
0070     GET_CONFIG           = 0x10,
0071     DOWNLOAD_FIRMWARE    = 0x11,
0072     BOOT                 = 0x13,
0073     READ_MEMORY          = 0x20,
0074     WRITE_MEMORY         = 0x21,
0075     READ_WRITE_I2C       = 0x22,
0076     COPY_FIRMWARE        = 0x23,
0077     RECONNECT_USB        = 0x5a,
0078     WRITE_VIRTUAL_MEMORY = 0x26,
0079     GET_IR_CODE          = 0x27,
0080     READ_I2C,
0081     WRITE_I2C,
0082 };
0083 
0084 enum af9015_ir_mode {
0085     AF9015_IR_MODE_DISABLED = 0,
0086     AF9015_IR_MODE_HID,
0087     AF9015_IR_MODE_RLC,
0088     AF9015_IR_MODE_RC6,
0089     AF9015_IR_MODE_POLLING, /* just guess */
0090 };
0091 
0092 #define BUF_LEN 63
0093 struct af9015_state {
0094     struct regmap *regmap;
0095     u8 buf[BUF_LEN]; /* bulk USB control message */
0096     u8 ir_mode;
0097     u8 rc_repeat;
0098     u32 rc_keycode;
0099     u8 rc_last[4];
0100     bool rc_failed;
0101     u8 dual_mode;
0102     u8 seq; /* packet sequence number */
0103     u16 mt2060_if1[2];
0104     u16 firmware_size;
0105     u16 firmware_checksum;
0106     u32 eeprom_sum;
0107     struct af9013_platform_data af9013_pdata[2];
0108     struct i2c_client *demod_i2c_client[2];
0109     u8 af9013_i2c_addr[2];
0110     bool usb_ts_if_configured[2];
0111 
0112     /* for demod callback override */
0113     int (*set_frontend[2]) (struct dvb_frontend *fe);
0114     int (*read_status[2]) (struct dvb_frontend *fe, enum fe_status *status);
0115     int (*init[2]) (struct dvb_frontend *fe);
0116     int (*sleep[2]) (struct dvb_frontend *fe);
0117     int (*tuner_init[2]) (struct dvb_frontend *fe);
0118     int (*tuner_sleep[2]) (struct dvb_frontend *fe);
0119     struct mutex fe_mutex;
0120 };
0121 
0122 enum af9015_remote {
0123     AF9015_REMOTE_NONE                    = 0,
0124 /* 1 */ AF9015_REMOTE_A_LINK_DTU_M,
0125     AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
0126     AF9015_REMOTE_MYGICTV_U718,
0127     AF9015_REMOTE_DIGITTRADE_DVB_T,
0128 /* 5 */ AF9015_REMOTE_AVERMEDIA_KS,
0129 };
0130 
0131 #endif