On Sun, Oct 20, 2002 at 01:05:11PM +0600, Cherry George Mathew wrote:
> Hello,
> 
> I was wondering where to get info on the CLGD5446, like tech refs. A url
> would be great. 

Tons of cirrus logic docs:

ftp://ftp.leo.org/pub/comp/general/devices/cirruslogic/pubs

They've got tech refs, etc.. (gd5446trm.pdf.gz, ...)

> I've a pixelview combo plus card with an ITTvpx3225d tuner
> attached to the GD5446 via i2c. Want the info in connection with writing a
> v4l driver.

There's a user space driver (no v4l) at:

http://users.actcom.co.il/~nahshon/linux-tv.html

It supports gd5446, gd5465, gd5480 and the CL-PX4072 pixel decoder.

I have an lgv-5480tvr card which uses gd5480, vpx3225d, and Samsung
TCPN9082DA27C NTSC tuner.  A small patch to his driver got the card working 
(assumes vpx3225d will only be used in NTSC mode).

The driver/program only supports overlay, no capture.

> 
> Any general comments would also be welcome.
> 
> Thanks in advance.
> 
> George.
> 
> 
> -- 
> 
> " And do not fear those who kill the body but cannot kill the soul. 
>   But rather fear Him who is able to destroy both soul and body in hell." 
> 
> Jesus of Nazareth.
> 
> Cherry George Mathew,
> II/157, Thyparampil Veedu,
> Eraviperoor P.O
> Kerala,
> India 689542,
> Tel:+91-473-663982
> http://resumes.yahoo.com/berryplumis/myprofile/
> 
> 
> 
> _______________________________________________
> Video4linux-list mailing list
> [EMAIL PROTECTED]
> https://listman.redhat.com/mailman/listinfo/video4linux-list
> 
diff -Naur xtv/README.lgv-5480tvr xtv-patched2/README.lgv-5480tvr
--- xtv/README.lgv-5480tvr      Wed Dec 31 19:00:00 1969
+++ xtv-patched2/README.lgv-5480tvr     Sun Sep 22 08:41:01 2002
@@ -0,0 +1 @@
+xtvtap -i i5-lgv-5480tvr -geometry 640x480
diff -Naur xtv/i2c.c xtv-patched2/i2c.c
--- xtv/i2c.c   Sat Nov 13 20:38:04 1999
+++ xtv-patched2/i2c.c  Sun Sep 22 09:29:51 2002
@@ -308,6 +308,10 @@
                        fscanf(in, "%d %lf", &data, &freq);
                        SetPresetChannel(data, freq);
                }
+               else if(!strcmp(cmd, "px0002")) {
+                       fscanf(in, "%x", &data);
+                       i2c_0002 = data;
+               }
                else {
                        printf("Parser: syntax error at %s\n", cmd);
                }
diff -Naur xtv/i5-lgv-5480tvr xtv-patched2/i5-lgv-5480tvr
--- xtv/i5-lgv-5480tvr  Wed Dec 31 19:00:00 1969
+++ xtv-patched2/i5-lgv-5480tvr Sun Sep 22 09:31:49 2002
@@ -0,0 +1,172 @@
+# tuner 4 (samsung TCPN9082DA27C NTSC only tuner). Probe for I2C address.
+tuner 4 0
+
+# alternate address for px0002 (actually, I'm not even sure if it's a
+# px0002)
+px0002 0x4e
+
+# preset channels 
+# These match the local cable channels on the local
+# You probably need to edit and fix this. A good start
+# is the file \WINDOWS\CHANNEL.INI which the Windows95
+# tv program is using.
+#
+# These are for NTSC USA CATV STD.
+# Taken from c:\WINDOWS\CHANNEL.INI that came with lgv-5480tvr
+ch      1     000.00
+ch      2     055.25
+ch      3     061.25
+ch      4     067.25
+ch      5     077.25
+ch      6     083.25
+ch      7     175.25
+ch      8     181.25
+ch      9     187.25
+ch      10    193.25
+ch      11    199.25
+ch      12    205.25
+ch      13    211.25
+ch      14    121.25
+ch      15    127.25
+ch      16    133.25
+ch      17    139.25
+ch      18    145.25
+ch      19    151.25
+ch      20    157.25
+ch      21    163.25
+ch      22    169.25
+ch      23    217.25
+ch      24    223.25
+ch      25    229.25
+ch      26    235.25
+ch      27    241.25
+ch      28    247.25
+ch      29    253.25
+ch      30    259.25
+ch      31    265.25
+ch      32    271.25
+ch      33    277.25
+ch      34    283.25
+ch      35    289.25
+ch      36    295.25
+ch      37    301.25
+ch      38    307.25
+ch      39    313.25
+ch      40    319.25
+ch      41    325.25
+ch      42    331.25
+ch      43    337.25
+ch      44    343.25
+ch      45    349.25
+ch      46    355.25
+ch      47    361.25
+ch      48    367.25
+ch      49    373.25
+ch      50    379.25
+ch      51    385.25
+ch      52    391.25
+ch      53    397.25
+ch      54    403.25
+ch      55    409.25
+ch      56    415.25
+ch      57    421.25
+ch      58    427.25
+ch      59    433.25
+ch      60    439.25
+ch      61    445.25
+ch      62    451.25
+ch      63    457.25
+ch      64    463.25
+ch      65    469.25
+ch      66    475.25
+ch      67    481.25
+ch      68    487.25
+ch      69    493.25
+ch      70    499.25
+ch      71    505.25
+ch      72    511.25
+ch      73    517.25
+ch      74    523.25
+ch      75    529.25
+ch      76    535.25
+ch      77    541.25
+ch      78    547.25
+ch      79    553.25
+ch      80    559.25
+ch      81    565.25
+ch      82    571.25
+ch      83    577.25
+ch      84    583.25
+ch      85    589.25
+ch      86    595.25
+ch      87    601.25 
+ch      88    607.25 
+ch      89    613.25 
+ch      90    619.25 
+ch      91    625.25 
+ch      92    631.25 
+ch      93    637.25 
+ch      94    643.25 
+ch      95    91.25 
+ch      96    97.25 
+ch      97    103.25 
+ch      98    109.25 
+ch      99    115.25 
+ch      100   649.25 
+ch      101   655.25 
+ch      102   661.25 
+ch      103   667.25 
+ch      104   673.25 
+ch      105   679.25 
+ch      106   685.25 
+ch      107   691.25 
+ch      108   697.25 
+ch      109   703.25 
+ch      110   709.25 
+ch      111   715.25 
+ch      112   721.25 
+ch      113   727.25 
+ch      114   733.25 
+ch      115   739.25 
+ch      116   745.25 
+ch      117   751.25 
+ch      118   757.25 
+ch      119   763.25 
+ch      120   769.25 
+ch      121   775.25 
+ch      122   781.25 
+ch      123   787.25 
+ch      124   793.25 
+ch      125   799.25 
+
+# w2 - write to px0002 register
+# t - set tuner's initial channel
+w2 4 32
+w2 3 3a
+w2 3 38
+w2 3 38
+w2 4 36
+w2 3 38
+w2 3 38
+w2 3 38
+w2 4 32
+w2 2 0d
+w2 1 a0
+w2 2 0d
+w2 3 0
+w2 2 3d
+w2 3 8
+w2 4 3b
+
+w2 3 38
+w2 3 3a
+w2 3 3a
+
+w2 04 3b
+
+w2 4 33
+
+t 4
+
+w2 3 32
+w2 4 37
diff -Naur xtv/lgtvr xtv-patched2/lgtvr
--- xtv/lgtvr   Wed Dec 31 19:00:00 1969
+++ xtv-patched2/lgtvr  Sun Sep 29 06:38:22 2002
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+./xtvtap -i i5-lgv-5480tvr -geometry 640x480
+
diff -Naur xtv/px0002.c xtv-patched2/px0002.c
--- xtv/px0002.c        Wed Nov 11 17:35:28 1998
+++ xtv-patched2/px0002.c       Sun Sep 22 05:17:10 2002
@@ -39,8 +39,27 @@
 void
 set_mute(int mute) {
        int val;
+
+       /*FIXME with lgv-5480tvr set_mute(0) doesn't work.  Since this function
+        * is called after a channel switch in xwin.c, sound is lost.
+        */
+       if (i2c_0002 == 0x4e)
+               return;
+
        val = i2c_read8(i2c_0002, 0x04);
        val &= ~0x04;
        if(!mute) val |= 0x04;
        i2c_write8(i2c_0002, 0x04, val);
+}
+
+/*FIXME since I'm not using the above set_mute() function this is makes sure
+ * sound is turned off when the program exits.
+ */ 
+void
+audio_off(void) {
+       int val;
+
+       val = i2c_read8(i2c_0002, 0x04);
+    val &= ~0x04;
+    i2c_write8(i2c_0002, 0x04, val);
 }
diff -Naur xtv/px4072.c xtv-patched2/px4072.c
--- xtv/px4072.c        Mon Apr 12 06:31:27 1999
+++ xtv-patched2/px4072.c       Tue Oct  8 03:40:13 2002
@@ -15,12 +15,21 @@
 
 #include "xtv.h"
 
+#define VPX3225D 0x7230
+
 int i2c_4072  = 0x86; 
 
 /* Hard limits for the 4072, PAL and the clocks used */
 unsigned long max_width  = 704;        /* must be a multiple of 4 ! */
 unsigned long max_height = 576;
 
+static unsigned decoderId = 0x0;
+
+static unsigned fpReadReg   = 0x26;
+static unsigned fpWriteReg  = 0x27;
+static unsigned fpDataReg   = 0x28;
+static unsigned fpStatusReg = 0x29;
+
 void
 px4072_write_direct(unsigned reg, unsigned data) {
        i2c_write8(i2c_4072, reg, data);
@@ -34,12 +43,12 @@
 void
 px4072_write_indirect(unsigned reg, unsigned data) {
        unsigned status;
-       status = i2c_read8(i2c_4072, 0x29);
+       status = i2c_read8(i2c_4072, fpStatusReg);
        /* printf("stat = %x\n", status); */
-       i2c_write16(i2c_4072, 0x27, reg);
-       status = i2c_read8(i2c_4072, 0x29);
+       i2c_write16(i2c_4072, fpWriteReg, reg);
+       status = i2c_read8(i2c_4072, fpStatusReg);
        /* printf("stat = %x\n", status); */
-       i2c_write16(i2c_4072, 0x28, data);
+       i2c_write16(i2c_4072, fpDataReg, data);
 }
 
 
@@ -47,12 +56,12 @@
 px4072_read_indirect(unsigned reg) {
        unsigned data, status;
        
-       status = i2c_read8(i2c_4072, 0x29);
+       status = i2c_read8(i2c_4072, fpStatusReg);
        /* printf("stat = %x\n", status); */
-       i2c_write16(i2c_4072, 0x26, reg);
-       status = i2c_read8(i2c_4072, 0x29);
+       i2c_write16(i2c_4072, fpReadReg, reg);
+       status = i2c_read8(i2c_4072, fpStatusReg);
        /* printf("stat = %x\n", status); */
-       data = i2c_read16(i2c_4072, 0x28);
+       data = i2c_read16(i2c_4072, fpDataReg);
 
        return data;
 }
@@ -77,17 +86,54 @@
                h = lines-2*begin;
        if(w > max_width)
                w = max_width;
-       px4072_write_indirect(0x8e, begin);
-       px4072_write_indirect(0x8f, lines/2);
-       px4072_write_indirect(0x90, h/2);
-       px4072_write_indirect(0x91, 0);
-       px4072_write_indirect(0x92, w);
-       px4072_write_indirect(0x93, w);
-       px4072_write_indirect(0xf0, 0x041);
+
+       switch (decoderId) {
+       case VPX3225D:  //FIXME double check this
+               px4072_write_indirect (0x120, begin);  /* window1 ver begin */
+               px4072_write_indirect (0x121, lines/2);  /* w1 ver lines in */
+               px4072_write_indirect (0x122, h/2);  /* w1 ver lines out */
+               px4072_write_indirect (0x123, 0);  /* w1 horiz begin */
+               px4072_write_indirect (0x124, w); /* w1 horiz length */
+               px4072_write_indirect (0x125, w);  /* w1 num of pixels */
+               //px4072_write_indirect (0x140, 0x060);
+               px4072_write_indirect (0x140, 0x020);  /* latch window 1 */
+               break;
+       default:
+               px4072_write_indirect(0x8e, begin);
+               px4072_write_indirect(0x8f, lines/2);
+               px4072_write_indirect(0x90, h/2);
+               px4072_write_indirect(0x91, 0);
+               px4072_write_indirect(0x92, w);
+               px4072_write_indirect(0x93, w);
+               px4072_write_indirect(0xf0, 0x041);
+               break;
+       }
+}
+
+static void 
+vpx3225d_Setsource (void) {
+       unsigned data;
+
+       data = px4072_read_indirect (0x20);
+
+       switch (videosource) {
+       case TUNER:
+               px4072_write_indirect (0x21, 0x001);
+               px4072_write_indirect (0x20, data & 0xfbf);
+               break;
+       case VCR:  // svhs
+               px4072_write_indirect (0x21, 0x406);
+               px4072_write_indirect (0x20, data | 0x40);
+               break;
+       }
 }
 
 void
 px4072_Setsource(void) {
+       if (decoderId == VPX3225D) {
+               vpx3225d_Setsource ();
+               return;
+       }
        switch(videosource) {
        case TUNER:
                px4072_write_direct(0x33, 1);
@@ -101,6 +147,12 @@
 void
 px4072_Setcolorspace() {
        int valE8;
+
+       if (decoderId == VPX3225D) {
+               /*FIXME */
+               return;
+       }
+
        switch(colorspace) {
        case RGB_565:
                valE8 = 0x06;
@@ -124,8 +176,28 @@
        px4072_write_direct(0xe8, valE8);
 }
 
+static void
+vpx3225d_Setsystem (void) {
+       unsigned val;
+
+       /*FIXME */
+       switch (system) {
+       case NTSC:
+       default:
+               val = 0x001;
+               break;
+       }
+
+       px4072_write_indirect (0x150, val);
+}
+               
 void
 px4072_Setsystem() {
+       if (decoderId == VPX3225D) {
+               vpx3225d_Setsystem ();
+               return;
+       }
+
        switch(system) {
        case NTSC:
                px4072_write_indirect(0xf2, 0x13);
@@ -142,6 +214,36 @@
        }
 }
 
+void video_decoder_off (void)
+{
+       if (decoderId == VPX3225D) {
+               px4072_write_direct (0xF2, 0x00);  // disable output
+               px4072_write_direct (0xAA, 0x03);  // switch to low power mode
+               return;
+       }
+}
+
+static void
+vpx3225d_init (void) {
+       px4072_write_direct (0xAA, 0x00);  // full power mode
+       //px4072_write_direct (0xF8, 0x24);  // 
+       //px4072_write_direct (0xF9, 0x20);
+       //AC    px4072_write_direct (0xC8, 0);  // 64  sync slicer disable
+
+       px4072_Setwindow(capW, capH);
+       vpx3225d_Setsystem ();
+       px4072_Setsource();
+
+       //px4072_write_indirect (0x22, 0);  // start position of video active
+       //px4072_write_indirect (0x138, 0);  // disable vbi window
+       px4072_write_indirect (0x12B, 0xc00);  // disable window 2
+       px4072_write_indirect (0x126, 0x100);  // peaking and coring
+
+       px4072_write_indirect (0x154, 0x200);  // output multiplexer, set double
+                                              // clock
+       px4072_write_direct (0xF2, 0x0f);  // enable output
+}
+
 void
 InitPX4072() {
        int t1, t2;
@@ -156,15 +258,26 @@
              px4072_read_direct(0x01);
 
        printf("InitPX4072: videodecoder %02x %04x\n", t1, t2);
+       decoderId = t2;
 
        switch(t2) {
        case 0x4680:
        case 0x4260:
        case 0x4280:
+       case VPX3225D:  /* 0x7230 */
+               fpReadReg = 0x36;
+               fpWriteReg = 0x37;
+               fpDataReg = 0x38;
+               fpStatusReg = 0x35;
                break;
        default:
                fprintf(stderr, "Unsupported video decoder\n");
                exit(1);
+       }
+
+       if (decoderId == VPX3225D) {
+               vpx3225d_init ();
+               return;
        }
 
        px4072_write_indirect(0x89, 0xc01);
diff -Naur xtv/tuner.c xtv-patched2/tuner.c
--- xtv/tuner.c Sat Jun 19 18:45:21 1999
+++ xtv-patched2/tuner.c        Sun Sep 22 06:56:31 2002
@@ -44,6 +44,7 @@
        { 38.90,  48.25, 170.00, 450.00, 855.25 }, /* 1216 CCIR B/G */
        { 42.75,  55.25, 160.00, 454.00, 801.25 }, /* 1236 RTMA M/N */
        { 38.90,  45.75, 170.00, 450.00, 855.25 }, /* 1246 CCIR I   */
+       { 45.75,  55.25, 169.25, 457.25, 855.25 }, /* samsung TCPN9082DA27C NTSC only 
+*/
 };
 
 static int is_radio = 0;
diff -Naur xtv/xwin.c xtv-patched2/xwin.c
--- xtv/xwin.c  Sat Nov 13 23:01:25 1999
+++ xtv-patched2/xwin.c Sun Sep 22 08:46:53 2002
@@ -326,6 +326,8 @@
        case XK_q:
                gd5480_off();
                set_mute(1);
+               audio_off ();  /*FIXME */
+               video_decoder_off ();
                gd5480_restore();
                exit(0);
                break;

Reply via email to