hdtv usb dvb-t
Re: hdtv usb dvb-t
He, he...
son passati tre anni e probabilmente quegli script non sono più al passo con i drivers attuali
Estrarre un firmware da un .sys non è un'operazione così facile...bisogna perdere molto tempo per capire quali parti vanno copiate e per fare questo ci si avvale di uno sniffer usb (usbsnoop) per vedere che dati transitano nella pennetta durante le operazioni di inizializzazione e scansione ::)
Non chiedermi altri dettagli perchè non saprei come darteli...questo lavoro lo lascio ai maghi del reverse-engineering; io faccio l'avvoltoio in attesa che il driver per windows venga "scannato"
son passati tre anni e probabilmente quegli script non sono più al passo con i drivers attuali
Estrarre un firmware da un .sys non è un'operazione così facile...bisogna perdere molto tempo per capire quali parti vanno copiate e per fare questo ci si avvale di uno sniffer usb (usbsnoop) per vedere che dati transitano nella pennetta durante le operazioni di inizializzazione e scansione ::)
Non chiedermi altri dettagli perchè non saprei come darteli...questo lavoro lo lascio ai maghi del reverse-engineering; io faccio l'avvoltoio in attesa che il driver per windows venga "scannato"
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
sto inviando una mail a chi ha cuttato il firmware, vediamo se mi risponde.Xgaz ha scritto: He, he...
son passati tre anni e probabilmente quegli script non sono più al passo con i drivers attuali :(
Estrarre un firmware da un .sys non è un'operazione così facile...bisogna perdere molto tempo per capire quali parti vanno copiate e per fare questo ci si avvale di uno sniffer usb (usbsnoop) per vedere che dati transitano nella pennetta durante le operazioni di inizializzazione e scansione ::)
Non chiedermi altri dettagli perchè non saprei come darteli...questo lavoro lo lascio ai maghi del reverse-engineering; io faccio l'avvoltoio in attesa che il driver per windows venga "scannato"
Re: hdtv usb dvb-t
Bene! Fammi sapere...queste pennette sono un ottimo, ed economico, regalo per amici e parenti; se non si bloccano si fanno meno brutte figure
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
beh, se i parenti usano windows non ci sono problemi (rotfl) .Xgaz ha scritto: Bene! Fammi sapere...queste pennette sono un ottimo, ed economico, regalo per amici e parenti; se non si bloccano si fanno meno brutte figure ;)
Comunque in risposta alla mia mail mi è stato detto di guardare questo thread:
http://www.mail-archive.com/linux-media ... 18606.html
edit:
alla velocità della luce, hanno fatto un nuovo firmware (5.10.0): http://palosaari.fi/linux/v4l-dvb/firmware/af9015/
Finisco di leggere la discussione, magari dicono da quale driver l'hanno tirato.
ariedit: pare che ancora si hanno problemi, anche se quello che testa parla di problemi tenendola connessa per giorni... A me basta che non si pianti cambiando canale o rifacendo uno scan (rotfl).
Provo il nuovo firmware e vediamo
Ultima modifica di valerio993 il mercoledì 19 maggio 2010, 9:37, modificato 1 volta in totale.
Re: hdtv usb dvb-t
Caspita, ti hanno sentito...ieri sera non c'era!!valerio993 ha scritto:
edit:
alla velocità della luce, hanno fatto un nuovo firmware (5.10.0): http://palosaari.fi/linux/v4l-dvb/firmware/af9015/
Finisco di leggere la discussione, magari dicono da quale driver l'hanno tirato.
Fammi sapere...
Comunque se voglio "convertire" i parenti devo dargli qualcosa di affidabile...altrimenti che figura ci faccio!?
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Dunque, l'ho staccato e riattaccato dopo uno scan e il modulo non è rimasto piantato (mi capitava spesso che kaffeine, ad esempio, lo rilevasse presente anche se la penna era fisicamente scollegata (rotfl) )...
Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.
Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.
Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.
Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.
Re: hdtv usb dvb-t
E' un problema di kaffeine 1.0...restano elencate le periferiche anche se sono disconnesse. Se provi però a selezionarle per la scansione vedrai che non si può fare.valerio993 ha scritto: Dunque, l'ho staccato e riattaccato dopo uno scan e il modulo non è rimasto piantato (mi capitava spesso che kaffeine, ad esempio, lo rilevasse presente anche se la penna era fisicamente scollegata (rotfl) )...
Tutte queste pennette se le stacchi quando stanno funzionando, specialmente durante la scansione, bloccano tutto...è già tanto che non ti mandi in kernel panic!valerio993 ha scritto: Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.
thanksvalerio993 ha scritto: Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Immaginavo che quasi tutte le chiavette si incasinano se si staccano durante l'uso. Per kaffeine, la cosa mi succede sempre e solo quando il modulo è andato per "vie alternative" e la posso scegliere per fare la scansione anche se staccataXgaz ha scritto:E' un problema di kaffeine 1.0...restano elencate le periferiche anche se sono disconnesse. Se provi però a selezionarle per la scansione vedrai che non si può fare.valerio993 ha scritto: Dunque, l'ho staccato e riattaccato dopo uno scan e il modulo non è rimasto piantato (mi capitava spesso che kaffeine, ad esempio, lo rilevasse presente anche se la penna era fisicamente scollegata (rotfl) )...
Tutte queste pennette se le stacchi quando stanno funzionando, specialmente durante la scansione, bloccano tutto...è già tanto che non ti mandi in kernel panic!valerio993 ha scritto: Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.
thanksvalerio993 ha scritto: Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.
Re: hdtv usb dvb-t
valerio993 ha scritto: .... e la posso scegliere per fare la scansione anche se staccata
Re: hdtv usb dvb-t
Sarebbe interessante anche provare questa patch da applicare, presumo, al ramo principale dei v4l-dvb
peccato che non ho più questa pennetta... :-\
peccato che non ho più questa pennetta... :-\
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Bisogna vedere a quale versione si applica. Ho scaricato l'ultima (af9015-57e489f6538f) ma applicando la patch ottengo diversi errori:Xgaz ha scritto: Sarebbe interessante anche provare questa patch da applicare, presumo, al ramo principale dei v4l-dvb
peccato che non ho più questa pennetta... :-\
Codice: Seleziona tutto
new_dvb-t_driver/af9015-57e489f6538f$ patch -p1 < ../V4L-DVB-New-NXP-tda18218-tuner.patch
patching file drivers/media/common/tuners/Kconfig
Hunk #1 FAILED at 179.
1 out of 1 hunk FAILED -- saving rejects to file drivers/media/common/tuners/Kconfig.rej
patching file drivers/media/common/tuners/Makefile
Hunk #1 FAILED at 24.
1 out of 1 hunk FAILED -- saving rejects to file drivers/media/common/tuners/Makefile.rej
patching file drivers/media/common/tuners/tda18218.c
patching file drivers/media/common/tuners/tda18218.h
patching file drivers/media/common/tuners/tda18218_priv.h
patching file drivers/media/dvb/dvb-usb/af9015.c
Hunk #1 FAILED at 30.
Hunk #2 FAILED at 991.
Hunk #3 FAILED at 1002.
Hunk #4 FAILED at 1207.
Hunk #5 FAILED at 1237.
5 out of 5 hunks FAILED -- saving rejects to file drivers/media/dvb/dvb-usb/af9015.c.rej
patching file drivers/media/dvb/frontends/af9013.c
Hunk #1 FAILED at 487.
Hunk #2 FAILED at 1389.
2 out of 2 hunks FAILED -- saving rejects to file drivers/media/dvb/frontends/af9013.c.rej
patching file drivers/media/dvb/frontends/af9013_priv.h
Hunk #1 FAILED at 789.
1 out of 1 hunk FAILED -- saving rejects to file drivers/media/dvb/frontends/af9013_priv.h.rej
Re: hdtv usb dvb-t
No, credo vada applicata direttamente ai v4l-dvb:
Codice: Seleziona tutto
sudo hg clone http://linuxtv.org/hg/v4l-dvb/
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Già fatto, ottengo gli stessi errori :-\Xgaz ha scritto: No, credo vada applicata direttamente ai v4l-dvb:
Codice: Seleziona tutto
sudo hg clone http://linuxtv.org/hg/v4l-dvb/
Re: hdtv usb dvb-t
Va a capire adesso che drivers ha usato questo.... ::)
La patch è di ieri; l'ultimo aggiornamento ai v4l è di 34 ore fa...presumevo che avesse usato quelli! >:(
Provo a cercare su http://www.mail-archive.com/ se ci sono info...
La patch è di ieri; l'ultimo aggiornamento ai v4l è di 34 ore fa...presumevo che avesse usato quelli! >:(
Provo a cercare su http://www.mail-archive.com/ se ci sono info...
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Ho giusto mandato un reply a chi ha fatto la patch con i passi, l'ouput che ottengo e la richiesta di che versione devo usare.Xgaz ha scritto: Va a capire adesso che drivers ha usato questo.... ::)
La patch è di ieri; l'ultimo aggiornamento ai v4l è di 34 ore fa...presumevo che avesse usato quelli! >:(
Provo a cercare su http://www.mail-archive.com/ se ci sono info...
Attendo risposte!
Re: hdtv usb dvb-t
Comunque non credo faccia grosse modifiche, anzi, non vorrei che addirittura fossero già integrate nel repository di Antti Palosaari :-\
L'ultima modifica supporta anche il nuovo firmware: http://linuxtv.org/hg/~anttip/af9015/rev/57e489f6538f
L'ultima modifica supporta anche il nuovo firmware: http://linuxtv.org/hg/~anttip/af9015/rev/57e489f6538f
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Mi ha risposto dicendomi che lui usa i repo da git: http://git.linuxtv.org/v4l-dvb.gitXgaz ha scritto: Comunque non credo faccia grosse modifiche, anzi, non vorrei che addirittura fossero già integrate nel repository di Antti Palosaari :-\
L'ultima modifica supporta anche il nuovo firmware: http://linuxtv.org/hg/~anttip/af9015/rev/57e489f6538f
provo a tirarli con git e vediamo se la patch si applica
edit: la patch ai git si applica, ma da git ho tirato giù tutto v4l e non solo la parte relativa ai dvb (bad)
Ultima modifica di valerio993 il venerdì 21 maggio 2010, 13:33, modificato 1 volta in totale.
Re: hdtv usb dvb-t
E' vero...bastava guardare meglio nella patch :-[
Queste il nr di modifiche ai vari file:
diff --git a/drivers/media/common/tuners/Kconfig b/drivers/media/common/tuners/Kconfig
Credo che sia meglio comunque scaricare tutto il git v4l, visto che si deve patchare anche roba su /drivers/media/common (yes)valerio993 ha scritto: edit: la patch ai git si applica, ma da git ho tirato giù tutto v4l e non solo la parte relativa ai dvb (bad)
Queste il nr di modifiche ai vari file:
drivers/media/common/tuners/Kconfig | 7 +
drivers/media/common/tuners/Makefile | 1 +
drivers/media/common/tuners/tda18218.c | 432 +++++++++++++++++++++++++++
drivers/media/common/tuners/tda18218.h | 44 +++
drivers/media/common/tuners/tda18218_priv.h | 36 +++
drivers/media/dvb/dvb-usb/af9015.c | 13 +-
drivers/media/dvb/frontends/af9013.c | 15 +
drivers/media/dvb/frontends/af9013_priv.h | 5 +-
Ultima modifica di Xgaz il venerdì 21 maggio 2010, 14:17, modificato 1 volta in totale.
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
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
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....
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], ¶msbuf[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 },
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....
Ultima modifica di valerio993 il sabato 22 maggio 2010, 22:00, modificato 1 volta in totale.
-
- Prode Principiante
- Messaggi: 36
- Iscrizione: lunedì 5 febbraio 2007, 18:47
Re: hdtv usb dvb-t
Ho creato un mini howto su come migliorare il raffreddamento della penna:
http://www.valerio993.altervista.org/?p=73
http://www.valerio993.altervista.org/?p=73
Chi c’è in linea
Visualizzano questa sezione: Google [Bot] e 23 ospiti