hdtv usb dvb-t

Riconoscimento, installazione e configurazione delle periferiche.

Re: hdtv usb dvb-t

Messaggioda Xgaz » martedì 18 maggio 2010, 23:59

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"  ;D
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » mercoledì 19 maggio 2010, 0:03

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"  ;D


sto inviando una mail a chi ha cuttato il firmware, vediamo se mi risponde.
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » mercoledì 19 maggio 2010, 0:19

Bene! Fammi sapere...queste pennette sono un ottimo, ed economico, regalo per amici e parenti; se non si bloccano si fanno meno brutte figure  ;)
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » mercoledì 19 maggio 2010, 9:30

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  ;)


beh, se i parenti usano windows non ci sono problemi  (rotfl) .

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.
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » mercoledì 19 maggio 2010, 15:31

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.


Caspita, ti hanno sentito...ieri sera non c'era!!  :o

Fammi sapere...

Comunque se voglio "convertire" i parenti devo dargli qualcosa di affidabile...altrimenti che figura ci faccio!?  ;D
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » mercoledì 19 maggio 2010, 16:35

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.
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » mercoledì 19 maggio 2010, 19:09

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) )...

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:Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.

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:Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.

thanks  ;D
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » mercoledì 19 maggio 2010, 19:39

Xgaz ha scritto:
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) )...

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:Rimane il problema che se lo si scollega per sbaglio durante l'uso il modulo comunque smette di funzionare bene, ma è un problema secondario.

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:Rispetto prima cmq sembra vada meglio... farò altri test quando avrò tempo.

thanks  ;D


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 staccata :o
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » mercoledì 19 maggio 2010, 20:08

valerio993 ha scritto:.... e la posso scegliere per fare la scansione anche se staccata :o


:o :o :o
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda Xgaz » giovedì 20 maggio 2010, 17:43

Sarebbe interessante anche provare questa patch da applicare, presumo, al ramo principale dei v4l-dvb  ;)
peccato che non ho più questa pennetta...  :-\
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » venerdì 21 maggio 2010, 10:42

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...  :-\


Bisogna vedere a quale versione si applica. Ho scaricato l'ultima (af9015-57e489f6538f) ma applicando la patch ottengo diversi errori:

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
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » venerdì 21 maggio 2010, 11:24

No, credo vada applicata direttamente ai v4l-dvb:

Codice: Seleziona tutto
sudo hg clone http://linuxtv.org/hg/v4l-dvb/
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » venerdì 21 maggio 2010, 11:31

Xgaz ha scritto:No, credo vada applicata direttamente ai v4l-dvb:

Codice: Seleziona tutto
sudo hg clone http://linuxtv.org/hg/v4l-dvb/




Già fatto, ottengo gli stessi errori  :-\
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » venerdì 21 maggio 2010, 11:39

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...
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » venerdì 21 maggio 2010, 11:41

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...


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.

Attendo risposte!
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » venerdì 21 maggio 2010, 11:57

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
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » venerdì 21 maggio 2010, 13:16

Xgaz 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


Mi ha risposto dicendomi che lui usa i repo da git: http://git.linuxtv.org/v4l-dvb.git

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.
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda Xgaz » venerdì 21 maggio 2010, 14:15

E' vero...bastava guardare meglio nella patch  :-[

diff --git a/drivers/media/common/tuners/Kconfig b/drivers/media/common/tuners/Kconfig



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)

Credo che sia meglio comunque scaricare tutto il git v4l, visto che si deve patchare anche roba su /drivers/media/common  (yes)

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.
Avatar utente
Xgaz
Imperturbabile Insigne
Imperturbabile Insigne
 
Messaggi: 2568
Iscrizione: marzo 2009

Re: hdtv usb dvb-t

Messaggioda valerio993 » sabato 22 maggio 2010, 20:33

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], ¶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 },


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....
Ultima modifica di valerio993 il sabato 22 maggio 2010, 22:00, modificato 1 volta in totale.
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

Re: hdtv usb dvb-t

Messaggioda valerio993 » lunedì 24 maggio 2010, 14:41

Ho creato un mini howto su come migliorare il raffreddamento della penna:

http://www.valerio993.altervista.org/?p=73
valerio993
Prode Principiante
 
Messaggi: 36
Iscrizione: febbraio 2007

PrecedenteSuccessiva

Torna a Driver e periferiche

Chi c’è in linea

Visualizzano questa sezione: despostil, Rok999 e 13 ospiti