blob: 70ec9c9aeb54c9c8ac44e6c91bd8c9e55371a21c [file] [log] [blame]
Antti Palosaari7f882c22012-03-30 09:10:08 -03001/*
2 * Afatech AF9035 DVB USB driver
3 *
4 * Copyright (C) 2009 Antti Palosaari <crope@iki.fi>
5 * Copyright (C) 2012 Antti Palosaari <crope@iki.fi>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 */
21
22#ifndef AF9035_H
23#define AF9035_H
24
Antti Palosaari5da2aec2012-06-17 23:15:03 -030025#include "dvb_usb.h"
Antti Palosaari2a79eef2012-05-07 14:50:40 -030026#include "af9033.h"
27#include "tua9001.h"
28#include "fc0011.h"
Antti Palosaari7e0bc292012-12-02 20:12:29 -030029#include "fc0012.h"
Antti Palosaari2a79eef2012-05-07 14:50:40 -030030#include "mxl5007t.h"
31#include "tda18218.h"
Oliver Schinagld67ceb32012-09-20 14:57:17 -030032#include "fc2580.h"
Antti Palosaaric2ba9722014-08-26 00:08:16 -030033#include "it913x.h"
Antti Palosaari7f882c22012-03-30 09:10:08 -030034
35struct reg_val {
36 u32 reg;
37 u8 val;
38};
39
40struct reg_val_mask {
41 u32 reg;
42 u8 val;
43 u8 mask;
44};
45
46struct usb_req {
47 u8 cmd;
48 u8 mbox;
49 u8 wlen;
50 u8 *wbuf;
51 u8 rlen;
52 u8 *rbuf;
53};
54
Antti Palosaari2a79eef2012-05-07 14:50:40 -030055struct state {
Antti Palosaari3484d372013-02-26 13:56:34 -030056#define BUF_LEN 64
57 u8 buf[BUF_LEN];
Antti Palosaari5da2aec2012-06-17 23:15:03 -030058 u8 seq; /* packet sequence number */
Antti Palosaari74c18832013-01-07 15:16:54 -030059 u8 prechip_version;
60 u8 chip_version;
61 u16 chip_type;
Antti Palosaari70375ec2013-03-07 19:22:52 -030062 u8 dual_mode:1;
Antti Palosaaridf8f1be2013-02-03 13:46:56 -030063 u16 eeprom_addr;
Antti Palosaari2a79eef2012-05-07 14:50:40 -030064 struct af9033_config af9033_config[2];
Mauro Carvalho Chehabed97a6f2014-03-14 14:29:06 -030065
66 struct af9033_ops ops;
Antti Palosaari7f882c22012-03-30 09:10:08 -030067};
68
Antti Palosaari9ea36812013-01-11 22:16:25 -030069static const u32 clock_lut_af9035[] = {
Antti Palosaari7f882c22012-03-30 09:10:08 -030070 20480000, /* FPGA */
71 16384000, /* 16.38 MHz */
72 20480000, /* 20.48 MHz */
73 36000000, /* 36.00 MHz */
74 30000000, /* 30.00 MHz */
75 26000000, /* 26.00 MHz */
76 28000000, /* 28.00 MHz */
77 32000000, /* 32.00 MHz */
78 34000000, /* 34.00 MHz */
79 24000000, /* 24.00 MHz */
80 22000000, /* 22.00 MHz */
81 12000000, /* 12.00 MHz */
82};
83
Antti Palosaaria7816b72013-01-11 16:34:06 -030084static const u32 clock_lut_it9135[] = {
Antti Palosaarif2b61d02012-04-05 20:28:51 -030085 12000000, /* 12.00 MHz */
86 20480000, /* 20.48 MHz */
87 36000000, /* 36.00 MHz */
88 30000000, /* 30.00 MHz */
89 26000000, /* 26.00 MHz */
90 28000000, /* 28.00 MHz */
91 32000000, /* 32.00 MHz */
92 34000000, /* 34.00 MHz */
93 24000000, /* 24.00 MHz */
94 22000000, /* 22.00 MHz */
95};
96
Antti Palosaari4395e4b2012-09-12 12:19:06 -030097#define AF9035_FIRMWARE_AF9035 "dvb-usb-af9035-02.fw"
Antti Palosaari74c18832013-01-07 15:16:54 -030098#define AF9035_FIRMWARE_IT9135_V1 "dvb-usb-it9135-01.fw"
99#define AF9035_FIRMWARE_IT9135_V2 "dvb-usb-it9135-02.fw"
Antti Palosaari4395e4b2012-09-12 12:19:06 -0300100
Antti Palosaari70375ec2013-03-07 19:22:52 -0300101/*
102 * eeprom is memory mapped as read only. Writing that memory mapped address
103 * will not corrupt eeprom.
104 *
Antti Palosaarid716ef42013-06-03 19:39:51 -0300105 * TS mode:
106 * 0 TS
107 * 1 DCA + PIP
108 * 3 PIP
109 * n DCA
110 *
111 * Values 0 and 3 are seen to this day. 0 for single TS and 3 for dual TS.
Antti Palosaari70375ec2013-03-07 19:22:52 -0300112 */
113
Antti Palosaari9ea36812013-01-11 22:16:25 -0300114#define EEPROM_BASE_AF9035 0x42fd
115#define EEPROM_BASE_IT9135 0x499c
116#define EEPROM_SHIFT 0x10
117
118#define EEPROM_IR_MODE 0x10
Antti Palosaarid716ef42013-06-03 19:39:51 -0300119#define EEPROM_TS_MODE 0x29
Antti Palosaari9ea36812013-01-11 22:16:25 -0300120#define EEPROM_2ND_DEMOD_ADDR 0x2a
121#define EEPROM_IR_TYPE 0x2c
122#define EEPROM_1_IF_L 0x30
123#define EEPROM_1_IF_H 0x31
124#define EEPROM_1_TUNER_ID 0x34
125#define EEPROM_2_IF_L 0x40
126#define EEPROM_2_IF_H 0x41
127#define EEPROM_2_TUNER_ID 0x44
Antti Palosaari7f882c22012-03-30 09:10:08 -0300128
129/* USB commands */
130#define CMD_MEM_RD 0x00
131#define CMD_MEM_WR 0x01
132#define CMD_I2C_RD 0x02
133#define CMD_I2C_WR 0x03
Hans-Frieder Vogt3234bd22012-04-21 18:23:16 -0300134#define CMD_IR_GET 0x18
Antti Palosaari7f882c22012-03-30 09:10:08 -0300135#define CMD_FW_DL 0x21
136#define CMD_FW_QUERYINFO 0x22
137#define CMD_FW_BOOT 0x23
138#define CMD_FW_DL_BEGIN 0x24
139#define CMD_FW_DL_END 0x25
Antti Palosaarif2b61d02012-04-05 20:28:51 -0300140#define CMD_FW_SCATTER_WR 0x29
Antti Palosaari7f882c22012-03-30 09:10:08 -0300141
142#endif