Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
At that time when I start the installation, it "work" plainly using
the steps  even though it refer back to old codes. It was good enough
for a end user but you are right that if we are to put in mainstream
code, there will be a need to do clean up.

But that is also provided that it possible to get the necessary
approval to use the codes for merging.

On Wed, May 5, 2010 at 10:40 PM, Simon Kenyon  wrote:
> On 05/05/2010 15:07, Bee Hock Goh wrote:
>>
>> You need to follow this link:
>> http://ubuntuforums.org/showthread.php?p=8936585
>>
>> If you download the correct version of the antti af9015 tree, you can
>> apply the patch correctly and it will work(a tda18218/af9015 stick)
>> without any code change.
>>
>
> thanks for your help
>
> that thread talks about using an old version of the tree
> i will try it just to make sure that i am doing the correct thing with my
> edits
> but it is not a long term solution
>
> the patch replaces the entry to another stick rather than fix up the code to
> add an extra one
> i don't think that it will make it into the tree in its current state
> that and all the magic constants
>
> regards
> --
> simon
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/10] V4L2 patches for Intel Moorestown Camera Imaging Drivers - part 1

2010-05-05 Thread Hans Verkuil
On Monday 29 March 2010 08:40:50 Hans Verkuil wrote:
> Hi Xiaolin,
> 
> On Sunday 28 March 2010 16:42:30 Zhang, Xiaolin wrote:
> > From 1c18c41be33246e4b766d0e95e28a72dded87475 Mon Sep 17 00:00:00 2001
> > From: Xiaolin Zhang 
> > Date: Sun, 28 Mar 2010 21:31:24 +0800
> > Subject: [PATCH 2/10] This patch is second part of intel moorestown isp 
> > driver and c files collection which is v4l2 implementation.
> > 
> 
> 
> 
> > +struct videobuf_dma_contig_memory {
> > +   u32 magic;
> > +   void *vaddr;
> > +   dma_addr_t dma_handle;
> > +   unsigned long size;
> > +   int is_userptr;
> > +};
> > +
> > +#define MAGIC_DC_MEM 0x0733ac61
> > +#define MAGIC_CHECK(is, should)
> > \
> > +   if (unlikely((is) != (should))) {   
> > \
> > +   pr_err("magic mismatch: %x expected %x\n", (is), (should)); 
> > \
> > +   BUG();  
> > \
> > +   }
> 
> I will do a more in-depth review in a few days. 

I realize that I never got round to this. You have to remind me if you don't
see a follow-up within a week! These things tend to get buried otherwise.

I will try to review this this weekend. Let me know if you prefer me to wait
for the next patch series incorporating the comments already made by others.

Regards,

Hans

> However, I did notice that
> you added your own dma_contig implementation. What were the reasons for doing
> this? I've CC-ed Pawel since he will be interested in this as well.
> 
> Another question that came up is: what is 'marvin'? It's clearly a codename,
> but a codename for what? This should be documented at the top of some source
> or header. Apologies if it is already documented, I didn't read everything 
> yet.
> 
> A final point I noticed: don't cast away a function result:
> 
> (void)ci_isp_set_bp_detection(NULL);
> 
> No need for (void). The gcc compiler won't warn about this unless the function
> is annotated with __must_check__.
> 
> Regards,
> 
>   Hans
> 
> 

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG, part of Cisco
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] tda10048: fix the uncomplete function tda10048_read_ber

2010-05-05 Thread Guillaume Audirac
Hello Steven,

> Thanks Guillaume, I have a pile of other patches I'm ready to present
> for merge so I'll pull this into one of my dev trees and present this
> for merge also of course, I'll test it first! :)
>
> Thanks again for working on this.

You're welcome. I am just starting reviewing the driver. I have already
noticed a few errors in it. I will keep on sending obvious patches.
I can quickly summarise some of the missing important features:
- missing lock algorithm which should use the SCAN_CPT register to make it
efficient
- missing frequency offset detection (thanks to AUTOOFFSET=1 and OFFSET_F)

-- 
Guillaume

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] V4L/DVB: buf-dma-sg.c: support non-pageable user-allocated memory

2010-05-05 Thread Mauro Carvalho Chehab
Hi Arnout,

Arnout Vandecappelle wrote:
> videobuf_dma_init_user_locked() uses get_user_pages() to get the
> virtual-to-physical address mapping for user-allocated memory.
> However, the user-allocated memory may be non-pageable because it
> is an I/O range or similar.  get_user_pages() fails with -EFAULT
> in that case.
> 
> If the user-allocated memory is physically contiguous, the approach
> of V4L2_MEMORY_OVERLAY can be used.  If it is not, -EFAULT is still
> returned.
> ---
>  drivers/media/video/videobuf-dma-sg.c |   18 ++
>  1 files changed, 18 insertions(+), 0 deletions(-)
> 

Your patch looked sane to my eyes. I just noticed one warning at the dprintk,
when compiled with 32 bits address space, and a few coding style issues.
I needed to rebase it also, due to some changes at videobuf.

However, you missed your SOB. Could you please send it? I'm enclosing
the version with my changes for you to sign.

---

V4L/DVB: buf-dma-sg.c: support non-pageable user-allocated memory
Date: Wed, 17 Mar 2010 22:53:05 -
From: Arnout Vandecappelle 

videobuf_dma_init_user_locked() uses get_user_pages() to get the
virtual-to-physical address mapping for user-allocated memory.
However, the user-allocated memory may be non-pageable because it
is an I/O range or similar.  get_user_pages() fails with -EFAULT
in that case.

If the user-allocated memory is physically contiguous, the approach
of V4L2_MEMORY_OVERLAY can be used.  If it is not, -EFAULT is still
returned.

[mche...@redhat.com: Fixed CodingStyle and warning at dprintk on i386]

---
drivers/media/video/videobuf-dma-sg.c |   18 ++
 drivers/media/video/videobuf-dma-sg.c |   20 
 1 file changed, 20 insertions(+)

--- work.orig/drivers/media/video/videobuf-dma-sg.c
+++ work/drivers/media/video/videobuf-dma-sg.c
@@ -145,6 +145,7 @@ static int videobuf_dma_init_user_locked
 {
unsigned long first, last;
int err, rw = 0;
+   struct vm_area_struct *vma;
 
dma->direction = direction;
switch (dma->direction) {
@@ -162,6 +163,25 @@ static int videobuf_dma_init_user_locked
last  = ((data+size-1) & PAGE_MASK) >> PAGE_SHIFT;
dma->offset   = data & ~PAGE_MASK;
dma->nr_pages = last-first+1;
+
+   /* In case the buffer is user-allocated and is actually an IO buffer for
+  some other hardware, we cannot map pages for it.  It in fact behaves
+  the same as an overlay. */
+   vma = find_vma(current->mm, data);
+   if (vma && (vma->vm_flags & VM_IO)) {
+   /* Only a single contiguous buffer is supported. */
+   if (vma->vm_end < data + size) {
+   dprintk(1, "init user: non-contiguous IO buffer.\n");
+   /* same error that get_user_pages() would give */
+   return -EFAULT;
+   }
+   dma->bus_addr = (vma->vm_pgoff << PAGE_SHIFT) +
+   (data - vma->vm_start);
+   dprintk(1, "init user IO [0x%lx+0x%lx => %d pages at 0x%llx]\n",
+   data, size, dma->nr_pages, (long long)dma->bus_addr);
+   return 0;
+   }
+
dma->pages = kmalloc(dma->nr_pages * sizeof(struct page *), GFP_KERNEL);
if (NULL == dma->pages)
return -ENOMEM;


-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [videobuf] Query: Condition bytesize limit in videobuf_reqbufs -> buf_setup() call?

2010-05-05 Thread Mauro Carvalho Chehab
Aguirre, Sergio wrote:
> 
>> -Original Message-
>> From: Mauro Carvalho Chehab [mailto:mche...@redhat.com]
>> Sent: Wednesday, May 05, 2010 6:24 PM
>> To: Aguirre, Sergio
>> Cc: linux-media@vger.kernel.org
>> Subject: Re: [videobuf] Query: Condition bytesize limit in
>> videobuf_reqbufs -> buf_setup() call?
>>
>> Aguirre, Sergio wrote:
>>> Hi all,
>>>
>>> While working on an old port of the omap3 camera-isp driver,
>>> I have faced some problem.
>>>
>>> Basically, when calling VIDIOC_REQBUFS with a certain buffer
>>> Count, we had a software limit for total size, calculated depending on:
>>>
>>>   Total bytesize = bytesperline x height x count
>>>
>>> So, we had an arbitrary limit to, say 32 MB, which was generic.
>>>
>>> Now, we want to condition it ONLY when MMAP buffers will be used.
>>> Meaning, we don't want to keep that policy when the kernel is not
>>> allocating the space
>>>
>>> But the thing is that, according to videobuf documentation, buf_setup is
>>> the one who should put a RAM usage limit. BUT the memory type passed to
>>> reqbufs is not propagated to buf_setup, therefore forcing me to go to a
>>> non-standard memory limitation in my reqbufs callback function, instead
>>> of doing it properly inside buf_setup.
>>>
>>> Is this scenario a good consideration to change buf_setup API, and
>>> propagate buffers memory type aswell?
>> I don't see any problem on propagating the memory type to buffer_setup, if
>> this is really needed. Yet, I can't see why you would restrict the buffer
>> size to 32 MB on one case, and not restrict the size at all with non-MMAP
>> types.
> 
> Ok, my reason for doing that is because I thought that there should be a 
> memory limit in whichever place you're doing the buffer allocations.
> 
> MMAP is allocating buffers in kernel, so kernel should provide a memory 
> restriction, if applies.
> 
> USERPTR is allocating buffers in userspace, so userspace should provide a 
> memory restriction, if applies.
> 
> Please correct me if my reasoning is not correct.
>

Your rationale makes some sense.

For the effects of the remaining discussion, let's forget about 
videobuf-vmalloc,
as I'm assuming your troubles are with a driver using videobuf-contig 
or videobuf-dma_sg.

With all memory types, kernel will need to command DMA transfers to those 
buffers. It still keeps sense to have a restriction on kernelspace, 
to avoid, for example, the risk of  userspace to fill all DMA capable 
memory with video buffers, preventing its usage by other subsystems 
(usb, disk, net, etc). So, such limit should still be enforced in kernel, 
otherwise, you may open an space for DoS attacks.

The limit between read(), MMAP, USERPTR and OVERLAY might eventually be 
different, but
I can't see why you might want to put different limits for each case, as the 
resource
that this check is protecting is the DMA-capable memory area. No matter how 
you're allocating
it, you'll need to enforce the same degree of protection.

-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [videobuf] Query: Condition bytesize limit in videobuf_reqbufs -> buf_setup() call?

2010-05-05 Thread Aguirre, Sergio


> -Original Message-
> From: Mauro Carvalho Chehab [mailto:mche...@redhat.com]
> Sent: Wednesday, May 05, 2010 6:24 PM
> To: Aguirre, Sergio
> Cc: linux-media@vger.kernel.org
> Subject: Re: [videobuf] Query: Condition bytesize limit in
> videobuf_reqbufs -> buf_setup() call?
> 
> Aguirre, Sergio wrote:
> > Hi all,
> >
> > While working on an old port of the omap3 camera-isp driver,
> > I have faced some problem.
> >
> > Basically, when calling VIDIOC_REQBUFS with a certain buffer
> > Count, we had a software limit for total size, calculated depending on:
> >
> >   Total bytesize = bytesperline x height x count
> >
> > So, we had an arbitrary limit to, say 32 MB, which was generic.
> >
> > Now, we want to condition it ONLY when MMAP buffers will be used.
> > Meaning, we don't want to keep that policy when the kernel is not
> > allocating the space
> >
> > But the thing is that, according to videobuf documentation, buf_setup is
> > the one who should put a RAM usage limit. BUT the memory type passed to
> > reqbufs is not propagated to buf_setup, therefore forcing me to go to a
> > non-standard memory limitation in my reqbufs callback function, instead
> > of doing it properly inside buf_setup.
> >
> > Is this scenario a good consideration to change buf_setup API, and
> > propagate buffers memory type aswell?
> 
> I don't see any problem on propagating the memory type to buffer_setup, if
> this is really needed. Yet, I can't see why you would restrict the buffer
> size to 32 MB on one case, and not restrict the size at all with non-MMAP
> types.

Ok, my reason for doing that is because I thought that there should be a memory 
limit in whichever place you're doing the buffer allocations.

MMAP is allocating buffers in kernel, so kernel should provide a memory 
restriction, if applies.

USERPTR is allocating buffers in userspace, so userspace should provide a 
memory restriction, if applies.

Please correct me if my reasoning is not correct.

Regards,
Sergio

> 
> > I'll appreciate your inputs on this matter.
> >
> > Regards,
> > Sergio
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-media"
> in
> > the body of a message to majord...@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> --
> 
> Cheers,
> Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [videobuf] Query: Condition bytesize limit in videobuf_reqbufs -> buf_setup() call?

2010-05-05 Thread Mauro Carvalho Chehab
Aguirre, Sergio wrote:
> Hi all,
> 
> While working on an old port of the omap3 camera-isp driver,
> I have faced some problem.
> 
> Basically, when calling VIDIOC_REQBUFS with a certain buffer
> Count, we had a software limit for total size, calculated depending on:
> 
>   Total bytesize = bytesperline x height x count
> 
> So, we had an arbitrary limit to, say 32 MB, which was generic.
> 
> Now, we want to condition it ONLY when MMAP buffers will be used.
> Meaning, we don't want to keep that policy when the kernel is not
> allocating the space
> 
> But the thing is that, according to videobuf documentation, buf_setup is
> the one who should put a RAM usage limit. BUT the memory type passed to
> reqbufs is not propagated to buf_setup, therefore forcing me to go to a
> non-standard memory limitation in my reqbufs callback function, instead
> of doing it properly inside buf_setup.
> 
> Is this scenario a good consideration to change buf_setup API, and
> propagate buffers memory type aswell?

I don't see any problem on propagating the memory type to buffer_setup, if
this is really needed. Yet, I can't see why you would restrict the buffer
size to 32 MB on one case, and not restrict the size at all with non-MMAP
types.

> I'll appreciate your inputs on this matter.
> 
> Regards,
> Sergio
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


setting up a tevii s660

2010-05-05 Thread Tim Coote

Hullo
I've been struggling with this for a couple of days. I have checked  
archives, but missed anything useful.


I've got a tevii s660 (dvbs2 via usb). It works with some limitations  
on windows xp (I cannot get HD signals decoded, but think that's a  
limitation of the software that comes on the CD).


I'm trying to get this working on Linux. I've tried VMs based on  
fedora 12 and mythbuntu (VMWare Fusion on a MacBookPro, both based on  
kernel 2.6.32), using the drivers from tevii's site (www.tevii.com/support.asp) 
. these drivers are slightly modified versions of the v4l tip - but  
don't appear to be modified where I've not yet managed to get the  
drivers working :-(.  Mythbuntu seems to be closest to working.  
Goodness knows how tevii tested the code, but it doesn't seem to work  
as far as I can see.  My issues could just be down to using a VM.


I believe that I need to load up the modules ds3000 and dvb-usb- 
dw2102, + add a rule to /etc/udev/rules.d and a script to /etc/udev/ 
scripts.


I think that I must be missing quite a lot of context, tho'. When I  
look at the code in dw2102.c, which seems to support the s660, the bit  
that downloads the firmware looks broken and if I add a default clause  
to the switch that does the download, the s660's missed the download  
process.  This could be why when I do get anything out of the device  
it looks like I'm just getting repeated bytes (the same value  
repeated, different values at different times, sometimes nothing).   
I'm finding it non-trivial working out the call sequences of the code  
or devising repeatable tests.


Can anyone kick me off on getting this working? I'd like to at least  
get to the point where scandvb can tune the device. It does look like  
some folk have had success in the past, but probably with totally  
different codebase (there are posts that refer to the teviis660  
module, which I cannot find).


Any pointer gratefully accepted. I'll feed back any success if I can  
be pointed at where to drop document it.


tia

Tim
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH -next] media: fix vivi build error

2010-05-05 Thread Randy Dunlap
From: Randy Dunlap 

vivi uses find_font(), which is only available when FONTS
is enabled, so make vivi depend on FONTS.

ERROR: "find_font" [drivers/media/video/vivi.ko] undefined!

Signed-off-by: Randy Dunlap 
---
 drivers/media/video/Kconfig |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- linux-next-20100505.orig/drivers/media/video/Kconfig
+++ linux-next-20100505/drivers/media/video/Kconfig
@@ -559,7 +559,7 @@ config VIDEO_DAVINCI_VPIF
 
 config VIDEO_VIVI
tristate "Virtual Video Driver"
-   depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64
+   depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64 && FONTS
select FONT_8x16
select VIDEOBUF_VMALLOC
default n
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/5] viafb: Eliminate some global.h references

2010-05-05 Thread Jonathan Corbet
The various subdev drivers (other than the framebuffer itself) no longer
need this file.

Signed-off-by: Jonathan Corbet 
---
 drivers/video/via/via-gpio.c |1 -
 drivers/video/via/via_i2c.c  |4 +++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/video/via/via-gpio.c b/drivers/video/via/via-gpio.c
index 63cb7ac..67d699c 100644
--- a/drivers/video/via/via-gpio.c
+++ b/drivers/video/via/via-gpio.c
@@ -10,7 +10,6 @@
 #include 
 #include "via-core.h"
 #include "via-gpio.h"
-#include "global.h"
 
 /*
  * The ports we know about.  Note that the port-25 gpios are not
diff --git a/drivers/video/via/via_i2c.c b/drivers/video/via/via_i2c.c
index 84ec2d6..2291765 100644
--- a/drivers/video/via/via_i2c.c
+++ b/drivers/video/via/via_i2c.c
@@ -20,9 +20,11 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 #include "via-core.h"
 #include "via_i2c.h"
-#include "global.h"
 
 /*
  * There can only be one set of these, so there's no point in having
-- 
1.7.0.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 4/5] viafb: move some include files to include/linux

2010-05-05 Thread Jonathan Corbet
These are the files which should be available to subdevices compiled
outside of drivers/video/via.

Signed-off-by: Jonathan Corbet 
---
 drivers/video/via/accel.c   |2 +-
 drivers/video/via/dvi.c |4 +-
 drivers/video/via/hw.c  |3 +-
 drivers/video/via/lcd.c |4 +-
 drivers/video/via/via-core.c|6 +-
 drivers/video/via/via-core.h|  219 ---
 drivers/video/via/via-gpio.c|4 +-
 drivers/video/via/via-gpio.h|   14 ---
 drivers/video/via/via_i2c.c |4 +-
 drivers/video/via/via_i2c.h |   42 ---
 drivers/video/via/via_modesetting.c |2 +-
 drivers/video/via/via_utility.c |2 +-
 drivers/video/via/viafbdev.c|4 +-
 drivers/video/via/viamode.c |2 +-
 drivers/video/via/vt1636.c  |4 +-
 include/linux/via-core.h|  219 +++
 include/linux/via-gpio.h|   14 +++
 include/linux/via_i2c.h |   42 +++
 18 files changed, 296 insertions(+), 295 deletions(-)
 delete mode 100644 drivers/video/via/via-core.h
 delete mode 100644 drivers/video/via/via-gpio.h
 delete mode 100644 drivers/video/via/via_i2c.h
 create mode 100644 include/linux/via-core.h
 create mode 100644 include/linux/via-gpio.h
 create mode 100644 include/linux/via_i2c.h

diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c
index 189aba4..e44893e 100644
--- a/drivers/video/via/accel.c
+++ b/drivers/video/via/accel.c
@@ -18,7 +18,7 @@
  * Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include "via-core.h"
+#include 
 #include "global.h"
 
 /*
diff --git a/drivers/video/via/dvi.c b/drivers/video/via/dvi.c
index 6271b76..39b040b 100644
--- a/drivers/video/via/dvi.c
+++ b/drivers/video/via/dvi.c
@@ -18,8 +18,8 @@
  * Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include "via-core.h"
-#include "via_i2c.h"
+#include 
+#include 
 #include "global.h"
 
 static void tmds_register_write(int index, u8 data);
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
index e356fe8..b996803 100644
--- a/drivers/video/via/hw.c
+++ b/drivers/video/via/hw.c
@@ -18,7 +18,8 @@
  * Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include "via-core.h"
+
+#include 
 #include "global.h"
 
 static struct pll_map pll_value[] = {
diff --git a/drivers/video/via/lcd.c b/drivers/video/via/lcd.c
index 04eec31..2ab0f15 100644
--- a/drivers/video/via/lcd.c
+++ b/drivers/video/via/lcd.c
@@ -18,8 +18,8 @@
  * Foundation, Inc.,
  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-#include "via-core.h"
-#include "via_i2c.h"
+#include 
+#include 
 #include "global.h"
 #include "lcdtbl.h"
 
diff --git a/drivers/video/via/via-core.c b/drivers/video/via/via-core.c
index c7d37a0..15fcaab 100644
--- a/drivers/video/via/via-core.c
+++ b/drivers/video/via/via-core.c
@@ -7,9 +7,9 @@
 /*
  * Core code for the Via multifunction framebuffer device.
  */
-#include "via-core.h"
-#include "via_i2c.h"
-#include "via-gpio.h"
+#include 
+#include 
+#include 
 #include "global.h"
 
 #include 
diff --git a/drivers/video/via/via-core.h b/drivers/video/via/via-core.h
deleted file mode 100644
index 7ffb521..000
--- a/drivers/video/via/via-core.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
- * Copyright 2009-2010 Jonathan Corbet 
- * Copyright 2010 Florian Tobias Schandinat 
- *
- * 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, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; 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.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __VIA_CORE_H__
-#define __VIA_CORE_H__
-#include 
-#include 
-#include 
-#include 
-
-/*
- * A description of each known serial I2C/GPIO port.
- */
-enum via_port_type {
-   VIA_PORT_NONE = 0,
-   VIA_PORT_I2C,
-   VIA_PORT_GPIO,
-};
-
-enum via_port_mode {
-   VIA_MODE_OFF = 0,
-   VIA_MODE_I2C,   /* Used as I2C port */
-   VIA_MODE_GPIO,  /* Two GPIO ports */
-};
-
-enum viafb_i2c_adap {
-   VIA_PORT_26 = 0,
-   VIA_PORT_31,
-   VIA_PORT_25,
-   VIA_PORT_2C,
-   VIA_PORT_3D,
-};
-#define VIAFB_NUM_PORTS 5
-
-struct via_port_cfg

[PATCH 5/5] Add the viafb video capture driver

2010-05-05 Thread Jonathan Corbet
Add a driver for the video capture port on VIA integrated chipsets.  This
version has a remaining OLPCism or two and expects to be talking to an
ov7670; those can be improved as the need arises.

This work was supported by the One Laptop Per Child project.

Signed-off-by: Jonathan Corbet 
---
 drivers/media/video/Kconfig  |   10 +
 drivers/media/video/Makefile |2 +
 drivers/media/video/via-camera.c | 1368 ++
 drivers/media/video/via-camera.h |   93 +++
 drivers/video/via/accel.c|2 +-
 drivers/video/via/via-core.c |   16 +-
 include/linux/via-core.h |4 +-
 include/media/v4l2-chip-ident.h  |4 +
 8 files changed, 1495 insertions(+), 4 deletions(-)
 create mode 100644 drivers/media/video/via-camera.c
 create mode 100644 drivers/media/video/via-camera.h

diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index f8fc865..198636b 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -833,6 +833,16 @@ config VIDEO_CAFE_CCIC
  CMOS camera controller.  This is the controller found on first-
  generation OLPC systems.
 
+config VIDEO_VIA_CAMERA
+   tristate "VIAFB camera controller support"
+   depends on FB_VIA
+   select VIDEOBUF_DMA_SG
+   select VIDEO_OV7670
+   help
+  Driver support for the integrated camera controller in VIA
+  Chrome9 chipsets.  Currently only tested on OLPC xo-1.5 systems
+  with ov7670 sensors.
+
 config SOC_CAMERA
tristate "SoC camera support"
depends on VIDEO_V4L2 && HAS_DMA && I2C
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
index b88b617..089bb24 100644
--- a/drivers/media/video/Makefile
+++ b/drivers/media/video/Makefile
@@ -123,6 +123,8 @@ obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
 
 obj-$(CONFIG_VIDEO_CAFE_CCIC) += cafe_ccic.o
 
+obj-$(CONFIG_VIDEO_VIA_CAMERA) += via-camera.o
+
 obj-$(CONFIG_USB_DABUSB)+= dabusb.o
 obj-$(CONFIG_USB_OV511) += ov511.o
 obj-$(CONFIG_USB_SE401) += se401.o
diff --git a/drivers/media/video/via-camera.c b/drivers/media/video/via-camera.c
new file mode 100644
index 000..7b1ff0c
--- /dev/null
+++ b/drivers/media/video/via-camera.c
@@ -0,0 +1,1368 @@
+/*
+ * Driver for the VIA Chrome integrated camera controller.
+ *
+ * Copyright 2009,2010 Jonathan Corbet 
+ * Distributable under the terms of the GNU General Public License, version 2
+ *
+ * This work was supported by the One Laptop Per Child project
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "via-camera.h"
+
+MODULE_AUTHOR("Jonathan Corbet ");
+MODULE_DESCRIPTION("VIA framebuffer-based camera controller driver");
+MODULE_LICENSE("GPL");
+
+static int flip_image;
+module_param(flip_image, bool, 0444);
+MODULE_PARM_DESC(flip_image,
+   "If set, the sensor will be instructed to flip the image "
+   "vertically.");
+
+#ifdef CONFIG_OLPC_XO_1_5
+static int override_serial;
+module_param(override_serial, bool, 0444);
+MODULE_PARM_DESC(override_serial,
+   "The camera driver will normally refuse to load if "
+   "the XO 1.5 serial port is enabled.  Set this option "
+   "to force the issue.");
+#endif
+
+/*
+ * Basic window sizes.
+ */
+#define VGA_WIDTH  640
+#define VGA_HEIGHT 480
+#define QCIF_WIDTH 176
+#defineQCIF_HEIGHT 144
+
+/*
+ * The structure describing our camera.
+ */
+enum viacam_opstate { S_IDLE = 0, S_RUNNING = 1 };
+
+static struct via_camera {
+   struct v4l2_device v4l2_dev;
+   struct video_device vdev;
+   struct v4l2_subdev *sensor;
+   struct platform_device *platdev;
+   struct viafb_dev *viadev;
+   struct mutex lock;
+   enum viacam_opstate opstate;
+   unsigned long flags;
+   /*
+* GPIO info for power/reset management
+*/
+   int power_gpio;
+   int reset_gpio;
+   /*
+* I/O memory stuff.
+*/
+   void __iomem *mmio; /* Where the registers live */
+   void __iomem *fbmem;/* Frame buffer memory */
+   u32 fb_offset;  /* Reserved memory offset (FB) */
+   /*
+* Capture buffers and related.  The controller supports
+* up to three, so that's what we have here.  These buffers
+* live in frame buffer memory, so we don't call them "DMA".
+*/
+   unsigned int cb_offsets[3]; /* offsets into fb mem */
+   u8 *cb_addrs[3];/* Kernel-space addresses */
+   int n_cap_bufs; /* How many are we using? */
+   int next_buf;
+   struct videobuf_queue vb_queue;
+   struct list_head buffer_queue;  /* prot. by reg_lock */
+   /*
+* User tracking.
+*/
+   

[PATCH 2/5] viafb: get rid of i2c debug cruft

2010-05-05 Thread Jonathan Corbet
It's ugly and adds a global.h dependency.

Signed-off-by: Jonathan Corbet 
---
 drivers/video/via/via_i2c.c |6 ++
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/video/via/via_i2c.c b/drivers/video/via/via_i2c.c
index febc1dd..84ec2d6 100644
--- a/drivers/video/via/via_i2c.c
+++ b/drivers/video/via/via_i2c.c
@@ -52,7 +52,7 @@ static void via_i2c_setscl(void *data, int state)
val |= 0x80;
break;
default:
-   DEBUG_MSG("viafb_i2c: specify wrong i2c type.\n");
+   printk(KERN_ERR "viafb_i2c: specify wrong i2c type.\n");
}
via_write_reg(adap_data->io_port, adap_data->ioport_index, val);
spin_unlock_irqrestore(&i2c_vdev->reg_lock, flags);
@@ -104,7 +104,7 @@ static void via_i2c_setsda(void *data, int state)
val |= 0x40;
break;
default:
-   DEBUG_MSG("viafb_i2c: specify wrong i2c type.\n");
+   printk(KERN_ERR "viafb_i2c: specify wrong i2c type.\n");
}
via_write_reg(adap_data->io_port, adap_data->ioport_index, val);
spin_unlock_irqrestore(&i2c_vdev->reg_lock, flags);
@@ -175,8 +175,6 @@ static int create_i2c_bus(struct i2c_adapter *adapter,
  struct via_port_cfg *adap_cfg,
  struct pci_dev *pdev)
 {
-   DEBUG_MSG(KERN_DEBUG "viafb: creating bus adap=0x%p, 
algo_bit_data=0x%p, adap_cfg=0x%p\n", adapter, algo, adap_cfg);
-
algo->setsda = via_i2c_setsda;
algo->setscl = via_i2c_setscl;
algo->getsda = via_i2c_getsda;
-- 
1.7.0.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/5] viafb: fold via_io.h into via-core.h

2010-05-05 Thread Jonathan Corbet
Preparatory move toward the ultimate goal of moving pan-subdevice stuff
into include/linux.

Signed-off-by: Jonathan Corbet 
---
 drivers/video/via/hw.h  |1 -
 drivers/video/via/share.h   |   11 ++
 drivers/video/via/via-core.h|   48 -
 drivers/video/via/via_io.h  |   67 ---
 drivers/video/via/via_modesetting.c |2 +-
 drivers/video/via/via_utility.c |1 +
 drivers/video/via/viamode.c |1 +
 7 files changed, 53 insertions(+), 78 deletions(-)
 delete mode 100644 drivers/video/via/via_io.h

diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h
index a58701f..a109de3 100644
--- a/drivers/video/via/hw.h
+++ b/drivers/video/via/hw.h
@@ -24,7 +24,6 @@
 
 #include "viamode.h"
 #include "global.h"
-#include "via_io.h"
 #include "via_modesetting.h"
 
 #define viafb_read_reg(p, i)   via_read_reg(p, i)
diff --git a/drivers/video/via/share.h b/drivers/video/via/share.h
index 861b414..7f0de7f 100644
--- a/drivers/video/via/share.h
+++ b/drivers/video/via/share.h
@@ -43,14 +43,9 @@
 /* Video Memory Size */
 #define VIDEO_MEMORY_SIZE_16M0x100
 
-/* standard VGA IO port
-*/
-#define VIAStatus   0x3DA
-#define VIACR   0x3D4
-#define VIASR   0x3C4
-#define VIAGR   0x3CE
-#define VIAAR   0x3C0
-
+/*
+ * Lengths of the VPIT structure arrays.
+ */
 #define StdCR   0x19
 #define StdSR   0x04
 #define StdGR   0x09
diff --git a/drivers/video/via/via-core.h b/drivers/video/via/via-core.h
index 087c562..7ffb521 100644
--- a/drivers/video/via/via-core.h
+++ b/drivers/video/via/via-core.h
@@ -1,7 +1,8 @@
 /*
  * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
  * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
- * Copyright 2009 Jonathan Corbet 
+ * Copyright 2009-2010 Jonathan Corbet 
+ * Copyright 2010 Florian Tobias Schandinat 
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public
@@ -22,6 +23,8 @@
 
 #ifndef __VIA_CORE_H__
 #define __VIA_CORE_H__
+#include 
+#include 
 #include 
 #include 
 
@@ -170,4 +173,47 @@ int viafb_dma_copy_out_sg(unsigned int offset, struct 
scatterlist *sg, int nsg);
 #define VGA_WIDTH  640
 #define VGA_HEIGHT 480
 
+/*
+ * Indexed port operations.  Note that these are all multi-op
+ * functions; every invocation will be racy if you're not holding
+ * reg_lock.
+ */
+
+#define VIAStatus   0x3DA  /* Non-indexed port */
+#define VIACR   0x3D4
+#define VIASR   0x3C4
+#define VIAGR   0x3CE
+#define VIAAR   0x3C0
+
+static inline u8 via_read_reg(u16 port, u8 index)
+{
+   outb(index, port);
+   return inb(port + 1);
+}
+
+static inline void via_write_reg(u16 port, u8 index, u8 data)
+{
+   outb(index, port);
+   outb(data, port + 1);
+}
+
+static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask)
+{
+   u8 old;
+
+   outb(index, port);
+   old = inb(port + 1);
+   outb((data & mask) | (old & ~mask), port + 1);
+}
+
+#define VIA_MISC_REG_READ  0x03CC
+#define VIA_MISC_REG_WRITE 0x03C2
+
+static inline void via_write_misc_reg_mask(u8 data, u8 mask)
+{
+   u8 old = inb(VIA_MISC_REG_READ);
+   outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE);
+}
+
+
 #endif /* __VIA_CORE_H__ */
diff --git a/drivers/video/via/via_io.h b/drivers/video/via/via_io.h
deleted file mode 100644
index a3d2aca..000
--- a/drivers/video/via/via_io.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
- * Copyright 2010 Florian Tobias Schandinat 
- *
- * 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, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; 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.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-/*
- * basic io functions
- */
-
-#ifndef __VIA_IO_H__
-#define __VIA_IO_H__
-
-#include 
-#include 
-
-#define VIA_MISC_REG_READ  0x03CC
-#define VIA_MISC_REG_WRITE 0x03C2
-
-/*
- * Indexed port operations.  Note that these are all multi-op
- * functions; every invocation will be racy if you're not holding
- * reg_lock.
- */
-static inline u8 via_read_reg(u16 port, u8 index)
-{
-   outb(index, port);
-   return inb(port + 1);
-}
-
-static inline void via_write_reg(

[RFC] Third OLPC viafb patch series (camera driver)

2010-05-05 Thread Jonathan Corbet
This is, perhaps, the last set of viafb patches I'll send around before the
merge window.  This series completes the task of adding the via-camera
driver - in the correct spot, this time.  To that end, it has to reorganize
the viafb header files a bit.

V4L2 folks: only the final patch in this series really needs your
attention.  Note that it has no hope of appying or working without a long
series of predecessor patches; the full set, prior to this series, is
currently in linux-next.  If the driver is acceptable to you, I'd prefer to
merge it through my viafb tree to be sure all the prerequisites land in
mainline at the right time.

As usual, this series can be found at:

git://git.lwn.net/linux-2.6.git viafb-posted

The camera driver has been cleaned up a bit since the last time around.
But the main thing I had to do was to make some of the header files
globally visible so I could put the camera driver with the rest of the V4L2
crowd.  This will also let us move the core, i2c, and gpio drivers to
drivers/mfd, should we want to in the future.

There shouldn't be any functionality changes beyond the new driver.

Comments?

Thanks,

jon

Jonathan Corbet (5):
  viafb: fold via_io.h into via-core.h
  viafb: get rid of i2c debug cruft
  viafb: Eliminate some global.h references
  viafb: move some include files to include/linux
  Add the viafb video capture driver

 b/drivers/media/video/Kconfig |   10 
 b/drivers/media/video/Makefile|2 
 b/drivers/media/video/via-camera.c| 1368 ++
 b/drivers/media/video/via-camera.h|   93 ++
 b/drivers/video/via/accel.c   |4 
 b/drivers/video/via/dvi.c |4 
 b/drivers/video/via/hw.c  |3 
 b/drivers/video/via/hw.h  |1 
 b/drivers/video/via/lcd.c |4 
 b/drivers/video/via/share.h   |   11 
 b/drivers/video/via/via-core.c|   22 
 b/drivers/video/via/via-gpio.c|5 
 b/drivers/video/via/via_i2c.c |   14 
 b/drivers/video/via/via_modesetting.c |2 
 b/drivers/video/via/via_utility.c |1 
 b/drivers/video/via/viafbdev.c|4 
 b/drivers/video/via/viamode.c |1 
 b/drivers/video/via/vt1636.c  |4 
 b/include/linux/via-core.h|  221 +
 b/include/linux/via-gpio.h|   14 
 b/include/linux/via_i2c.h |   42 +
 b/include/media/v4l2-chip-ident.h |4 
 drivers/video/via/via-core.h  |  173 
 drivers/video/via/via-gpio.h  |   14 
 drivers/video/via/via_i2c.h   |   42 -
 drivers/video/via/via_io.h|   67 -
 26 files changed, 1798 insertions(+), 332 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v1 1/1] V4L: Add sync before a hardware operation to videobuf.

2010-05-05 Thread Mauro Carvalho Chehab
Pawel Osciak wrote:
> Architectures with non-coherent CPU cache (e.g. ARM) may require a cache
> flush or invalidation before starting a hardware operation if the data in
> a video buffer being queued has been touched by the CPU.
> 
> This patch adds calls to sync before a hardware operation that are expected
> to be interpreted and handled by each memory type-specific module.
> 
> Whether it is a sync before or after the operation can be determined from
> the current buffer state: VIDEOBUF_DONE and VIDEOBUF_ERROR indicate a sync
> called after an operation.

Hi Pawel,

After analyzing this patch, maybe the better is to add a check for dma 
coherency. So, instead of directly calling sync,the better is to check 
if !dma_is_consistent(), to avoid adding a penalty on architectures
where the cache is coherent.

> 
> diff --git a/drivers/media/video/videobuf-core.c 
> b/drivers/media/video/videobuf-core.c
> index bb0a1c8..e56c67a 100644
> --- a/drivers/media/video/videobuf-core.c
> +++ b/drivers/media/video/videobuf-core.c
> @@ -561,6 +561,8 @@ int videobuf_qbuf(struct videobuf_queue *q,
>   goto done;
>   }
>  
> + CALL(q, sync, q, buf);
> +
>   list_add_tail(&buf->stream, &q->stream);
>   if (q->streaming) {
>   spin_lock_irqsave(q->irqlock, flags);
> @@ -761,6 +763,8 @@ static ssize_t videobuf_read_zerocopy(struct 
> videobuf_queue *q,
>   if (0 != retval)
>   goto done;
>  
> + CALL(q, sync, q, q->read_buf);
> +
>   /* start capture & wait */
>   spin_lock_irqsave(q->irqlock, flags);
>   q->ops->buf_queue(q, q->read_buf);
> @@ -826,6 +830,8 @@ ssize_t videobuf_read_one(struct videobuf_queue *q,
>   goto done;
>   }
>  
> + CALL(q, sync, q, q->read_buf);
> +
>   spin_lock_irqsave(q->irqlock, flags);
>   q->ops->buf_queue(q, q->read_buf);
>   spin_unlock_irqrestore(q->irqlock, flags);
> @@ -893,6 +899,9 @@ static int __videobuf_read_start(struct videobuf_queue *q)
>   err = q->ops->buf_prepare(q, q->bufs[i], field);
>   if (err)
>   return err;
> +
> + CALL(q, sync, q, q->read_buf);
> +
>   list_add_tail(&q->bufs[i]->stream, &q->stream);
>   }
>   spin_lock_irqsave(q->irqlock, flags);
> diff --git a/drivers/media/video/videobuf-dma-sg.c 
> b/drivers/media/video/videobuf-dma-sg.c
> index fa78555..2b153f8 100644
> --- a/drivers/media/video/videobuf-dma-sg.c
> +++ b/drivers/media/video/videobuf-dma-sg.c
> @@ -50,6 +50,9 @@ MODULE_LICENSE("GPL");
>  #define dprintk(level, fmt, arg...)  if (debug >= level) \
>   printk(KERN_DEBUG "vbuf-sg: " fmt , ## arg)
>  
> +#define is_sync_after(vb) \
> + (vb->state == VIDEOBUF_DONE || vb->state == VIDEOBUF_ERROR)
> +
>  /* - */
>  
>  struct scatterlist*
> @@ -516,6 +519,9 @@ static int __videobuf_sync(struct videobuf_queue *q,
>   BUG_ON(!mem);
>   MAGIC_CHECK(mem->magic,MAGIC_SG_MEM);
>  
> + if (!is_sync_after(buf))
> + return 0;
> +
>   return  videobuf_dma_sync(q,&mem->dma);
>  }
>  


-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[videobuf] Query: Condition bytesize limit in videobuf_reqbufs -> buf_setup() call?

2010-05-05 Thread Aguirre, Sergio
Hi all,

While working on an old port of the omap3 camera-isp driver,
I have faced some problem.

Basically, when calling VIDIOC_REQBUFS with a certain buffer
Count, we had a software limit for total size, calculated depending on:

  Total bytesize = bytesperline x height x count

So, we had an arbitrary limit to, say 32 MB, which was generic.

Now, we want to condition it ONLY when MMAP buffers will be used.
Meaning, we don't want to keep that policy when the kernel is not
allocating the space

But the thing is that, according to videobuf documentation, buf_setup is
the one who should put a RAM usage limit. BUT the memory type passed to
reqbufs is not propagated to buf_setup, therefore forcing me to go to a
non-standard memory limitation in my reqbufs callback function, instead
of doing it properly inside buf_setup.

Is this scenario a good consideration to change buf_setup API, and
propagate buffers memory type aswell?

I'll appreciate your inputs on this matter.

Regards,
Sergio
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[GIT PATCHES FOR 2.6.35] tvp7002 fixes

2010-05-05 Thread Hans Verkuil
The following changes since commit d3be2fab3a10b6c798a5f9970146d166d3345c37:
  Jean-François Moine (1):
V4L/DVB: gspca - zc3xx: Fix the gamma calculation from the contrast

are available in the git repository at:

  ssh://linuxtv.org/git/hverkuil/v4l-dvb.git tvp7002

Tested on a DM6467T eval board.

Regards,

Hans

Mats Randgaard (3):
  v4l2-subdev.h: Add support for enum_dv_preset
  tvp7002.c: Add support for enum_dv_presets
  tvp7002.c: fix some copy-paste errors in the comments

 drivers/media/video/tvp7002.c |   40 +---
 include/media/v4l2-subdev.h   |2 ++
 2 files changed, 31 insertions(+), 11 deletions(-)

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG, part of Cisco
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH/RFC 1/7] dsbr100: implement proper locking

2010-05-05 Thread Hans Verkuil
On Wednesday 05 May 2010 19:05:24 David Ellingsworth wrote:
> Signed-off-by: David Ellingsworth 

Does this actually fix bugs or does this just clean up the locking?

I ask because I am planning to make it easier to do locking for ioctl calls.
Basically there will be pre-hook and post-hook callbacks that are called before
and after an ioctl and where you can do the locking. I am waiting for a patch
series related to priority handling to go in first, then I will work on this
change.

So from my perspective I am OK with this if it fixes bugs, but if it is
just a clean up, then it might be better to wait until my new callbacks are in.

I won't block this, though. It's just FYI.

Regards,

Hans

> ---
>  drivers/media/radio/dsbr100.c |   77 +---
>  1 files changed, 33 insertions(+), 44 deletions(-)
> 
> diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
> index ed9cd7a..673eda8 100644
> --- a/drivers/media/radio/dsbr100.c
> +++ b/drivers/media/radio/dsbr100.c
> @@ -182,7 +182,7 @@ static int dsbr100_start(struct dsbr100_device *radio)
>   int retval;
>   int request;
>  
> - mutex_lock(&radio->lock);
> + BUG_ON(!mutex_is_locked(&radio->lock));
>  
>   retval = usb_control_msg(radio->usbdev,
>   usb_rcvctrlpipe(radio->usbdev, 0),
> @@ -207,11 +207,9 @@ static int dsbr100_start(struct dsbr100_device *radio)
>   }
>  
>   radio->status = STARTED;
> - mutex_unlock(&radio->lock);
>   return (radio->transfer_buffer)[0];
>  
>  usb_control_msg_failed:
> - mutex_unlock(&radio->lock);
>   dev_err(&radio->usbdev->dev,
>   "%s - usb_control_msg returned %i, request %i\n",
>   __func__, retval, request);
> @@ -225,7 +223,7 @@ static int dsbr100_stop(struct dsbr100_device *radio)
>   int retval;
>   int request;
>  
> - mutex_lock(&radio->lock);
> + BUG_ON(!mutex_is_locked(&radio->lock));
>  
>   retval = usb_control_msg(radio->usbdev,
>   usb_rcvctrlpipe(radio->usbdev, 0),
> @@ -250,11 +248,9 @@ static int dsbr100_stop(struct dsbr100_device *radio)
>   }
>  
>   radio->status = STOPPED;
> - mutex_unlock(&radio->lock);
>   return (radio->transfer_buffer)[0];
>  
>  usb_control_msg_failed:
> - mutex_unlock(&radio->lock);
>   dev_err(&radio->usbdev->dev,
>   "%s - usb_control_msg returned %i, request %i\n",
>   __func__, retval, request);
> @@ -269,7 +265,7 @@ static int dsbr100_setfreq(struct dsbr100_device *radio)
>   int request;
>   int freq = (radio->curfreq / 16 * 80) / 1000 + 856;
>  
> - mutex_lock(&radio->lock);
> + BUG_ON(!mutex_is_locked(&radio->lock));
>  
>   retval = usb_control_msg(radio->usbdev,
>   usb_rcvctrlpipe(radio->usbdev, 0),
> @@ -306,12 +302,10 @@ static int dsbr100_setfreq(struct dsbr100_device *radio)
>   }
>  
>   radio->stereo = !((radio->transfer_buffer)[0] & 0x01);
> - mutex_unlock(&radio->lock);
>   return (radio->transfer_buffer)[0];
>  
>  usb_control_msg_failed:
>   radio->stereo = -1;
> - mutex_unlock(&radio->lock);
>   dev_err(&radio->usbdev->dev,
>   "%s - usb_control_msg returned %i, request %i\n",
>   __func__, retval, request);
> @@ -324,7 +318,7 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
>  {
>   int retval;
>  
> - mutex_lock(&radio->lock);
> + BUG_ON(!mutex_is_locked(&radio->lock));
>  
>   retval = usb_control_msg(radio->usbdev,
>   usb_rcvctrlpipe(radio->usbdev, 0),
> @@ -340,8 +334,6 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
>   } else {
>   radio->stereo = !(radio->transfer_buffer[0] & 0x01);
>   }
> -
> - mutex_unlock(&radio->lock);
>  }
>  
>  /* USB subsystem interface begins here */
> @@ -385,10 +377,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
>  {
>   struct dsbr100_device *radio = video_drvdata(file);
>  
> - /* safety check */
> - if (radio->removed)
> - return -EIO;
> -
>   if (v->index > 0)
>   return -EINVAL;
>  
> @@ -410,12 +398,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
>  static int vidioc_s_tuner(struct file *file, void *priv,
>   struct v4l2_tuner *v)
>  {
> - struct dsbr100_device *radio = video_drvdata(file);
> -
> - /* safety check */
> - if (radio->removed)
> - return -EIO;
> -
>   if (v->index > 0)
>   return -EINVAL;
>  
> @@ -428,17 +410,12 @@ static int vidioc_s_frequency(struct file *file, void 
> *priv,
>   struct dsbr100_device *radio = video_drvdata(file);
>   int retval;
>  
> - /* safety check */
> - if (radio->removed)
> - return -EIO;
> -
> - mutex_lock(&radio->lock);
>   radio->curfreq = f->frequency;
> - mutex_unlock(&radio->lock);
>  
>   r

[PATCH] videobuf-vmalloc: remove __videobuf_sync()

2010-05-05 Thread Mauro Carvalho Chehab
videobuf-core checks if .sync ops is defined before calling.

So, we don't need a do-nothing function.

Signed-off-by: Mauro Carvalho Chehab 

-- 

Cheers,
Mauro
diff --git a/drivers/media/video/videobuf-vmalloc.c 
b/drivers/media/video/videobuf-vmalloc.c
index f8b5b56..583728f 100644
--- a/drivers/media/video/videobuf-vmalloc.c
+++ b/drivers/media/video/videobuf-vmalloc.c
@@ -229,12 +229,6 @@ static int __videobuf_iolock(struct videobuf_queue *q,
return 0;
 }
 
-static int __videobuf_sync(struct videobuf_queue *q,
-  struct videobuf_buffer *buf)
-{
-   return 0;
-}
-
 static int __videobuf_mmap_mapper(struct videobuf_queue *q,
  struct videobuf_buffer *buf,
  struct vm_area_struct *vma)
@@ -301,7 +295,6 @@ static struct videobuf_qtype_ops qops = {
 
.alloc= __videobuf_alloc,
.iolock   = __videobuf_iolock,
-   .sync = __videobuf_sync,
.mmap_mapper  = __videobuf_mmap_mapper,
.vaddr= videobuf_to_vmalloc,
 };
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: -next: staging/cx25821: please revert 7a02f549fcc

2010-05-05 Thread Dan Carpenter
On Wed, May 05, 2010 at 12:30:01PM -0300, Mauro Carvalho Chehab wrote:
> This simplifies the code a little bit, and, instead of just return -EINVAL,
> it will return the error condition reported by the called functions.
> 

Thanks for that.

There was one return that got missed.  Probably you can fold it into
your patch?

Signed-off-by: Dan Carpenter 

diff --git a/drivers/staging/cx25821/cx25821-medusa-video.c 
b/drivers/staging/cx25821/cx25821-medusa-video.c
index 7545314..34616dc 100644
--- a/drivers/staging/cx25821/cx25821-medusa-video.c
+++ b/drivers/staging/cx25821/cx25821-medusa-video.c
@@ -849,10 +849,8 @@ int medusa_video_init(struct cx25821_dev *dev)
 
value |= 7;
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], PIN_OE_CTRL, value);
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
+   if (ret_val < 0)
+   goto error;
 
mutex_unlock(&dev->lock);
 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] videobuf: remove external function videobuf_dma_sync()

2010-05-05 Thread Mauro Carvalho Chehab
While analyzing one of the videobuf patches, I noticed that
videobuf_dma_sync is only used internally inside videobuf-dma-sg.
So, let's remove this function, merging the code at __videobuf_dma_sync()

Signed-off-by: Mauro Carvalho Chehab 

diff --git a/drivers/media/video/videobuf-dma-sg.c 
b/drivers/media/video/videobuf-dma-sg.c
index f733833..b49f1e2 100644
--- a/drivers/media/video/videobuf-dma-sg.c
+++ b/drivers/media/video/videobuf-dma-sg.c
@@ -279,17 +279,6 @@ int videobuf_dma_map(struct videobuf_queue *q, struct 
videobuf_dmabuf *dma)
 }
 EXPORT_SYMBOL_GPL(videobuf_dma_map);
 
-int videobuf_dma_sync(struct videobuf_queue *q, struct videobuf_dmabuf *dma)
-{
-   MAGIC_CHECK(dma->magic, MAGIC_DMABUF);
-   BUG_ON(!dma->sglen);
-
-   dma_sync_sg_for_cpu(q->dev, dma->sglist, dma->nr_pages, dma->direction);
-
-   return 0;
-}
-EXPORT_SYMBOL_GPL(videobuf_dma_sync);
-
 int videobuf_dma_unmap(struct videobuf_queue *q, struct videobuf_dmabuf *dma)
 {
MAGIC_CHECK(dma->magic, MAGIC_DMABUF);
@@ -542,10 +531,15 @@ static int __videobuf_sync(struct videobuf_queue *q,
   struct videobuf_buffer *buf)
 {
struct videobuf_dma_sg_memory *mem = buf->priv;
-   BUG_ON(!mem);
+   BUG_ON(!mem || !mem->dma.sglen);
+
MAGIC_CHECK(mem->magic, MAGIC_SG_MEM);
+   MAGIC_CHECK(mem->dma.magic, MAGIC_DMABUF);
 
-   return videobuf_dma_sync(q, &mem->dma);
+   dma_sync_sg_for_cpu(q->dev, mem->dma.sglist,
+   mem->dma.nr_pages, mem->dma.direction);
+
+   return 0;
 }
 
 static int __videobuf_mmap_mapper(struct videobuf_queue *q,
diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h
index dbfd8cf..a195f3b 100644
--- a/include/media/videobuf-dma-sg.h
+++ b/include/media/videobuf-dma-sg.h
@@ -97,7 +97,6 @@ int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, 
int direction,
 int videobuf_dma_free(struct videobuf_dmabuf *dma);
 
 int videobuf_dma_map(struct videobuf_queue *q, struct videobuf_dmabuf *dma);
-int videobuf_dma_sync(struct videobuf_queue *q, struct videobuf_dmabuf *dma);
 int videobuf_dma_unmap(struct videobuf_queue *q, struct videobuf_dmabuf *dma);
 struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf);
 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] fix dvb frontend lockup

2010-05-05 Thread matthieu castet

matthieu castet a écrit :

Hi,

With my current kernel (2.6.32), if my dvb device is removed while in use, I 
got [1].

After checking the source code, the problem seems to happen also in master :

If there are users (for example users == -2) :
- dvb_unregister_frontend :
- stop kernel thread with dvb_frontend_stop :
 - fepriv->exit = 1;
 - thread loop catch stop event and break while loop
 - fepriv->thread = NULL; and fepriv->exit = 0;
- dvb_unregister_frontend wait on "fepriv->dvbdev->wait_queue" that 
fepriv->dvbdev->users==-1.
The user finish :
- dvb_frontend_release - set users to -1
- don't wait wait_queue because fepriv->exit != 1

=> dvb_unregister_frontend never exit the wait queue.


Matthieu


[ 4920.484047] khubd D c2008000 0   198  2 0x
[ 4920.484056]  f64c8000 0046  c2008000 0004 c13fa000 c13fa000 f
64c8000
[ 4920.484066]  f64c81bc c2008000  d9d9dce6 0452 0001 f64c8000 c
102daad
[ 4920.484075]  00100100 f64c81bc 0286 f0a7ccc0 f0913404 f0cba404 f644de58 f
092b0a8
[ 4920.484084] Call Trace:
[ 4920.484102]  [] ? default_wake_function+0x0/0x8
[ 4920.484147]  [] ? dvb_unregister_frontend+0x95/0xcc [dvb_core]
[ 4920.484157]  [] ? autoremove_wake_function+0x0/0x2d
[ 4920.484168]  [] ? dvb_usb_adapter_frontend_exit+0x12/0x21 [dvb_usb]
[ 4920.484176]  [] ? dvb_usb_exit+0x26/0x88 [dvb_usb]
[ 4920.484184]  [] ? dvb_usb_device_exit+0x3a/0x4a [dvb_usb]
[ 4920.484217]  [] ? usb_unbind_interface+0x3f/0xb4 [usbcore]
[ 4920.484227]  [] ? __device_release_driver+0x74/0xb7
[ 4920.484233]  [] ? device_release_driver+0x15/0x1e
[ 4920.484243]  [] ? bus_remove_device+0x6e/0x87
[ 4920.484249]  [] ? device_del+0xfa/0x152
[ 4920.484264]  [] ? usb_disable_device+0x59/0xb9 [usbcore]
[ 4920.484279]  [] ? usb_disconnect+0x70/0xdc [usbcore]
[ 4920.484294]  [] ? hub_thread+0x521/0xe1d [usbcore]
[ 4920.484301]  [] ? autoremove_wake_function+0x0/0x2d
[ 4920.484316]  [] ? hub_thread+0x0/0xe1d [usbcore]
[ 4920.484321]  [] ? kthread+0x61/0x66
[ 4920.484327]  [] ? kthread+0x0/0x66
[ 4920.484336]  [] ? kernel_thread_helper+0x7/0x10


Here a patch that fix the issue


Signed-off-by: Matthieu CASTET 


diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index 55ea260..6932def 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -95,6 +95,10 @@ MODULE_PARM_DESC(dvb_mfe_wait_time, "Wait up to  seconds on open(
  * FESTATE_LOSTLOCK. When the lock has been lost, and we're searching it again.
  */
 
+#define DVB_FE_NO_EXIT	0
+#define DVB_FE_NORMAL_EXIT	1
+#define DVB_FE_DEVICE_REMOVED	2
+
 static DEFINE_MUTEX(frontend_mutex);
 
 struct dvb_frontend_private {
@@ -497,7 +501,7 @@ static int dvb_frontend_is_exiting(struct dvb_frontend *fe)
 {
 	struct dvb_frontend_private *fepriv = fe->frontend_priv;
 
-	if (fepriv->exit)
+	if (fepriv->exit != DVB_FE_NO_EXIT)
 		return 1;
 
 	if (fepriv->dvbdev->writers == 1)
@@ -559,7 +563,7 @@ restart:
 
 		if (kthread_should_stop() || dvb_frontend_is_exiting(fe)) {
 			/* got signal or quitting */
-			fepriv->exit = 1;
+			fepriv->exit = DVB_FE_NORMAL_EXIT;
 			break;
 		}
 
@@ -673,7 +677,10 @@ restart:
 	}
 
 	fepriv->thread = NULL;
-	fepriv->exit = 0;
+	if (kthread_should_stop())
+		fepriv->exit = DVB_FE_DEVICE_REMOVED;
+	else
+		fepriv->exit = DVB_FE_NO_EXIT;
 	mb();
 
 	dvb_frontend_wakeup(fe);
@@ -686,7 +693,7 @@ static void dvb_frontend_stop(struct dvb_frontend *fe)
 
 	dprintk ("%s\n", __func__);
 
-	fepriv->exit = 1;
+	fepriv->exit = DVB_FE_NORMAL_EXIT;
 	mb();
 
 	if (!fepriv->thread)
@@ -755,7 +762,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe)
 	dprintk ("%s\n", __func__);
 
 	if (fepriv->thread) {
-		if (!fepriv->exit)
+		if (fepriv->exit == DVB_FE_NO_EXIT)
 			return 0;
 		else
 			dvb_frontend_stop (fe);
@@ -767,7 +774,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe)
 		return -EINTR;
 
 	fepriv->state = FESTATE_IDLE;
-	fepriv->exit = 0;
+	fepriv->exit = DVB_FE_NO_EXIT;
 	fepriv->thread = NULL;
 	mb();
 
@@ -1490,7 +1497,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
 
 	dprintk("%s (%d)\n", __func__, _IOC_NR(cmd));
 
-	if (fepriv->exit)
+	if (fepriv->exit != DVB_FE_NO_EXIT)
 		return -ENODEV;
 
 	if ((file->f_flags & O_ACCMODE) == O_RDONLY &&
@@ -1916,6 +1923,8 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
 	int ret;
 
 	dprintk ("%s\n", __func__);
+	if (fepriv->exit == DVB_FE_DEVICE_REMOVED)
+		return -ENODEV;
 
 	if (adapter->mfe_shared) {
 		mutex_lock (&adapter->mfe_lock);
@@ -2008,7 +2017,7 @@ static int dvb_frontend_release(struct inode *inode, struct file *file)
 	ret = dvb_generic_release (inode, file);
 
 	if (dvbdev->users == -1) {
-		if (fepriv->exit == 1) {
+		if (fepriv->exit != DVB_FE_NO_EXIT) {
 			fops_put(file->f_op);
 			file->f_op = NULL;
 			wake_up(&dvbdev->wait_queue);


[cron job] v4l-dvb daily build 2.6.22 and up: ERRORS, 2.6.16-2.6.21: ERRORS

2010-05-05 Thread Hans Verkuil
This message is generated daily by a cron job that builds v4l-dvb for
the kernels and architectures in the list below.

Results of the daily build of v4l-dvb:

date:Wed May  5 19:00:28 CEST 2010
path:http://www.linuxtv.org/hg/v4l-dvb
changeset:   14644:4a8d6d981f07
git master:   f6760aa024199cfbce564311dc4bc4d47b6fb349
git media-master: 562dac038aef2a1719710b5703b15732cbc4354b
gcc version:  i686-linux-gcc (GCC) 4.4.3
host hardware:x86_64
host os:  2.6.32.5

linux-2.6.32.6-armv5: ERRORS
linux-2.6.33-armv5: ERRORS
linux-2.6.34-rc1-armv5: ERRORS
linux-2.6.32.6-armv5-davinci: ERRORS
linux-2.6.33-armv5-davinci: ERRORS
linux-2.6.34-rc1-armv5-davinci: ERRORS
linux-2.6.32.6-armv5-ixp: ERRORS
linux-2.6.33-armv5-ixp: ERRORS
linux-2.6.34-rc1-armv5-ixp: ERRORS
linux-2.6.32.6-armv5-omap2: ERRORS
linux-2.6.33-armv5-omap2: ERRORS
linux-2.6.34-rc1-armv5-omap2: ERRORS
linux-2.6.22.19-i686: ERRORS
linux-2.6.23.17-i686: ERRORS
linux-2.6.24.7-i686: ERRORS
linux-2.6.25.20-i686: ERRORS
linux-2.6.26.8-i686: ERRORS
linux-2.6.27.44-i686: ERRORS
linux-2.6.28.10-i686: ERRORS
linux-2.6.29.1-i686: ERRORS
linux-2.6.30.10-i686: ERRORS
linux-2.6.31.12-i686: ERRORS
linux-2.6.32.6-i686: ERRORS
linux-2.6.33-i686: OK
linux-2.6.34-rc1-i686: WARNINGS
linux-2.6.32.6-m32r: ERRORS
linux-2.6.33-m32r: ERRORS
linux-2.6.34-rc1-m32r: ERRORS
linux-2.6.32.6-mips: ERRORS
linux-2.6.33-mips: ERRORS
linux-2.6.34-rc1-mips: ERRORS
linux-2.6.32.6-powerpc64: ERRORS
linux-2.6.33-powerpc64: ERRORS
linux-2.6.34-rc1-powerpc64: ERRORS
linux-2.6.22.19-x86_64: ERRORS
linux-2.6.23.17-x86_64: ERRORS
linux-2.6.24.7-x86_64: ERRORS
linux-2.6.25.20-x86_64: ERRORS
linux-2.6.26.8-x86_64: ERRORS
linux-2.6.27.44-x86_64: ERRORS
linux-2.6.28.10-x86_64: ERRORS
linux-2.6.29.1-x86_64: ERRORS
linux-2.6.30.10-x86_64: ERRORS
linux-2.6.31.12-x86_64: ERRORS
linux-2.6.32.6-x86_64: ERRORS
linux-2.6.33-x86_64: OK
linux-2.6.34-rc1-x86_64: WARNINGS
linux-git-armv5: WARNINGS
linux-git-armv5-davinci: WARNINGS
linux-git-armv5-ixp: WARNINGS
linux-git-armv5-omap2: WARNINGS
linux-git-i686: WARNINGS
linux-git-m32r: OK
linux-git-mips: OK
linux-git-powerpc64: OK
linux-git-x86_64: WARNINGS
spec: ERRORS
spec-git: OK
sparse: ERRORS
linux-2.6.16.62-i686: ERRORS
linux-2.6.17.14-i686: ERRORS
linux-2.6.18.8-i686: ERRORS
linux-2.6.19.7-i686: ERRORS
linux-2.6.20.21-i686: ERRORS
linux-2.6.21.7-i686: ERRORS
linux-2.6.16.62-x86_64: ERRORS
linux-2.6.17.14-x86_64: ERRORS
linux-2.6.18.8-x86_64: ERRORS
linux-2.6.19.7-x86_64: ERRORS
linux-2.6.20.21-x86_64: ERRORS
linux-2.6.21.7-x86_64: ERRORS

Detailed results are available here:

http://www.xs4all.nl/~hverkuil/logs/Wednesday.log

Full logs are available here:

http://www.xs4all.nl/~hverkuil/logs/Wednesday.tar.bz2

The V4L-DVB specification from this daily build is here:

http://www.xs4all.nl/~hverkuil/spec/media.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 7/7] dsbr100: simplify access to radio device

2010-05-05 Thread David Ellingsworth
This patch replaces calls to video_drvdata with
references to struct file->private_data which is
set during usb_dsbr100_open. This value is passed
by video_ioctl2 via the *priv argument and is
accessible via file->private_data otherwise.

Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |   15 ---
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index cd4eed7..64ba0c8 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -366,7 +366,7 @@ static void usb_dsbr100_disconnect(struct usb_interface 
*intf)
 static int vidioc_querycap(struct file *file, void *priv,
struct v4l2_capability *v)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
 
strlcpy(v->driver, "dsbr100", sizeof(v->driver));
strlcpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card));
@@ -379,7 +379,7 @@ static int vidioc_querycap(struct file *file, void *priv,
 static int vidioc_g_tuner(struct file *file, void *priv,
struct v4l2_tuner *v)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
 
if (v->index > 0)
return -EINVAL;
@@ -411,7 +411,7 @@ static int vidioc_s_tuner(struct file *file, void *priv,
 static int vidioc_s_frequency(struct file *file, void *priv,
struct v4l2_frequency *f)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
int retval = dsbr100_setfreq(radio, f->frequency);
 
if (retval < 0)
@@ -423,7 +423,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
 static int vidioc_g_frequency(struct file *file, void *priv,
struct v4l2_frequency *f)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
 
f->type = V4L2_TUNER_RADIO;
f->frequency = radio->curfreq;
@@ -444,7 +444,7 @@ static int vidioc_queryctrl(struct file *file, void *priv,
 static int vidioc_g_ctrl(struct file *file, void *priv,
struct v4l2_control *ctrl)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
 
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
@@ -457,7 +457,7 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
 static int vidioc_s_ctrl(struct file *file, void *priv,
struct v4l2_control *ctrl)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = priv;
int retval;
 
switch (ctrl->id) {
@@ -518,7 +518,7 @@ static int vidioc_s_audio(struct file *file, void *priv,
 static long usb_dsbr100_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
+   struct dsbr100_device *radio = file->private_data;
long retval = 0;
 
mutex_lock(&radio->lock);
@@ -557,6 +557,7 @@ static int usb_dsbr100_open(struct file *file)
radio->status |= INITIALIZED;
}
 
+   file->private_data = radio;
 unlock:
mutex_unlock(&radio->lock);
return retval;
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 0/7] dsbr100: driver cleanup

2010-05-05 Thread David Ellingsworth
This patch series addresses several issues in the dsbr100 driver.
This series is based on the v4l-dvb master git branch and has been
compile tested only. It should be tested before applying.

The following patches are included in this series:
   [PATCH/RFC 1/7] dsbr100: implement proper locking
   [PATCH/RFC 2/7] dsbr100: fix potential use after free
   [PATCH/RFC 3/7] dsbr100: only change frequency upon success
   [PATCH/RFC 4/7] dsbr100: remove disconnected indicator
   [PATCH/RFC 5/7] dsbr100: properly initialize the radio
   [PATCH/RFC 6/7] dsbr100: cleanup usb probe routine
   [PATCH/RFC 7/7] dsbr100: simplify access to radio device

Regards,

David Ellingsworth
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 4/7] dsbr100: remove disconnected indicator

2010-05-05 Thread David Ellingsworth
Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |6 ++
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index b62fe40..c949ace 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -151,7 +151,6 @@ struct dsbr100_device {
struct mutex lock;  /* buffer locking */
int curfreq;
int stereo;
-   int removed;
int status;
 };
 
@@ -353,7 +352,7 @@ static void usb_dsbr100_disconnect(struct usb_interface 
*intf)
usb_set_intfdata (intf, NULL);
 
mutex_lock(&radio->lock);
-   radio->removed = 1;
+   radio->usbdev = NULL;
mutex_unlock(&radio->lock);
 
v4l2_device_disconnect(&radio->v4l2_dev);
@@ -521,7 +520,7 @@ static long usb_dsbr100_ioctl(struct file *file, unsigned 
int cmd,
 
mutex_lock(&radio->lock);
 
-   if (radio->removed) {
+   if (!radio->usbdev) {
retval = -EIO;
goto unlock;
}
@@ -649,7 +648,6 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
 
mutex_init(&radio->lock);
 
-   radio->removed = 0;
radio->usbdev = interface_to_usbdev(intf);
radio->curfreq = FREQ_MIN * FREQ_MUL;
radio->status = STOPPED;
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 6/7] dsbr100: cleanup usb probe routine

2010-05-05 Thread David Ellingsworth
This patch simplifies the error paths within the
usb_dsbr100_probe routine. It also removes an unnecessary
local variable.

Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |   39 ---
 1 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index e2fed0b..cd4eed7 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -646,33 +646,28 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
const struct usb_device_id *id)
 {
struct dsbr100_device *radio;
-   struct v4l2_device *v4l2_dev;
int retval;
 
radio = kzalloc(sizeof(struct dsbr100_device), GFP_KERNEL);
-
if (!radio)
return -ENOMEM;
 
radio->transfer_buffer = kmalloc(TB_LEN, GFP_KERNEL);
-
if (!(radio->transfer_buffer)) {
-   kfree(radio);
-   return -ENOMEM;
+   retval = -ENOMEM;
+   goto err_nobuf;
}
 
-   v4l2_dev = &radio->v4l2_dev;
-
-   retval = v4l2_device_register(&intf->dev, v4l2_dev);
+   retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev);
if (retval < 0) {
-   v4l2_err(v4l2_dev, "couldn't register v4l2_device\n");
-   kfree(radio->transfer_buffer);
-   kfree(radio);
-   return retval;
+   v4l2_err(&radio->v4l2_dev, "couldn't register v4l2_device\n");
+   goto err_v4l2;
}
 
-   strlcpy(radio->videodev.name, v4l2_dev->name, 
sizeof(radio->videodev.name));
-   radio->videodev.v4l2_dev = v4l2_dev;
+   strlcpy(radio->videodev.name, radio->v4l2_dev.name,
+   sizeof(radio->videodev.name));
+
+   radio->videodev.v4l2_dev = &radio->v4l2_dev;
radio->videodev.fops = &usb_dsbr100_fops;
radio->videodev.ioctl_ops = &usb_dsbr100_ioctl_ops;
radio->videodev.release = usb_dsbr100_video_device_release;
@@ -686,14 +681,20 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
 
retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, 
radio_nr);
if (retval < 0) {
-   v4l2_err(v4l2_dev, "couldn't register video device\n");
-   v4l2_device_unregister(v4l2_dev);
-   kfree(radio->transfer_buffer);
-   kfree(radio);
-   return -EIO;
+   v4l2_err(&radio->v4l2_dev, "couldn't register video device\n");
+   goto err_vdev;
}
+
usb_set_intfdata(intf, radio);
return 0;
+
+err_vdev:
+   v4l2_device_unregister(&radio->v4l2_dev);
+err_v4l2:
+   kfree(radio->transfer_buffer);
+err_nobuf:
+   kfree(radio);
+   return retval;
 }
 
 static int __init dsbr100_init(void)
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 3/7] dsbr100: only change frequency upon success

2010-05-05 Thread David Ellingsworth
Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |   11 +--
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index 2f96e13..b62fe40 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -259,11 +259,12 @@ usb_control_msg_failed:
 }
 
 /* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
-static int dsbr100_setfreq(struct dsbr100_device *radio)
+static int dsbr100_setfreq(struct dsbr100_device *radio, int freq)
 {
int retval;
int request;
-   int freq = (radio->curfreq / 16 * 80) / 1000 + 856;
+
+   freq = (freq / 16 * 80) / 1000 + 856;
 
BUG_ON(!mutex_is_locked(&radio->lock));
 
@@ -302,6 +303,7 @@ static int dsbr100_setfreq(struct dsbr100_device *radio)
}
 
radio->stereo = !((radio->transfer_buffer)[0] & 0x01);
+   radio->curfreq = freq;
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
@@ -408,11 +410,8 @@ static int vidioc_s_frequency(struct file *file, void 
*priv,
struct v4l2_frequency *f)
 {
struct dsbr100_device *radio = video_drvdata(file);
-   int retval;
-
-   radio->curfreq = f->frequency;
+   int retval = dsbr100_setfreq(radio, f->frequency);
 
-   retval = dsbr100_setfreq(radio);
if (retval < 0)
dev_warn(&radio->usbdev->dev, "Set frequency failed\n");
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 1/7] dsbr100: implement proper locking

2010-05-05 Thread David Ellingsworth
Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |   77 +---
 1 files changed, 33 insertions(+), 44 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index ed9cd7a..673eda8 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -182,7 +182,7 @@ static int dsbr100_start(struct dsbr100_device *radio)
int retval;
int request;
 
-   mutex_lock(&radio->lock);
+   BUG_ON(!mutex_is_locked(&radio->lock));
 
retval = usb_control_msg(radio->usbdev,
usb_rcvctrlpipe(radio->usbdev, 0),
@@ -207,11 +207,9 @@ static int dsbr100_start(struct dsbr100_device *radio)
}
 
radio->status = STARTED;
-   mutex_unlock(&radio->lock);
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
-   mutex_unlock(&radio->lock);
dev_err(&radio->usbdev->dev,
"%s - usb_control_msg returned %i, request %i\n",
__func__, retval, request);
@@ -225,7 +223,7 @@ static int dsbr100_stop(struct dsbr100_device *radio)
int retval;
int request;
 
-   mutex_lock(&radio->lock);
+   BUG_ON(!mutex_is_locked(&radio->lock));
 
retval = usb_control_msg(radio->usbdev,
usb_rcvctrlpipe(radio->usbdev, 0),
@@ -250,11 +248,9 @@ static int dsbr100_stop(struct dsbr100_device *radio)
}
 
radio->status = STOPPED;
-   mutex_unlock(&radio->lock);
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
-   mutex_unlock(&radio->lock);
dev_err(&radio->usbdev->dev,
"%s - usb_control_msg returned %i, request %i\n",
__func__, retval, request);
@@ -269,7 +265,7 @@ static int dsbr100_setfreq(struct dsbr100_device *radio)
int request;
int freq = (radio->curfreq / 16 * 80) / 1000 + 856;
 
-   mutex_lock(&radio->lock);
+   BUG_ON(!mutex_is_locked(&radio->lock));
 
retval = usb_control_msg(radio->usbdev,
usb_rcvctrlpipe(radio->usbdev, 0),
@@ -306,12 +302,10 @@ static int dsbr100_setfreq(struct dsbr100_device *radio)
}
 
radio->stereo = !((radio->transfer_buffer)[0] & 0x01);
-   mutex_unlock(&radio->lock);
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
radio->stereo = -1;
-   mutex_unlock(&radio->lock);
dev_err(&radio->usbdev->dev,
"%s - usb_control_msg returned %i, request %i\n",
__func__, retval, request);
@@ -324,7 +318,7 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
 {
int retval;
 
-   mutex_lock(&radio->lock);
+   BUG_ON(!mutex_is_locked(&radio->lock));
 
retval = usb_control_msg(radio->usbdev,
usb_rcvctrlpipe(radio->usbdev, 0),
@@ -340,8 +334,6 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
} else {
radio->stereo = !(radio->transfer_buffer[0] & 0x01);
}
-
-   mutex_unlock(&radio->lock);
 }
 
 /* USB subsystem interface begins here */
@@ -385,10 +377,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
 {
struct dsbr100_device *radio = video_drvdata(file);
 
-   /* safety check */
-   if (radio->removed)
-   return -EIO;
-
if (v->index > 0)
return -EINVAL;
 
@@ -410,12 +398,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
 static int vidioc_s_tuner(struct file *file, void *priv,
struct v4l2_tuner *v)
 {
-   struct dsbr100_device *radio = video_drvdata(file);
-
-   /* safety check */
-   if (radio->removed)
-   return -EIO;
-
if (v->index > 0)
return -EINVAL;
 
@@ -428,17 +410,12 @@ static int vidioc_s_frequency(struct file *file, void 
*priv,
struct dsbr100_device *radio = video_drvdata(file);
int retval;
 
-   /* safety check */
-   if (radio->removed)
-   return -EIO;
-
-   mutex_lock(&radio->lock);
radio->curfreq = f->frequency;
-   mutex_unlock(&radio->lock);
 
retval = dsbr100_setfreq(radio);
if (retval < 0)
dev_warn(&radio->usbdev->dev, "Set frequency failed\n");
+
return 0;
 }
 
@@ -447,10 +424,6 @@ static int vidioc_g_frequency(struct file *file, void 
*priv,
 {
struct dsbr100_device *radio = video_drvdata(file);
 
-   /* safety check */
-   if (radio->removed)
-   return -EIO;
-
f->type = V4L2_TUNER_RADIO;
f->frequency = radio->curfreq;
return 0;
@@ -472,10 +445,6 @@ static int vidioc_g_ctrl(struct file *file, void *priv,
 {
struct dsbr100_device *radio = video_drvdata(file);
 
-   /* safety check */
-   if (radio->removed)
-   return -EIO;
-
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
   

[PATCH/RFC 5/7] dsbr100: properly initialize the radio

2010-05-05 Thread David Ellingsworth
This patch adds a flag to indicate if the radio has been
initialized or not. If the flag has not been set upon open,
the radio initialized to a known state.

It combines the STARTED/STOPPED indicators into a single
MUTED flag and defines a couple of macros for determining
the status of the radio.

Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |   54 +++-
 1 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index c949ace..e2fed0b 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -125,10 +125,13 @@ devices, that would be 76 and 91.  */
 #define FREQ_MAX 108.0
 #define FREQ_MUL 16000
 
-/* defines for radio->status */
-#define STARTED0
-#define STOPPED1
+enum dsbr100_status {
+   INITIALIZED = 1 << 0,
+   MUTED   = 1 << 1
+};
 
+#define radio_initialized(r) (r->status & INITIALIZED)
+#define radio_muted(r) (r->status & MUTED)
 #define videodev_to_radio(d) container_of(d, struct dsbr100_device, videodev)
 
 static int usb_dsbr100_probe(struct usb_interface *intf,
@@ -151,7 +154,7 @@ struct dsbr100_device {
struct mutex lock;  /* buffer locking */
int curfreq;
int stereo;
-   int status;
+   enum dsbr100_status status;
 };
 
 static struct usb_device_id usb_dsbr100_device_table [] = {
@@ -205,7 +208,7 @@ static int dsbr100_start(struct dsbr100_device *radio)
goto usb_control_msg_failed;
}
 
-   radio->status = STARTED;
+   radio->status &= ~MUTED;
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
@@ -246,7 +249,7 @@ static int dsbr100_stop(struct dsbr100_device *radio)
goto usb_control_msg_failed;
}
 
-   radio->status = STOPPED;
+   radio->status |= MUTED;
return (radio->transfer_buffer)[0];
 
 usb_control_msg_failed:
@@ -532,6 +535,33 @@ unlock:
return retval;
 }
 
+static int usb_dsbr100_open(struct file *file)
+{
+   struct dsbr100_device *radio = video_drvdata(file);
+   int retval = 0;
+
+   mutex_lock(&radio->lock);
+
+   if (!radio->usbdev) {
+   retval = -EIO;
+   goto unlock;
+   }
+
+   if (unlikely(!radio_initialized(radio))) {
+   retval = dsbr100_stop(radio);
+
+   if (retval < 0)
+   goto unlock;
+
+   retval = 0;
+   radio->status |= INITIALIZED;
+   }
+
+unlock:
+   mutex_unlock(&radio->lock);
+   return retval;
+}
+
 /* Suspend device - stop device. */
 static int usb_dsbr100_suspend(struct usb_interface *intf, pm_message_t 
message)
 {
@@ -540,17 +570,17 @@ static int usb_dsbr100_suspend(struct usb_interface 
*intf, pm_message_t message)
 
mutex_lock(&radio->lock);
 
-   if (radio->status == STARTED) {
+   if (!radio_muted(radio)) {
retval = dsbr100_stop(radio);
if (retval < 0)
dev_warn(&intf->dev, "dsbr100_stop failed\n");
 
-   /* After dsbr100_stop() status set to STOPPED.
+   /* After dsbr100_stop() status set to MUTED.
 * If we want driver to start radio on resume
-* we set status equal to STARTED.
+* we set status equal to not MUTED
 * On resume we will check status and run radio if needed.
 */
-   radio->status = STARTED;
+   radio->status &= ~MUTED;
}
 
mutex_unlock(&radio->lock);
@@ -567,7 +597,7 @@ static int usb_dsbr100_resume(struct usb_interface *intf)
 
mutex_lock(&radio->lock);
 
-   if (radio->status == STARTED) {
+   if (radio_initialized(radio) && !radio_muted(radio)) {
retval = dsbr100_start(radio);
if (retval < 0)
dev_warn(&intf->dev, "dsbr100_start failed\n");
@@ -593,6 +623,7 @@ static void usb_dsbr100_video_device_release(struct 
video_device *videodev)
 static const struct v4l2_file_operations usb_dsbr100_fops = {
.owner  = THIS_MODULE,
.unlocked_ioctl = usb_dsbr100_ioctl,
+   .open   = usb_dsbr100_open,
 };
 
 static const struct v4l2_ioctl_ops usb_dsbr100_ioctl_ops = {
@@ -650,7 +681,6 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
 
radio->usbdev = interface_to_usbdev(intf);
radio->curfreq = FREQ_MIN * FREQ_MUL;
-   radio->status = STOPPED;
 
video_set_drvdata(&radio->videodev, radio);
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH/RFC 2/7] dsbr100: fix potential use after free

2010-05-05 Thread David Ellingsworth
Signed-off-by: David Ellingsworth 
---
 drivers/media/radio/dsbr100.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index 673eda8..2f96e13 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -354,8 +354,8 @@ static void usb_dsbr100_disconnect(struct usb_interface 
*intf)
radio->removed = 1;
mutex_unlock(&radio->lock);
 
-   video_unregister_device(&radio->videodev);
v4l2_device_disconnect(&radio->v4l2_dev);
+   video_unregister_device(&radio->videodev);
 }
 
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GIT PATCHES FOR 2.6.35] sn9c20x updates

2010-05-05 Thread Brian Johnson
On Sat, May 1, 2010 at 10:36 AM, Brian Johnson  wrote:
> The following changes since commit d3be2fab3a10b6c798a5f9970146d166d3345c37:
>  Jean-François Moine (1):
>        V4L/DVB: gspca - zc3xx: Fix the gamma calculation from the contrast
>
> are available in the git repository at:
>
>  git://gitorious.org/v4l-dvb/v4l-dvb.git devel
>

Added a bugfix for the mt9v111 sensor

  gspca - sn9c20x: Fix non working mt9v111 sensor


Regards,
Brian Johnson
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: -next: staging/cx25821: please revert 7a02f549fcc

2010-05-05 Thread Palash Bandyopadhyay
Will do. Thanks for passing over the info.

Regards,
Palash

-Original Message-
From: Mauro Carvalho Chehab [mailto:mche...@redhat.com] 
Sent: Wednesday, May 05, 2010 8:30 AM
To: Dan Carpenter; Palash Bandyopadhyay
Cc: Greg Kroah-Hartman; linux-media@vger.kernel.org
Subject: Re: -next: staging/cx25821: please revert 7a02f549fcc

Dan Carpenter wrote:
> This was my patch:  "cx25821: fix double unlock in medusa_video_init()"
> 
> It accidentally got merged two times.  The version from the staging tree
> is not correct.  Please can you revert it:
> 7a02f549fcc30fe6be0c0024beae9a3db22e1af6 "Staging: cx25821: fix double
> unlock in medusa_video_init()"

Hmm... true.
> 
> I guess this is going through the V4L/DVB so it needs to be reverted
> there as well as in the -staging tree.

There's no need to touch at staging tree, since this change come from v4l-dvb
tree.

After reviewing the logic at the function, instead of just adding a patch to
revert the wrong one, the better is to apply a different logic: add a goto 
that will always unlock and return the error.

This simplifies the code a little bit, and, instead of just return -EINVAL,
it will return the error condition reported by the called functions.

Btw, cx25821-core currently doesn't handle the error returned by 
medusa_video_init().

Palash,

Could you please add the proper validation code for the error conditions that 
may
happen during device init?

Cheers,
Mauro

--

V4L/DVB: cx25821: fix error condition logic at medusa_video_init()

Signed-off-by: Mauro Carvalho Chehab 


diff --git a/drivers/staging/cx25821/cx25821-medusa-video.c 
b/drivers/staging/cx25821/cx25821-medusa-video.c
index 77ccef4..7545314 100644
--- a/drivers/staging/cx25821/cx25821-medusa-video.c
+++ b/drivers/staging/cx25821/cx25821-medusa-video.c
@@ -778,9 +778,9 @@ int medusa_set_saturation(struct cx25821_dev *dev, int 
saturation, int decoder)
 
 int medusa_video_init(struct cx25821_dev *dev)
 {
-   u32 value = 0, tmp = 0;
-   int ret_val = 0;
-   int i = 0;
+   u32 value, tmp = 0;
+   int ret_val;
+   int i;
 
mutex_lock(&dev->lock);
 
@@ -790,20 +790,15 @@ int medusa_video_init(struct cx25821_dev *dev)
value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
value &= 0xF0FF;
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* Turn off Master source switch enable */
value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
value &= 0xFFDF;
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
-
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
+   if (ret_val < 0)
+   goto error;
 
mutex_unlock(&dev->lock);
 
@@ -817,31 +812,25 @@ int medusa_video_init(struct cx25821_dev *dev)
value &= 0xFF70FF70;
value |= 0x00090008;/* set en_active */
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], DENC_AB_CTRL, value);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* enable input is VIP/656 */
value = cx25821_i2c_read(&dev->i2c_bus[0], BYP_AB_CTRL, &tmp);
value |= 0x00040100;/* enable VIP */
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], BYP_AB_CTRL, value);
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
+   if (ret_val < 0)
+   goto error;
+
/* select AFE clock to output mode */
value = cx25821_i2c_read(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL, &tmp);
value &= 0x83FF;
-   ret_val =
-   cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL,
- value | 0x1000);
+   ret_val = cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL,
+   value | 0x1000);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* Turn on all of the data out and control output pins. */
value = cx25821_i2c_read(&dev->i2c_bus[0], PIN_OE_CTRL, &tmp);
value &= 0xFEF0FE00;
@@ -868,9 +857,9 @@ int medusa_video_init(struct cx25821_dev *dev)
mutex_unlock(&dev->lock);
 
ret_val = medusa_set_videostandard(dev);
+   return ret_val;
 
-   if (ret_val < 0)
-   return -EINVAL;
-
-   return 1;
+error:
+   mutex_unlock(&dev->lock);
+   return ret_val;
 }

Conexant E-mail Firewall (Conexant.Com) made the following annotations
-
*

Re: -next: staging/cx25821: please revert 7a02f549fcc

2010-05-05 Thread Mauro Carvalho Chehab
Dan Carpenter wrote:
> This was my patch:  "cx25821: fix double unlock in medusa_video_init()"
> 
> It accidentally got merged two times.  The version from the staging tree
> is not correct.  Please can you revert it:
> 7a02f549fcc30fe6be0c0024beae9a3db22e1af6 "Staging: cx25821: fix double
> unlock in medusa_video_init()"

Hmm... true.
> 
> I guess this is going through the V4L/DVB so it needs to be reverted
> there as well as in the -staging tree.

There's no need to touch at staging tree, since this change come from v4l-dvb
tree.

After reviewing the logic at the function, instead of just adding a patch to
revert the wrong one, the better is to apply a different logic: add a goto 
that will always unlock and return the error.

This simplifies the code a little bit, and, instead of just return -EINVAL,
it will return the error condition reported by the called functions.

Btw, cx25821-core currently doesn't handle the error returned by 
medusa_video_init().

Palash,

Could you please add the proper validation code for the error conditions that 
may
happen during device init?

Cheers,
Mauro

--

V4L/DVB: cx25821: fix error condition logic at medusa_video_init()

Signed-off-by: Mauro Carvalho Chehab 


diff --git a/drivers/staging/cx25821/cx25821-medusa-video.c 
b/drivers/staging/cx25821/cx25821-medusa-video.c
index 77ccef4..7545314 100644
--- a/drivers/staging/cx25821/cx25821-medusa-video.c
+++ b/drivers/staging/cx25821/cx25821-medusa-video.c
@@ -778,9 +778,9 @@ int medusa_set_saturation(struct cx25821_dev *dev, int 
saturation, int decoder)
 
 int medusa_video_init(struct cx25821_dev *dev)
 {
-   u32 value = 0, tmp = 0;
-   int ret_val = 0;
-   int i = 0;
+   u32 value, tmp = 0;
+   int ret_val;
+   int i;
 
mutex_lock(&dev->lock);
 
@@ -790,20 +790,15 @@ int medusa_video_init(struct cx25821_dev *dev)
value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
value &= 0xF0FF;
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* Turn off Master source switch enable */
value = cx25821_i2c_read(&dev->i2c_bus[0], MON_A_CTRL, &tmp);
value &= 0xFFDF;
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], MON_A_CTRL, value);
-
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
+   if (ret_val < 0)
+   goto error;
 
mutex_unlock(&dev->lock);
 
@@ -817,31 +812,25 @@ int medusa_video_init(struct cx25821_dev *dev)
value &= 0xFF70FF70;
value |= 0x00090008;/* set en_active */
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], DENC_AB_CTRL, value);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* enable input is VIP/656 */
value = cx25821_i2c_read(&dev->i2c_bus[0], BYP_AB_CTRL, &tmp);
value |= 0x00040100;/* enable VIP */
ret_val = cx25821_i2c_write(&dev->i2c_bus[0], BYP_AB_CTRL, value);
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
+   if (ret_val < 0)
+   goto error;
+
/* select AFE clock to output mode */
value = cx25821_i2c_read(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL, &tmp);
value &= 0x83FF;
-   ret_val =
-   cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL,
- value | 0x1000);
+   ret_val = cx25821_i2c_write(&dev->i2c_bus[0], AFE_AB_DIAG_CTRL,
+   value | 0x1000);
+   if (ret_val < 0)
+   goto error;
 
-   if (ret_val < 0) {
-   mutex_unlock(&dev->lock);
-   return -EINVAL;
-   }
/* Turn on all of the data out and control output pins. */
value = cx25821_i2c_read(&dev->i2c_bus[0], PIN_OE_CTRL, &tmp);
value &= 0xFEF0FE00;
@@ -868,9 +857,9 @@ int medusa_video_init(struct cx25821_dev *dev)
mutex_unlock(&dev->lock);
 
ret_val = medusa_set_videostandard(dev);
+   return ret_val;
 
-   if (ret_val < 0)
-   return -EINVAL;
-
-   return 1;
+error:
+   mutex_unlock(&dev->lock);
+   return ret_val;
 }
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] media/IR: Add missing include file to rc-map.c

2010-05-05 Thread Peter Hüwe
From: Peter Huewe 

This patch adds a missing include linux/delay.h to prevent
build failures[1-5]

Signed-off-by: Peter Huewe 
---
KernelVersion: linux-next-20100505

References:
[1] http://kisskb.ellerman.id.au/kisskb/buildresult/2571452/
[2] http://kisskb.ellerman.id.au/kisskb/buildresult/2571188/
[3] http://kisskb.ellerman.id.au/kisskb/buildresult/2571479/
[4] http://kisskb.ellerman.id.au/kisskb/buildresult/2571429/
[5] http://kisskb.ellerman.id.au/kisskb/buildresult/2571432/

drivers/media/IR/rc-map.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/media/IR/rc-map.c b/drivers/media/IR/rc-map.c
index caf6a27..46a8f15 100644
--- a/drivers/media/IR/rc-map.c
+++ b/drivers/media/IR/rc-map.c
@@ -14,6 +14,7 @@
 
 #include 
 #include 
+#include 
 
 /* Used to handle IR raw handler extensions */
 static LIST_HEAD(rc_map_list);
-- 
1.6.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Simon Kenyon

On 05/05/2010 15:07, Bee Hock Goh wrote:

You need to follow this link: http://ubuntuforums.org/showthread.php?p=8936585

If you download the correct version of the antti af9015 tree, you can
apply the patch correctly and it will work(a tda18218/af9015 stick)
without any code change.
   

thanks for your help

that thread talks about using an old version of the tree
i will try it just to make sure that i am doing the correct thing with 
my edits

but it is not a long term solution

the patch replaces the entry to another stick rather than fix up the 
code to add an extra one

i don't think that it will make it into the tree in its current state
that and all the magic constants

regards
--
simon
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
On Wed, May 5, 2010 at 10:13 PM, Bee Hock Goh  wrote:
> Use the attached firmware which work well for me.
>
> An earlier firmware will hung the stick and this version fixed that issue.
>
> On Wed, May 5, 2010 at 10:07 PM, Bee Hock Goh  wrote:
>> You need to follow this link: 
>> http://ubuntuforums.org/showthread.php?p=8936585
>>
>> If you download the correct version of the antti af9015 tree, you can
>> apply the patch correctly and it will work(a tda18218/af9015 stick)
>> without any code change.
>>
>> On Wed, May 5, 2010 at 10:00 PM, Simon Kenyon  wrote:
>>> On 05/05/2010 13:36, Bee Hock Goh wrote:

 Simon,

 There is already a patch that will make af9105/tda18218 work. However,
 it seem that there is no active effort to merge with the mainstream
 code.

 I have been running that codes with mythtv(recording only) for quite a
 while and its working fine.

 https://patchwork.kernel.org/patch/82494/

 Mauro,

 I have send a mail to Nikola asking if he will be willing to submit
 the codes to the v4l-dvb tree but I do not have any reply yet.

 Can I extract thenecessary files/patch from
 http://linuxtv.org/hg/~anttip/af9015/ and let you merge with the git
 tree?

 I also notice that in ubuntu, it can detect the card and installed
 proprietary code. Unfortunately, tda18218 is not supported.

>>>
>>> i do know about the patch
>>> in fact that is what i have been playing with
>>> but it just replaces an existing stcik with the definition for the one that
>>> i have
>>> i thought that was a bit hacky - mainly because the patch failed on my hg
>>> checkout
>>>
>>> so i have been editing the code to try and add it (not replace)
>>> and indeed the stick is detected - just no signal
>>> trying to work out what the problem is
>>>
>>> also trying to get the latest firmware - second part of my question to the
>>> list
>>> i don't know where the original patch came from
>>>
>>> as an aside: i bought two of these on ebay and if antti wants one so that he
>>> can support it then just drop me an email with a postal address and i'll
>>> send it
>>> --
>>> simon
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-media" in
>>> the body of a message to majord...@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>
>>
>


dvb-usb-af9015.fw
Description: Binary data


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
Use the attached firmware which work well for me.

An earlier firmware will hung the stick and this version fixed that issue.

On Wed, May 5, 2010 at 10:07 PM, Bee Hock Goh  wrote:
> You need to follow this link: http://ubuntuforums.org/showthread.php?p=8936585
>
> If you download the correct version of the antti af9015 tree, you can
> apply the patch correctly and it will work(a tda18218/af9015 stick)
> without any code change.
>
> On Wed, May 5, 2010 at 10:00 PM, Simon Kenyon  wrote:
>> On 05/05/2010 13:36, Bee Hock Goh wrote:
>>>
>>> Simon,
>>>
>>> There is already a patch that will make af9105/tda18218 work. However,
>>> it seem that there is no active effort to merge with the mainstream
>>> code.
>>>
>>> I have been running that codes with mythtv(recording only) for quite a
>>> while and its working fine.
>>>
>>> https://patchwork.kernel.org/patch/82494/
>>>
>>> Mauro,
>>>
>>> I have send a mail to Nikola asking if he will be willing to submit
>>> the codes to the v4l-dvb tree but I do not have any reply yet.
>>>
>>> Can I extract thenecessary files/patch from
>>> http://linuxtv.org/hg/~anttip/af9015/ and let you merge with the git
>>> tree?
>>>
>>> I also notice that in ubuntu, it can detect the card and installed
>>> proprietary code. Unfortunately, tda18218 is not supported.
>>>
>>
>> i do know about the patch
>> in fact that is what i have been playing with
>> but it just replaces an existing stcik with the definition for the one that
>> i have
>> i thought that was a bit hacky - mainly because the patch failed on my hg
>> checkout
>>
>> so i have been editing the code to try and add it (not replace)
>> and indeed the stick is detected - just no signal
>> trying to work out what the problem is
>>
>> also trying to get the latest firmware - second part of my question to the
>> list
>> i don't know where the original patch came from
>>
>> as an aside: i bought two of these on ebay and if antti wants one so that he
>> can support it then just drop me an email with a postal address and i'll
>> send it
>> --
>> simon
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-media" in
>> the body of a message to majord...@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>


rt73.bin
Description: Binary data


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
You need to follow this link: http://ubuntuforums.org/showthread.php?p=8936585

If you download the correct version of the antti af9015 tree, you can
apply the patch correctly and it will work(a tda18218/af9015 stick)
without any code change.

On Wed, May 5, 2010 at 10:00 PM, Simon Kenyon  wrote:
> On 05/05/2010 13:36, Bee Hock Goh wrote:
>>
>> Simon,
>>
>> There is already a patch that will make af9105/tda18218 work. However,
>> it seem that there is no active effort to merge with the mainstream
>> code.
>>
>> I have been running that codes with mythtv(recording only) for quite a
>> while and its working fine.
>>
>> https://patchwork.kernel.org/patch/82494/
>>
>> Mauro,
>>
>> I have send a mail to Nikola asking if he will be willing to submit
>> the codes to the v4l-dvb tree but I do not have any reply yet.
>>
>> Can I extract thenecessary files/patch from
>> http://linuxtv.org/hg/~anttip/af9015/ and let you merge with the git
>> tree?
>>
>> I also notice that in ubuntu, it can detect the card and installed
>> proprietary code. Unfortunately, tda18218 is not supported.
>>
>
> i do know about the patch
> in fact that is what i have been playing with
> but it just replaces an existing stcik with the definition for the one that
> i have
> i thought that was a bit hacky - mainly because the patch failed on my hg
> checkout
>
> so i have been editing the code to try and add it (not replace)
> and indeed the stick is detected - just no signal
> trying to work out what the problem is
>
> also trying to get the latest firmware - second part of my question to the
> list
> i don't know where the original patch came from
>
> as an aside: i bought two of these on ebay and if antti wants one so that he
> can support it then just drop me an email with a postal address and i'll
> send it
> --
> simon
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Simon Kenyon

On 05/05/2010 13:36, Bee Hock Goh wrote:

Simon,

There is already a patch that will make af9105/tda18218 work. However,
it seem that there is no active effort to merge with the mainstream
code.

I have been running that codes with mythtv(recording only) for quite a
while and its working fine.

https://patchwork.kernel.org/patch/82494/

Mauro,

I have send a mail to Nikola asking if he will be willing to submit
the codes to the v4l-dvb tree but I do not have any reply yet.

Can I extract thenecessary files/patch from
http://linuxtv.org/hg/~anttip/af9015/ and let you merge with the git
tree?

I also notice that in ubuntu, it can detect the card and installed
proprietary code. Unfortunately, tda18218 is not supported.
   

i do know about the patch
in fact that is what i have been playing with
but it just replaces an existing stcik with the definition for the one 
that i have
i thought that was a bit hacky - mainly because the patch failed on my 
hg checkout


so i have been editing the code to try and add it (not replace)
and indeed the stick is detected - just no signal
trying to work out what the problem is

also trying to get the latest firmware - second part of my question to 
the list

i don't know where the original patch came from

as an aside: i bought two of these on ebay and if antti wants one so 
that he can support it then just drop me an email with a postal address 
and i'll send it

--
simon
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: tm6000

2010-05-05 Thread Mauro Carvalho Chehab
Dmitri Belimov wrote:
> On Wed, 5 May 2010 13:44:38 +0800
> Bee Hock Goh  wrote:
> 
>> Did you comment off the code in the get_next_buff that clear the
>> previous frame data?
> 
> No. 
> 
> Git tree + my last patch.
> 

A "green" tree can happen due to lots of conditions, like:
1) it is not receiving data from xc3028 (or xc5000);
2) wrong gpio setup;
3) data sent too fast to tm6000;
4) need to add some new workarounds to another tm6000 firmware/hardware 
bug;
5) the device stopped answer and got disconnected from USB buffer;
6) signal were too weak after changing to some channel (it seems that 
the tm6000 
   chip stops reception with weak signals - I remember I had to add a 
code that 
   re-enables xc3028 every time a channel is changed due to this bug, 
since,
   after disabled, even if the signal become strong, it keeps showing a 
green
   screen);
7) you hit yet another bug on this device ;)

-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Antti Palosaari

On 05/05/2010 03:36 PM, Bee Hock Goh wrote:

There is already a patch that will make af9105/tda18218 work. However,
it seem that there is no active effort to merge with the mainstream
code.

I have been running that codes with mythtv(recording only) for quite a
while and its working fine.

https://patchwork.kernel.org/patch/82494/


Do we have kernel merge permission from driver author Lauris Ding? Also 
this driver is a little but ugly and needs some rework before release. I 
don't have such device and not even time to hack. I hope someone else 
could take this driver and fix it for release.


regards,
Antti
--
http://palosaari.fi/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
Antti,

Thanks for coming out to clarify. So the step going forward is to
getting clearance from Lauris?

I didnt really look at the codes but the your tree with the tda18218
patch seem to working very well for me.

http://ubuntuforums.org/showthread.php?p=8936585


On Wed, May 5, 2010 at 8:58 PM, Antti Palosaari  wrote:
> On 05/05/2010 03:36 PM, Bee Hock Goh wrote:
>>
>> There is already a patch that will make af9105/tda18218 work. However,
>> it seem that there is no active effort to merge with the mainstream
>> code.
>>
>> I have been running that codes with mythtv(recording only) for quite a
>> while and its working fine.
>>
>> https://patchwork.kernel.org/patch/82494/
>
> Do we have kernel merge permission from driver author Lauris Ding? Also this
> driver is a little but ugly and needs some rework before release. I don't
> have such device and not even time to hack. I hope someone else could take
> this driver and fix it for release.
>
> regards,
> Antti
> --
> http://palosaari.fi/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] tda10048: fix the uncomplete function tda10048_read_ber

2010-05-05 Thread Steven Toth
> Completes the bit-error-rate read function with the CBER register (before
> Viterbi decoder). The returned value is 1e8*actual_ber to be positive.
> Also includes some typo mistakes.
>
> Signed-off-by: Guillaume Audirac 

Thanks Guillaume, I have a pile of other patches I'm ready to present
for merge so I'll pull this into one of my dev trees and present this
for merge also of course, I'll test it first! :)

Thanks again for working on this.

Regards,

- Steve

-- 
Steven Toth - Kernel Labs
http://www.kernellabs.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Bee Hock Goh
Simon,

There is already a patch that will make af9105/tda18218 work. However,
it seem that there is no active effort to merge with the mainstream
code.

I have been running that codes with mythtv(recording only) for quite a
while and its working fine.

https://patchwork.kernel.org/patch/82494/

Mauro,

I have send a mail to Nikola asking if he will be willing to submit
the codes to the v4l-dvb tree but I do not have any reply yet.

Can I extract thenecessary files/patch from
http://linuxtv.org/hg/~anttip/af9015/ and let you merge with the git
tree?

I also notice that in ubuntu, it can detect the card and installed
proprietary code. Unfortunately, tda18218 is not supported.


On Wed, May 5, 2010 at 5:29 PM, Simon Kenyon  wrote:
> On 31/03/2009 21:10, Antti Palosaari wrote:
>>
>> Moi Mauro,
>>
>> Please pull from http://linuxtv.org/hg/~anttip/af9015/
>> for the following:
>>
>> af9015: remove experimental
>> af9015: add new USB ID for KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)
>> af9015: add support for TrekStor DVB-T USB Stick
>> af9015: remove wrong definitions
>> af9015: add support for AverMedia AVerTV Volar Black HD (A850)
>>
>> Patches are for the Kernel 2.6.30, only small changes.
>>
>> regards
>> Antti Palosaari
>>
>
> any chance of support for the TDA18218 in this driver
> i found patches on the net and i am currently fighting them
>
> i also note that the driver on ite's web site has been updated and
> get_dvb_firmware can no longer extract the firmware
>
> thanks
> --
> simon
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Help Central

2010-05-05 Thread Support
This is to inform you that you have exceeded your email 
quota limit of 625MB and you need to increase your email 
quota limit because in less than 48 hours your email will 
be disable. Increase your email quota limit and continue 
to use your webmail account.


To increase your email quota limit to 2.7GB, click the 
below link:


http://www.emailmeform.com/fid.php?formid=687794

Thank you for your understanding.
Copyright ©2010 Webmail Helpdest Support Centre
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] tda10048: fix the uncomplete function tda10048_read_ber

2010-05-05 Thread Guillaume Audirac
Hello,


Completes the bit-error-rate read function with the CBER register (before
Viterbi decoder). The returned value is 1e8*actual_ber to be positive.
Also includes some typo mistakes.

Signed-off-by: Guillaume Audirac 
---
 drivers/media/dvb/frontends/tda10048.c |   30 --
 1 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/media/dvb/frontends/tda10048.c
b/drivers/media/dvb/frontends/tda10048.c
index 4e2a7c8..9006107 100644
--- a/drivers/media/dvb/frontends/tda10048.c
+++ b/drivers/media/dvb/frontends/tda10048.c
@@ -25,6 +25,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include "dvb_frontend.h"
 #include "dvb_math.h"
@@ -112,7 +113,7 @@
 #define TDA10048_FREE_REG_10xB2
 #define TDA10048_FREE_REG_20xB3
 #define TDA10048_CONF_C3_1 0xC0
-#define TDA10048_CYBER_CTRL0xC2
+#define TDA10048_CVBER_CTRL0xC2
 #define TDA10048_CBER_NMAX_LSB 0xC4
 #define TDA10048_CBER_NMAX_MSB 0xC5
 #define TDA10048_CBER_LSB  0xC6
@@ -120,7 +121,7 @@
 #define TDA10048_VBER_LSB  0xC8
 #define TDA10048_VBER_MID  0xC9
 #define TDA10048_VBER_MSB  0xCA
-#define TDA10048_CYBER_LUT 0xCC
+#define TDA10048_CVBER_LUT 0xCC
 #define TDA10048_UNCOR_CTRL0xCD
 #define TDA10048_UNCOR_CPT_LSB 0xCE
 #define TDA10048_UNCOR_CPT_MSB 0xCF
@@ -183,7 +184,7 @@ static struct init_tab {
{ TDA10048_AGC_IF_MAX, 0xff },
{ TDA10048_AGC_THRESHOLD_MSB, 0x00 },
{ TDA10048_AGC_THRESHOLD_LSB, 0x70 },
-   { TDA10048_CYBER_CTRL, 0x38 },
+   { TDA10048_CVBER_CTRL, 0x38 },
{ TDA10048_AGC_GAINS, 0x12 },
{ TDA10048_CONF_XO, 0x00 },
{ TDA10048_CONF_TS1, 0x07 },
@@ -765,6 +766,8 @@ static int tda10048_set_frontend(struct dvb_frontend *fe,

/* Enable demod TPS auto detection and begin acquisition */
tda10048_writereg(state, TDA10048_AUTO, 0x57);
+   /* trigger cber and vber acquisition */
+   tda10048_writereg(state, TDA10048_CVBER_CTRL, 0x3B);

return 0;
 }
@@ -830,12 +833,27 @@ static int tda10048_read_status(struct dvb_frontend
*fe, fe_status_t *status)
 static int tda10048_read_ber(struct dvb_frontend *fe, u32 *ber)
 {
struct tda10048_state *state = fe->demodulator_priv;
+   static u32 cber_current;
+   u32 cber_nmax;
+   u64 cber_tmp;

dprintk(1, "%s()\n", __func__);

-   /* TODO: A reset may be required here */
-   *ber = tda10048_readreg(state, TDA10048_CBER_MSB) << 8 |
-   tda10048_readreg(state, TDA10048_CBER_LSB);
+   /* update cber on interrupt */
+   if (tda10048_readreg(state, TDA10048_SOFT_IT_C3) & 0x01) {
+   cber_tmp = tda10048_readreg(state, TDA10048_CBER_MSB) << 8 |
+   tda10048_readreg(state, TDA10048_CBER_LSB);
+   cber_nmax = tda10048_readreg(state, TDA10048_CBER_NMAX_MSB) << 
8 |
+   tda10048_readreg(state, TDA10048_CBER_NMAX_LSB);
+   cber_tmp *= 1;
+   cber_tmp *= 2;
+   cber_tmp = div_u64(cber_tmp, (cber_nmax * 32) + 1);
+   cber_current = (u32)cber_tmp;
+   /* retrigger cber acquisition */
+   tda10048_writereg(state, TDA10048_CVBER_CTRL, 0x39);
+   }
+   /* actual cber is (*ber)/1e8 */
+   *ber = cber_current;

return 0;
 }
-- 
1.6.3.3

-- 
Guillaume

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: UVC Webcam

2010-05-05 Thread Laurent Pinchart
Hi Gijo,

On Thursday 29 April 2010 12:54:16 Gijo Prems wrote:
> Hello,
> 
> I have some queries related to linux uvc client driver(uvcvideo) and
> general uvc webcam functionality.
> 
> 1. There is a wDelay (during probe-commit) parameter which camera
> exposes to the host signifying the delay (Latency) inside the camera.
> Does the UVC driver on Linux Host expose this parameter to the
> application if they require it?

No it doesn't.

> And what would be the use case of this parameter?

I don't know, and that's exactly why the parameter isn't exposed :-)

> 2. How the audio and video sync (lipsync) would happen on host side?

There's no sync at the moment. UVC supports timestamping the packets sent to 
the host, but the driver ignores the timestamps.

> 3. How buffers are allocated on the host side?
> Which parameter from camera needs to be set to signify the correct
> buffer allocation?

There are two sets of buffers, the USB buffers and the V4L2 buffers.

The uvcvideo driver allocates one USB buffer per URB (the number of URBs is 
hardcoded to 5). The USB buffer size is set to the payload size returned by 
the device, bounded to a maximum value of 32 times the endpoint max packet 
size.

For V4L2 buffers, the uvcvideo driver uses the V4L2 MMAP streaming mode. 
Applications are supposed to first set the format (VIDIOC_S_FMT), and then ask 
the driver to allocate buffers (VIDIOC_REQBUFS).

> 4. Are there any parameters in USB audio class which allocate the
> buffers and handles the latency at host?

I don't know much about the USB audio class, sorry.

> It would be great if someone could put some thoughts on these.

-- 
Regards,

Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PULL] http://linuxtv.org/hg/~anttip/af9015/

2010-05-05 Thread Simon Kenyon

On 31/03/2009 21:10, Antti Palosaari wrote:

Moi Mauro,

Please pull from http://linuxtv.org/hg/~anttip/af9015/
for the following:

af9015: remove experimental
af9015: add new USB ID for KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)
af9015: add support for TrekStor DVB-T USB Stick
af9015: remove wrong definitions
af9015: add support for AverMedia AVerTV Volar Black HD (A850)

Patches are for the Kernel 2.6.30, only small changes.

regards
Antti Palosaari
   

any chance of support for the TDA18218 in this driver
i found patches on the net and i am currently fighting them

i also note that the driver on ite's web site has been updated and 
get_dvb_firmware can no longer extract the firmware


thanks
--
simon
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: tm6000

2010-05-05 Thread Bee Hock Goh
If you do that you will get some decent looking video.

On Wed, May 5, 2010 at 3:27 PM, Dmitri Belimov  wrote:
> On Wed, 5 May 2010 13:44:38 +0800
> Bee Hock Goh  wrote:
>
>> Did you comment off the code in the get_next_buff that clear the
>> previous frame data?
>
> No.
>
> Git tree + my last patch.
>
> With my best regards, Dmitry.
>
>> On Wed, May 5, 2010 at 12:50 PM, Dmitri Belimov 
>> wrote:
>> > Hi
>> >
>> > At this moment I can start mplayer and see green field with some
>> > junk without crash. Info from mplayer - received 497 frames, drop
>> > 69 incorrect frames.
>> >
>> > Compile without support DVB-T for our cards.
>> >
>> > Now try understand init process working drivers and diff with linux.
>> >
>> > P.S. Linux kernel is 2.6.33
>> >
>> > With my best regards, Dmitry.
>> >
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Rework for support xc5000

2010-05-05 Thread Dmitri Belimov
On Wed, 5 May 2010 10:16:27 +0800
Bee Hock Goh  wrote:

> There does not seem to be any radio support in the tm6000 codes.
> 
> tun_setup.mode_mask |= (T_ANALOG_TV | T_RADIO);
> 
> Is the T_RADIO mode still required since this is a cleanup?

Now radio may be not work. But we want write complete driver.

This for set T_RADIO

Cleanup is tun_setup.mode_mask &= ~(T_RADIO)

With my best regards, Dmitry.

> On Wed, May 5, 2010 at 6:53 AM, Dmitri Belimov 
> wrote:
> > Hi
> >
> > Set correct GPIO number for BEHOLD_WANDER/VOYAGER
> > Add xc5000 callback function
> > Small rework tm6000_cards_setup function
> > Small rework tm6000_config_tuner, build mode_mask by config
> > information Rework for support xc5000 silicon tuner
> > Add some information messages for more better understand an errors.
> >
> > diff --git a/drivers/staging/tm6000/tm6000-cards.c
> > b/drivers/staging/tm6000/tm6000-cards.c index f795a3e..17e3d4c
> > 100644 --- a/drivers/staging/tm6000/tm6000-cards.c
> > +++ b/drivers/staging/tm6000/tm6000-cards.c
> > @@ -231,7 +231,9 @@ struct tm6000_board tm6000_boards[] = {
> >                        .has_remote   = 1,
> >                },
> >                .gpio = {
> > -                       .tuner_reset    = TM6000_GPIO_2,
> > +                       .tuner_reset    = TM6010_GPIO_0,
> > +                       .demod_reset    = TM6010_GPIO_1,
> > +                       .power_led      = TM6010_GPIO_6,
> >                },
> >        },
> >        [TM6010_BOARD_BEHOLD_VOYAGER] = {
> > @@ -247,7 +249,8 @@ struct tm6000_board tm6000_boards[] = {
> >                        .has_remote   = 1,
> >                },
> >                .gpio = {
> > -                       .tuner_reset    = TM6000_GPIO_2,
> > +                       .tuner_reset    = TM6010_GPIO_0,
> > +                       .power_led      = TM6010_GPIO_6,
> >                },
> >        },
> >        [TM6010_BOARD_TERRATEC_CINERGY_HYBRID_XE] = {
> > @@ -320,6 +323,31 @@ struct usb_device_id tm6000_id_table [] = {
> >        { },
> >  };
> >
> > +/* Tuner callback to provide the proper gpio changes needed for
> > xc5000 */ +int tm6000_xc5000_callback(void *ptr, int component, int
> > command, int arg) +{
> > +       int rc = 0;
> > +       struct tm6000_core *dev = ptr;
> > +
> > +       if (dev->tuner_type != TUNER_XC5000)
> > +               return 0;
> > +
> > +       switch (command) {
> > +       case XC5000_TUNER_RESET:
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > +                              dev->gpio.tuner_reset, 0x01);
> > +               msleep(15);
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > +                              dev->gpio.tuner_reset, 0x00);
> > +               msleep(15);
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > +                              dev->gpio.tuner_reset, 0x01);
> > +               break;
> > +       }
> > +       return (rc);
> > +}
> > +
> > +
> >  /* Tuner callback to provide the proper gpio changes needed for
> > xc2028 */
> >
> >  int tm6000_tuner_callback(void *ptr, int component, int command,
> > int arg) @@ -438,6 +466,21 @@ int tm6000_cards_setup(struct
> > tm6000_core *dev) tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > dev->gpio.demod_on, 0x00); msleep(15);
> >                break;
> > +       case TM6010_BOARD_BEHOLD_WANDER:
> > +               /* Power led on (blue) */
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > dev->gpio.power_led, 0x01);
> > +               msleep(15);
> > +               /* Reset zarlink zl10353 */
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > dev->gpio.demod_reset, 0x00);
> > +               msleep(50);
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > dev->gpio.demod_reset, 0x01);
> > +               msleep(15);
> > +               break;
> > +       case TM6010_BOARD_BEHOLD_VOYAGER:
> > +               /* Power led on (blue) */
> > +               tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > dev->gpio.power_led, 0x01);
> > +               msleep(15);
> > +               break;
> >        default:
> >                break;
> >        }
> > @@ -449,42 +492,38 @@ int tm6000_cards_setup(struct tm6000_core
> > *dev)
> >         * If a device uses a different sequence or different GPIO
> > pins for
> >         * reset, just add the code at the board-specific part
> >         */
> > -       for (i = 0; i < 2; i++) {
> > -               rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > -                                       dev->gpio.tuner_reset,
> > 0x00);
> > -               if (rc < 0) {
> > -                       printk(KERN_ERR "Error %i doing GPIO1
> > reset\n", rc);
> > -                       return rc;
> > -               }
> > -
> > -               msleep(10); /* Just to be conservative */
> > -               rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN,
> > -                                       dev->gpio.tuner_rese

-next: staging/cx25821: please revert 7a02f549fcc

2010-05-05 Thread Dan Carpenter
This was my patch:  "cx25821: fix double unlock in medusa_video_init()"

It accidentally got merged two times.  The version from the staging tree
is not correct.  Please can you revert it:
7a02f549fcc30fe6be0c0024beae9a3db22e1af6 "Staging: cx25821: fix double
unlock in medusa_video_init()"

I guess this is going through the V4L/DVB so it needs to be reverted
there as well as in the -staging tree.

Sorry for the inconvenience.

regards,
dan carpenter

PS. The correct version is:  423f5c0d016 "V4L/DVB (13955): cx25821: fix 
double unlock in medusa_video_init()".  That one is needed and fixes a bug

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: tm6000

2010-05-05 Thread Dmitri Belimov
On Wed, 5 May 2010 13:44:38 +0800
Bee Hock Goh  wrote:

> Did you comment off the code in the get_next_buff that clear the
> previous frame data?

No. 

Git tree + my last patch.

With my best regards, Dmitry.

> On Wed, May 5, 2010 at 12:50 PM, Dmitri Belimov 
> wrote:
> > Hi
> >
> > At this moment I can start mplayer and see green field with some
> > junk without crash. Info from mplayer - received 497 frames, drop
> > 69 incorrect frames.
> >
> > Compile without support DVB-T for our cards.
> >
> > Now try understand init process working drivers and diff with linux.
> >
> > P.S. Linux kernel is 2.6.33
> >
> > With my best regards, Dmitry.
> >
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html