AverMedia A306 (cx23385, xc3028, af9013) (A577 too ?)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello All,

I've tried to use my A306 board on my system. All the main chips are fully
supported by linux.

At this stage the CX23385 and the tuner: xc3028 seem to respond properly. But
the DVB-T chip (af9013) is silent. Nevertheless both chips are visible on the
I2C bus.

I've no full datasheet of theses chips. with exception of the af9013 where this
information is available:
http://wenku.baidu.com/view/42240f72f242336c1eb95e08.html

At this stage the CLK signal of the DVB-T chip may be missing or something is
wrong elsewhere.

If you have the datasheets... Any help will be appreciated.


Best Regards,
Wallak.




diff -u -r -b -B -w -x '*.o' -x '*.cmd' -x '*.ko' -x '*.mod.c' -x 'modules.*'
tmp/linux-2.6.37.6/drivers/media/common/tuners/tuner-xc2028.c
linux-2.6.37.6-mdf/drivers/media/common/tuners/tuner-xc2028.c
--- linux-2.6.37.6/drivers/media/common/tuners/tuner-xc2028.c    2011-03-27
21:01:41.000000000 +0200
+++ linux-2.6.37.6-mdf/drivers/media/common/tuners/tuner-xc2028.c    2011-05-07
23:30:20.000000000 +0200
@@ -813,6 +813,10 @@
           hwmodel, (version & 0xf000) >> 12, (version & 0xf00) >> 8,
           (version & 0xf0) >> 4, version & 0xf);

+    {
+      void af9013_execdebug(struct dvb_frontend *fe);
+      af9013_execdebug(fe);
+    }

     if (priv->ctrl.read_not_reliable)
         goto read_not_reliable;
diff -u -r -b -B -w -x '*.o' -x '*.cmd' -x '*.ko' -x '*.mod.c' -x 'modules.*'
tmp/linux-2.6.37.6/drivers/media/dvb/frontends/af9013.c
linux-2.6.37.6-mdf/drivers/media/dvb/frontends/af9013.c
--- linux-2.6.37.6/drivers/media/dvb/frontends/af9013.c    2011-03-27
21:01:41.000000000 +0200
+++ linux-2.6.37.6-mdf/drivers/media/dvb/frontends/af9013.c    2011-05-15
02:58:34.000000000 +0200
@@ -69,6 +69,8 @@
     buf[2] = mbox;
     memcpy(&buf[3], val, len);

+    printk(KERN_DEBUG "af9013_write_regs(%02x, %02x %02x
%02x)\n",state->config.demod_address,buf[0],buf[1],buf[2]);
+
     if (i2c_transfer(state->i2c, &msg, 1) != 1) {
         warn("I2C write failed reg:%04x len:%d", reg, len);
         return -EREMOTEIO;
@@ -119,6 +121,10 @@
         warn("I2C read failed reg:%04x", reg);
         return -EREMOTEIO;
     }
+
+        printk(KERN_DEBUG "af9013_read_reg(%02x, %02x %02x %02x)
=%02x\n",state->config.demod_address,reg >> 8,reg & 0xff, 0, ibuf[0]);
+
+
     *val = ibuf[0];
     return 0;
 }
@@ -1448,6 +1454,22 @@
     kfree(state);
 }

+void af9013_execdebug(struct dvb_frontend *fe)
+{
+  struct af9013_state *state = fe->demodulator_priv;
+  u8 val;
+  u8 buf[4];
+  int ret, i;
+
+  ret = af9013_read_reg(state, 0x98be, &val);
+  printk(KERN_DEBUG "(0x0c) running = %02x, ret=%02x\n",val, ret);
+
+  ret = af9013_read_reg_bits(state, 0xd733, 4, 4, &buf[2]);
+  for (i = 0; i < 2; i++) { ret = af9013_read_reg(state, 0x116b + i, &buf[i]);
}
+  printk(KERN_DEBUG "%s: chip version:%d ROM version:%d.%d (ret=%d)\n",
__func__, buf[2], buf[0], buf[1], ret);
+}
+EXPORT_SYMBOL(af9013_execdebug);
+
 static struct dvb_frontend_ops af9013_ops;

 struct dvb_frontend *af9013_attach(const struct af9013_config *config,
@@ -1484,7 +1506,18 @@
     if (state->config.output_mode != AF9013_OUTPUT_MODE_USB) {
         ret = af9013_download_firmware(state);
         if (ret)
-            goto error;
+          {
+            deb_info("%s: continue...\n", __func__);
+
+            /* create dvb_frontend */
+            memcpy(&state->frontend.ops, &af9013_ops,
+               sizeof(struct dvb_frontend_ops));
+            state->frontend.demodulator_priv = state;
+
+            return &state->frontend;
+
+            //goto error;
+          }
     }

     /* firmware version */
diff -u -r -b -B -w -x '*.o' -x '*.cmd' -x '*.ko' -x '*.mod.c' -x 'modules.*'
tmp/linux-2.6.37.6/drivers/media/video/cx23885/cx23885-cards.c
linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885-cards.c
--- linux-2.6.37.6/drivers/media/video/cx23885/cx23885-cards.c    2011-03-27
21:01:41.000000000 +0200
+++ linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885-cards.c    2011-05-15
04:12:20.000000000 +0200
@@ -275,6 +275,10 @@
         .name        = "Compro VideoMate E800",
         .portc        = CX23885_MPEG_DVB,
     },
+    [CX23885_BOARD_AVERMEDIA_A306] = {
+        .name        = "Avermedia A306",
+        .portc        = CX23885_MPEG_DVB,
+    },
     [CX23885_BOARD_HAUPPAUGE_HVR1290] = {
         .name        = "Hauppauge WinTV-HVR1290",
         .portc        = CX23885_MPEG_DVB,
@@ -485,6 +489,10 @@
         .subdevice = 0xe800,
         .card      = CX23885_BOARD_COMPRO_VIDEOMATE_E800,
     }, {
+            .subvendor = 0x1461,
+        .subdevice = 0xc139,
+        .card      = CX23885_BOARD_AVERMEDIA_A306,
+    }, {
         .subvendor = 0x0070,
         .subdevice = 0x8551,
         .card      = CX23885_BOARD_HAUPPAUGE_HVR1290,
@@ -967,6 +975,31 @@
         /* CX24228 GPIO */
         /* Connected to IF / Mux */
         break;
+    case CX23885_BOARD_AVERMEDIA_A306:
+      // ?? PIO0: 1:on 0:nothing work
+      // ?? PIO1: demodulator address 1: 0x1c, 0:0x1d ??
+      // ?? PIO2: tuner reset ?
+      // ?? PIO3: demodulator reset ?
+      printk(KERN_INFO "gpio...\n");
+
+      cx_set(GP0_IO, 0x000f0000);
+      mdelay(100);
+      cx_clear(GP0_IO, 0x0000000f);
+      mdelay(100);
+
+
+      cx_set(GP0_IO, 0x000f0000 | (1<<3) | (1<<2) | (1<<1) | (0<<0));
+      mdelay(100);
+      //cx_clear(GP0_IO, 0x00000000 | (1<<3) | (1<<2));
+      cx_set(GP0_IO, 0x000f0000 | (1<<3) | (0<<2) | (1<<1) | (0<<0));
+      mdelay(100);
+      cx_set(GP0_IO, 0x000f0000 | (1<<3) | (0<<2) | (1<<1) | (1<<0));
+      //cx_clear(GP0_IO, 0x0000000f);
+      //cx_set(GP0_IO, 0x00000003);
+      //cx_clear(GP0_IO, 0x00000002);
+          mdelay(100);
+
+      break;
     }
 }

@@ -1012,6 +1045,7 @@
     case CX23885_BOARD_HAUPPAUGE_HVR1275:
     case CX23885_BOARD_HAUPPAUGE_HVR1255:
     case CX23885_BOARD_HAUPPAUGE_HVR1210:
+    case CX23885_BOARD_AVERMEDIA_A306:
         /* FIXME: Implement me */
         break;
     case CX23885_BOARD_HAUPPAUGE_HVR1850:
@@ -1258,6 +1292,7 @@
     /* AUX-PLL 27MHz CLK */
     switch (dev->board) {
     case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
+      //case CX23885_BOARD_AVERMEDIA_A306:
         netup_initialize(dev);
         break;
     }
diff -u -r -b -B -w -x '*.o' -x '*.cmd' -x '*.ko' -x '*.mod.c' -x 'modules.*'
tmp/linux-2.6.37.6/drivers/media/video/cx23885/cx23885-dvb.c
linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885-dvb.c
--- linux-2.6.37.6/drivers/media/video/cx23885/cx23885-dvb.c    2011-03-27
21:01:41.000000000 +0200
+++ linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885-dvb.c    2011-05-15
04:03:54.000000000 +0200
@@ -48,6 +48,7 @@
 #include "stv0900.h"
 #include "stv0900_reg.h"
 #include "stv6110.h"
+#include "af9013.h"
 #include "lnbh24.h"
 #include "cx24116.h"
 #include "cimax2.h"
@@ -571,6 +572,14 @@
     .osc_clk = 20
 };

+static struct af9013_config af9013_config = {
+  .demod_address = (0x1c << 1),                         /* #define
AF9015_I2C_DEMOD   0x38 */ /*0x1c or 0x1d*/
+  .output_mode   = AF9013_OUTPUT_MODE_PARALLEL,
+  .api_version = { 0, 1, 9, 0 },
+  /*.gpio[0] = AF9013_GPIO_TUNER_ON,
+    .gpio[1] = AF9013_GPIO_LO,*/
+};
+
 static int dvb_register(struct cx23885_tsport *port)
 {
     struct cx23885_dev *dev = port->dev;
@@ -966,6 +975,34 @@
             break;
         }
         break;
+    case CX23885_BOARD_AVERMEDIA_A306:
+      printk("# %d\n", port->nr - 1);
+      i2c_bus = &dev->i2c_bus[0];
+
+      fe0->dvb.frontend = dvb_attach(af9013_attach,
+                     &af9013_config,
+                     &i2c_bus->i2c_adap);
+
+      if (fe0->dvb.frontend != NULL || 1) {
+        struct dvb_frontend *fe;
+        struct xc2028_config cfg = {
+          .i2c_adap  = &dev->i2c_bus[1].i2c_adap,
+          .i2c_addr  = 0x61,
+        };
+        static struct xc2028_ctrl ctl = {
+          .fname       = XC2028_DEFAULT_FIRMWARE,
+          .max_len     = 64,
+          .demod       = XC3028_FE_ZARLINK456 /*XC3028_FE_OREN538: Loading
SCODE for type=DTV6 ATSC OREN538 SCODE HAS_IF_5580 (60110020)*/,
+        };
+
+        printk(KERN_INFO "xc2028_attach %p\n", fe0->dvb.frontend);
+        fe = dvb_attach(xc2028_attach, fe0->dvb.frontend, &cfg);
+        printk(KERN_INFO "xc2028_attach %p\n", fe);
+        if (fe != NULL && fe->ops.tuner_ops.set_config != NULL) {
+            fe->ops.tuner_ops.set_config(fe, &ctl);
+        }
+      }
+      break;

     default:
         printk(KERN_INFO "%s: The frontend of your DVB/ATSC card "
diff -u -r -b -B -w -x '*.o' -x '*.cmd' -x '*.ko' -x '*.mod.c' -x 'modules.*'
tmp/linux-2.6.37.6/drivers/media/video/cx23885/cx23885.h
linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885.h
--- linux-2.6.37.6/drivers/media/video/cx23885/cx23885.h    2011-03-27
21:01:41.000000000 +0200
+++ linux-2.6.37.6-mdf/drivers/media/video/cx23885/cx23885.h    2011-05-05
02:58:01.000000000 +0200
@@ -84,6 +84,7 @@
 #define CX23885_BOARD_HAUPPAUGE_HVR1290        26
 #define CX23885_BOARD_MYGICA_X8558PRO          27
 #define CX23885_BOARD_LEADTEK_WINFAST_PXTV1200 28
+#define CX23885_BOARD_AVERMEDIA_A306           29

 #define GPIO_0 0x00000001
 #define GPIO_1 0x00000002
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux