1// SPDX-License-Identifier: GPL-2.0-or-later
2  /*
3     Driver for Philips tda1004xh OFDM Demodulator
4
5     (c) 2003, 2004 Andrew de Quincey & Robert Schlabbach
6
7
8   */
9/*
10 * This driver needs external firmware. Please use the commands
11 * "<kerneldir>/scripts/get_dvb_firmware tda10045",
12 * "<kerneldir>/scripts/get_dvb_firmware tda10046" to
13 * download/extract them, and then copy them to /usr/lib/hotplug/firmware
14 * or /lib/firmware (depending on configuration of firmware hotplug).
15 */
16#define TDA10045_DEFAULT_FIRMWARE "dvb-fe-tda10045.fw"
17#define TDA10046_DEFAULT_FIRMWARE "dvb-fe-tda10046.fw"
18
19#include <linux/init.h>
20#include <linux/module.h>
21#include <linux/device.h>
22#include <linux/jiffies.h>
23#include <linux/string.h>
24#include <linux/slab.h>
25
26#include <media/dvb_frontend.h>
27#include "tda1004x.h"
28
29static int debug;
30#define dprintk(args...) \
31	do { \
32		if (debug) printk(KERN_DEBUG "tda1004x: " args); \
33	} while (0)
34
35#define TDA1004X_CHIPID		 0x00
36#define TDA1004X_AUTO		 0x01
37#define TDA1004X_IN_CONF1	 0x02
38#define TDA1004X_IN_CONF2	 0x03
39#define TDA1004X_OUT_CONF1	 0x04
40#define TDA1004X_OUT_CONF2	 0x05
41#define TDA1004X_STATUS_CD	 0x06
42#define TDA1004X_CONFC4		 0x07
43#define TDA1004X_DSSPARE2	 0x0C
44#define TDA10045H_CODE_IN	 0x0D
45#define TDA10045H_FWPAGE	 0x0E
46#define TDA1004X_SCAN_CPT	 0x10
47#define TDA1004X_DSP_CMD	 0x11
48#define TDA1004X_DSP_ARG	 0x12
49#define TDA1004X_DSP_DATA1	 0x13
50#define TDA1004X_DSP_DATA2	 0x14
51#define TDA1004X_CONFADC1	 0x15
52#define TDA1004X_CONFC1		 0x16
53#define TDA10045H_S_AGC		 0x1a
54#define TDA10046H_AGC_TUN_LEVEL	 0x1a
55#define TDA1004X_SNR		 0x1c
56#define TDA1004X_CONF_TS1	 0x1e
57#define TDA1004X_CONF_TS2	 0x1f
58#define TDA1004X_CBER_RESET	 0x20
59#define TDA1004X_CBER_MSB	 0x21
60#define TDA1004X_CBER_LSB	 0x22
61#define TDA1004X_CVBER_LUT	 0x23
62#define TDA1004X_VBER_MSB	 0x24
63#define TDA1004X_VBER_MID	 0x25
64#define TDA1004X_VBER_LSB	 0x26
65#define TDA1004X_UNCOR		 0x27
66
67#define TDA10045H_CONFPLL_P	 0x2D
68#define TDA10045H_CONFPLL_M_MSB	 0x2E
69#define TDA10045H_CONFPLL_M_LSB	 0x2F
70#define TDA10045H_CONFPLL_N	 0x30
71
72#define TDA10046H_CONFPLL1	 0x2D
73#define TDA10046H_CONFPLL2	 0x2F
74#define TDA10046H_CONFPLL3	 0x30
75#define TDA10046H_TIME_WREF1	 0x31
76#define TDA10046H_TIME_WREF2	 0x32
77#define TDA10046H_TIME_WREF3	 0x33
78#define TDA10046H_TIME_WREF4	 0x34
79#define TDA10046H_TIME_WREF5	 0x35
80
81#define TDA10045H_UNSURW_MSB	 0x31
82#define TDA10045H_UNSURW_LSB	 0x32
83#define TDA10045H_WREF_MSB	 0x33
84#define TDA10045H_WREF_MID	 0x34
85#define TDA10045H_WREF_LSB	 0x35
86#define TDA10045H_MUXOUT	 0x36
87#define TDA1004X_CONFADC2	 0x37
88
89#define TDA10045H_IOFFSET	 0x38
90
91#define TDA10046H_CONF_TRISTATE1 0x3B
92#define TDA10046H_CONF_TRISTATE2 0x3C
93#define TDA10046H_CONF_POLARITY	 0x3D
94#define TDA10046H_FREQ_OFFSET	 0x3E
95#define TDA10046H_GPIO_OUT_SEL	 0x41
96#define TDA10046H_GPIO_SELECT	 0x42
97#define TDA10046H_AGC_CONF	 0x43
98#define TDA10046H_AGC_THR	 0x44
99#define TDA10046H_AGC_RENORM	 0x45
100#define TDA10046H_AGC_GAINS	 0x46
101#define TDA10046H_AGC_TUN_MIN	 0x47
102#define TDA10046H_AGC_TUN_MAX	 0x48
103#define TDA10046H_AGC_IF_MIN	 0x49
104#define TDA10046H_AGC_IF_MAX	 0x4A
105
106#define TDA10046H_FREQ_PHY2_MSB	 0x4D
107#define TDA10046H_FREQ_PHY2_LSB	 0x4E
108
109#define TDA10046H_CVBER_CTRL	 0x4F
110#define TDA10046H_AGC_IF_LEVEL	 0x52
111#define TDA10046H_CODE_CPT	 0x57
112#define TDA10046H_CODE_IN	 0x58
113
114
115static int tda1004x_write_byteI(struct tda1004x_state *state, int reg, int data)
116{
117	int ret;
118	u8 buf[] = { reg, data };
119	struct i2c_msg msg = { .flags = 0, .buf = buf, .len = 2 };
120
121	dprintk("%s: reg=0x%x, data=0x%x\n", __func__, reg, data);
122
123	msg.addr = state->config->demod_address;
124	ret = i2c_transfer(state->i2c, &msg, 1);
125
126	if (ret != 1)
127		dprintk("%s: error reg=0x%x, data=0x%x, ret=%i\n",
128			__func__, reg, data, ret);
129
130	dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
131		reg, data, ret);
132	return (ret != 1) ? -1 : 0;
133}
134
135static int tda1004x_read_byte(struct tda1004x_state *state, int reg)
136{
137	int ret;
138	u8 b0[] = { reg };
139	u8 b1[] = { 0 };
140	struct i2c_msg msg[] = {{ .flags = 0, .buf = b0, .len = 1 },
141				{ .flags = I2C_M_RD, .buf = b1, .len = 1 }};
142
143	dprintk("%s: reg=0x%x\n", __func__, reg);
144
145	msg[0].addr = state->config->demod_address;
146	msg[1].addr = state->config->demod_address;
147	ret = i2c_transfer(state->i2c, msg, 2);
148
149	if (ret != 2) {
150		dprintk("%s: error reg=0x%x, ret=%i\n", __func__, reg,
151			ret);
152		return -EINVAL;
153	}
154
155	dprintk("%s: success reg=0x%x, data=0x%x, ret=%i\n", __func__,
156		reg, b1[0], ret);
157	return b1[0];
158}
159
160static int tda1004x_write_mask(struct tda1004x_state *state, int reg, int mask, int data)
161{
162	int val;
163	dprintk("%s: reg=0x%x, mask=0x%x, data=0x%x\n", __func__, reg,
164		mask, data);
165
166	// read a byte and check
167	val = tda1004x_read_byte(state, reg);
168	if (val < 0)
169		return val;
170
171	// mask if off
172	val = val & ~mask;
173	val |= data & 0xff;
174
175	// write it out again
176	return tda1004x_write_byteI(state, reg, val);
177}
178
179static int tda1004x_write_buf(struct tda1004x_state *state, int reg, unsigned char *buf, int len)
180{
181	int i;
182	int result;
183
184	dprintk("%s: reg=0x%x, len=0x%x\n", __func__, reg, len);
185
186	result = 0;
187	for (i = 0; i < len; i++) {
188		result = tda1004x_write_byteI(state, reg + i, buf[i]);
189		if (result != 0)
190			break;
191	}
192
193	return result;
194}
195
196static int tda1004x_enable_tuner_i2c(struct tda1004x_state *state)
197{
198	int result;
199	dprintk("%s\n", __func__);
200
201	result = tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 2);
202	msleep(20);
203	return result;
204}
205
206static int tda1004x_disable_tuner_i2c(struct tda1004x_state *state)
207{
208	dprintk("%s\n", __func__);
209
210	return tda1004x_write_mask(state, TDA1004X_CONFC4, 2, 0);
211}
212
213static int tda10045h_set_bandwidth(struct tda1004x_state *state,
214				   u32 bandwidth)
215{
216	static u8 bandwidth_6mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x60, 0x1e, 0xa7, 0x45, 0x4f };
217	static u8 bandwidth_7mhz[] = { 0x02, 0x00, 0x37, 0x00, 0x4a, 0x2f, 0x6d, 0x76, 0xdb };
218	static u8 bandwidth_8mhz[] = { 0x02, 0x00, 0x3d, 0x00, 0x48, 0x17, 0x89, 0xc7, 0x14 };
219
220	switch (bandwidth) {
221	case 6000000:
222		tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_6mhz, sizeof(bandwidth_6mhz));
223		break;
224
225	case 7000000:
226		tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_7mhz, sizeof(bandwidth_7mhz));
227		break;
228
229	case 8000000:
230		tda1004x_write_buf(state, TDA10045H_CONFPLL_P, bandwidth_8mhz, sizeof(bandwidth_8mhz));
231		break;
232
233	default:
234		return -EINVAL;
235	}
236
237	tda1004x_write_byteI(state, TDA10045H_IOFFSET, 0);
238
239	return 0;
240}
241
242static int tda10046h_set_bandwidth(struct tda1004x_state *state,
243				   u32 bandwidth)
244{
245	static u8 bandwidth_6mhz_53M[] = { 0x7b, 0x2e, 0x11, 0xf0, 0xd2 };
246	static u8 bandwidth_7mhz_53M[] = { 0x6a, 0x02, 0x6a, 0x43, 0x9f };
247	static u8 bandwidth_8mhz_53M[] = { 0x5c, 0x32, 0xc2, 0x96, 0x6d };
248
249	static u8 bandwidth_6mhz_48M[] = { 0x70, 0x02, 0x49, 0x24, 0x92 };
250	static u8 bandwidth_7mhz_48M[] = { 0x60, 0x02, 0xaa, 0xaa, 0xab };
251	static u8 bandwidth_8mhz_48M[] = { 0x54, 0x03, 0x0c, 0x30, 0xc3 };
252	int tda10046_clk53m;
253
254	if ((state->config->if_freq == TDA10046_FREQ_045) ||
255	    (state->config->if_freq == TDA10046_FREQ_052))
256		tda10046_clk53m = 0;
257	else
258		tda10046_clk53m = 1;
259	switch (bandwidth) {
260	case 6000000:
261		if (tda10046_clk53m)
262			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_53M,
263						  sizeof(bandwidth_6mhz_53M));
264		else
265			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_6mhz_48M,
266						  sizeof(bandwidth_6mhz_48M));
267		if (state->config->if_freq == TDA10046_FREQ_045) {
268			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0a);
269			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xab);
270		}
271		break;
272
273	case 7000000:
274		if (tda10046_clk53m)
275			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_53M,
276						  sizeof(bandwidth_7mhz_53M));
277		else
278			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_7mhz_48M,
279						  sizeof(bandwidth_7mhz_48M));
280		if (state->config->if_freq == TDA10046_FREQ_045) {
281			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
282			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
283		}
284		break;
285
286	case 8000000:
287		if (tda10046_clk53m)
288			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_53M,
289						  sizeof(bandwidth_8mhz_53M));
290		else
291			tda1004x_write_buf(state, TDA10046H_TIME_WREF1, bandwidth_8mhz_48M,
292						  sizeof(bandwidth_8mhz_48M));
293		if (state->config->if_freq == TDA10046_FREQ_045) {
294			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
295			tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x55);
296		}
297		break;
298
299	default:
300		return -EINVAL;
301	}
302
303	return 0;
304}
305
306static int tda1004x_do_upload(struct tda1004x_state *state,
307			      const unsigned char *mem, unsigned int len,
308			      u8 dspCodeCounterReg, u8 dspCodeInReg)
309{
310	u8 buf[65];
311	struct i2c_msg fw_msg = { .flags = 0, .buf = buf, .len = 0 };
312	int tx_size;
313	int pos = 0;
314
315	/* clear code counter */
316	tda1004x_write_byteI(state, dspCodeCounterReg, 0);
317	fw_msg.addr = state->config->demod_address;
318
319	i2c_lock_bus(state->i2c, I2C_LOCK_SEGMENT);
320	buf[0] = dspCodeInReg;
321	while (pos != len) {
322		// work out how much to send this time
323		tx_size = len - pos;
324		if (tx_size > 0x10)
325			tx_size = 0x10;
326
327		// send the chunk
328		memcpy(buf + 1, mem + pos, tx_size);
329		fw_msg.len = tx_size + 1;
330		if (__i2c_transfer(state->i2c, &fw_msg, 1) != 1) {
331			printk(KERN_ERR "tda1004x: Error during firmware upload\n");
332			i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
333			return -EIO;
334		}
335		pos += tx_size;
336
337		dprintk("%s: fw_pos=0x%x\n", __func__, pos);
338	}
339	i2c_unlock_bus(state->i2c, I2C_LOCK_SEGMENT);
340
341	/* give the DSP a chance to settle 03/10/05 Hac */
342	msleep(100);
343
344	return 0;
345}
346
347static int tda1004x_check_upload_ok(struct tda1004x_state *state)
348{
349	u8 data1, data2;
350	unsigned long timeout;
351
352	if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
353		timeout = jiffies + 2 * HZ;
354		while(!(tda1004x_read_byte(state, TDA1004X_STATUS_CD) & 0x20)) {
355			if (time_after(jiffies, timeout)) {
356				printk(KERN_ERR "tda1004x: timeout waiting for DSP ready\n");
357				break;
358			}
359			msleep(1);
360		}
361	} else
362		msleep(100);
363
364	// check upload was OK
365	tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0); // we want to read from the DSP
366	tda1004x_write_byteI(state, TDA1004X_DSP_CMD, 0x67);
367
368	data1 = tda1004x_read_byte(state, TDA1004X_DSP_DATA1);
369	data2 = tda1004x_read_byte(state, TDA1004X_DSP_DATA2);
370	if (data1 != 0x67 || data2 < 0x20 || data2 > 0x2e) {
371		printk(KERN_INFO "tda1004x: found firmware revision %x -- invalid\n", data2);
372		return -EIO;
373	}
374	printk(KERN_INFO "tda1004x: found firmware revision %x -- ok\n", data2);
375	return 0;
376}
377
378static int tda10045_fwupload(struct dvb_frontend* fe)
379{
380	struct tda1004x_state* state = fe->demodulator_priv;
381	int ret;
382	const struct firmware *fw;
383
384	/* don't re-upload unless necessary */
385	if (tda1004x_check_upload_ok(state) == 0)
386		return 0;
387
388	/* request the firmware, this will block until someone uploads it */
389	printk(KERN_INFO "tda1004x: waiting for firmware upload (%s)...\n", TDA10045_DEFAULT_FIRMWARE);
390	ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
391	if (ret) {
392		printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
393		return ret;
394	}
395
396	/* reset chip */
397	tda1004x_write_mask(state, TDA1004X_CONFC4, 0x10, 0);
398	tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
399	tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
400	msleep(10);
401
402	/* set parameters */
403	tda10045h_set_bandwidth(state, 8000000);
404
405	ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10045H_FWPAGE, TDA10045H_CODE_IN);
406	release_firmware(fw);
407	if (ret)
408		return ret;
409	printk(KERN_INFO "tda1004x: firmware upload complete\n");
410
411	/* wait for DSP to initialise */
412	/* DSPREADY doesn't seem to work on the TDA10045H */
413	msleep(100);
414
415	return tda1004x_check_upload_ok(state);
416}
417
418static void tda10046_init_plls(struct dvb_frontend* fe)
419{
420	struct tda1004x_state* state = fe->demodulator_priv;
421	int tda10046_clk53m;
422
423	if ((state->config->if_freq == TDA10046_FREQ_045) ||
424	    (state->config->if_freq == TDA10046_FREQ_052))
425		tda10046_clk53m = 0;
426	else
427		tda10046_clk53m = 1;
428
429	tda1004x_write_byteI(state, TDA10046H_CONFPLL1, 0xf0);
430	if(tda10046_clk53m) {
431		printk(KERN_INFO "tda1004x: setting up plls for 53MHz sampling clock\n");
432		tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x08); // PLL M = 8
433	} else {
434		printk(KERN_INFO "tda1004x: setting up plls for 48MHz sampling clock\n");
435		tda1004x_write_byteI(state, TDA10046H_CONFPLL2, 0x03); // PLL M = 3
436	}
437	if (state->config->xtal_freq == TDA10046_XTAL_4M ) {
438		dprintk("%s: setting up PLLs for a 4 MHz Xtal\n", __func__);
439		tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 0); // PLL P = N = 0
440	} else {
441		dprintk("%s: setting up PLLs for a 16 MHz Xtal\n", __func__);
442		tda1004x_write_byteI(state, TDA10046H_CONFPLL3, 3); // PLL P = 0, N = 3
443	}
444	if(tda10046_clk53m)
445		tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x67);
446	else
447		tda1004x_write_byteI(state, TDA10046H_FREQ_OFFSET, 0x72);
448	/* Note clock frequency is handled implicitly */
449	switch (state->config->if_freq) {
450	case TDA10046_FREQ_045:
451		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0c);
452		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x00);
453		break;
454	case TDA10046_FREQ_052:
455		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0x0d);
456		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0xc7);
457		break;
458	case TDA10046_FREQ_3617:
459		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
460		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x59);
461		break;
462	case TDA10046_FREQ_3613:
463		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_MSB, 0xd7);
464		tda1004x_write_byteI(state, TDA10046H_FREQ_PHY2_LSB, 0x3f);
465		break;
466	}
467	tda10046h_set_bandwidth(state, 8000000); /* default bandwidth 8 MHz */
468	/* let the PLLs settle */
469	msleep(120);
470}
471
472static int tda10046_fwupload(struct dvb_frontend* fe)
473{
474	struct tda1004x_state* state = fe->demodulator_priv;
475	int ret, confc4;
476	const struct firmware *fw;
477
478	/* reset + wake up chip */
479	if (state->config->xtal_freq == TDA10046_XTAL_4M) {
480		confc4 = 0;
481	} else {
482		dprintk("%s: 16MHz Xtal, reducing I2C speed\n", __func__);
483		confc4 = 0x80;
484	}
485	tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
486
487	tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 1, 0);
488	/* set GPIO 1 and 3 */
489	if (state->config->gpio_config != TDA10046_GPTRI) {
490		tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE2, 0x33);
491		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f, state->config->gpio_config &0x0f);
492	}
493	/* let the clocks recover from sleep */
494	msleep(10);
495
496	/* The PLLs need to be reprogrammed after sleep */
497	tda10046_init_plls(fe);
498	tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0);
499
500	/* don't re-upload unless necessary */
501	if (tda1004x_check_upload_ok(state) == 0)
502		return 0;
503
504	/*
505	   For i2c normal work, we need to slow down the bus speed.
506	   However, the slow down breaks the eeprom firmware load.
507	   So, use normal speed for eeprom booting and then restore the
508	   i2c speed after that. Tested with MSI TV @nyware A/D board,
509	   that comes with firmware version 29 inside their eeprom.
510
511	   It should also be noticed that no other I2C transfer should
512	   be in course while booting from eeprom, otherwise, tda10046
513	   goes into an instable state. So, proper locking are needed
514	   at the i2c bus master.
515	 */
516	printk(KERN_INFO "tda1004x: trying to boot from eeprom\n");
517	tda1004x_write_byteI(state, TDA1004X_CONFC4, 4);
518	msleep(300);
519	tda1004x_write_byteI(state, TDA1004X_CONFC4, confc4);
520
521	/* Checks if eeprom firmware went without troubles */
522	if (tda1004x_check_upload_ok(state) == 0)
523		return 0;
524
525	/* eeprom firmware didn't work. Load one manually. */
526
527	if (state->config->request_firmware != NULL) {
528		/* request the firmware, this will block until someone uploads it */
529		printk(KERN_INFO "tda1004x: waiting for firmware upload...\n");
530		ret = state->config->request_firmware(fe, &fw, TDA10046_DEFAULT_FIRMWARE);
531		if (ret) {
532			/* remain compatible to old bug: try to load with tda10045 image name */
533			ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE);
534			if (ret) {
535				printk(KERN_ERR "tda1004x: no firmware upload (timeout or file not found?)\n");
536				return ret;
537			} else {
538				printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
539						  TDA10046_DEFAULT_FIRMWARE);
540			}
541		}
542	} else {
543		printk(KERN_ERR "tda1004x: no request function defined, can't upload from file\n");
544		return -EIO;
545	}
546	tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8); // going to boot from HOST
547	ret = tda1004x_do_upload(state, fw->data, fw->size, TDA10046H_CODE_CPT, TDA10046H_CODE_IN);
548	release_firmware(fw);
549	return tda1004x_check_upload_ok(state);
550}
551
552static int tda1004x_encode_fec(int fec)
553{
554	// convert known FEC values
555	switch (fec) {
556	case FEC_1_2:
557		return 0;
558	case FEC_2_3:
559		return 1;
560	case FEC_3_4:
561		return 2;
562	case FEC_5_6:
563		return 3;
564	case FEC_7_8:
565		return 4;
566	}
567
568	// unsupported
569	return -EINVAL;
570}
571
572static int tda1004x_decode_fec(int tdafec)
573{
574	// convert known FEC values
575	switch (tdafec) {
576	case 0:
577		return FEC_1_2;
578	case 1:
579		return FEC_2_3;
580	case 2:
581		return FEC_3_4;
582	case 3:
583		return FEC_5_6;
584	case 4:
585		return FEC_7_8;
586	}
587
588	// unsupported
589	return -1;
590}
591
592static int tda1004x_write(struct dvb_frontend* fe, const u8 buf[], int len)
593{
594	struct tda1004x_state* state = fe->demodulator_priv;
595
596	if (len != 2)
597		return -EINVAL;
598
599	return tda1004x_write_byteI(state, buf[0], buf[1]);
600}
601
602static int tda10045_init(struct dvb_frontend* fe)
603{
604	struct tda1004x_state* state = fe->demodulator_priv;
605
606	dprintk("%s\n", __func__);
607
608	if (tda10045_fwupload(fe)) {
609		printk("tda1004x: firmware upload failed\n");
610		return -EIO;
611	}
612
613	tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0); // wake up the ADC
614
615	// tda setup
616	tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
617	tda1004x_write_mask(state, TDA1004X_AUTO, 8, 0); // select HP stream
618	tda1004x_write_mask(state, TDA1004X_CONFC1, 0x40, 0); // set polarity of VAGC signal
619	tda1004x_write_mask(state, TDA1004X_CONFC1, 0x80, 0x80); // enable pulse killer
620	tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10); // enable auto offset
621	tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0x0); // no frequency offset
622	tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 0); // setup MPEG2 TS interface
623	tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0); // setup MPEG2 TS interface
624	tda1004x_write_mask(state, TDA1004X_VBER_MSB, 0xe0, 0xa0); // 10^6 VBER measurement bits
625	tda1004x_write_mask(state, TDA1004X_CONFC1, 0x10, 0); // VAGC polarity
626	tda1004x_write_byteI(state, TDA1004X_CONFADC1, 0x2e);
627
628	tda1004x_write_mask(state, 0x1f, 0x01, state->config->invert_oclk);
629
630	return 0;
631}
632
633static int tda10046_init(struct dvb_frontend* fe)
634{
635	struct tda1004x_state* state = fe->demodulator_priv;
636	dprintk("%s\n", __func__);
637
638	if (tda10046_fwupload(fe)) {
639		printk("tda1004x: firmware upload failed\n");
640		return -EIO;
641	}
642
643	// tda setup
644	tda1004x_write_mask(state, TDA1004X_CONFC4, 0x20, 0); // disable DSP watchdog timer
645	tda1004x_write_byteI(state, TDA1004X_AUTO, 0x87);    // 100 ppm crystal, select HP stream
646	tda1004x_write_byteI(state, TDA1004X_CONFC1, 0x88);      // enable pulse killer
647
648	switch (state->config->agc_config) {
649	case TDA10046_AGC_DEFAULT:
650		tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x00); // AGC setup
651		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
652		break;
653	case TDA10046_AGC_IFO_AUTO_NEG:
654		tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
655		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
656		break;
657	case TDA10046_AGC_IFO_AUTO_POS:
658		tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x0a); // AGC setup
659		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x00);  // set AGC polarities
660		break;
661	case TDA10046_AGC_TDA827X:
662		tda1004x_write_byteI(state, TDA10046H_AGC_CONF, 0x02);   // AGC setup
663		tda1004x_write_byteI(state, TDA10046H_AGC_THR, 0x70);    // AGC Threshold
664		tda1004x_write_byteI(state, TDA10046H_AGC_RENORM, 0x08); // Gain Renormalize
665		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0xf0, 0x60);  // set AGC polarities
666		break;
667	}
668	if (state->config->ts_mode == 0) {
669		tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x40);
670		tda1004x_write_mask(state, 0x3a, 0x80, state->config->invert_oclk << 7);
671	} else {
672		tda1004x_write_mask(state, TDA10046H_CONF_TRISTATE1, 0xc0, 0x80);
673		tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x10,
674							state->config->invert_oclk << 4);
675	}
676	tda1004x_write_byteI(state, TDA1004X_CONFADC2, 0x38);
677	tda1004x_write_mask (state, TDA10046H_CONF_TRISTATE1, 0x3e, 0x38); // Turn IF AGC output on
678	tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MIN, 0);	  // }
679	tda1004x_write_byteI(state, TDA10046H_AGC_TUN_MAX, 0xff); // } AGC min/max values
680	tda1004x_write_byteI(state, TDA10046H_AGC_IF_MIN, 0);	  // }
681	tda1004x_write_byteI(state, TDA10046H_AGC_IF_MAX, 0xff);  // }
682	tda1004x_write_byteI(state, TDA10046H_AGC_GAINS, 0x12); // IF gain 2, TUN gain 1
683	tda1004x_write_byteI(state, TDA10046H_CVBER_CTRL, 0x1a); // 10^6 VBER measurement bits
684	tda1004x_write_byteI(state, TDA1004X_CONF_TS1, 7); // MPEG2 interface config
685	tda1004x_write_byteI(state, TDA1004X_CONF_TS2, 0xc0); // MPEG2 interface config
686	// tda1004x_write_mask(state, 0x50, 0x80, 0x80);         // handle out of guard echoes
687
688	return 0;
689}
690
691static int tda1004x_set_fe(struct dvb_frontend *fe)
692{
693	struct dtv_frontend_properties *fe_params = &fe->dtv_property_cache;
694	struct tda1004x_state* state = fe->demodulator_priv;
695	int tmp;
696	int inversion;
697
698	dprintk("%s\n", __func__);
699
700	if (state->demod_type == TDA1004X_DEMOD_TDA10046) {
701		// setup auto offset
702		tda1004x_write_mask(state, TDA1004X_AUTO, 0x10, 0x10);
703		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x80, 0);
704		tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0xC0, 0);
705
706		// disable agc_conf[2]
707		tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 0);
708	}
709
710	// set frequency
711	if (fe->ops.tuner_ops.set_params) {
712		fe->ops.tuner_ops.set_params(fe);
713		if (fe->ops.i2c_gate_ctrl)
714			fe->ops.i2c_gate_ctrl(fe, 0);
715	}
716
717	// Hardcoded to use auto as much as possible on the TDA10045 as it
718	// is very unreliable if AUTO mode is _not_ used.
719	if (state->demod_type == TDA1004X_DEMOD_TDA10045) {
720		fe_params->code_rate_HP = FEC_AUTO;
721		fe_params->guard_interval = GUARD_INTERVAL_AUTO;
722		fe_params->transmission_mode = TRANSMISSION_MODE_AUTO;
723	}
724
725	// Set standard params.. or put them to auto
726	if ((fe_params->code_rate_HP == FEC_AUTO) ||
727		(fe_params->code_rate_LP == FEC_AUTO) ||
728		(fe_params->modulation == QAM_AUTO) ||
729		(fe_params->hierarchy == HIERARCHY_AUTO)) {
730		tda1004x_write_mask(state, TDA1004X_AUTO, 1, 1);	// enable auto
731		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x03, 0);	/* turn off modulation bits */
732		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0);	// turn off hierarchy bits
733		tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x3f, 0);	// turn off FEC bits
734	} else {
735		tda1004x_write_mask(state, TDA1004X_AUTO, 1, 0);	// disable auto
736
737		// set HP FEC
738		tmp = tda1004x_encode_fec(fe_params->code_rate_HP);
739		if (tmp < 0)
740			return tmp;
741		tda1004x_write_mask(state, TDA1004X_IN_CONF2, 7, tmp);
742
743		// set LP FEC
744		tmp = tda1004x_encode_fec(fe_params->code_rate_LP);
745		if (tmp < 0)
746			return tmp;
747		tda1004x_write_mask(state, TDA1004X_IN_CONF2, 0x38, tmp << 3);
748
749		/* set modulation */
750		switch (fe_params->modulation) {
751		case QPSK:
752			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 0);
753			break;
754
755		case QAM_16:
756			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 1);
757			break;
758
759		case QAM_64:
760			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 3, 2);
761			break;
762
763		default:
764			return -EINVAL;
765		}
766
767		// set hierarchy
768		switch (fe_params->hierarchy) {
769		case HIERARCHY_NONE:
770			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 0 << 5);
771			break;
772
773		case HIERARCHY_1:
774			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 1 << 5);
775			break;
776
777		case HIERARCHY_2:
778			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 2 << 5);
779			break;
780
781		case HIERARCHY_4:
782			tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x60, 3 << 5);
783			break;
784
785		default:
786			return -EINVAL;
787		}
788	}
789
790	// set bandwidth
791	switch (state->demod_type) {
792	case TDA1004X_DEMOD_TDA10045:
793		tda10045h_set_bandwidth(state, fe_params->bandwidth_hz);
794		break;
795
796	case TDA1004X_DEMOD_TDA10046:
797		tda10046h_set_bandwidth(state, fe_params->bandwidth_hz);
798		break;
799	}
800
801	// set inversion
802	inversion = fe_params->inversion;
803	if (state->config->invert)
804		inversion = inversion ? INVERSION_OFF : INVERSION_ON;
805	switch (inversion) {
806	case INVERSION_OFF:
807		tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0);
808		break;
809
810	case INVERSION_ON:
811		tda1004x_write_mask(state, TDA1004X_CONFC1, 0x20, 0x20);
812		break;
813
814	default:
815		return -EINVAL;
816	}
817
818	// set guard interval
819	switch (fe_params->guard_interval) {
820	case GUARD_INTERVAL_1_32:
821		tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
822		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
823		break;
824
825	case GUARD_INTERVAL_1_16:
826		tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
827		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 1 << 2);
828		break;
829
830	case GUARD_INTERVAL_1_8:
831		tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
832		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 2 << 2);
833		break;
834
835	case GUARD_INTERVAL_1_4:
836		tda1004x_write_mask(state, TDA1004X_AUTO, 2, 0);
837		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 3 << 2);
838		break;
839
840	case GUARD_INTERVAL_AUTO:
841		tda1004x_write_mask(state, TDA1004X_AUTO, 2, 2);
842		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x0c, 0 << 2);
843		break;
844
845	default:
846		return -EINVAL;
847	}
848
849	// set transmission mode
850	switch (fe_params->transmission_mode) {
851	case TRANSMISSION_MODE_2K:
852		tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
853		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0 << 4);
854		break;
855
856	case TRANSMISSION_MODE_8K:
857		tda1004x_write_mask(state, TDA1004X_AUTO, 4, 0);
858		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 1 << 4);
859		break;
860
861	case TRANSMISSION_MODE_AUTO:
862		tda1004x_write_mask(state, TDA1004X_AUTO, 4, 4);
863		tda1004x_write_mask(state, TDA1004X_IN_CONF1, 0x10, 0);
864		break;
865
866	default:
867		return -EINVAL;
868	}
869
870	// start the lock
871	switch (state->demod_type) {
872	case TDA1004X_DEMOD_TDA10045:
873		tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 8);
874		tda1004x_write_mask(state, TDA1004X_CONFC4, 8, 0);
875		break;
876
877	case TDA1004X_DEMOD_TDA10046:
878		tda1004x_write_mask(state, TDA1004X_AUTO, 0x40, 0x40);
879		msleep(1);
880		tda1004x_write_mask(state, TDA10046H_AGC_CONF, 4, 1);
881		break;
882	}
883
884	msleep(10);
885
886	return 0;
887}
888
889static int tda1004x_get_fe(struct dvb_frontend *fe,
890			   struct dtv_frontend_properties *fe_params)
891{
892	struct tda1004x_state* state = fe->demodulator_priv;
893	int status;
894
895	dprintk("%s\n", __func__);
896
897	status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
898	if (status == -1)
899		return -EIO;
900
901	/* Only update the properties cache if device is locked */
902	if (!(status & 8))
903		return 0;
904
905	// inversion status
906	fe_params->inversion = INVERSION_OFF;
907	if (tda1004x_read_byte(state, TDA1004X_CONFC1) & 0x20)
908		fe_params->inversion = INVERSION_ON;
909	if (state->config->invert)
910		fe_params->inversion = fe_params->inversion ? INVERSION_OFF : INVERSION_ON;
911
912	// bandwidth
913	switch (state->demod_type) {
914	case TDA1004X_DEMOD_TDA10045:
915		switch (tda1004x_read_byte(state, TDA10045H_WREF_LSB)) {
916		case 0x14:
917			fe_params->bandwidth_hz = 8000000;
918			break;
919		case 0xdb:
920			fe_params->bandwidth_hz = 7000000;
921			break;
922		case 0x4f:
923			fe_params->bandwidth_hz = 6000000;
924			break;
925		}
926		break;
927	case TDA1004X_DEMOD_TDA10046:
928		switch (tda1004x_read_byte(state, TDA10046H_TIME_WREF1)) {
929		case 0x5c:
930		case 0x54:
931			fe_params->bandwidth_hz = 8000000;
932			break;
933		case 0x6a:
934		case 0x60:
935			fe_params->bandwidth_hz = 7000000;
936			break;
937		case 0x7b:
938		case 0x70:
939			fe_params->bandwidth_hz = 6000000;
940			break;
941		}
942		break;
943	}
944
945	// FEC
946	fe_params->code_rate_HP =
947	    tda1004x_decode_fec(tda1004x_read_byte(state, TDA1004X_OUT_CONF2) & 7);
948	fe_params->code_rate_LP =
949	    tda1004x_decode_fec((tda1004x_read_byte(state, TDA1004X_OUT_CONF2) >> 3) & 7);
950
951	/* modulation */
952	switch (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 3) {
953	case 0:
954		fe_params->modulation = QPSK;
955		break;
956	case 1:
957		fe_params->modulation = QAM_16;
958		break;
959	case 2:
960		fe_params->modulation = QAM_64;
961		break;
962	}
963
964	// transmission mode
965	fe_params->transmission_mode = TRANSMISSION_MODE_2K;
966	if (tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x10)
967		fe_params->transmission_mode = TRANSMISSION_MODE_8K;
968
969	// guard interval
970	switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x0c) >> 2) {
971	case 0:
972		fe_params->guard_interval = GUARD_INTERVAL_1_32;
973		break;
974	case 1:
975		fe_params->guard_interval = GUARD_INTERVAL_1_16;
976		break;
977	case 2:
978		fe_params->guard_interval = GUARD_INTERVAL_1_8;
979		break;
980	case 3:
981		fe_params->guard_interval = GUARD_INTERVAL_1_4;
982		break;
983	}
984
985	// hierarchy
986	switch ((tda1004x_read_byte(state, TDA1004X_OUT_CONF1) & 0x60) >> 5) {
987	case 0:
988		fe_params->hierarchy = HIERARCHY_NONE;
989		break;
990	case 1:
991		fe_params->hierarchy = HIERARCHY_1;
992		break;
993	case 2:
994		fe_params->hierarchy = HIERARCHY_2;
995		break;
996	case 3:
997		fe_params->hierarchy = HIERARCHY_4;
998		break;
999	}
1000
1001	return 0;
1002}
1003
1004static int tda1004x_read_status(struct dvb_frontend *fe,
1005				enum fe_status *fe_status)
1006{
1007	struct tda1004x_state* state = fe->demodulator_priv;
1008	int status;
1009	int cber;
1010	int vber;
1011
1012	dprintk("%s\n", __func__);
1013
1014	// read status
1015	status = tda1004x_read_byte(state, TDA1004X_STATUS_CD);
1016	if (status == -1)
1017		return -EIO;
1018
1019	// decode
1020	*fe_status = 0;
1021	if (status & 4)
1022		*fe_status |= FE_HAS_SIGNAL;
1023	if (status & 2)
1024		*fe_status |= FE_HAS_CARRIER;
1025	if (status & 8)
1026		*fe_status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
1027
1028	// if we don't already have VITERBI (i.e. not LOCKED), see if the viterbi
1029	// is getting anything valid
1030	if (!(*fe_status & FE_HAS_VITERBI)) {
1031		// read the CBER
1032		cber = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1033		if (cber == -1)
1034			return -EIO;
1035		status = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1036		if (status == -1)
1037			return -EIO;
1038		cber |= (status << 8);
1039		// The address 0x20 should be read to cope with a TDA10046 bug
1040		tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1041
1042		if (cber != 65535)
1043			*fe_status |= FE_HAS_VITERBI;
1044	}
1045
1046	// if we DO have some valid VITERBI output, but don't already have SYNC
1047	// bytes (i.e. not LOCKED), see if the RS decoder is getting anything valid.
1048	if ((*fe_status & FE_HAS_VITERBI) && (!(*fe_status & FE_HAS_SYNC))) {
1049		// read the VBER
1050		vber = tda1004x_read_byte(state, TDA1004X_VBER_LSB);
1051		if (vber == -1)
1052			return -EIO;
1053		status = tda1004x_read_byte(state, TDA1004X_VBER_MID);
1054		if (status == -1)
1055			return -EIO;
1056		vber |= (status << 8);
1057		status = tda1004x_read_byte(state, TDA1004X_VBER_MSB);
1058		if (status == -1)
1059			return -EIO;
1060		vber |= (status & 0x0f) << 16;
1061		// The CVBER_LUT should be read to cope with TDA10046 hardware bug
1062		tda1004x_read_byte(state, TDA1004X_CVBER_LUT);
1063
1064		// if RS has passed some valid TS packets, then we must be
1065		// getting some SYNC bytes
1066		if (vber < 16632)
1067			*fe_status |= FE_HAS_SYNC;
1068	}
1069
1070	// success
1071	dprintk("%s: fe_status=0x%x\n", __func__, *fe_status);
1072	return 0;
1073}
1074
1075static int tda1004x_read_signal_strength(struct dvb_frontend* fe, u16 * signal)
1076{
1077	struct tda1004x_state* state = fe->demodulator_priv;
1078	int tmp;
1079	int reg = 0;
1080
1081	dprintk("%s\n", __func__);
1082
1083	// determine the register to use
1084	switch (state->demod_type) {
1085	case TDA1004X_DEMOD_TDA10045:
1086		reg = TDA10045H_S_AGC;
1087		break;
1088
1089	case TDA1004X_DEMOD_TDA10046:
1090		reg = TDA10046H_AGC_IF_LEVEL;
1091		break;
1092	}
1093
1094	// read it
1095	tmp = tda1004x_read_byte(state, reg);
1096	if (tmp < 0)
1097		return -EIO;
1098
1099	*signal = (tmp << 8) | tmp;
1100	dprintk("%s: signal=0x%x\n", __func__, *signal);
1101	return 0;
1102}
1103
1104static int tda1004x_read_snr(struct dvb_frontend* fe, u16 * snr)
1105{
1106	struct tda1004x_state* state = fe->demodulator_priv;
1107	int tmp;
1108
1109	dprintk("%s\n", __func__);
1110
1111	// read it
1112	tmp = tda1004x_read_byte(state, TDA1004X_SNR);
1113	if (tmp < 0)
1114		return -EIO;
1115	tmp = 255 - tmp;
1116
1117	*snr = ((tmp << 8) | tmp);
1118	dprintk("%s: snr=0x%x\n", __func__, *snr);
1119	return 0;
1120}
1121
1122static int tda1004x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
1123{
1124	struct tda1004x_state* state = fe->demodulator_priv;
1125	int tmp;
1126	int tmp2;
1127	int counter;
1128
1129	dprintk("%s\n", __func__);
1130
1131	// read the UCBLOCKS and reset
1132	counter = 0;
1133	tmp = tda1004x_read_byte(state, TDA1004X_UNCOR);
1134	if (tmp < 0)
1135		return -EIO;
1136	tmp &= 0x7f;
1137	while (counter++ < 5) {
1138		tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1139		tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1140		tda1004x_write_mask(state, TDA1004X_UNCOR, 0x80, 0);
1141
1142		tmp2 = tda1004x_read_byte(state, TDA1004X_UNCOR);
1143		if (tmp2 < 0)
1144			return -EIO;
1145		tmp2 &= 0x7f;
1146		if ((tmp2 < tmp) || (tmp2 == 0))
1147			break;
1148	}
1149
1150	if (tmp != 0x7f)
1151		*ucblocks = tmp;
1152	else
1153		*ucblocks = 0xffffffff;
1154
1155	dprintk("%s: ucblocks=0x%x\n", __func__, *ucblocks);
1156	return 0;
1157}
1158
1159static int tda1004x_read_ber(struct dvb_frontend* fe, u32* ber)
1160{
1161	struct tda1004x_state* state = fe->demodulator_priv;
1162	int tmp;
1163
1164	dprintk("%s\n", __func__);
1165
1166	// read it in
1167	tmp = tda1004x_read_byte(state, TDA1004X_CBER_LSB);
1168	if (tmp < 0)
1169		return -EIO;
1170	*ber = tmp << 1;
1171	tmp = tda1004x_read_byte(state, TDA1004X_CBER_MSB);
1172	if (tmp < 0)
1173		return -EIO;
1174	*ber |= (tmp << 9);
1175	// The address 0x20 should be read to cope with a TDA10046 bug
1176	tda1004x_read_byte(state, TDA1004X_CBER_RESET);
1177
1178	dprintk("%s: ber=0x%x\n", __func__, *ber);
1179	return 0;
1180}
1181
1182static int tda1004x_sleep(struct dvb_frontend* fe)
1183{
1184	struct tda1004x_state* state = fe->demodulator_priv;
1185	int gpio_conf;
1186
1187	switch (state->demod_type) {
1188	case TDA1004X_DEMOD_TDA10045:
1189		tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0x10);
1190		break;
1191
1192	case TDA1004X_DEMOD_TDA10046:
1193		/* set outputs to tristate */
1194		tda1004x_write_byteI(state, TDA10046H_CONF_TRISTATE1, 0xff);
1195		/* invert GPIO 1 and 3 if desired*/
1196		gpio_conf = state->config->gpio_config;
1197		if (gpio_conf >= TDA10046_GP00_I)
1198			tda1004x_write_mask(state, TDA10046H_CONF_POLARITY, 0x0f,
1199							(gpio_conf & 0x0f) ^ 0x0a);
1200
1201		tda1004x_write_mask(state, TDA1004X_CONFADC2, 0xc0, 0xc0);
1202		tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1);
1203		break;
1204	}
1205
1206	return 0;
1207}
1208
1209static int tda1004x_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
1210{
1211	struct tda1004x_state* state = fe->demodulator_priv;
1212
1213	if (enable) {
1214		return tda1004x_enable_tuner_i2c(state);
1215	} else {
1216		return tda1004x_disable_tuner_i2c(state);
1217	}
1218}
1219
1220static int tda1004x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings)
1221{
1222	fesettings->min_delay_ms = 800;
1223	/* Drift compensation makes no sense for DVB-T */
1224	fesettings->step_size = 0;
1225	fesettings->max_drift = 0;
1226	return 0;
1227}
1228
1229static void tda1004x_release(struct dvb_frontend* fe)
1230{
1231	struct tda1004x_state *state = fe->demodulator_priv;
1232	kfree(state);
1233}
1234
1235static const struct dvb_frontend_ops tda10045_ops = {
1236	.delsys = { SYS_DVBT },
1237	.info = {
1238		.name = "Philips TDA10045H DVB-T",
1239		.frequency_min_hz =  51 * MHz,
1240		.frequency_max_hz = 858 * MHz,
1241		.frequency_stepsize_hz = 166667,
1242		.caps =
1243		    FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1244		    FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1245		    FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1246		    FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1247	},
1248
1249	.release = tda1004x_release,
1250
1251	.init = tda10045_init,
1252	.sleep = tda1004x_sleep,
1253	.write = tda1004x_write,
1254	.i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1255
1256	.set_frontend = tda1004x_set_fe,
1257	.get_frontend = tda1004x_get_fe,
1258	.get_tune_settings = tda1004x_get_tune_settings,
1259
1260	.read_status = tda1004x_read_status,
1261	.read_ber = tda1004x_read_ber,
1262	.read_signal_strength = tda1004x_read_signal_strength,
1263	.read_snr = tda1004x_read_snr,
1264	.read_ucblocks = tda1004x_read_ucblocks,
1265};
1266
1267struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config,
1268				     struct i2c_adapter* i2c)
1269{
1270	struct tda1004x_state *state;
1271	int id;
1272
1273	/* allocate memory for the internal state */
1274	state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1275	if (!state) {
1276		printk(KERN_ERR "Can't allocate memory for tda10045 state\n");
1277		return NULL;
1278	}
1279
1280	/* setup the state */
1281	state->config = config;
1282	state->i2c = i2c;
1283	state->demod_type = TDA1004X_DEMOD_TDA10045;
1284
1285	/* check if the demod is there */
1286	id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1287	if (id < 0) {
1288		printk(KERN_ERR "tda10045: chip is not answering. Giving up.\n");
1289		kfree(state);
1290		return NULL;
1291	}
1292
1293	if (id != 0x25) {
1294		printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1295		kfree(state);
1296		return NULL;
1297	}
1298
1299	/* create dvb_frontend */
1300	memcpy(&state->frontend.ops, &tda10045_ops, sizeof(struct dvb_frontend_ops));
1301	state->frontend.demodulator_priv = state;
1302	return &state->frontend;
1303}
1304
1305static const struct dvb_frontend_ops tda10046_ops = {
1306	.delsys = { SYS_DVBT },
1307	.info = {
1308		.name = "Philips TDA10046H DVB-T",
1309		.frequency_min_hz =  51 * MHz,
1310		.frequency_max_hz = 858 * MHz,
1311		.frequency_stepsize_hz = 166667,
1312		.caps =
1313		    FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1314		    FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1315		    FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
1316		    FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO
1317	},
1318
1319	.release = tda1004x_release,
1320
1321	.init = tda10046_init,
1322	.sleep = tda1004x_sleep,
1323	.write = tda1004x_write,
1324	.i2c_gate_ctrl = tda1004x_i2c_gate_ctrl,
1325
1326	.set_frontend = tda1004x_set_fe,
1327	.get_frontend = tda1004x_get_fe,
1328	.get_tune_settings = tda1004x_get_tune_settings,
1329
1330	.read_status = tda1004x_read_status,
1331	.read_ber = tda1004x_read_ber,
1332	.read_signal_strength = tda1004x_read_signal_strength,
1333	.read_snr = tda1004x_read_snr,
1334	.read_ucblocks = tda1004x_read_ucblocks,
1335};
1336
1337struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config,
1338				     struct i2c_adapter* i2c)
1339{
1340	struct tda1004x_state *state;
1341	int id;
1342
1343	/* allocate memory for the internal state */
1344	state = kzalloc(sizeof(struct tda1004x_state), GFP_KERNEL);
1345	if (!state) {
1346		printk(KERN_ERR "Can't allocate memory for tda10046 state\n");
1347		return NULL;
1348	}
1349
1350	/* setup the state */
1351	state->config = config;
1352	state->i2c = i2c;
1353	state->demod_type = TDA1004X_DEMOD_TDA10046;
1354
1355	/* check if the demod is there */
1356	id = tda1004x_read_byte(state, TDA1004X_CHIPID);
1357	if (id < 0) {
1358		printk(KERN_ERR "tda10046: chip is not answering. Giving up.\n");
1359		kfree(state);
1360		return NULL;
1361	}
1362	if (id != 0x46) {
1363		printk(KERN_ERR "Invalid tda1004x ID = 0x%02x. Can't proceed\n", id);
1364		kfree(state);
1365		return NULL;
1366	}
1367
1368	/* create dvb_frontend */
1369	memcpy(&state->frontend.ops, &tda10046_ops, sizeof(struct dvb_frontend_ops));
1370	state->frontend.demodulator_priv = state;
1371	return &state->frontend;
1372}
1373
1374module_param(debug, int, 0644);
1375MODULE_PARM_DESC(debug, "Turn on/off frontend debugging (default:off).");
1376
1377MODULE_DESCRIPTION("Philips TDA10045H & TDA10046H DVB-T Demodulator");
1378MODULE_AUTHOR("Andrew de Quincey & Robert Schlabbach");
1379MODULE_LICENSE("GPL");
1380
1381EXPORT_SYMBOL_GPL(tda10045_attach);
1382EXPORT_SYMBOL_GPL(tda10046_attach);
1383