[linux-dvb] new DVB-S card "EasyWatch PCIlight" from Satelco is not recognized

Florian Bartels Florian.Bartels at envisage.de
Sat Jan 7 03:29:33 CET 2006


Thanks for the fast answer,

after applying the patch (some hunks failed) and adding subid 0x001e, I get 
the following messages:

---
Jan  7 02:54:09 shooters kernel: ACPI: PCI Interrupt 0000:00:0e.0[A] -> GSI 17 
(level, low) -> IRQ 20
Jan  7 02:54:09 shooters kernel: saa7146: found saa7146 @ mem f8d84000 
(revision 1, irq 20) (0x1894,0x001e).
Jan  7 02:54:09 shooters kernel: DVB: registering new adapter (KNC TV STAR 
DVB-S).
Jan  7 02:54:09 shooters kernel: adapter failed MAC signature check
Jan  7 02:54:09 shooters kernel: encoded MAC from EEPROM was 
ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff
Jan  7 02:54:10 shooters kernel: budget-av: ci interface initialised.
Jan  7 02:54:10 shooters kernel: KNC1-1: MAC addr = 00:09:d6:80:04:89
Jan  7 02:54:11 shooters kernel: budget-av: A frontend driver was not found 
for device 1131/7146 subsystem 1894/001e
---

stv0299_attach returns NULL after id got set to 0:

---
	/* check if the demod is there */
	stv0299_writeregI(state, 0x02, 0x34); /* standby off */
	msleep(200);
	id = stv0299_readreg(state, 0x00);

	/* register 0x00 contains 0xa1 for STV0299 and STV0299B */
	/* register 0x00 might contain 0x80 when returning from standby */
	printk("id=%d\n", id);
	if (id != 0xa1 && id != 0x80) goto error;
---

patch used:


Index: linux/drivers/media/dvb/frontends/dvb-pll.c
===================================================================
RCS 
file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/dvb-pll.c,v
retrieving revision 1.13
diff -c -r1.13 dvb-pll.c
*** linux/drivers/media/dvb/frontends/dvb-pll.c 27 Oct 2005 04:11:59 -0000      
1.13
--- linux/drivers/media/dvb/frontends/dvb-pll.c 7 Jan 2006 02:27:13 -0000
***************
*** 344,349 ****
--- 344,366 ----
  };
  EXPORT_SYMBOL(dvb_pll_tbmv30111in);

+ /*
+  * Philips SD1878 Tuner.
+  */
+ struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261 = {
+        .name  = "Philips SD1878",
+        .min   =  950000,
+        .max   = 2150000,
+        .count = 4,
+        .entries = {
+                { 1250000, 499, 500, 0xc4, 0x00},
+                { 1550000, 499, 500, 0xc4, 0x40},
+                { 2050000, 499, 500, 0xc4, 0x80},
+                { 2150000, 499, 500, 0xc4, 0xc0},
+        },
+ };
+ EXPORT_SYMBOL(dvb_pll_philips_sd1878_tda8261);
+
  /* ----------------------------------------------------------- */
  /* code                                                        */

Index: linux/drivers/media/dvb/frontends/dvb-pll.h
===================================================================
RCS 
file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/dvb-pll.h,v
retrieving revision 1.13
diff -c -r1.13 dvb-pll.h
*** linux/drivers/media/dvb/frontends/dvb-pll.h 23 Oct 2005 04:55:31 -0000      
1.13
--- linux/drivers/media/dvb/frontends/dvb-pll.h 7 Jan 2006 02:27:13 -0000
***************
*** 40,45 ****
--- 40,47 ----
  extern struct dvb_pll_desc dvb_pll_tdhu2;
  extern struct dvb_pll_desc dvb_pll_tbmv30111in;

+ extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
+
  int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
                      u32 freq, int bandwidth);

Index: linux/drivers/media/dvb/frontends/stv0299.c
===================================================================
RCS 
file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/frontends/stv0299.c,v
retrieving revision 1.75
diff -c -r1.75 stv0299.c
*** linux/drivers/media/dvb/frontends/stv0299.c 23 Nov 2005 20:43:17 -0000      
1.75
--- linux/drivers/media/dvb/frontends/stv0299.c 7 Jan 2006 02:27:13 -0000
***************
*** 135,141 ****
  {
        struct stv0299_state* state = fe->demodulator_priv;

!       return stv0299_writeregI(state, 0x05, 0xb5);    /*  enable i2c 
repeater on stv0299  */
  }

  static int stv0299_set_FEC (struct stv0299_state* state, fe_code_rate_t fec)
--- 135,141 ----
  {
        struct stv0299_state* state = fe->demodulator_priv;

!       return stv0299_writeregI(state, 0x05, 0xb5);    /*  enable i2c 
repeater on stv0299  */
  }

  static int stv0299_set_FEC (struct stv0299_state* state, fe_code_rate_t fec)
***************
*** 661,666 ****
--- 661,667 ----

        /* register 0x00 contains 0xa1 for STV0299 and STV0299B */
        /* register 0x00 might contain 0x80 when returning from standby */
+       printk("id=%d\n", id);
        if (id != 0xa1 && id != 0x80) goto error;

        /* create dvb_frontend */
Index: linux/drivers/media/dvb/ttpci/budget-av.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/budget-av.c,v
retrieving revision 1.58
diff -c -r1.58 budget-av.c
*** linux/drivers/media/dvb/ttpci/budget-av.c   23 Nov 2005 21:06:12 -0000      
1.58
--- linux/drivers/media/dvb/ttpci/budget-av.c   7 Jan 2006 02:27:13 -0000
***************
*** 37,42 ****
--- 37,43 ----
  #include "stv0299.h"
  #include "tda10021.h"
  #include "tda1004x.h"
+ #include "dvb-pll.h"
  #include <media/saa7146_vv.h>
  #include <linux/module.h>
  #include <linux/errno.h>
***************
*** 864,871 ****
        .request_firmware = philips_tu1216_request_firmware,
  };


!

  static u8 read_pwm(struct budget_av *budget_av)
  {
--- 865,981 ----
        .request_firmware = philips_tu1216_request_firmware,
  };

+ static u8 philips_sd1878_inittab[] = {
+        0x01, 0x15,
+        0x02, 0x30,
+        0x03, 0x00,
+        0x04, 0x7d,
+        0x05, 0x35,
+        0x06, 0x40,
+        0x07, 0x00,
+        0x08, 0x43,
+        0x09, 0x02,
+        0x0C, 0x51,
+        0x0D, 0x82,
+        0x0E, 0x23,
+        0x10, 0x3f,
+        0x11, 0x84,
+        0x12, 0xb9,
+        0x15, 0xc9,
+        0x16, 0x19,
+        0x17, 0x8c,
+        0x18, 0x59,
+        0x19, 0xf8,
+        0x1a, 0xfe,
+        0x1c, 0x7f,
+        0x1d, 0x00,
+        0x1e, 0x00,
+        0x1f, 0x50,
+        0x20, 0x00,
+        0x21, 0x00,
+        0x22, 0x00,
+        0x23, 0x00,
+        0x28, 0x00,
+        0x29, 0x28,
+        0x2a, 0x14,
+        0x2b, 0x0f,
+        0x2c, 0x09,
+        0x2d, 0x09,
+        0x31, 0x1f,
+        0x32, 0x19,
+        0x33, 0xfc,
+        0x34, 0x93,
+        0xff, 0xff
+ };

! static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe,
!                struct i2c_adapter *i2c,
!                struct dvb_frontend_parameters *params)
! {
!        u8              buf[4];
!        int             rc;
!        struct i2c_msg  tuner_msg = 
{.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)};
!
!        if((params->frequency < 950000) || (params->frequency > 2150000))
!                return -EINVAL;
!
!        rc=dvb_pll_configure(&dvb_pll_philips_sd1878_tda8261, buf,
!                        params->frequency, 0);
!        if(rc < 0) return rc;
!
!        if(i2c_transfer(i2c, &tuner_msg, 1) != 1)
!                return -EIO;
!
!     return 0;
! }
!
! static int philips_sd1878_ci_set_symbol_rate(struct dvb_frontend *fe,
!                u32 srate, u32 ratio)
! {
!        u8 aclk = 0;
!        u8 bclk = 0;
!        u8 m1;
!
!        aclk = 0xb5;
!        if (srate < 2000000)
!                bclk = 0x86;
!        else if (srate < 5000000)
!                bclk = 0x89;
!        else if (srate < 15000000)
!                bclk = 0x8f;
!        else if (srate < 45000000)
!                bclk = 0x95;
!
!        m1 = 0x14;
!        if (srate < 4000000)
!                m1 = 0x10;
!
!        stv0299_writereg(fe, 0x0e, 0x23);
!        stv0299_writereg(fe, 0x0f, 0x94);
!        stv0299_writereg(fe, 0x10, 0x39);
!        stv0299_writereg(fe, 0x13, aclk);
!        stv0299_writereg(fe, 0x14, bclk);
!        stv0299_writereg(fe, 0x15, 0xc9);
!        stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
!        stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
!        stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
!        stv0299_writereg(fe, 0x0f, 0x80 | m1);
!
!        return 0;
! }
!
! static struct stv0299_config philips_sd1878_config = {
!        .demod_address = 0x68,
!        .inittab = philips_sd1878_inittab,
!        .mclk = 88000000UL,
!        .invert = 0,
!        .skip_reinit = 0,
!        .lock_output = STV0229_LOCKOUTPUT_1,
!        .volt13_op0_op1 = STV0299_VOLT13_OP0,
!        .min_delay_ms = 100,
!        .set_symbol_rate = philips_sd1878_ci_set_symbol_rate,
!        .pll_set = philips_sd1878_tda8261_pll_set,
! };

  static u8 read_pwm(struct budget_av *budget_av)
  {
***************
*** 886,892 ****
--- 996,1006 ----
  #define SUBID_DVBS_KNC1_PLUS  0x0011
  #define SUBID_DVBS_TYPHOON    0x4f56
  #define SUBID_DVBS_CINERGY1200        0x1154
+ #define SUBID_DVBS_CYNERGY1200N 0x1155

+ #define SUBID_DVBS_TV_STAR     0x0014
+ #define SUBID_DVBS_TV_STAR_CI  0x0016
+ #define SUBID_DVBS_EASYWATCH   0x001e
  #define SUBID_DVBC_KNC1               0x0020
  #define SUBID_DVBC_KNC1_PLUS  0x0021
  #define SUBID_DVBC_CINERGY1200        0x1156
***************
*** 912,917 ****
--- 1026,1039 ----

        switch (saa->pci->subsystem_device) {

+       case SUBID_DVBS_TV_STAR:
+       case SUBID_DVBS_TV_STAR_CI:
+       case SUBID_DVBS_CYNERGY1200N:
+       case SUBID_DVBS_EASYWATCH:
+               fe = stv0299_attach(&philips_sd1878_config,
+                               &budget_av->budget.i2c_adap);
+               break;
+
        case SUBID_DVBS_KNC1:
                if (saa->pci->subsystem_vendor == 0x1894) {
                        fe = stv0299_attach(&cinergy_1200s_1894_0010_config,
***************
*** 1166,1175 ****
--- 1288,1299 ----
  MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S);
  MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C);
  MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T);
+ MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR);
  MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP);
  MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP);
  MAKE_BUDGET_INFO(knc1tp, "KNC1 DVB-T Plus", BUDGET_KNC1TP);
  MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);
+ MAKE_BUDGET_INFO(cin1200sn, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);
  MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C);
  MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T);

***************
*** 1178,1188 ****
--- 1302,1316 ----
        MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x0010),
        MAKE_EXTENSION_PCI(knc1s, 0x1894, 0x0010),
        MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011),
+       MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014),
+       MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016),
+       MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x001e),
        MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020),
        MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021),
        MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030),
        MAKE_EXTENSION_PCI(knc1tp, 0x1894, 0x0031),
        MAKE_EXTENSION_PCI(cin1200s, 0x153b, 0x1154),
+       MAKE_EXTENSION_PCI(cin1200sn, 0x153b, 0x1155),
        MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156),
        MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157),
        {
Index: linux/drivers/media/dvb/ttpci/budget.h
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/budget.h,v
retrieving revision 1.24
diff -c -r1.24 budget.h
*** linux/drivers/media/dvb/ttpci/budget.h      3 Apr 2005 19:45:02 -0000       
1.24
--- linux/drivers/media/dvb/ttpci/budget.h      7 Jan 2006 02:27:13 -0000
***************
*** 95,100 ****
--- 95,101 ----
  #define BUDGET_KNC1SP            11
  #define BUDGET_KNC1CP            12
  #define BUDGET_KNC1TP            13
+ #define BUDGET_TVSTAR            14

  #define BUDGET_VIDEO_PORTA         0
  #define BUDGET_VIDEO_PORTB         1

> Hi,
>
> the card seems to be the same card of the knc1 TvStar. I think it should
> work if you try the patch i have sent the january 3rd:
> http://linuxtv.org/pipermail/linux-dvb/2006-January/007295.html
> and with your subid.
>
> regards,
>
> --
> Régis Prévôt



More information about the linux-dvb mailing list