Commit 417a9ef1 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'v4l_for_2.6.34' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6

* 'v4l_for_2.6.34' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
  V4L/DVB: pxa_camera: move fifo reset direct before dma start
  V4L/DVB: video: testing unsigned for less than 0
  V4L/DVB: mx1-camera: compile fix
  V4L/DVB: budget: Oops: "BUG: unable to handle kernel NULL pointer 	dereference"
  V4L/DVB: ngene: Workaround for stuck DiSEqC pin
  V4L/DVB: saa7146: fix regression of the av7110/budget-av driver
  V4L/DVB: v4l: fix config dependencies: mxb and saa7191 are V4L2 drivers, not V4L1
  V4L/DVB: feature-removal: announce videotext.h removal
  V4L/DVB: V4L - vpfe capture - fix for kernel crash
  V4L/DVB: gspca: make usb id 0461:0815 get handled by the right driver
  V4L/DVB: gspca - stv06xx: Remove the 046d:08da from the stv06xx driver
  V4L/DVB: gspca - sn9c20x: Correct onstack wait_queue_head declaration
  V4L/DVB: saa7146: fix up bytesperline if it is an impossible value
  V4L/DVB: V4L: vpfe_capture - free ccdc_lock when memory allocation fails
  V4L/DVB: V4L - Makfile:Removed duplicate entry of davinci
  V4L/DVB: omap24xxcam: potential buffer overflow
parents 91bc482e a47f6be4
...@@ -589,3 +589,26 @@ Why: Useful in 2003, implementation is a hack. ...@@ -589,3 +589,26 @@ Why: Useful in 2003, implementation is a hack.
Generally invoked by accident today. Generally invoked by accident today.
Seen as doing more harm than good. Seen as doing more harm than good.
Who: Len Brown <len.brown@intel.com> Who: Len Brown <len.brown@intel.com>
----------------------------
What: video4linux /dev/vtx teletext API support
When: 2.6.35
Files: drivers/media/video/saa5246a.c drivers/media/video/saa5249.c
include/linux/videotext.h
Why: The vtx device nodes have been superseded by vbi device nodes
for many years. No applications exist that use the vtx support.
Of the two i2c drivers that actually support this API the saa5249
has been impossible to use for a year now and no known hardware
that supports this device exists. The saa5246a is theoretically
supported by the old mxb boards, but it never actually worked.
In summary: there is no hardware that can use this API and there
are no applications actually implementing this API.
The vtx support still reserves minors 192-223 and we would really
like to reuse those for upcoming new functionality. In the unlikely
event that new hardware appears that wants to use the functionality
provided by the vtx API, then that functionality should be build
around the sliced VBI API instead.
Who: Hans Verkuil <hverkuil@xs4all.nl>
...@@ -31,7 +31,13 @@ ...@@ -31,7 +31,13 @@
#define DMA_MODE_WRITE 1 #define DMA_MODE_WRITE 1
#define DMA_MODE_MASK 1 #define DMA_MODE_MASK 1
#define DMA_BASE IO_ADDRESS(DMA_BASE_ADDR) #define MX1_DMA_REG(offset) MX1_IO_ADDRESS(MX1_DMA_BASE_ADDR + (offset))
/* DMA Interrupt Mask Register */
#define MX1_DMA_DIMR MX1_DMA_REG(0x08)
/* Channel Control Register */
#define MX1_DMA_CCR(x) MX1_DMA_REG(0x8c + ((x) << 6))
#define IMX_DMA_MEMSIZE_32 (0 << 4) #define IMX_DMA_MEMSIZE_32 (0 << 4)
#define IMX_DMA_MEMSIZE_8 (1 << 4) #define IMX_DMA_MEMSIZE_8 (1 << 4)
......
...@@ -423,15 +423,14 @@ static void vv_callback(struct saa7146_dev *dev, unsigned long status) ...@@ -423,15 +423,14 @@ static void vv_callback(struct saa7146_dev *dev, unsigned long status)
} }
} }
int saa7146_vv_devinit(struct saa7146_dev *dev)
{
return v4l2_device_register(&dev->pci->dev, &dev->v4l2_dev);
}
EXPORT_SYMBOL_GPL(saa7146_vv_devinit);
int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv) int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
{ {
struct saa7146_vv *vv; struct saa7146_vv *vv;
int err;
err = v4l2_device_register(&dev->pci->dev, &dev->v4l2_dev);
if (err)
return err;
vv = kzalloc(sizeof(struct saa7146_vv), GFP_KERNEL); vv = kzalloc(sizeof(struct saa7146_vv), GFP_KERNEL);
if (vv == NULL) { if (vv == NULL) {
......
...@@ -558,9 +558,11 @@ static int vidioc_s_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *f ...@@ -558,9 +558,11 @@ static int vidioc_s_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *f
/* ok, accept it */ /* ok, accept it */
vv->ov_fb = *fb; vv->ov_fb = *fb;
vv->ov_fmt = fmt; vv->ov_fmt = fmt;
if (0 == vv->ov_fb.fmt.bytesperline)
vv->ov_fb.fmt.bytesperline = if (vv->ov_fb.fmt.bytesperline < vv->ov_fb.fmt.width) {
vv->ov_fb.fmt.width * fmt->depth / 8; vv->ov_fb.fmt.bytesperline = vv->ov_fb.fmt.width * fmt->depth / 8;
DEB_D(("setting bytesperline to %d\n", vv->ov_fb.fmt.bytesperline));
}
mutex_unlock(&dev->lock); mutex_unlock(&dev->lock);
return 0; return 0;
......
...@@ -4470,6 +4470,10 @@ static int stv090x_setup(struct dvb_frontend *fe) ...@@ -4470,6 +4470,10 @@ static int stv090x_setup(struct dvb_frontend *fe)
if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0) if (stv090x_write_reg(state, STV090x_TSTRES0, 0x00) < 0)
goto err; goto err;
/* workaround for stuck DiSEqC output */
if (config->diseqc_envelope_mode)
stv090x_send_diseqc_burst(fe, SEC_MINI_A);
return 0; return 0;
err: err:
dprintk(FE_ERROR, 1, "I/O error"); dprintk(FE_ERROR, 1, "I/O error");
......
...@@ -643,9 +643,6 @@ static void frontend_init(struct budget *budget) ...@@ -643,9 +643,6 @@ static void frontend_init(struct budget *budget)
&budget->i2c_adap, &budget->i2c_adap,
&tt1600_isl6423_config); &tt1600_isl6423_config);
} else {
dvb_frontend_detach(budget->dvb_frontend);
budget->dvb_frontend = NULL;
} }
} }
break; break;
......
...@@ -361,7 +361,7 @@ config VIDEO_SAA717X ...@@ -361,7 +361,7 @@ config VIDEO_SAA717X
config VIDEO_SAA7191 config VIDEO_SAA7191
tristate "Philips SAA7191 video decoder" tristate "Philips SAA7191 video decoder"
depends on VIDEO_V4L1 && I2C depends on VIDEO_V4L2 && I2C
---help--- ---help---
Support for the Philips SAA7191 video decoder. Support for the Philips SAA7191 video decoder.
...@@ -756,7 +756,7 @@ source "drivers/media/video/saa7134/Kconfig" ...@@ -756,7 +756,7 @@ source "drivers/media/video/saa7134/Kconfig"
config VIDEO_MXB config VIDEO_MXB
tristate "Siemens-Nixdorf 'Multimedia eXtension Board'" tristate "Siemens-Nixdorf 'Multimedia eXtension Board'"
depends on PCI && VIDEO_V4L1 && I2C depends on PCI && VIDEO_V4L2 && I2C
select VIDEO_SAA7146_VV select VIDEO_SAA7146_VV
select VIDEO_TUNER select VIDEO_TUNER
select VIDEO_SAA711X if VIDEO_HELPER_CHIPS_AUTO select VIDEO_SAA711X if VIDEO_HELPER_CHIPS_AUTO
......
...@@ -160,8 +160,6 @@ obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o ...@@ -160,8 +160,6 @@ obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o
obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o
obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o
obj-$(CONFIG_ARCH_DAVINCI) += davinci/
obj-$(CONFIG_VIDEO_AU0828) += au0828/ obj-$(CONFIG_VIDEO_AU0828) += au0828/
obj-$(CONFIG_USB_VIDEO_CLASS) += uvc/ obj-$(CONFIG_USB_VIDEO_CLASS) += uvc/
......
...@@ -223,7 +223,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device *dev) ...@@ -223,7 +223,6 @@ int vpfe_register_ccdc_device(struct ccdc_hw_device *dev)
BUG_ON(!dev->hw_ops.get_frame_format); BUG_ON(!dev->hw_ops.get_frame_format);
BUG_ON(!dev->hw_ops.get_pixel_format); BUG_ON(!dev->hw_ops.get_pixel_format);
BUG_ON(!dev->hw_ops.set_pixel_format); BUG_ON(!dev->hw_ops.set_pixel_format);
BUG_ON(!dev->hw_ops.set_params);
BUG_ON(!dev->hw_ops.set_image_window); BUG_ON(!dev->hw_ops.set_image_window);
BUG_ON(!dev->hw_ops.get_image_window); BUG_ON(!dev->hw_ops.get_image_window);
BUG_ON(!dev->hw_ops.get_line_length); BUG_ON(!dev->hw_ops.get_line_length);
...@@ -1689,11 +1688,12 @@ static long vpfe_param_handler(struct file *file, void *priv, ...@@ -1689,11 +1688,12 @@ static long vpfe_param_handler(struct file *file, void *priv,
struct vpfe_device *vpfe_dev = video_drvdata(file); struct vpfe_device *vpfe_dev = video_drvdata(file);
int ret = 0; int ret = 0;
v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "vpfe_param_handler\n"); v4l2_dbg(2, debug, &vpfe_dev->v4l2_dev, "vpfe_param_handler\n");
if (vpfe_dev->started) { if (vpfe_dev->started) {
/* only allowed if streaming is not started */ /* only allowed if streaming is not started */
v4l2_err(&vpfe_dev->v4l2_dev, "device already started\n"); v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev,
"device already started\n");
return -EBUSY; return -EBUSY;
} }
...@@ -1705,17 +1705,24 @@ static long vpfe_param_handler(struct file *file, void *priv, ...@@ -1705,17 +1705,24 @@ static long vpfe_param_handler(struct file *file, void *priv,
case VPFE_CMD_S_CCDC_RAW_PARAMS: case VPFE_CMD_S_CCDC_RAW_PARAMS:
v4l2_warn(&vpfe_dev->v4l2_dev, v4l2_warn(&vpfe_dev->v4l2_dev,
"VPFE_CMD_S_CCDC_RAW_PARAMS: experimental ioctl\n"); "VPFE_CMD_S_CCDC_RAW_PARAMS: experimental ioctl\n");
if (ccdc_dev->hw_ops.set_params) {
ret = ccdc_dev->hw_ops.set_params(param); ret = ccdc_dev->hw_ops.set_params(param);
if (ret) { if (ret) {
v4l2_err(&vpfe_dev->v4l2_dev, v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev,
"Error in setting parameters in CCDC\n"); "Error setting parameters in CCDC\n");
goto unlock_out; goto unlock_out;
} }
if (vpfe_get_ccdc_image_format(vpfe_dev, &vpfe_dev->fmt) < 0) { if (vpfe_get_ccdc_image_format(vpfe_dev,
v4l2_err(&vpfe_dev->v4l2_dev, &vpfe_dev->fmt) < 0) {
v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev,
"Invalid image format at CCDC\n"); "Invalid image format at CCDC\n");
goto unlock_out; goto unlock_out;
} }
} else {
ret = -EINVAL;
v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev,
"VPFE_CMD_S_CCDC_RAW_PARAMS not supported\n");
}
break; break;
default: default:
ret = -EINVAL; ret = -EINVAL;
...@@ -1830,7 +1837,7 @@ static __init int vpfe_probe(struct platform_device *pdev) ...@@ -1830,7 +1837,7 @@ static __init int vpfe_probe(struct platform_device *pdev)
if (NULL == ccdc_cfg) { if (NULL == ccdc_cfg) {
v4l2_err(pdev->dev.driver, v4l2_err(pdev->dev.driver,
"Memory allocation failed for ccdc_cfg\n"); "Memory allocation failed for ccdc_cfg\n");
goto probe_free_dev_mem; goto probe_free_lock;
} }
strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32); strncpy(ccdc_cfg->name, vpfe_cfg->ccdc, 32);
...@@ -1982,8 +1989,9 @@ probe_out_video_release: ...@@ -1982,8 +1989,9 @@ probe_out_video_release:
probe_out_release_irq: probe_out_release_irq:
free_irq(vpfe_dev->ccdc_irq0, vpfe_dev); free_irq(vpfe_dev->ccdc_irq0, vpfe_dev);
probe_free_ccdc_cfg_mem: probe_free_ccdc_cfg_mem:
mutex_unlock(&ccdc_lock);
kfree(ccdc_cfg); kfree(ccdc_cfg);
probe_free_lock:
mutex_unlock(&ccdc_lock);
probe_free_dev_mem: probe_free_dev_mem:
kfree(vpfe_dev); kfree(vpfe_dev);
return ret; return ret;
......
...@@ -1427,7 +1427,7 @@ static int input_kthread(void *data) ...@@ -1427,7 +1427,7 @@ static int input_kthread(void *data)
struct gspca_dev *gspca_dev = (struct gspca_dev *)data; struct gspca_dev *gspca_dev = (struct gspca_dev *)data;
struct sd *sd = (struct sd *) gspca_dev; struct sd *sd = (struct sd *) gspca_dev;
DECLARE_WAIT_QUEUE_HEAD(wait); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait);
set_freezable(); set_freezable();
for (;;) { for (;;) {
if (kthread_should_stop()) if (kthread_should_stop())
......
...@@ -1513,7 +1513,6 @@ static const struct sd_desc sd_desc = { ...@@ -1513,7 +1513,6 @@ static const struct sd_desc sd_desc = {
static const __devinitdata struct usb_device_id device_table[] = { static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x0130, 0x0130), .driver_info = HamaUSBSightcam}, {USB_DEVICE(0x0130, 0x0130), .driver_info = HamaUSBSightcam},
{USB_DEVICE(0x041e, 0x4018), .driver_info = CreativeVista}, {USB_DEVICE(0x041e, 0x4018), .driver_info = CreativeVista},
{USB_DEVICE(0x0461, 0x0815), .driver_info = MicroInnovationIC200},
{USB_DEVICE(0x0733, 0x0110), .driver_info = ViewQuestVQ110}, {USB_DEVICE(0x0733, 0x0110), .driver_info = ViewQuestVQ110},
{USB_DEVICE(0x0af9, 0x0010), .driver_info = HamaUSBSightcam}, {USB_DEVICE(0x0af9, 0x0010), .driver_info = HamaUSBSightcam},
{USB_DEVICE(0x0af9, 0x0011), .driver_info = HamaUSBSightcam2}, {USB_DEVICE(0x0af9, 0x0011), .driver_info = HamaUSBSightcam2},
......
...@@ -1053,6 +1053,7 @@ static const __devinitdata struct usb_device_id device_table[] = { ...@@ -1053,6 +1053,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x041e, 0x401a), .driver_info = Rev072A}, {USB_DEVICE(0x041e, 0x401a), .driver_info = Rev072A},
{USB_DEVICE(0x041e, 0x403b), .driver_info = Rev012A}, {USB_DEVICE(0x041e, 0x403b), .driver_info = Rev012A},
{USB_DEVICE(0x0458, 0x7004), .driver_info = Rev072A}, {USB_DEVICE(0x0458, 0x7004), .driver_info = Rev072A},
{USB_DEVICE(0x0461, 0x0815), .driver_info = Rev072A},
{USB_DEVICE(0x046d, 0x0928), .driver_info = Rev012A}, {USB_DEVICE(0x046d, 0x0928), .driver_info = Rev012A},
{USB_DEVICE(0x046d, 0x0929), .driver_info = Rev012A}, {USB_DEVICE(0x046d, 0x0929), .driver_info = Rev012A},
{USB_DEVICE(0x046d, 0x092a), .driver_info = Rev012A}, {USB_DEVICE(0x046d, 0x092a), .driver_info = Rev012A},
......
...@@ -524,8 +524,6 @@ static const __devinitdata struct usb_device_id device_table[] = { ...@@ -524,8 +524,6 @@ static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x046D, 0x08F5), .driver_info = BRIDGE_ST6422 }, {USB_DEVICE(0x046D, 0x08F5), .driver_info = BRIDGE_ST6422 },
/* QuickCam Messenger (new) */ /* QuickCam Messenger (new) */
{USB_DEVICE(0x046D, 0x08F6), .driver_info = BRIDGE_ST6422 }, {USB_DEVICE(0x046D, 0x08F6), .driver_info = BRIDGE_ST6422 },
/* QuickCam Messenger (new) */
{USB_DEVICE(0x046D, 0x08DA), .driver_info = BRIDGE_ST6422 },
{} {}
}; };
MODULE_DEVICE_TABLE(usb, device_table); MODULE_DEVICE_TABLE(usb, device_table);
......
...@@ -356,9 +356,6 @@ static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_d ...@@ -356,9 +356,6 @@ static int hexium_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_d
DEB_EE((".\n")); DEB_EE((".\n"));
ret = saa7146_vv_devinit(dev);
if (ret)
return ret;
hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL); hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL);
if (NULL == hexium) { if (NULL == hexium) {
printk("hexium_gemini: not enough kernel memory in hexium_attach().\n"); printk("hexium_gemini: not enough kernel memory in hexium_attach().\n");
......
...@@ -216,10 +216,6 @@ static int hexium_probe(struct saa7146_dev *dev) ...@@ -216,10 +216,6 @@ static int hexium_probe(struct saa7146_dev *dev)
return -EFAULT; return -EFAULT;
} }
err = saa7146_vv_devinit(dev);
if (err)
return err;
hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL); hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL);
if (NULL == hexium) { if (NULL == hexium) {
printk("hexium_orion: hexium_probe: not enough kernel memory.\n"); printk("hexium_orion: hexium_probe: not enough kernel memory.\n");
......
...@@ -49,8 +49,6 @@ ...@@ -49,8 +49,6 @@
/* /*
* CSI registers * CSI registers
*/ */
#define DMA_CCR(x) (0x8c + ((x) << 6)) /* Control Registers */
#define DMA_DIMR 0x08 /* Interrupt mask Register */
#define CSICR1 0x00 /* CSI Control Register 1 */ #define CSICR1 0x00 /* CSI Control Register 1 */
#define CSISR 0x08 /* CSI Status Register */ #define CSISR 0x08 /* CSI Status Register */
#define CSIRXR 0x10 /* CSI RxFIFO Register */ #define CSIRXR 0x10 /* CSI RxFIFO Register */
...@@ -784,7 +782,7 @@ static int __init mx1_camera_probe(struct platform_device *pdev) ...@@ -784,7 +782,7 @@ static int __init mx1_camera_probe(struct platform_device *pdev)
pcdev); pcdev);
imx_dma_config_channel(pcdev->dma_chan, IMX_DMA_TYPE_FIFO, imx_dma_config_channel(pcdev->dma_chan, IMX_DMA_TYPE_FIFO,
IMX_DMA_MEMSIZE_32, DMA_REQ_CSI_R, 0); IMX_DMA_MEMSIZE_32, MX1_DMA_REQ_CSI_R, 0);
/* burst length : 16 words = 64 bytes */ /* burst length : 16 words = 64 bytes */
imx_dma_config_burstlen(pcdev->dma_chan, 0); imx_dma_config_burstlen(pcdev->dma_chan, 0);
...@@ -798,8 +796,8 @@ static int __init mx1_camera_probe(struct platform_device *pdev) ...@@ -798,8 +796,8 @@ static int __init mx1_camera_probe(struct platform_device *pdev)
set_fiq_handler(&mx1_camera_sof_fiq_start, &mx1_camera_sof_fiq_end - set_fiq_handler(&mx1_camera_sof_fiq_start, &mx1_camera_sof_fiq_end -
&mx1_camera_sof_fiq_start); &mx1_camera_sof_fiq_start);
regs.ARM_r8 = DMA_BASE + DMA_DIMR; regs.ARM_r8 = (long)MX1_DMA_DIMR;
regs.ARM_r9 = DMA_BASE + DMA_CCR(pcdev->dma_chan); regs.ARM_r9 = (long)MX1_DMA_CCR(pcdev->dma_chan);
regs.ARM_r10 = (long)pcdev->base + CSICR1; regs.ARM_r10 = (long)pcdev->base + CSICR1;
regs.ARM_fp = (long)pcdev->base + CSISR; regs.ARM_fp = (long)pcdev->base + CSISR;
regs.ARM_sp = 1 << pcdev->dma_chan; regs.ARM_sp = 1 << pcdev->dma_chan;
......
...@@ -169,11 +169,7 @@ static struct saa7146_extension extension; ...@@ -169,11 +169,7 @@ static struct saa7146_extension extension;
static int mxb_probe(struct saa7146_dev *dev) static int mxb_probe(struct saa7146_dev *dev)
{ {
struct mxb *mxb = NULL; struct mxb *mxb = NULL;
int err;
err = saa7146_vv_devinit(dev);
if (err)
return err;
mxb = kzalloc(sizeof(struct mxb), GFP_KERNEL); mxb = kzalloc(sizeof(struct mxb), GFP_KERNEL);
if (mxb == NULL) { if (mxb == NULL) {
DEB_D(("not enough kernel memory.\n")); DEB_D(("not enough kernel memory.\n"));
...@@ -699,14 +695,17 @@ static struct saa7146_ext_vv vv_data; ...@@ -699,14 +695,17 @@ static struct saa7146_ext_vv vv_data;
/* this function only gets called when the probing was successful */ /* this function only gets called when the probing was successful */
static int mxb_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info) static int mxb_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data *info)
{ {
struct mxb *mxb = (struct mxb *)dev->ext_priv; struct mxb *mxb;
DEB_EE(("dev:%p\n", dev)); DEB_EE(("dev:%p\n", dev));
/* checking for i2c-devices can be omitted here, because we
already did this in "mxb_vl42_probe" */
saa7146_vv_init(dev, &vv_data); saa7146_vv_init(dev, &vv_data);
if (mxb_probe(dev)) {
saa7146_vv_release(dev);
return -1;
}
mxb = (struct mxb *)dev->ext_priv;
vv_data.ops.vidioc_queryctrl = vidioc_queryctrl; vv_data.ops.vidioc_queryctrl = vidioc_queryctrl;
vv_data.ops.vidioc_g_ctrl = vidioc_g_ctrl; vv_data.ops.vidioc_g_ctrl = vidioc_g_ctrl;
vv_data.ops.vidioc_s_ctrl = vidioc_s_ctrl; vv_data.ops.vidioc_s_ctrl = vidioc_s_ctrl;
...@@ -726,6 +725,7 @@ static int mxb_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data ...@@ -726,6 +725,7 @@ static int mxb_attach(struct saa7146_dev *dev, struct saa7146_pci_extension_data
vv_data.ops.vidioc_default = vidioc_default; vv_data.ops.vidioc_default = vidioc_default;
if (saa7146_register_device(&mxb->video_dev, dev, "mxb", VFL_TYPE_GRABBER)) { if (saa7146_register_device(&mxb->video_dev, dev, "mxb", VFL_TYPE_GRABBER)) {
ERR(("cannot register capture v4l2 device. skipping.\n")); ERR(("cannot register capture v4l2 device. skipping.\n"));
saa7146_vv_release(dev);
return -1; return -1;
} }
...@@ -846,7 +846,6 @@ static struct saa7146_extension extension = { ...@@ -846,7 +846,6 @@ static struct saa7146_extension extension = {
.pci_tbl = &pci_tbl[0], .pci_tbl = &pci_tbl[0],
.module = THIS_MODULE, .module = THIS_MODULE,
.probe = mxb_probe,
.attach = mxb_attach, .attach = mxb_attach,
.detach = mxb_detach, .detach = mxb_detach,
......
...@@ -1405,7 +1405,7 @@ static int omap24xxcam_mmap_buffers(struct file *file, ...@@ -1405,7 +1405,7 @@ static int omap24xxcam_mmap_buffers(struct file *file,
} }
size = 0; size = 0;
for (i = first; i <= last; i++) { for (i = first; i <= last && i < VIDEO_MAX_FRAME; i++) {
struct videobuf_dmabuf *dma = videobuf_to_dma(vbq->bufs[i]); struct videobuf_dmabuf *dma = videobuf_to_dma(vbq->bufs[i]);
for (j = 0; j < dma->sglen; j++) { for (j = 0; j < dma->sglen; j++) {
......
...@@ -609,12 +609,9 @@ static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev, ...@@ -609,12 +609,9 @@ static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
*/ */
static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev) static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev)
{ {
unsigned long cicr0, cifr; unsigned long cicr0;
dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s\n", __func__); dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s\n", __func__);
/* Reset the FIFOs */
cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
__raw_writel(cifr, pcdev->base + CIFR);
/* Enable End-Of-Frame Interrupt */ /* Enable End-Of-Frame Interrupt */
cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB; cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;
cicr0 &= ~CICR0_EOFM; cicr0 &= ~CICR0_EOFM;
...@@ -935,7 +932,7 @@ static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev) ...@@ -935,7 +932,7 @@ static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev)
static irqreturn_t pxa_camera_irq(int irq, void *data) static irqreturn_t pxa_camera_irq(int irq, void *data)
{ {
struct pxa_camera_dev *pcdev = data; struct pxa_camera_dev *pcdev = data;
unsigned long status, cicr0; unsigned long status, cifr, cicr0;
struct pxa_buffer *buf; struct pxa_buffer *buf;
struct videobuf_buffer *vb; struct videobuf_buffer *vb;
...@@ -949,6 +946,10 @@ static irqreturn_t pxa_camera_irq(int irq, void *data) ...@@ -949,6 +946,10 @@ static irqreturn_t pxa_camera_irq(int irq, void *data)
__raw_writel(status, pcdev->base + CISR); __raw_writel(status, pcdev->base + CISR);
if (status & CISR_EOF) { if (status & CISR_EOF) {
/* Reset the FIFOs */
cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F;
__raw_writel(cifr, pcdev->base + CIFR);
pcdev->active = list_first_entry(&pcdev->capture, pcdev->active = list_first_entry(&pcdev->capture,
struct pxa_buffer, vb.queue); struct pxa_buffer, vb.queue);
vb = &pcdev->active->vb; vb = &pcdev->active->vb;
......
...@@ -1633,7 +1633,7 @@ static int sh_mobile_ceu_try_fmt(struct soc_camera_device *icd, ...@@ -1633,7 +1633,7 @@ static int sh_mobile_ceu_try_fmt(struct soc_camera_device *icd,
height = pix->height; height = pix->height;
pix->bytesperline = soc_mbus_bytes_per_line(width, xlate->host_fmt); pix->bytesperline = soc_mbus_bytes_per_line(width, xlate->host_fmt);
if (pix->bytesperline < 0) if ((int)pix->bytesperline < 0)
return pix->bytesperline; return pix->bytesperline;
pix->sizeimage = height * pix->bytesperline; pix->sizeimage = height * pix->bytesperline;
......
...@@ -188,7 +188,6 @@ void saa7146_buffer_timeout(unsigned long data); ...@@ -188,7 +188,6 @@ void saa7146_buffer_timeout(unsigned long data);
void saa7146_dma_free(struct saa7146_dev* dev,struct videobuf_queue *q, void saa7146_dma_free(struct saa7146_dev* dev,struct videobuf_queue *q,
struct saa7146_buf *buf); struct saa7146_buf *buf);
int saa7146_vv_devinit(struct saa7146_dev *dev);
int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv); int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv);
int saa7146_vv_release(struct saa7146_dev* dev); int saa7146_vv_release(struct saa7146_dev* dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment