Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Feb 2007 06:09:13 +0300
From:      Yuri Pankov <y.pankov@irbis.net.ru>
To:        Danny Pansters <danny@ricin.com>
Cc:        Boris Samorodov <bsam@ipt.ru>, freebsd-ports@freebsd.org
Subject:   Re: multimedia/kbtv: broken saa kmod?
Message-ID:  <20070213030913.GA23018@darklight.abyss.local>
In-Reply-To: <200702122145.19885.danny@ricin.com>
References:  <47998907@srv.sem.ipt.ru> <200702122145.19885.danny@ricin.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--J2SCkAp4GZ/dPZZf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Mon, Feb 12, 2007 at 09:45:19PM +0100, Danny Pansters wrote:
> On Monday 12 February 2007 18:59, Boris Samorodov wrote:
> > Hi,
> >
> >
> > just noticed that kbtv is being developed. Greate news, thanks!
> >
> > Did somebody manage to build saa kernel module (multimedia/kbtv)? I've
> > got an error:
> > -----
> > ===> kmod (all)
> > Warning: Object directory not changed from original
> > /usr/ports/multimedia/kbtv/work/kbtv-1.2.3/saa/saa/kmod @ -> /usr/src/sys
> > machine -> /usr/src/sys/amd64/include
> > awk -f @/tools/makeobjops.awk @/dev/iicbus/iicbus_if.m -h
> > awk -f @/tools/makeobjops.awk @/kern/device_if.m -h
> > awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h
> > awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h
> > cc -O2 -fno-strict-aliasing -pipe  -Werror -D_KERNEL -DKLD_MODULE -nostdinc
> > -I-   -I. -I@ -I@/contrib/altq -I@/../include -I/usr/include
> > -finline-limit=8000 -fno-common  -fno-omit-frame-pointer -mcmodel=kernel
> > -mno-red-zone  -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow 
> > -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -Wall
> > -Wredundant-decls -Wnested-externs -Wstrict-prototypes 
> > -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual 
> > -fformat-extensions -std=c99 -c saa713x.c saa713x.c: In function
> > `saa_build_pta':
> > saa713x.c:507: warning: int format, different type arg (arg 2)
> 
> Looks like it needs a cast, might be an easy fix.
> 
> > *** Error code 1
> >
> > Stop in /usr/ports/multimedia/kbtv/work/kbtv-1.2.3/saa/saa/kmod.
> > *** Error code 1
> >
> > Stop in /usr/ports/multimedia/kbtv/work/kbtv-1.2.3/saa/saa.
> > -----
> >
> > # make -V PORTVERSION
> > 1.2.3
> > # uname -a
> > FreeBSD srv.sem.ipt.ru 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Mon Jan 15
> > 17:30:44 MSK 2007     bsam@srv.sem.ipt.ru:/usr/obj/usr/src/sys/GENERIC 
> 
> > amd64
> 
> Ah, I'm on i386, I've seen something similar before. The 64 bit platforms are 
> more picky. I'll see what I can do (I have an amd64 box to test on).
> 
> Thanks,
> 
> Dan
> 
> 
> PS
> 
> I see you are Russian; I'm not sure if it applies to you, but please note that 
> secam doesnt work, only pal d/k/L' (whichever you may need). You'd probably 
> get black-and-white video and no sound. While it may be easy to add the 
> needed audio carrier frequencies (if provided with the correct values) in my 
> own code, the handling of secam video in the saa driver may be harder 
> considering that I can't really test. It may be possible to deal with it in 
> my own code while rendering, and do a conversion there but that will probably 
> be slow. It would be great if someone would just sent me a secam patch :)

Hi,

I've attached a patch allowing saa kmod to compile cleanly on amd64 with WERROR
defined.

I don't use kbtv but am interested in saa713x driver, so improvements to make it
work in SECAM are welcome. Just setting SECAM video standard to get colour picture
seems pretty easy, given the code in saa/saa/support/set_videoopt.c. Diff adding
SECAM option to it is also attached.

Another question - is anyone successfully running this driver on -CURRENT? I'm 
wondering cause of the following change by imp@ to iicbus.c, denying attach of 
generic iic device:

===================================================================
RCS file: /usr/local/www/cvsroot/FreeBSD/src/sys/dev/iicbus/iicbus.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -p -r1.21 -r1.22

<snip>

@@ -139,51 +139,52 @@ iicbus_attach(device_t dev)
 	printf("\n");
 #endif
   
-	/* attach any known device */
 	device_add_child(dev, "ic", -1);
-	device_add_child(dev, "iic", -1);
 	device_add_child(dev, "iicsmb", -1);
-
+#if 0
+	/* attach any known device */
+	device_add_child(dev, "iic", -1);
+#endif         
 	bus_generic_attach(dev);
-         
         return (0);
 }

<snip>


HTH,
Yuri

--J2SCkAp4GZ/dPZZf
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="saa-kmod.diff"

diff -ruN kbtv-1.2.3.orig/saa/saa/kmod/saa713x.c kbtv-1.2.3/saa/saa/kmod/saa713x.c
--- kbtv-1.2.3.orig/saa/saa/kmod/saa713x.c	Tue Feb 13 04:21:03 2007
+++ kbtv-1.2.3/saa/saa/kmod/saa713x.c	Tue Feb 13 04:22:01 2007
@@ -503,7 +503,7 @@
 				break;
 			if ((segs[seg_idx].ds_len % 4096) != 0)
 				panic("saa:saa_build_pta: Invalid segment len "
-					"= %d idx = %d\n",
+					"= %jd idx = %d\n",
 					segs[seg_idx].ds_len, seg_idx);
 		}
 	}
diff -ruN kbtv-1.2.3.orig/saa/saa/kmod/saa713x_audio.c kbtv-1.2.3/saa/saa/kmod/saa713x_audio.c
--- kbtv-1.2.3.orig/saa/saa/kmod/saa713x_audio.c	Tue Feb 13 04:21:03 2007
+++ kbtv-1.2.3/saa/saa/kmod/saa713x_audio.c	Tue Feb 13 04:35:09 2007
@@ -438,7 +438,7 @@
 	}
 
 	REG_SET(REG_MCR, MCR_CHAN6_TE);
-#if NOT_YET
+#if 0
 	/* 
 	 * Interrupts are always enabled, ie.,
 	 * even when ASPEC_FLAG_CAPTURE_SIGNAL is not specified as
@@ -634,7 +634,7 @@
 		return EDOOFUS;
 	}
 	if (offset > (SAA_MMAP_ACAP_SZ - 4096)) {
-		device_printf(sc->sc_dev, "Invalid mmap offset %d, "
+		device_printf(sc->sc_dev, "Invalid mmap offset %jd, "
 				" max: %d\n", 
 				offset,
 				(SAA_MMAP_ACAP_SZ - 4096));
diff -ruN kbtv-1.2.3.orig/saa/saa/kmod/saa713x_i2c.c kbtv-1.2.3/saa/saa/kmod/saa713x_i2c.c
--- kbtv-1.2.3.orig/saa/saa/kmod/saa713x_i2c.c	Tue Feb 13 04:21:03 2007
+++ kbtv-1.2.3/saa/saa/kmod/saa713x_i2c.c	Tue Feb 13 04:47:27 2007
@@ -152,7 +152,7 @@
 	
 int 
 saa_i2c_write(device_t dev, 
-	 	char *buf, int len, 
+	 	const char *buf, int len, 
 	 	int *bytes, int timeout)
 {
 	uint8_t sts;
diff -ruN kbtv-1.2.3.orig/saa/saa/kmod/saa713x_video.c kbtv-1.2.3/saa/saa/kmod/saa713x_video.c
--- kbtv-1.2.3.orig/saa/saa/kmod/saa713x_video.c	Tue Feb 13 04:21:03 2007
+++ kbtv-1.2.3/saa/saa/kmod/saa713x_video.c	Tue Feb 13 04:32:11 2007
@@ -713,23 +713,23 @@
 
 		if (o->svs_vfmt & VFMT_PLANAR) {
 			REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_Y),
-				(int)o->svs_buf_base + o->svs_buf_offset[0][0]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][0]);
 			REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_Y),
-				(int)o->svs_buf_base + o->svs_buf_offset[1][0]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][0]);
 			REG_WRITE(REG_DMA_PITCH(SAA_CHAN_YUV_Y),
 							o->svs_buf_pitch[0]);
 
 			REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_U), 
-				(int)o->svs_buf_base + o->svs_buf_offset[0][1]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][1]);
 			REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_U), 
-				(int)o->svs_buf_base + o->svs_buf_offset[1][1]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][1]);
 			REG_WRITE(REG_DMA_PITCH(SAA_CHAN_YUV_U),
 						o->svs_buf_pitch[1]);
 
 			REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_V), 
-				(int)o->svs_buf_base + o->svs_buf_offset[0][2]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][2]);
 			REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_V), 
-				(int)o->svs_buf_base + o->svs_buf_offset[1][2]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][2]);
 			REG_WRITE(REG_DMA_PITCH(SAA_CHAN_YUV_V),
 						o->svs_buf_pitch[2]);
 
@@ -749,9 +749,9 @@
 						 	  & DMA_CTRL_PTA_MASK));
 		} else {
 			REG_WRITE(REG_DMA_BASE0(t), 
-	       			(int)o->svs_buf_base + o->svs_buf_offset[0][0]);
+	       			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][0]);
 			REG_WRITE(REG_DMA_BASE1(t),
-				(int)o->svs_buf_base + o->svs_buf_offset[1][0]);
+				(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][0]);
 			REG_WRITE(REG_DMA_PITCH(t), o->svs_buf_pitch[0]);
 			ctrl = 	(0x7 << DMA_CTRL_BURST_SHIFT) 
 						& DMA_CTRL_BURST_MASK;
@@ -1308,9 +1308,9 @@
 	saa_load_cliplist(sc, &o->svs_clipmode, &o->svs_cliplist);
 
 	REG_WRITE(REG_DMA_BASE0(t), 
-			(int)o->svs_buf_base + o->svs_buf_offset[0][0]);
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][0]);
 	REG_WRITE(REG_DMA_BASE1(t), 
-			(int)o->svs_buf_base + o->svs_buf_offset[1][0]);
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][0]);
 	REG_WRITE(REG_DMA_PITCH(t), o->svs_buf_pitch[0]);
 	REG_WRITE(REG_DMA_CTRL(t), 
 			((0x7 << DMA_CTRL_BURST_SHIFT) & DMA_CTRL_BURST_MASK) |
@@ -1431,7 +1431,7 @@
 	 * hence we dont't need svs_cap_bufsz[t]
 	 */
 	if (offset > (sc->sc_video_spec.svs_cap_bufsz - 4096)) {
-		device_printf(sc->sc_dev, "Invalid mmap offset %d, max: %d\n", 
+		device_printf(sc->sc_dev, "Invalid mmap offset %jd, max: %d\n", 
 				offset,
 				(sc->sc_video_spec.svs_cap_bufsz - 4096));
 		return EINVAL;
@@ -1467,31 +1467,31 @@
 
 	if (sc->sc_video_spec.svs_vfmt & VFMT_PLANAR) {
 		REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_Y),
-			(int)o->svs_buf_base + o->svs_buf_offset[0][0] + 
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][0] + 
 			offset);
 		REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_Y),
-			(int)o->svs_buf_base + o->svs_buf_offset[1][0] +
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][0] +
 			offset);
 
 		REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_U), 
-			(int)o->svs_buf_base + o->svs_buf_offset[0][1] +
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][1] +
 			offset);
 		REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_U), 
-			(int)o->svs_buf_base + o->svs_buf_offset[1][1] +
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][1] +
 			offset);
 
 		REG_WRITE(REG_DMA_BASE0(SAA_CHAN_YUV_V), 
-			(int)o->svs_buf_base + o->svs_buf_offset[0][2] +
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][2] +
 			offset);
 		REG_WRITE(REG_DMA_BASE1(SAA_CHAN_YUV_V), 
-			(int)o->svs_buf_base + o->svs_buf_offset[1][2] +
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][2] +
 			offset);
 	} else {
 		REG_WRITE(REG_DMA_BASE0(t), 
-			(int)o->svs_buf_base + o->svs_buf_offset[0][0] + 
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[0][0] + 
 				offset);
 		REG_WRITE(REG_DMA_BASE1(t),
-			(int)o->svs_buf_base + o->svs_buf_offset[1][0] + 
+			(intptr_t)o->svs_buf_base + o->svs_buf_offset[1][0] + 
 				offset);
 	}
 }

--J2SCkAp4GZ/dPZZf
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="set_videoopt.c.diff"

--- kbtv-1.2.3.orig/saa/saa/support/set_videoopt.c	Tue Feb 13 04:21:03 2007
+++ kbtv-1.2.3/saa/saa/support/set_videoopt.c	Tue Feb 13 04:43:45 2007
@@ -16,6 +16,9 @@
 #define NTSC_LINE_COUNT		240
 #define NTSC_LINE_OFFSET	16
 
+#define	SECAM_LINE_COUNT	288
+#define	SECAM_LINE_OFFSET	19
+
 static const char *opts = "s:o:i:b:f:g:w:x:A:a:C:c:d:l:L:m:M:B:T:S:H:D:";
 
 static char *devname = 0;
@@ -24,6 +27,7 @@
     	"-s <standard>		: Video Standard, standard is:\n"
 	"			    p - PAL (default)\n"
 	"			    n - NTSC\n"
+	"			    s - SECAM\n"
 	"-o <N>			: Line Start Offset Adjustment, N is:\n"
 	"			    -11 < N < +11 (default 0)\n"
     	"-i <input>		: Video Input Source, input is:\n"
@@ -191,6 +195,14 @@
 						video_std.std_video_yinstart +
 						NTSC_LINE_COUNT - 1;
 				video_opt.svo_cstd = CSTD_NTSC;
+				break;
+			case 'S':
+			case 's':
+				video_std.std_video_yinstart = SECAM_LINE_OFFSET;
+				video_std.std_video_yinstop =
+						video_std.std_video_yinstart +
+						SECAM_LINE_COUNT - 1;
+				video_opt.svo_cstd = CSTD_SECAM;
 				break;
 			default:
 				errx(1, "Invalid standard %s\n\n%s", 

--J2SCkAp4GZ/dPZZf--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070213030913.GA23018>