1786baecfSMauro Carvalho Chehab /* 2786baecfSMauro Carvalho Chehab * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver 3786baecfSMauro Carvalho Chehab * 4786baecfSMauro Carvalho Chehab * Copyright (C) 2007 Antti Palosaari <crope@iki.fi> 5786baecfSMauro Carvalho Chehab * 6786baecfSMauro Carvalho Chehab * Thanks to Afatech who kindly provided information. 7786baecfSMauro Carvalho Chehab * 8786baecfSMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify 9786baecfSMauro Carvalho Chehab * it under the terms of the GNU General Public License as published by 10786baecfSMauro Carvalho Chehab * the Free Software Foundation; either version 2 of the License, or 11786baecfSMauro Carvalho Chehab * (at your option) any later version. 12786baecfSMauro Carvalho Chehab * 13786baecfSMauro Carvalho Chehab * This program is distributed in the hope that it will be useful, 14786baecfSMauro Carvalho Chehab * but WITHOUT ANY WARRANTY; without even the implied warranty of 15786baecfSMauro Carvalho Chehab * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16786baecfSMauro Carvalho Chehab * GNU General Public License for more details. 17786baecfSMauro Carvalho Chehab * 18786baecfSMauro Carvalho Chehab * You should have received a copy of the GNU General Public License 19786baecfSMauro Carvalho Chehab * along with this program; if not, write to the Free Software 20786baecfSMauro Carvalho Chehab * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21786baecfSMauro Carvalho Chehab * 22786baecfSMauro Carvalho Chehab */ 23786baecfSMauro Carvalho Chehab 24786baecfSMauro Carvalho Chehab #ifndef AF9015_H 25786baecfSMauro Carvalho Chehab #define AF9015_H 26786baecfSMauro Carvalho Chehab 27786baecfSMauro Carvalho Chehab #include <linux/hash.h> 28786baecfSMauro Carvalho Chehab #include "dvb_usb.h" 29786baecfSMauro Carvalho Chehab #include "af9013.h" 30786baecfSMauro Carvalho Chehab #include "dvb-pll.h" 31786baecfSMauro Carvalho Chehab #include "mt2060.h" 32786baecfSMauro Carvalho Chehab #include "qt1010.h" 33786baecfSMauro Carvalho Chehab #include "tda18271.h" 34786baecfSMauro Carvalho Chehab #include "mxl5005s.h" 35786baecfSMauro Carvalho Chehab #include "mc44s803.h" 36786baecfSMauro Carvalho Chehab #include "tda18218.h" 37786baecfSMauro Carvalho Chehab #include "mxl5007t.h" 38786baecfSMauro Carvalho Chehab 39786baecfSMauro Carvalho Chehab #define DVB_USB_LOG_PREFIX "af9015" 40786baecfSMauro Carvalho Chehab 41786baecfSMauro Carvalho Chehab #ifdef CONFIG_DVB_USB_DEBUG 42786baecfSMauro Carvalho Chehab #define dprintk(var, level, args...) \ 43786baecfSMauro Carvalho Chehab do { if ((var & level)) printk(args); } while (0) 44786baecfSMauro Carvalho Chehab #define DVB_USB_DEBUG_STATUS 45786baecfSMauro Carvalho Chehab #else 46786baecfSMauro Carvalho Chehab #define dprintk(args...) 47786baecfSMauro Carvalho Chehab #define DVB_USB_DEBUG_STATUS " (debugging is not enabled)" 48786baecfSMauro Carvalho Chehab #endif 49786baecfSMauro Carvalho Chehab 50786baecfSMauro Carvalho Chehab #define deb_info(args...) dprintk(dvb_usb_af9015_debug, 0x01, args) 51786baecfSMauro Carvalho Chehab #define deb_rc(args...) dprintk(dvb_usb_af9015_debug, 0x02, args) 52786baecfSMauro Carvalho Chehab 53786baecfSMauro Carvalho Chehab #undef err 54786baecfSMauro Carvalho Chehab #define err(format, arg...) \ 55786baecfSMauro Carvalho Chehab printk(KERN_ERR DVB_USB_LOG_PREFIX ": " format "\n" , ## arg) 56786baecfSMauro Carvalho Chehab #undef warn 57786baecfSMauro Carvalho Chehab #define warn(format, arg...) \ 58786baecfSMauro Carvalho Chehab printk(KERN_WARNING DVB_USB_LOG_PREFIX ": " format "\n" , ## arg) 59786baecfSMauro Carvalho Chehab 60bab9b4feSAntti Palosaari #define AF9015_FIRMWARE "dvb-usb-af9015.fw" 61bab9b4feSAntti Palosaari 62786baecfSMauro Carvalho Chehab /* Windows driver uses packet count 21 for USB1.1 and 348 for USB2.0. 63786baecfSMauro Carvalho Chehab We use smaller - about 1/4 from the original, 5 and 87. */ 64786baecfSMauro Carvalho Chehab #define TS_PACKET_SIZE 188 65786baecfSMauro Carvalho Chehab 66786baecfSMauro Carvalho Chehab #define TS_USB20_PACKET_COUNT 87 67786baecfSMauro Carvalho Chehab #define TS_USB20_FRAME_SIZE (TS_PACKET_SIZE*TS_USB20_PACKET_COUNT) 68786baecfSMauro Carvalho Chehab 69786baecfSMauro Carvalho Chehab #define TS_USB11_PACKET_COUNT 5 70786baecfSMauro Carvalho Chehab #define TS_USB11_FRAME_SIZE (TS_PACKET_SIZE*TS_USB11_PACKET_COUNT) 71786baecfSMauro Carvalho Chehab 72786baecfSMauro Carvalho Chehab #define TS_USB20_MAX_PACKET_SIZE 512 73786baecfSMauro Carvalho Chehab #define TS_USB11_MAX_PACKET_SIZE 64 74786baecfSMauro Carvalho Chehab 75786baecfSMauro Carvalho Chehab #define AF9015_I2C_EEPROM 0xa0 76786baecfSMauro Carvalho Chehab #define AF9015_I2C_DEMOD 0x38 77786baecfSMauro Carvalho Chehab #define AF9015_USB_TIMEOUT 2000 78786baecfSMauro Carvalho Chehab 79786baecfSMauro Carvalho Chehab /* EEPROM locations */ 80786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IR_MODE 0x18 81786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34 82786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_TS_MODE 0x31 83786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_DEMOD2_I2C 0x32 84786baecfSMauro Carvalho Chehab 85786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_SAW_BW1 0x35 86786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_XTAL_TYPE1 0x36 87786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_SPEC_INV1 0x37 88786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IF1L 0x38 89786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IF1H 0x39 90786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_MT2060_IF1L 0x3a 91786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_MT2060_IF1H 0x3b 92786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_TUNER_ID1 0x3c 93786baecfSMauro Carvalho Chehab 94786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_SAW_BW2 0x45 95786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_XTAL_TYPE2 0x46 96786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_SPEC_INV2 0x47 97786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IF2L 0x48 98786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_IF2H 0x49 99786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_MT2060_IF2L 0x4a 100786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_MT2060_IF2H 0x4b 101786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_TUNER_ID2 0x4c 102786baecfSMauro Carvalho Chehab 103786baecfSMauro Carvalho Chehab #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1) 104786baecfSMauro Carvalho Chehab 105786baecfSMauro Carvalho Chehab struct req_t { 106786baecfSMauro Carvalho Chehab u8 cmd; /* [0] */ 107786baecfSMauro Carvalho Chehab /* seq */ /* [1] */ 108786baecfSMauro Carvalho Chehab u8 i2c_addr; /* [2] */ 109786baecfSMauro Carvalho Chehab u16 addr; /* [3|4] */ 110786baecfSMauro Carvalho Chehab u8 mbox; /* [5] */ 111786baecfSMauro Carvalho Chehab u8 addr_len; /* [6] */ 112786baecfSMauro Carvalho Chehab u8 data_len; /* [7] */ 113786baecfSMauro Carvalho Chehab u8 *data; 114786baecfSMauro Carvalho Chehab }; 115786baecfSMauro Carvalho Chehab 116786baecfSMauro Carvalho Chehab enum af9015_cmd { 117786baecfSMauro Carvalho Chehab GET_CONFIG = 0x10, 118786baecfSMauro Carvalho Chehab DOWNLOAD_FIRMWARE = 0x11, 119786baecfSMauro Carvalho Chehab BOOT = 0x13, 120786baecfSMauro Carvalho Chehab READ_MEMORY = 0x20, 121786baecfSMauro Carvalho Chehab WRITE_MEMORY = 0x21, 122786baecfSMauro Carvalho Chehab READ_WRITE_I2C = 0x22, 123786baecfSMauro Carvalho Chehab COPY_FIRMWARE = 0x23, 124786baecfSMauro Carvalho Chehab RECONNECT_USB = 0x5a, 125786baecfSMauro Carvalho Chehab WRITE_VIRTUAL_MEMORY = 0x26, 126786baecfSMauro Carvalho Chehab GET_IR_CODE = 0x27, 127786baecfSMauro Carvalho Chehab READ_I2C, 128786baecfSMauro Carvalho Chehab WRITE_I2C, 129786baecfSMauro Carvalho Chehab }; 130786baecfSMauro Carvalho Chehab 131786baecfSMauro Carvalho Chehab enum af9015_ir_mode { 132786baecfSMauro Carvalho Chehab AF9015_IR_MODE_DISABLED = 0, 133786baecfSMauro Carvalho Chehab AF9015_IR_MODE_HID, 134786baecfSMauro Carvalho Chehab AF9015_IR_MODE_RLC, 135786baecfSMauro Carvalho Chehab AF9015_IR_MODE_RC6, 136786baecfSMauro Carvalho Chehab AF9015_IR_MODE_POLLING, /* just guess */ 137786baecfSMauro Carvalho Chehab }; 138786baecfSMauro Carvalho Chehab 139786baecfSMauro Carvalho Chehab struct af9015_state { 140786baecfSMauro Carvalho Chehab u8 ir_mode; 141786baecfSMauro Carvalho Chehab u8 rc_repeat; 142786baecfSMauro Carvalho Chehab u32 rc_keycode; 143786baecfSMauro Carvalho Chehab u8 rc_last[4]; 144786baecfSMauro Carvalho Chehab bool rc_failed; 145786baecfSMauro Carvalho Chehab u8 dual_mode; 146786baecfSMauro Carvalho Chehab u8 seq; /* packet sequence number */ 147786baecfSMauro Carvalho Chehab u16 mt2060_if1[2]; 148786baecfSMauro Carvalho Chehab u16 firmware_size; 149786baecfSMauro Carvalho Chehab u16 firmware_checksum; 150786baecfSMauro Carvalho Chehab u32 eeprom_sum; 151786baecfSMauro Carvalho Chehab struct af9013_config af9013_config[2]; 152786baecfSMauro Carvalho Chehab 153786baecfSMauro Carvalho Chehab /* for demod callback override */ 154786baecfSMauro Carvalho Chehab int (*set_frontend[2]) (struct dvb_frontend *fe); 155786baecfSMauro Carvalho Chehab int (*read_status[2]) (struct dvb_frontend *fe, fe_status_t *status); 156786baecfSMauro Carvalho Chehab int (*init[2]) (struct dvb_frontend *fe); 157786baecfSMauro Carvalho Chehab int (*sleep[2]) (struct dvb_frontend *fe); 158786baecfSMauro Carvalho Chehab int (*tuner_init[2]) (struct dvb_frontend *fe); 159786baecfSMauro Carvalho Chehab int (*tuner_sleep[2]) (struct dvb_frontend *fe); 160786baecfSMauro Carvalho Chehab struct mutex fe_mutex; 161786baecfSMauro Carvalho Chehab }; 162786baecfSMauro Carvalho Chehab 163786baecfSMauro Carvalho Chehab enum af9015_remote { 164786baecfSMauro Carvalho Chehab AF9015_REMOTE_NONE = 0, 165786baecfSMauro Carvalho Chehab /* 1 */ AF9015_REMOTE_A_LINK_DTU_M, 166786baecfSMauro Carvalho Chehab AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, 167786baecfSMauro Carvalho Chehab AF9015_REMOTE_MYGICTV_U718, 168786baecfSMauro Carvalho Chehab AF9015_REMOTE_DIGITTRADE_DVB_T, 169786baecfSMauro Carvalho Chehab /* 5 */ AF9015_REMOTE_AVERMEDIA_KS, 170786baecfSMauro Carvalho Chehab }; 171786baecfSMauro Carvalho Chehab 172786baecfSMauro Carvalho Chehab #endif 173