Skip to content

Commit

Permalink
Merge branch 'v4l_for_2.6.35' of git://git.kernel.org/pub/scm/linux/k…
Browse files Browse the repository at this point in the history
…ernel/git/mchehab/linux-2.6

* 'v4l_for_2.6.35' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
  V4L/DVB: uvc: Fix multiple symbols definitions with UVC gadget and host drivers
  V4L/DVB: v4l: mem2mem_testdev: fix g_fmt NULL pointer dereference
  V4L/DVB: uvcvideo: Power line frequency control doesn't support GET_MIN/MAX/RES
  V4L/DVB: ivtv: Add delay to ensure the decoder always restarts with a blank screen
  V4L/DVB: Documentation: Add the Philips FQ1236 MK5 to video4linux/CARDLIST.tuner
  V4L/DVB: tveeprom: Add an entry for tuner code 168: a TCL M30WTP-4N-E tuner
  V4L/DVB: tuner: Add a definition for the Philips FQ1236 MK5 NTSC tuner
  V4L/DVB: OMAP_VOUT: fix: Module params were not working through bootargs
  V4L/DVB: OMAP_VOUT: fix: Replaced dma-sg with dma-contig
  V4L/DVB: OMAP_VOUT:Build FIX: Rebased against latest DSS2 changes
  • Loading branch information
Linus Torvalds committed Jul 12, 2010
2 parents 293ffa8 + 5d9955f commit 9f71963
Show file tree
Hide file tree
Showing 18 changed files with 169 additions and 163 deletions.
1 change: 1 addition & 0 deletions Documentation/video4linux/CARDLIST.tuner
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,4 @@ tuner=81 - Partsnic (Daewoo) PTI-5NF05
tuner=82 - Philips CU1216L
tuner=83 - NXP TDA18271
tuner=84 - Sony BTF-Pxn01Z
tuner=85 - Philips FQ1236 MK5
1 change: 1 addition & 0 deletions drivers/media/common/tuners/tuner-simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ static int simple_radio_bandswitch(struct dvb_frontend *fe, u8 *buffer)
buffer[3] = 0x39;
break;
case TUNER_PHILIPS_FQ1216LME_MK3:
case TUNER_PHILIPS_FQ1236_MK5:
tuner_err("This tuner doesn't have FM\n");
/* Set the low band for sanity, since it covers 88-108 MHz */
buffer[3] = 0x01;
Expand Down
16 changes: 16 additions & 0 deletions drivers/media/common/tuners/tuner-types.c
Original file line number Diff line number Diff line change
Expand Up @@ -1353,6 +1353,17 @@ static struct tuner_params tuner_sony_btf_pxn01z_params[] = {
},
};

/* ------------ TUNER_PHILIPS_FQ1236_MK5 - Philips NTSC ------------ */

static struct tuner_params tuner_philips_fq1236_mk5_params[] = {
{
.type = TUNER_PARAM_TYPE_NTSC,
.ranges = tuner_fm1236_mk3_ntsc_ranges,
.count = ARRAY_SIZE(tuner_fm1236_mk3_ntsc_ranges),
.has_tda9887 = 1, /* TDA9885, no FM radio */
},
};

/* --------------------------------------------------------------------- */

struct tunertype tuners[] = {
Expand Down Expand Up @@ -1826,6 +1837,11 @@ struct tunertype tuners[] = {
.params = tuner_sony_btf_pxn01z_params,
.count = ARRAY_SIZE(tuner_sony_btf_pxn01z_params),
},
[TUNER_PHILIPS_FQ1236_MK5] = { /* NTSC, TDA9885, no FM radio */
.name = "Philips FQ1236 MK5",
.params = tuner_philips_fq1236_mk5_params,
.count = ARRAY_SIZE(tuner_philips_fq1236_mk5_params),
},
};
EXPORT_SYMBOL(tuners);

Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/ivtv/ivtv-streams.c
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,9 @@ int ivtv_stop_v4l2_decode_stream(struct ivtv_stream *s, int flags, u64 pts)
clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
ivtv_flush_queues(s);

/* decoder needs time to settle */
ivtv_msleep_timeout(40, 0);

/* decrement decoding */
atomic_dec(&itv->decoding);

Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/mem2mem_testdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -988,6 +988,9 @@ static int m2mtest_probe(struct platform_device *pdev)
goto err_m2m;
}

q_data[V4L2_M2M_SRC].fmt = &formats[0];
q_data[V4L2_M2M_DST].fmt = &formats[0];

return 0;

err_m2m:
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/video/omap/Kconfig
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
config VIDEO_OMAP2_VOUT
tristate "OMAP2/OMAP3 V4L2-Display driver"
depends on ARCH_OMAP24XX || ARCH_OMAP34XX
depends on ARCH_OMAP2 || ARCH_OMAP3
select VIDEOBUF_GEN
select VIDEOBUF_DMA_SG
select VIDEOBUF_DMA_CONTIG
select OMAP2_DSS
select OMAP2_VRAM
select OMAP2_VRFB
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/video/omap/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
#

# OMAP2/3 Display driver
omap-vout-mod-objs := omap_vout.o omap_voutlib.o
obj-$(CONFIG_VIDEO_OMAP2_VOUT) += omap-vout-mod.o
omap-vout-y := omap_vout.o omap_voutlib.o
obj-$(CONFIG_VIDEO_OMAP2_VOUT) += omap-vout.o
81 changes: 34 additions & 47 deletions drivers/media/video/omap/omap_vout.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@
#include <linux/dma-mapping.h>
#include <linux/irq.h>
#include <linux/videodev2.h>
#include <linux/slab.h>

#include <media/videobuf-dma-sg.h>
#include <media/videobuf-dma-contig.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>

Expand Down Expand Up @@ -1053,9 +1054,9 @@ static int omap_vout_buffer_prepare(struct videobuf_queue *q,
struct videobuf_buffer *vb,
enum v4l2_field field)
{
dma_addr_t dmabuf;
struct vid_vrfb_dma *tx;
enum dss_rotation rotation;
struct videobuf_dmabuf *dmabuf = NULL;
struct omap_vout_device *vout = q->priv_data;
u32 dest_frame_index = 0, src_element_index = 0;
u32 dest_element_index = 0, src_frame_index = 0;
Expand All @@ -1074,24 +1075,17 @@ static int omap_vout_buffer_prepare(struct videobuf_queue *q,
if (V4L2_MEMORY_USERPTR == vb->memory) {
if (0 == vb->baddr)
return -EINVAL;
/* Virtual address */
/* priv points to struct videobuf_pci_sg_memory. But we went
* pointer to videobuf_dmabuf, which is member of
* videobuf_pci_sg_memory */
dmabuf = videobuf_to_dma(q->bufs[vb->i]);
dmabuf->vmalloc = (void *) vb->baddr;

/* Physical address */
dmabuf->bus_addr =
(dma_addr_t) omap_vout_uservirt_to_phys(vb->baddr);
vout->queued_buf_addr[vb->i] = (u8 *)
omap_vout_uservirt_to_phys(vb->baddr);
} else {
vout->queued_buf_addr[vb->i] = (u8 *)vout->buf_phy_addr[vb->i];
}

if (!rotation_enabled(vout)) {
dmabuf = videobuf_to_dma(q->bufs[vb->i]);
vout->queued_buf_addr[vb->i] = (u8 *) dmabuf->bus_addr;
if (!rotation_enabled(vout))
return 0;
}
dmabuf = videobuf_to_dma(q->bufs[vb->i]);

dmabuf = vout->buf_phy_addr[vb->i];
/* If rotation is enabled, copy input buffer into VRFB
* memory space using DMA. We are copying input buffer
* into VRFB memory space of desired angle and DSS will
Expand Down Expand Up @@ -1120,7 +1114,7 @@ static int omap_vout_buffer_prepare(struct videobuf_queue *q,
tx->dev_id, 0x0);
/* src_port required only for OMAP1 */
omap_set_dma_src_params(tx->dma_ch, 0, OMAP_DMA_AMODE_POST_INC,
dmabuf->bus_addr, src_element_index, src_frame_index);
dmabuf, src_element_index, src_frame_index);
/*set dma source burst mode for VRFB */
omap_set_dma_src_burst_mode(tx->dma_ch, OMAP_DMA_DATA_BURST_16);
rotation = calc_rotation(vout);
Expand Down Expand Up @@ -1211,7 +1205,6 @@ static int omap_vout_mmap(struct file *file, struct vm_area_struct *vma)
void *pos;
unsigned long start = vma->vm_start;
unsigned long size = (vma->vm_end - vma->vm_start);
struct videobuf_dmabuf *dmabuf = NULL;
struct omap_vout_device *vout = file->private_data;
struct videobuf_queue *q = &vout->vbq;

Expand Down Expand Up @@ -1241,8 +1234,7 @@ static int omap_vout_mmap(struct file *file, struct vm_area_struct *vma)
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
vma->vm_ops = &omap_vout_vm_ops;
vma->vm_private_data = (void *) vout;
dmabuf = videobuf_to_dma(q->bufs[i]);
pos = dmabuf->vmalloc;
pos = (void *)vout->buf_virt_addr[i];
vma->vm_pgoff = virt_to_phys((void *)pos) >> PAGE_SHIFT;
while (size > 0) {
unsigned long pfn;
Expand Down Expand Up @@ -1347,8 +1339,8 @@ static int omap_vout_open(struct file *file)
video_vbq_ops.buf_queue = omap_vout_buffer_queue;
spin_lock_init(&vout->vbq_lock);

videobuf_queue_sg_init(q, &video_vbq_ops, NULL, &vout->vbq_lock,
vout->type, V4L2_FIELD_NONE,
videobuf_queue_dma_contig_init(q, &video_vbq_ops, q->dev,
&vout->vbq_lock, vout->type, V4L2_FIELD_NONE,
sizeof(struct videobuf_buffer), vout);

v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Exiting %s\n", __func__);
Expand Down Expand Up @@ -1799,7 +1791,6 @@ static int vidioc_reqbufs(struct file *file, void *fh,
unsigned int i, num_buffers = 0;
struct omap_vout_device *vout = fh;
struct videobuf_queue *q = &vout->vbq;
struct videobuf_dmabuf *dmabuf = NULL;

if ((req->type != V4L2_BUF_TYPE_VIDEO_OUTPUT) || (req->count < 0))
return -EINVAL;
Expand All @@ -1825,8 +1816,7 @@ static int vidioc_reqbufs(struct file *file, void *fh,
num_buffers = (vout->vid == OMAP_VIDEO1) ?
video1_numbuffers : video2_numbuffers;
for (i = num_buffers; i < vout->buffer_allocated; i++) {
dmabuf = videobuf_to_dma(q->bufs[i]);
omap_vout_free_buffer((u32)dmabuf->vmalloc,
omap_vout_free_buffer(vout->buf_virt_addr[i],
vout->buffer_size);
vout->buf_virt_addr[i] = 0;
vout->buf_phy_addr[i] = 0;
Expand Down Expand Up @@ -1855,12 +1845,7 @@ static int vidioc_reqbufs(struct file *file, void *fh,
goto reqbuf_err;

vout->buffer_allocated = req->count;
for (i = 0; i < req->count; i++) {
dmabuf = videobuf_to_dma(q->bufs[i]);
dmabuf->vmalloc = (void *) vout->buf_virt_addr[i];
dmabuf->bus_addr = (dma_addr_t) vout->buf_phy_addr[i];
dmabuf->sglen = 1;
}

reqbuf_err:
mutex_unlock(&vout->lock);
return ret;
Expand Down Expand Up @@ -2488,7 +2473,7 @@ static int omap_vout_remove(struct platform_device *pdev)

for (k = 0; k < vid_dev->num_displays; k++) {
if (vid_dev->displays[k]->state != OMAP_DSS_DISPLAY_DISABLED)
vid_dev->displays[k]->disable(vid_dev->displays[k]);
vid_dev->displays[k]->driver->disable(vid_dev->displays[k]);

omap_dss_put_device(vid_dev->displays[k]);
}
Expand Down Expand Up @@ -2545,7 +2530,9 @@ static int __init omap_vout_probe(struct platform_device *pdev)
def_display = NULL;
}
if (def_display) {
ret = def_display->enable(def_display);
struct omap_dss_driver *dssdrv = def_display->driver;

ret = dssdrv->enable(def_display);
if (ret) {
/* Here we are not considering a error
* as display may be enabled by frame
Expand All @@ -2559,21 +2546,21 @@ static int __init omap_vout_probe(struct platform_device *pdev)
if (def_display->caps &
OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
#ifdef CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE
if (def_display->enable_te)
def_display->enable_te(def_display, 1);
if (def_display->set_update_mode)
def_display->set_update_mode(def_display,
if (dssdrv->enable_te)
dssdrv->enable_te(def_display, 1);
if (dssdrv->set_update_mode)
dssdrv->set_update_mode(def_display,
OMAP_DSS_UPDATE_AUTO);
#else /* MANUAL_UPDATE */
if (def_display->enable_te)
def_display->enable_te(def_display, 0);
if (def_display->set_update_mode)
def_display->set_update_mode(def_display,
if (dssdrv->enable_te)
dssdrv->enable_te(def_display, 0);
if (dssdrv->set_update_mode)
dssdrv->set_update_mode(def_display,
OMAP_DSS_UPDATE_MANUAL);
#endif
} else {
if (def_display->set_update_mode)
def_display->set_update_mode(def_display,
if (dssdrv->set_update_mode)
dssdrv->set_update_mode(def_display,
OMAP_DSS_UPDATE_AUTO);
}
}
Expand All @@ -2592,8 +2579,8 @@ static int __init omap_vout_probe(struct platform_device *pdev)
for (i = 0; i < vid_dev->num_displays; i++) {
struct omap_dss_device *display = vid_dev->displays[i];

if (display->update)
display->update(display, 0, 0,
if (display->driver->update)
display->driver->update(display, 0, 0,
display->panel.timings.x_res,
display->panel.timings.y_res);
}
Expand All @@ -2608,8 +2595,8 @@ static int __init omap_vout_probe(struct platform_device *pdev)
if (ovl->manager && ovl->manager->device)
def_display = ovl->manager->device;

if (def_display)
def_display->disable(def_display);
if (def_display && def_display->driver)
def_display->driver->disable(def_display);
}
probe_err0:
kfree(vid_dev);
Expand Down
15 changes: 15 additions & 0 deletions drivers/media/video/tveeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,21 @@ hauppauge_tuner[] =
{ TUNER_ABSENT, "Xceive XC4000"},
{ TUNER_ABSENT, "Dibcom 7070"},
{ TUNER_PHILIPS_TDA8290, "NXP 18271C2"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
/* 160-169 */
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_ABSENT, "unknown"},
{ TUNER_PHILIPS_FQ1236_MK5, "TCL M30WTP-4N-E"},
{ TUNER_ABSENT, "unknown"},
};

/* Use V4L2_IDENT_AMBIGUOUS for those audio 'chips' that are
Expand Down
4 changes: 2 additions & 2 deletions drivers/media/video/uvc/uvc_ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ static struct uvc_control_info uvc_ctrls[] = {
.selector = UVC_PU_POWER_LINE_FREQUENCY_CONTROL,
.index = 10,
.size = 1,
.flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_RANGE
| UVC_CONTROL_RESTORE,
.flags = UVC_CONTROL_SET_CUR | UVC_CONTROL_GET_CUR
| UVC_CONTROL_GET_DEF | UVC_CONTROL_RESTORE,
},
{
.entity = UVC_GUID_UVC_PROCESSING,
Expand Down
4 changes: 2 additions & 2 deletions drivers/usb/gadget/f_uvc.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

#include "uvc.h"

unsigned int uvc_trace_param;
unsigned int uvc_gadget_trace_param;

/* --------------------------------------------------------------------------
* Function descriptors
Expand Down Expand Up @@ -656,6 +656,6 @@ uvc_bind_config(struct usb_configuration *c,
return ret;
}

module_param_named(trace, uvc_trace_param, uint, S_IRUGO|S_IWUSR);
module_param_named(trace, uvc_gadget_trace_param, uint, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC(trace, "Trace level bitmask");

10 changes: 2 additions & 8 deletions drivers/usb/gadget/uvc.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@ struct uvc_streaming_control {
#define UVC_WARN_MINMAX 0
#define UVC_WARN_PROBE_DEF 1

extern unsigned int uvc_trace_param;
extern unsigned int uvc_gadget_trace_param;

#define uvc_trace(flag, msg...) \
do { \
if (uvc_trace_param & flag) \
if (uvc_gadget_trace_param & flag) \
printk(KERN_DEBUG "uvcvideo: " msg); \
} while (0)

Expand Down Expand Up @@ -220,16 +220,10 @@ struct uvc_file_handle
#define to_uvc_file_handle(handle) \
container_of(handle, struct uvc_file_handle, vfh)

extern struct v4l2_file_operations uvc_v4l2_fops;

/* ------------------------------------------------------------------------
* Functions
*/

extern int uvc_video_enable(struct uvc_video *video, int enable);
extern int uvc_video_init(struct uvc_video *video);
extern int uvc_video_pump(struct uvc_video *video);

extern void uvc_endpoint_stream(struct uvc_device *dev);

extern void uvc_function_connect(struct uvc_device *uvc);
Expand Down
Loading

0 comments on commit 9f71963

Please sign in to comment.