hdtv usb dvb-t

Riconoscimento, installazione e configurazione delle periferiche.
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

valerio993 ha scritto: analizzando le 2 patch ho visto come funzionavano ed ho modificato quella che va sui repo mercurial, in modo da poterla applicare.

la patch è questa

Codice: Seleziona tutto

diff -r 0f41fd7df85d linux/drivers/media/common/tuners/Kconfig
--- a/linux/drivers/media/common/tuners/Kconfig	Thu Feb 11 02:33:12 2010 +0200
+++ b/linux/drivers/media/common/tuners/Kconfig	Thu Feb 25 17:21:11 2010 +0100
@@ -179,4 +179,11 @@ config MEDIA_TUNER_MAX2165
 	help
 	  A driver for the silicon tuner MAX2165 from Maxim.
 
+config MEDIA_TUNER_TDA18218
+	tristate "NXP TDA18218 silicon tuner"
+	depends on VIDEO_MEDIA && I2C
+	default m if MEDIA_TUNER_CUSTOMISE
+	help
+	  A driver for the silicon tuner TDA18218 from NXP.
+
 endif # MEDIA_TUNER_CUSTOMISE
diff -r 0f41fd7df85d linux/drivers/media/common/tuners/Makefile
--- a/linux/drivers/media/common/tuners/Makefile	Thu Feb 11 02:33:12 2010 +0200
+++ b/linux/drivers/media/common/tuners/Makefile	Thu Feb 25 17:21:11 2010 +0100
@@ -24,6 +24,7 @@ obj-$(CONFIG_MEDIA_TUNER_MXL5005S) += mxl5005s.o
 obj-$(CONFIG_MEDIA_TUNER_MXL5007T) += mxl5007t.o
 obj-$(CONFIG_MEDIA_TUNER_MC44S803) += mc44s803.o
 obj-$(CONFIG_MEDIA_TUNER_MAX2165) += max2165.o
+obj-$(CONFIG_MEDIA_TUNER_TDA18218) += tda18218.o
 
 EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
 EXTRA_CFLAGS += -Idrivers/media/dvb/frontends
diff -r 0f41fd7df85d linux/drivers/media/common/tuners/tda18218.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linux/drivers/media/common/tuners/tda18218.c	Thu Feb 25 17:21:11 2010 +0100
@@ -0,0 +1,432 @@
+/*
+ *  Driver for NXP TDA18218 silicon tuner
+ *
+ *  Copyright (C) 2010 Lauris Ding <lding@gmx.de>
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include "tda18218.h"
+#include "tda18218_priv.h"
+
+static int tda18218_write_reg(struct dvb_frontend *fe, u8 reg, u8 val)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	u8 buf[2] = { reg, val };
+	struct i2c_msg msg = { .addr = priv->cfg->i2c_address, .flags = 0,
+			       .buf = buf, .len = 2 };
+	int ret;
+
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 1);
+	/* write register */
+	ret = i2c_transfer(priv->i2c, &msg, 1);
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 0);
+
+	if (ret != 1)
+		printk(KERN_WARNING "I2C write failed ret: %d reg: %02x\n", ret, reg);
+
+	return (ret == 1 ? 0 : ret);
+}
+
+static int tda18218_write_regs(struct dvb_frontend *fe, u8 reg,
+	u8 *val, u8 len)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	u8 buf[1+len];
+	struct i2c_msg msg = {
+		.addr = priv->cfg->i2c_address,
+		.flags = 0,
+		.len = sizeof(buf),
+		.buf = buf };
+
+	int ret;
+
+	buf[0] = reg;
+	memcpy(&buf[1], val, len);
+
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 1);
+	ret = i2c_transfer(priv->i2c, &msg, 1);
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 1);
+
+	if (ret != 1)
+		printk(KERN_WARNING "I2C write failed ret: %d reg: %02x len: %d\n", ret, reg, len);
+
+	return (ret == 1 ? 0 : ret);
+}
+
+static int tda18218_read_regs(struct dvb_frontend *fe)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	u8 *regs = priv->tda18218_regs;
+	u8 buf = 0x00;
+	int ret;
+	struct i2c_msg msg[] = {
+		{ .addr = 0xc0, .flags = 0,
+		  .buf = &buf, .len = 1 },
+		{ .addr = 0xc0, .flags = I2C_M_RD,
+		  .buf = regs, .len = 59 }
+	};
+
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 1);
+
+	/* read all registers */
+	ret = i2c_transfer(priv->i2c, msg, 2);
+
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 0);
+
+	if (ret != 2)
+		printk(KERN_WARNING "I2C read failed ret: %d\n", ret);
+
+	return (ret == 2 ? 0 : ret);
+}
+
+static int tda18218_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	u8 *regs = priv->tda18218_regs;
+	u8 Fc, BP;
+	int i, ret;
+	u16 if1, bw;
+	u32 freq;
+
+	u8 paramsbuf[4][6] = {
+		{ 0x03, 0x1a },
+		{ 0x04, 0x0a },
+		{ 0x01, 0x0f },
+		{ 0x01, 0x0f },
+	};
+
+	u8 agcbuf[][2] = {
+		{ 0x1a, 0x0e },
+		{ 0x20, 0x60 },
+		{ 0x23, 0x02 },
+		{ 0x20, 0xa0 },
+		{ 0x23, 0x09 },
+		{ 0x20, 0xe0 },
+		{ 0x23, 0x0c },
+		{ 0x20, 0x40 },
+		{ 0x23, 0x01 },
+		{ 0x20, 0x80 },
+		{ 0x23, 0x08 },
+		{ 0x20, 0xc0 },
+		{ 0x23, 0x0b },
+		{ 0x24, 0x1c },
+		{ 0x24, 0x0c },
+	};
+
+	switch (params->u.ofdm.bandwidth) {
+	case BANDWIDTH_6_MHZ:
+		bw = 6000;
+		Fc = 0;
+		break;
+	case BANDWIDTH_7_MHZ:
+		bw = 7000;
+		Fc = 1;
+		break;
+	case BANDWIDTH_8_MHZ:
+		bw = 8000;
+		Fc = 2;
+		break;
+	default:
+		printk(KERN_WARNING "Invalid bandwidth");
+		return -EINVAL;
+	}
+
+	if1 = bw / 2;
+
+	if((params->frequency >= 174000000) && (params->frequency < 188000000)) {
+		BP = 3;
+	}
+	else if((params->frequency >= 188000000) && (params->frequency < 253000000)) {
+		BP = 4;
+	}
+	else if((params->frequency >= 253000000) && (params->frequency < 343000000)) {
+		BP = 5;
+	}
+	else if((params->frequency >= 343000000) && (params->frequency <= 870000000)) {
+		BP = 6;
+	}
+	else {
+		printk(KERN_WARNING "Frequency out of range");
+		return -EINVAL;
+	}
+
+	freq = params->frequency;
+	freq /= 1000;
+	freq +=if1;
+	freq *= 16;
+
+	tda18218_read_regs(fe);
+
+	paramsbuf[0][2] = regs[0x1a] | BP;
+	paramsbuf[0][3] = regs[0x1b] & ~3;
+	paramsbuf[0][3] = regs[0x1b] | Fc;
+	paramsbuf[0][4] = regs[0x1c] | 0x0a;
+
+	paramsbuf[1][2] = freq >> 16;
+	paramsbuf[1][3] = freq >> 8;
+	paramsbuf[1][4] = (freq & 0xf0) | (regs[0x0c] & 0x0f);
+	paramsbuf[1][5] = 0xff;
+	paramsbuf[2][2] = regs[0x0f] | 0x40;
+	paramsbuf[3][2] = 0x09;
+
+	tda18218_write_reg(fe, 0x04, 0x03);
+
+	for(i = 0; i < ARRAY_SIZE(paramsbuf); i++) {
+
+		/* write registers */
+		ret = tda18218_write_regs(fe, paramsbuf[i][1], &paramsbuf[i][2], paramsbuf[i][0]);
+
+		if (ret)
+			goto error;
+	}
+	for(i = 0; i < ARRAY_SIZE(agcbuf); i++) {
+		tda18218_write_reg(fe, agcbuf[i][0], agcbuf[i][1]);
+	}
+
+	msleep(60);
+	i = 0;
+	while(i < 10) {
+		tda18218_read_regs(fe);
+		if((regs[0x01] & 0x60) == 0x60)
+			printk(KERN_INFO "We've got a lock!"); break;
+		msleep(20);
+		i++;
+	}
+
+	priv->bandwidth = params->u.ofdm.bandwidth;
+	priv->frequency = params->frequency;
+	return 0;
+error:
+	return ret;
+}
+
+static int tda18218_get_frequency(struct dvb_frontend *fe, u32 *frequency)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	*frequency = priv->frequency;
+	return 0;
+}
+
+static int tda18218_get_bandwidth(struct dvb_frontend *fe, u32 *bandwidth)
+{
+	struct tda18218_priv *priv = fe->tuner_priv;
+	*bandwidth = priv->bandwidth;
+	return 0;
+}
+
+static int tda18218_init(struct dvb_frontend *fe)
+{
+	int i;
+	int ret;
+
+	u8 initbuf[][18] = {
+		{ 0x10, 0x05, 0x00, 0x00, 0xd0, 0x00, 0x40, 0x00, 0x00, 0x07, 0xff, 0x84, 0x09, 0x00, 0x13, 0x00, 0x00, 0x01 },
+		{ 0x0b, 0x15, 0x84, 0x09, 0xf0, 0x19, 0x0a, 0x0e, 0x29, 0x98, 0x00, 0x00, 0x58 },
+		{ 0x10, 0x24, 0x0c, 0x48, 0x85, 0xc9, 0xa7, 0x00, 0x00, 0x00, 0x30, 0x81, 0x80, 0x00, 0x39, 0x00, 0x8a, 0x00 },
+		{ 0x07, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xf6 },
+	};
+
+	u8 initbuf2[4];
+
+	for(i = 0; i < ARRAY_SIZE(initbuf); i++) {
+		/* write registers */
+		ret = tda18218_write_regs(fe, initbuf[i][1], &initbuf[i][2], initbuf[i][0]);
+
+		if (ret != 0) {
+			printk(KERN_ERR "init: ERROR: i2c_transfer returned: %d\n", ret);
+			return -EREMOTEIO;
+		}
+		if(i == 1) {
+			tda18218_write_reg(fe, 0x22, 0x8c);
+		}
+	}
+
+	tda18218_write_reg(fe, 0x05, 0x80);
+	tda18218_write_reg(fe, 0x05, 0x00);
+	tda18218_write_reg(fe, 0x05, 0x20);
+	tda18218_write_reg(fe, 0x05, 0x00);
+	tda18218_write_reg(fe, 0x27, 0xde);
+	tda18218_write_reg(fe, 0x17, 0xf8);
+	tda18218_write_reg(fe, 0x18, 0x0f);
+	tda18218_write_reg(fe, 0x1c, 0x8b);
+	tda18218_write_reg(fe, 0x29, 0x02);
+	tda18218_write_reg(fe, 0x19, 0x1a);
+	tda18218_write_reg(fe, 0x11, 0x13);
+
+	initbuf2[0] = 0x0a;
+	initbuf2[1] = 0x5c;
+	initbuf2[2] = 0xc6;
+	initbuf2[3] = 0x07;
+	tda18218_write_regs(fe, initbuf2[0], &initbuf2[1], 3);
+	tda18218_write_reg(fe, 0x0f, 0x49);
+	tda18218_write_reg(fe, 0x05, 0x40);
+	tda18218_write_reg(fe, 0x05, 0x00);
+	tda18218_write_reg(fe, 0x05, 0x20);
+	tda18218_write_reg(fe, 0x11, 0xed);
+	tda18218_write_reg(fe, 0x0f, 0x49);
+	tda18218_write_reg(fe, 0x19, 0x2a);
+	tda18218_write_reg(fe, 0x05, 0x58);
+	tda18218_write_reg(fe, 0x05, 0x18);
+	tda18218_write_reg(fe, 0x05, 0x38);
+	tda18218_write_reg(fe, 0x29, 0x03);
+	tda18218_write_reg(fe, 0x19, 0x1a);
+	tda18218_write_reg(fe, 0x11, 0x13);
+	initbuf2[0] = 0x0a;
+	initbuf2[1] = 0xbe;
+	initbuf2[2] = 0x6e;
+	initbuf2[3] = 0x07;
+	tda18218_write_regs(fe, initbuf2[0], &initbuf2[1], 3);
+	tda18218_write_reg(fe, 0x0f, 0x49);
+	tda18218_write_reg(fe, 0x05, 0x58);
+	tda18218_write_reg(fe, 0x05, 0x18);
+	tda18218_write_reg(fe, 0x05, 0x38);
+	tda18218_write_reg(fe, 0x11, 0xed);
+	tda18218_write_reg(fe, 0x0f, 0x49);
+	tda18218_write_reg(fe, 0x19, 0x2a);
+	tda18218_write_reg(fe, 0x05, 0x58);
+	tda18218_write_reg(fe, 0x05, 0x18);
+	tda18218_write_reg(fe, 0x05, 0x38);
+	tda18218_write_reg(fe, 0x19, 0x0a);
+	tda18218_write_reg(fe, 0x27, 0xc9);
+	tda18218_write_reg(fe, 0x11, 0x13);
+	initbuf2[0] = 0x17;
+	initbuf2[1] = 0xf0;
+	initbuf2[2] = 0x19;
+	initbuf2[3] = 0x00;
+	tda18218_write_regs(fe, initbuf2[0], &initbuf2[1], 2);
+	tda18218_write_reg(fe, 0x1c, 0x98);
+	tda18218_write_reg(fe, 0x29, 0x03);
+	tda18218_write_reg(fe, 0x2a, 0x00);
+	tda18218_write_reg(fe, 0x2a, 0x01);
+	tda18218_write_reg(fe, 0x2a, 0x02);
+	tda18218_write_reg(fe, 0x2a, 0x03);
+	tda18218_write_reg(fe, 0x1c, 0x98);
+	tda18218_write_reg(fe, 0x18, 0x19);
+	tda18218_write_reg(fe, 0x22, 0x9c);
+	tda18218_write_reg(fe, 0x1f, 0x58);
+	tda18218_write_reg(fe, 0x24, 0x0c);
+	tda18218_write_reg(fe, 0x1c, 0x88);
+	tda18218_write_reg(fe, 0x20, 0x10);
+	tda18218_write_reg(fe, 0x21, 0x4c);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x21, 0x48);
+	tda18218_write_reg(fe, 0x1f, 0x5b);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x1f, 0x59);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x1f, 0x5a);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x1f, 0x5f);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x1f, 0x5d);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x1f, 0x5e);
+	tda18218_write_reg(fe, 0x20, 0x00);
+	tda18218_write_reg(fe, 0x20, 0x60);
+	tda18218_write_reg(fe, 0x23, 0x02);
+	tda18218_write_reg(fe, 0x20, 0xa0);
+	tda18218_write_reg(fe, 0x23, 0x09);
+	tda18218_write_reg(fe, 0x20, 0xe0);
+	tda18218_write_reg(fe, 0x23, 0x0c);
+	tda18218_write_reg(fe, 0x20, 0x40);
+	tda18218_write_reg(fe, 0x23, 0x01);
+	tda18218_write_reg(fe, 0x20, 0x80);
+	tda18218_write_reg(fe, 0x23, 0x08);
+	tda18218_write_reg(fe, 0x20, 0xc0);
+	tda18218_write_reg(fe, 0x23, 0x0b);
+	tda18218_write_reg(fe, 0x1c, 0x98);
+	tda18218_write_reg(fe, 0x22, 0x8c);
+	initbuf2[0] = 0x17;
+	initbuf2[1] = 0xb0;
+	initbuf2[2] = 0x59;
+	initbuf2[3] = 0x00;
+	initbuf2[0] = 0x1a;
+	initbuf2[1] = 0x0e;
+	initbuf2[2] = 0x2a;
+	initbuf2[3] = 0x98;
+	tda18218_write_regs(fe, initbuf2[0], &initbuf2[1], 3);
+	initbuf2[0] = 0x17;
+	initbuf2[1] = 0xb0;
+	initbuf2[2] = 0x59;
+	initbuf2[3] = 0x00;
+	tda18218_write_regs(fe, initbuf2[0], &initbuf2[1], 2);
+	tda18218_write_reg(fe, 0x2d, 0x81);
+	tda18218_write_reg(fe, 0x29, 0x02);
+
+	return 0;
+}
+
+static int tda18218_release(struct dvb_frontend *fe)
+{
+	kfree(fe->tuner_priv);
+	fe->tuner_priv = NULL;
+	return 0;
+}
+
+static const struct dvb_tuner_ops tda18218_tuner_ops = {
+	.info = {
+		.name           = "NXP TDA18218",
+		.frequency_min  = TDA18218_MIN_FREQ,
+		.frequency_max  = TDA18218_MAX_FREQ,
+		.frequency_step = TDA18218_STEP,
+	},
+
+	.release       = tda18218_release,
+	.init          = tda18218_init,
+
+	.set_params = tda18218_set_params,
+	.get_frequency = tda18218_get_frequency,
+	.get_bandwidth = tda18218_get_bandwidth,
+};
+
+struct dvb_frontend * tda18218_attach(struct dvb_frontend *fe,
+				    struct i2c_adapter *i2c,
+				    struct tda18218_config *cfg)
+{
+	struct tda18218_priv *priv = NULL;
+
+	priv = kzalloc(sizeof(struct tda18218_priv), GFP_KERNEL);
+	if (priv == NULL)
+		return NULL;
+
+	priv->cfg = cfg;
+	priv->i2c = i2c;
+
+	fe->tuner_priv = priv;
+
+	tda18218_read_regs(fe);
+	if (priv->tda18218_regs[0x00] != 0xc0) {
+		printk(KERN_WARNING "Device is not a TDA18218!\n");
+		kfree(priv);
+		return NULL;
+	}
+
+	printk(KERN_INFO "NXP TDA18218 successfully identified.\n");
+	memcpy(&fe->ops.tuner_ops, &tda18218_tuner_ops,
+	       sizeof(struct dvb_tuner_ops));
+
+	return fe;
+}
+EXPORT_SYMBOL(tda18218_attach);
+
+MODULE_DESCRIPTION("NXP TDA18218 silicon tuner driver");
+MODULE_AUTHOR("Lauris Ding <lding@gmx.de>");
+MODULE_VERSION("0.1");
+MODULE_LICENSE("GPL");
diff -r 0f41fd7df85d linux/drivers/media/common/tuners/tda18218.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linux/drivers/media/common/tuners/tda18218.h	Thu Feb 25 17:21:11 2010 +0100
@@ -0,0 +1,44 @@
+/*
+ *  Driver for  NXP TDA18218 silicon tuner
+ *
+ *  Copyright (C) 2010 Lauris Ding <lding@gmx.de>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef TDA18218_H
+#define TDA18218_H
+
+#include "dvb_frontend.h"
+
+struct tda18218_config {
+	u8 i2c_address;
+};
+
+#if defined(CONFIG_MEDIA_TUNER_TDA18218) || (defined(CONFIG_MEDIA_TUNER_TDA18218_MODULE) && defined(MODULE))
+extern struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe,
+					  struct i2c_adapter *i2c,
+					  struct tda18218_config *cfg);
+#else
+static inline struct dvb_frontend *tda18218_attach(struct dvb_frontend *fe,
+						 struct i2c_adapter *i2c,
+						 struct tda18218_config *cfg)
+{
+	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
+	return NULL;
+}
+#endif // CONFIG_MEDIA_TUNER_TDA18218
+
+#endif
\ No newline at end of file
diff -r 0f41fd7df85d linux/drivers/media/common/tuners/tda18218_priv.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linux/drivers/media/common/tuners/tda18218_priv.h	Thu Feb 25 17:21:11 2010 +0100
@@ -0,0 +1,36 @@
+/*
+ *  Driver for NXP TDA18218 silicon tuner
+ *
+ *  Copyright (C) 2010 Lauris Ding <lding@gmx.de>
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef TDA18218_PRIV_H
+#define TDA18218_PRIV_H
+
+#define TDA18218_STEP         1000 /* 1 kHz */
+#define TDA18218_MIN_FREQ   174000000 /*   174 MHz */
+#define TDA18218_MAX_FREQ  864000000 /*  864 MHz */
+
+struct tda18218_priv {
+	u8 tda18218_regs[0x3b];
+	struct tda18218_config *cfg;
+	struct i2c_adapter *i2c;
+
+	u32 frequency;
+	u32 bandwidth;
+};
+
+#endif
diff -r 0f41fd7df85d linux/drivers/media/dvb/dvb-usb/af9015.c
--- a/linux/drivers/media/dvb/dvb-usb/af9015.c	Thu Feb 11 02:33:12 2010 +0200
+++ b/linux/drivers/media/dvb/dvb-usb/af9015.c	Thu Feb 25 17:21:11 2010 +0100
@@ -30,6 +30,7 @@
 #include "tda18271.h"
 #include "mxl5005s.h"
 #include "mc44s803.h"
+#include "tda18218.h"
 
 static int dvb_usb_af9015_debug;
 module_param_named(debug, dvb_usb_af9015_debug, int, 0644);
@@ -991,6 +992,7 @@ static int af9015_read_config(struct usb_device *udev)
 		case AF9013_TUNER_MT2060_2:
 		case AF9013_TUNER_TDA18271:
 		case AF9013_TUNER_QT1010A:
+		case AF9013_TUNER_TDA18218:
 			af9015_af9013_config[i].rf_spec_inv = 1;
 			break;
 		case AF9013_TUNER_MXL5003D:
@@ -1002,9 +1004,6 @@ static int af9015_read_config(struct usb_device *udev)
 			af9015_af9013_config[i].gpio[1] = AF9013_GPIO_LO;
 			af9015_af9013_config[i].rf_spec_inv = 1;
 			break;
-		case AF9013_TUNER_TDA18218:
-			warn("tuner NXP TDA18218 not supported yet");
-			return -ENODEV;
 		default:
 			warn("tuner id:%d not supported, please report!", val);
 			return -ENODEV;
@@ -1207,6 +1206,10 @@ static struct mc44s803_config af9015_mc44s803_config = {
 	.dig_out = 1,
 };
 
+static struct tda18218_config af9015_tda18218_config = {
+        .i2c_address = 0xc0,
+};
+
 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
 {
 	struct af9015_state *state = adap->dev->priv;
@@ -1237,6 +1240,10 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
 		ret = dvb_attach(tda18271_attach, adap->fe, 0xc0, i2c_adap,
 			&af9015_tda18271_config) == NULL ? -ENODEV : 0;
 		break;
+	case AF9013_TUNER_TDA18218:
+		ret = dvb_attach(tda18218_attach, adap->fe, i2c_adap,
+			&af9015_tda18218_config) == NULL ? -ENODEV : 0;
+		break;
 	case AF9013_TUNER_MXL5003D:
 		ret = dvb_attach(mxl5005s_attach, adap->fe, i2c_adap,
 			&af9015_mxl5003_config) == NULL ? -ENODEV : 0;
diff -r 0f41fd7df85d linux/drivers/media/dvb/frontends/af9013.c
--- a/linux/drivers/media/dvb/frontends/af9013.c	Thu Feb 11 02:33:12 2010 +0200
+++ b/linux/drivers/media/dvb/frontends/af9013.c	Thu Feb 25 17:21:11 2010 +0100
@@ -487,6 +487,20 @@ static int af9013_set_freq_ctrl(struct af9013_state *state, fe_bandwidth_t bw)
 				break;
 			}
 		}
+		else if(state->config.tuner == AF9013_TUNER_TDA18218) {
+			switch (bw) {
+			case BANDWIDTH_6_MHZ:
+				if_sample_freq = 3000000; /* 3 MHz */
+				break;
+			case BANDWIDTH_7_MHZ:
+				if_sample_freq = 3500000; /* 3.5 MHz */
+				break;
+			case BANDWIDTH_8_MHZ:
+			default:
+				if_sample_freq = 4000000; /* 4 MHz */
+				break;
+			}
+		}
 
 		while (if_sample_freq > (adc_freq / 2))
 			if_sample_freq = if_sample_freq - adc_freq;
@@ -1389,6 +1403,7 @@ static int af9013_init(struct dvb_frontend *fe)
 		init = tuner_init_mt2060_2;
 		break;
 	case AF9013_TUNER_TDA18271:
+	case AF9013_TUNER_TDA18218:
 		len = ARRAY_SIZE(tuner_init_tda18271);
 		init = tuner_init_tda18271;
 		break;
diff -r 0f41fd7df85d linux/drivers/media/dvb/frontends/af9013_priv.h
--- a/linux/drivers/media/dvb/frontends/af9013_priv.h	Thu Feb 11 02:33:12 2010 +0200
+++ b/linux/drivers/media/dvb/frontends/af9013_priv.h	Thu Feb 25 17:21:11 2010 +0100
@@ -789,8 +789,9 @@ static struct regdesc tuner_init_unknown[] = {
 	{ 0x9bd9, 0, 8, 0x08 },
 };
 
-/* NXP TDA18271 tuner init
-   AF9013_TUNER_TDA18271   = 156 */
+/* NXP TDA18271 & TDA18218 tuner init
+   AF9013_TUNER_TDA18271   = 156
+   AF9013_TUNER_TDA18218   = 179 */
 static struct regdesc tuner_init_tda18271[] = {
 	{ 0x9bd5, 0, 8, 0x01 },
 	{ 0x9bd6, 0, 8, 0x04 },
la patch è stata applicata alla versione 57e489f6538f, scaricabile da questo link http://linuxtv.org/hg/~anttip/af9015/ar ... 38f.tar.gz

L'unica cosa che ho notato fin'ora è che la procedura di cambio del canale sembra leggermente più veloce. Inoltre è capitato il problema dello spegnimento del led che mi fa perdere canale, ma questa volta s'è ripresa da sola...

Vedrò con l'uso se va meglio o se continuerà ad avere piantamenti strani.

La procedura per la compilazione è sempre la stessa. Si scaricano i sorgenti, si applica la patch, si edita v4l/.config disabilitando il modulo firedtv e si compila....
Grande!...Ottimo lavoro !!  (good)

Una curiosità...ti sei fatto un file .diff  per vedere le modifiche, o...hai fatto tutto "a manina"?  :o

EDIT: Ho visto adesso la modifica per il raffreddamento...non sarei mai stato capace di arrivare a tanto !! Sei un mito !!!  (good)
Ultima modifica di Xgaz il lunedì 24 maggio 2010, 15:16, modificato 1 volta in totale.
valerio993
Prode Principiante
Messaggi: 36
Iscrizione: lunedì 5 febbraio 2007, 18:47

Re: hdtv usb dvb-t

Messaggio da valerio993 »

Xgaz ha scritto: Grande!...Ottimo lavoro !!  (good)

Una curiosità...ti sei fatto un file .diff  per vedere le modifiche, o...hai fatto tutto "a manina"?  :o

EDIT: Ho visto adesso la modifica per il raffreddamento...non sarei mai stato capace di arrivare a tanto !! Sei un mito !!!  (good)
Ho preso la vecchia patch e la nuova che lavora su git e l'ho modificato a mano. Non che ci voleva molto, alla fine si trattava di cambiare la path dei file da modificare e l'opzione al comando diff... La cosa "fortunata" è stata che hanno aggiornato anche il repo mercurial, per cui i file sono gli stessi e la patch si applica (almeno alla versione che ho linkato prima), anche se spero in un feed da qualcuno che può provarla per averne conferma!
ostage
Prode Principiante
Messaggi: 90
Iscrizione: sabato 18 luglio 2009, 13:29

Re: hdtv usb dvb-t

Messaggio da ostage »

salve, non volevo aprire una nuova discussione perchè penso sia ancora attuale.
Uso ubuntu 10.4 lts, sono arrivato al punto 3

Codice: Seleziona tutto

tar xjvf af9015-37ff78330942.tar.bz2
ma quando do questo comando mi da :
tar: af9015-37ff78330942.tar.bz2: funzione "open" non riuscita: Nessun file o directory
tar: Errore irrimediabile: uscita immediata
tar: Child returned status 2
tar: Uscita con stato di fallimento in base agli errori precedenti
come posso risolvere?

Edit
Ci sono riuscito lol
Sta facendo la scansione ne ha trovati gia 29329230239 mila LOL
Grazie per la guida, sei un mago, fatene un WIKI!
Ultima modifica di ostage il giovedì 29 luglio 2010, 1:54, modificato 1 volta in totale.
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

ostage ha scritto:
Edit
Ci sono riuscito lol
Sta facendo la scansione ne ha trovati gia 29329230239 mila LOL
Grazie per la guida, sei un mago, fatene un WIKI!
Per adesso indico il link con la procedura completa: http://forum.ubuntu-it.org/viewtopic.ph ... 8#p3029378

;) ;)
voltron81
Prode Principiante
Messaggi: 61
Iscrizione: sabato 27 ottobre 2007, 1:04

Re: hdtv usb dvb-t

Messaggio da voltron81 »

Salve ragazzi.
C'è modo di far funzionare il telecomando con questa pennina ed ubuntu?
Uso kaffeine e l'ultimo driver e funziona perfettamente... ma niente telecomando  >:(

Grazie
Michele
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Prova con lirc...

Il ricevitore è questo:
[    1.745272] input: Afatech DVB-T 2 as /devices/pci0000:00/0000:00:03.3/usb1/1-3/1-3:1.1/input/input4

Purtroppo io la chiavetta non ce l'ho più e non posso provarlo  :-\
voltron81
Prode Principiante
Messaggi: 61
Iscrizione: sabato 27 ottobre 2007, 1:04

Re: hdtv usb dvb-t

Messaggio da voltron81 »

Ok grazie, poi provo.
Ma solo a me succede che ogni tanto, credo quando aggiorno ubuntu, non funziona+la pennetta e devo ripetere la procedura di installazione daccapo x farla funzionare con kaffeine?
>:(
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

voltron81 ha scritto: Ok grazie, poi provo.
Ma solo a me succede che ogni tanto, credo quando aggiorno ubuntu, non funziona+la pennetta e devo ripetere la procedura di installazione daccapo x farla funzionare con kaffeine?
>:(
Si, finchè il driver non verrà integrato nel kernel....

Per adesso, ogni volta che aggiorni il kernel, devi ricompilare il driver...

Fai così: scarica e salvati da qualche parte la cartella dei drivers "vergine", con magari anche il file .config già modificato e la patch già applicata; ogni volta che aggiorni il kernel basta che elimini la vecchia cartella dalla home, ci copi quella vergine e ridai make & make install...

Il firmware non serve che lo riscarichi; una volta messo in /lib/firmware non lo tocca più nessuno!
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Ciao a tutti, io ho da mesi questa antenna (quella grigia senza marca da 7€) e non mi ha mai funzionato su ubuntu.
Ora ho trovato questa discussione e ho seguito tutti i passaggi, inserito la pach, avevo installato me tv ma non riconosceva nessun dispositivo.
Allora ho installato kaffeine ma nemmeno questo programma riconosce la penna e quindi non posso fare la ricerca dei canali.

Come posso risolvere? C'è una minima speranza che funzioni una volta per tutte anche sul mio pc?
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Facciamo un pò di analisi per vedere cosa non va/non è andata...

Sei sicuro che la pennetta è la stessa? Ce ne sono con lo stesso involucro ma con chipset diversi...
Se non l'hai già fatto, controlla con lsusb che esca:  15a4:9016

Verificato questo...stacca la pennetta, reinseriscila e posta il risultato di:

Codice: Seleziona tutto

dmesg | tail -n 30
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Si si la chiavetta è la stessa, per chiarezza posto sia lsusb che l'altro comando che mi hai scritto:

Codice: Seleziona tutto

wht@wht-laptop:~$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 04f2:b044 Chicony Electronics Co., Ltd 
Bus 002 Device 002: ID 0bda:0158 Realtek Semiconductor Corp. Mass Storage Device
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 15a4:9016 Afatech Technologies, Inc. AF9015 DVB-T USB2.0 stick
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wht@wht-laptop:~$ dmesg | tail -n 30
[  119.717075] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'
[  119.795718] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state.
[  119.795937] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[  119.796525] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick)
[  119.956838] af9013: firmware version:5.1.0
[  119.963214] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...
[  120.028550] NXP TDA18218 successfully identified.
[  120.028569] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.
[  120.036685] usbcore: registered new interface driver dvb_usb_af9015
[  148.697777] lo: Disabled Privacy Extensions
[  184.036757] usb 1-5: USB disconnect, address 3
[  184.038671] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully deinitialized and disconnected.
[  184.360123] usb 1-5: new high speed USB device using ehci_hcd and address 4
[  184.920050] usb 1-5: device not accepting address 4, error -71
[  184.980110] hub 1-0:1.0: unable to enumerate USB device on port 5
[  188.950096] usb 1-5: new high speed USB device using ehci_hcd and address 6
[  189.105982] usb 1-5: configuration #1 chosen from 1 choice
[  189.495435] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in cold state, will try to load a firmware
[  189.495460] usb 1-5: firmware: requesting dvb-usb-af9015.fw
[  189.504364] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'
[  189.578186] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state.
[  189.578401] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[  189.578970] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick)
[  189.600102] af9013: firmware version:5.1.0
[  189.605397] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...
[  189.615095] NXP TDA18218 successfully identified.
[  189.615107] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.
[  189.632555] Afatech DVB-T 2: Fixing fullspeed to highspeed interval: 10 -> 7
[  189.634119] input: Afatech DVB-T 2 as /devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5:1.1/input/input12
[  189.637876] generic-usb 0003:15A4:9016.0003: input,hidraw0: USB HID v1.01 Keyboard [Afatech DVB-T 2] on usb-0000:00:12.2-5/input1
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Guarda che mi sembra a posto e riconosciuta; firmware ultima versione, quindi tutto ok!  ???

Per completezza posta anche il risultato di:

Codice: Seleziona tutto

ls /dev/dvb/* -l
che vediamo se si è creato il device... credo di si comunque ;)
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Codice: Seleziona tutto

wht@wht-laptop:~$ ls /dev/dvb/* -l
totale 0
crw-rw----+ 1 root video 212, 0 2010-10-05 22:26 demux0
crw-rw----+ 1 root video 212, 1 2010-10-05 22:26 dvr0
crw-rw----+ 1 root video 212, 3 2010-10-05 22:26 frontend0
crw-rw----+ 1 root video 212, 2 2010-10-05 22:26 net0
Posto pure uno screenshot di kaffeine che non rileva nessuna antenna e quindi non posso ricercare i canali.
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Continuo a sostenere che è tutto a posto...  (yes) (yes)

Screenshot...dov'è?
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Scusa avevo dimenticato di postarlo...
Allegati
Schermata.png
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Devi andare prima nel menu di configurazione (menu con la chiave inglese) e settare il source !

Io ho su la ver. 0.8.8 ma più o meno è come lo screenshot che posto io...
Allegati
Schermata-3.png
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Ah ok pensavo che lo impostasse da solo.

Ok ora è riuscito a trovare qualche canale (ma non i canali rai e mediaset, solo raisport e mediaset premium....)
In ogni caso se tento di vedere qualche canale regionale che ha trovato mi esce questo errore:

Cannot find demux plugin for MRL "fifo:/home/wht/.kde/share/apps/kaffeine/dvbpipe.m2t".
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

WHT ha scritto: Cannot find demux plugin for MRL "fifo:/home/wht/.kde/share/apps/kaffeine/dvbpipe.m2t".
Prova a imparare a fare una ricerca sul forum o sui motori di ricerca...  ;)

http://forum.ubuntu-it.org/viewtopic.ph ... 2#p2961622

http://forum.ubuntu-it.org/viewtopic.ph ... 3#p3178073

e tanti altri...
Avatar utente
WHT
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 576
Iscrizione: sabato 7 marzo 2009, 10:34

Re: hdtv usb dvb-t

Messaggio da WHT »

Giusto hai ragione, errore mio.
L'ho installato, ho installato anche libxine1-all-plugin. I canali partono, ma lo schermo diventa trasparente, vedo lo sfondo non il video e inoltre si sente tipo a scatti e male (suono metallico)...su windows mi va senza problemi.
WHT
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2568
Iscrizione: lunedì 16 marzo 2009, 11:14
Contatti:

Re: hdtv usb dvb-t

Messaggio da Xgaz »

Nessun problema...ci sono io! Solo che non posso esserci sempre...  ;D

Per esempio (per il video trasparente): http://forum.ubuntu-it.org/viewtopic.ph ... 5#p3135355
Scrivi risposta

Ritorna a “Driver e periferiche”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 25 ospiti