Commit f7e87a44 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'media/v3.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media fixes from Mauro Carvalho Chehab:
 "A series of driver fixes:
   - a few compilation fixes with randconfigs
   - one potential compilation breakage on userspace due to the usage of
     a gcc extension
   - several warnings fixed
   - some other random driver fixes"

* tag 'media/v3.18-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (22 commits)
  [media] s5p-jpeg: Avoid -Wuninitialized warning in s5p_jpeg_parse_hdr
  [media] s5p-fimc: Only build suspend/resume for PM
  [media] s5p-jpeg: Only build suspend/resume for PM
  [media] Remove references to non-existent PLAT_S5P symbol
  [media] videobuf-dma-contig: set vm_pgoff to be zero to pass the sanity check in vm_iomap_memory()
  [media] tw68: remove bogus I2C_ALGOBIT dependency
  [media] usbvision-video: two use after frees
  [media] tw68: remove deprecated IRQF_DISABLED
  [media] xc5000: use after free in release()
  [media] em28xx-input: NULL dereference on error
  [media] wl128x: fix fmdbg compiler warning
  Revert "[media] v4l2-dv-timings: fix a sparse warning"
  [media] hackrf: harmless off by one in debug code
  [media] cx23885: initialize config structs for T9580
  [media] v4l: uvcvideo: Fix buffer completion size check
  [media] vivid: fix buffer overrun
  [media] saa7146: Create a device name before it's used
  [media] em28xx: fix uninitialized variable warning
  [media] vivid: fix Kconfig FB dependency
  [media] anysee: make sure loading modules is const
  ...
parents ebbe914b f3d83a10
...@@ -2566,6 +2566,10 @@ fields changed from _s32 to _u32. ...@@ -2566,6 +2566,10 @@ fields changed from _s32 to _u32.
<para>Added compound control types and &VIDIOC-QUERY-EXT-CTRL;. <para>Added compound control types and &VIDIOC-QUERY-EXT-CTRL;.
</para> </para>
</listitem> </listitem>
</orderedlist>
</section>
<section>
<title>V4L2 in Linux 3.18</title> <title>V4L2 in Linux 3.18</title>
<orderedlist> <orderedlist>
<listitem> <listitem>
......
...@@ -364,6 +364,9 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent ...@@ -364,6 +364,9 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
goto out; goto out;
} }
/* create a nice device name */
sprintf(dev->name, "saa7146 (%d)", saa7146_num);
DEB_EE("pci:%p\n", pci); DEB_EE("pci:%p\n", pci);
err = pci_enable_device(pci); err = pci_enable_device(pci);
...@@ -438,9 +441,6 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent ...@@ -438,9 +441,6 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent
/* the rest + print status message */ /* the rest + print status message */
/* create a nice device name */
sprintf(dev->name, "saa7146 (%d)", saa7146_num);
pr_info("found saa7146 @ mem %p (revision %d, irq %d) (0x%04x,0x%04x)\n", pr_info("found saa7146 @ mem %p (revision %d, irq %d) (0x%04x,0x%04x)\n",
dev->mem, dev->revision, pci->irq, dev->mem, dev->revision, pci->irq,
pci->subsystem_vendor, pci->subsystem_device); pci->subsystem_vendor, pci->subsystem_device);
......
...@@ -1600,6 +1600,7 @@ static int dvb_register(struct cx23885_tsport *port) ...@@ -1600,6 +1600,7 @@ static int dvb_register(struct cx23885_tsport *port)
break; break;
/* attach tuner */ /* attach tuner */
memset(&m88ts2022_config, 0, sizeof(m88ts2022_config));
m88ts2022_config.fe = fe0->dvb.frontend; m88ts2022_config.fe = fe0->dvb.frontend;
m88ts2022_config.clock = 27000000; m88ts2022_config.clock = 27000000;
memset(&info, 0, sizeof(struct i2c_board_info)); memset(&info, 0, sizeof(struct i2c_board_info));
...@@ -1635,6 +1636,7 @@ static int dvb_register(struct cx23885_tsport *port) ...@@ -1635,6 +1636,7 @@ static int dvb_register(struct cx23885_tsport *port)
/* port c - terrestrial/cable */ /* port c - terrestrial/cable */
case 2: case 2:
/* attach frontend */ /* attach frontend */
memset(&si2168_config, 0, sizeof(si2168_config));
si2168_config.i2c_adapter = &adapter; si2168_config.i2c_adapter = &adapter;
si2168_config.fe = &fe0->dvb.frontend; si2168_config.fe = &fe0->dvb.frontend;
si2168_config.ts_mode = SI2168_TS_SERIAL; si2168_config.ts_mode = SI2168_TS_SERIAL;
...@@ -1654,6 +1656,7 @@ static int dvb_register(struct cx23885_tsport *port) ...@@ -1654,6 +1656,7 @@ static int dvb_register(struct cx23885_tsport *port)
port->i2c_client_demod = client_demod; port->i2c_client_demod = client_demod;
/* attach tuner */ /* attach tuner */
memset(&si2157_config, 0, sizeof(si2157_config));
si2157_config.fe = fe0->dvb.frontend; si2157_config.fe = fe0->dvb.frontend;
memset(&info, 0, sizeof(struct i2c_board_info)); memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "si2157", I2C_NAME_SIZE); strlcpy(info.type, "si2157", I2C_NAME_SIZE);
......
config VIDEO_TW68 config VIDEO_TW68
tristate "Techwell tw68x Video For Linux" tristate "Techwell tw68x Video For Linux"
depends on VIDEO_DEV && PCI && VIDEO_V4L2 depends on VIDEO_DEV && PCI && VIDEO_V4L2
select I2C_ALGOBIT
select VIDEOBUF2_DMA_SG select VIDEOBUF2_DMA_SG
---help--- ---help---
Support for Techwell tw68xx based frame grabber boards. Support for Techwell tw68xx based frame grabber boards.
......
...@@ -306,7 +306,7 @@ static int tw68_initdev(struct pci_dev *pci_dev, ...@@ -306,7 +306,7 @@ static int tw68_initdev(struct pci_dev *pci_dev,
/* get irq */ /* get irq */
err = devm_request_irq(&pci_dev->dev, pci_dev->irq, tw68_irq, err = devm_request_irq(&pci_dev->dev, pci_dev->irq, tw68_irq,
IRQF_SHARED | IRQF_DISABLED, dev->name, dev); IRQF_SHARED, dev->name, dev);
if (err < 0) { if (err < 0) {
pr_err("%s: can't get IRQ %d\n", pr_err("%s: can't get IRQ %d\n",
dev->name, pci_dev->irq); dev->name, pci_dev->irq);
......
...@@ -166,7 +166,7 @@ config VIDEO_MEM2MEM_DEINTERLACE ...@@ -166,7 +166,7 @@ config VIDEO_MEM2MEM_DEINTERLACE
config VIDEO_SAMSUNG_S5P_G2D config VIDEO_SAMSUNG_S5P_G2D
tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver" tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver"
depends on VIDEO_DEV && VIDEO_V4L2 depends on VIDEO_DEV && VIDEO_V4L2
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
depends on HAS_DMA depends on HAS_DMA
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
select V4L2_MEM2MEM_DEV select V4L2_MEM2MEM_DEV
...@@ -178,7 +178,7 @@ config VIDEO_SAMSUNG_S5P_G2D ...@@ -178,7 +178,7 @@ config VIDEO_SAMSUNG_S5P_G2D
config VIDEO_SAMSUNG_S5P_JPEG config VIDEO_SAMSUNG_S5P_JPEG
tristate "Samsung S5P/Exynos3250/Exynos4 JPEG codec driver" tristate "Samsung S5P/Exynos3250/Exynos4 JPEG codec driver"
depends on VIDEO_DEV && VIDEO_V4L2 depends on VIDEO_DEV && VIDEO_V4L2
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
depends on HAS_DMA depends on HAS_DMA
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
select V4L2_MEM2MEM_DEV select V4L2_MEM2MEM_DEV
...@@ -189,7 +189,7 @@ config VIDEO_SAMSUNG_S5P_JPEG ...@@ -189,7 +189,7 @@ config VIDEO_SAMSUNG_S5P_JPEG
config VIDEO_SAMSUNG_S5P_MFC config VIDEO_SAMSUNG_S5P_MFC
tristate "Samsung S5P MFC Video Codec" tristate "Samsung S5P MFC Video Codec"
depends on VIDEO_DEV && VIDEO_V4L2 depends on VIDEO_DEV && VIDEO_V4L2
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
depends on HAS_DMA depends on HAS_DMA
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
default n default n
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
config VIDEO_SAMSUNG_EXYNOS4_IS config VIDEO_SAMSUNG_EXYNOS4_IS
bool "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver" bool "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver"
depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
depends on (PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST) depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
depends on OF && COMMON_CLK depends on OF && COMMON_CLK
help help
Say Y here to enable camera host interface devices for Say Y here to enable camera host interface devices for
......
...@@ -832,6 +832,7 @@ static int fimc_clk_get(struct fimc_dev *fimc) ...@@ -832,6 +832,7 @@ static int fimc_clk_get(struct fimc_dev *fimc)
return -ENXIO; return -ENXIO;
} }
#if defined(CONFIG_PM_RUNTIME) || defined(CONFIG_PM_SLEEP)
static int fimc_m2m_suspend(struct fimc_dev *fimc) static int fimc_m2m_suspend(struct fimc_dev *fimc)
{ {
unsigned long flags; unsigned long flags;
...@@ -870,6 +871,7 @@ static int fimc_m2m_resume(struct fimc_dev *fimc) ...@@ -870,6 +871,7 @@ static int fimc_m2m_resume(struct fimc_dev *fimc)
return 0; return 0;
} }
#endif /* CONFIG_PM_RUNTIME || CONFIG_PM_SLEEP */
static const struct of_device_id fimc_of_match[]; static const struct of_device_id fimc_of_match[];
......
...@@ -893,7 +893,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result, ...@@ -893,7 +893,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,
unsigned long buffer, unsigned long size, unsigned long buffer, unsigned long size,
struct s5p_jpeg_ctx *ctx) struct s5p_jpeg_ctx *ctx)
{ {
int c, components, notfound; int c, components = 0, notfound;
unsigned int height, width, word, subsampling = 0; unsigned int height, width, word, subsampling = 0;
long length; long length;
struct s5p_jpeg_buffer jpeg_buffer; struct s5p_jpeg_buffer jpeg_buffer;
...@@ -2632,6 +2632,7 @@ static int s5p_jpeg_remove(struct platform_device *pdev) ...@@ -2632,6 +2632,7 @@ static int s5p_jpeg_remove(struct platform_device *pdev)
return 0; return 0;
} }
#if defined(CONFIG_PM_RUNTIME) || defined(CONFIG_PM_SLEEP)
static int s5p_jpeg_runtime_suspend(struct device *dev) static int s5p_jpeg_runtime_suspend(struct device *dev)
{ {
struct s5p_jpeg *jpeg = dev_get_drvdata(dev); struct s5p_jpeg *jpeg = dev_get_drvdata(dev);
...@@ -2681,7 +2682,9 @@ static int s5p_jpeg_runtime_resume(struct device *dev) ...@@ -2681,7 +2682,9 @@ static int s5p_jpeg_runtime_resume(struct device *dev)
return 0; return 0;
} }
#endif /* CONFIG_PM_RUNTIME || CONFIG_PM_SLEEP */
#ifdef CONFIG_PM_SLEEP
static int s5p_jpeg_suspend(struct device *dev) static int s5p_jpeg_suspend(struct device *dev)
{ {
if (pm_runtime_suspended(dev)) if (pm_runtime_suspended(dev))
...@@ -2697,6 +2700,7 @@ static int s5p_jpeg_resume(struct device *dev) ...@@ -2697,6 +2700,7 @@ static int s5p_jpeg_resume(struct device *dev)
return s5p_jpeg_runtime_resume(dev); return s5p_jpeg_runtime_resume(dev);
} }
#endif
static const struct dev_pm_ops s5p_jpeg_pm_ops = { static const struct dev_pm_ops s5p_jpeg_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(s5p_jpeg_suspend, s5p_jpeg_resume) SET_SYSTEM_SLEEP_PM_OPS(s5p_jpeg_suspend, s5p_jpeg_resume)
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
config VIDEO_SAMSUNG_S5P_TV config VIDEO_SAMSUNG_S5P_TV
bool "Samsung TV driver for S5P platform" bool "Samsung TV driver for S5P platform"
depends on PM_RUNTIME depends on PM_RUNTIME
depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
default n default n
---help--- ---help---
Say Y here to enable selecting the TV output devices for Say Y here to enable selecting the TV output devices for
......
config VIDEO_VIVID config VIDEO_VIVID
tristate "Virtual Video Test Driver" tristate "Virtual Video Test Driver"
depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64 depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64 && FB
select FONT_SUPPORT select FONT_SUPPORT
select FONT_8x16 select FONT_8x16
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
select VIDEOBUF2_VMALLOC select VIDEOBUF2_VMALLOC
default n default n
---help--- ---help---
......
...@@ -136,7 +136,7 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w) ...@@ -136,7 +136,7 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w)
tpg->black_line[plane] = vzalloc(max_w * pixelsz); tpg->black_line[plane] = vzalloc(max_w * pixelsz);
if (!tpg->black_line[plane]) if (!tpg->black_line[plane])
return -ENOMEM; return -ENOMEM;
tpg->random_line[plane] = vzalloc(max_w * pixelsz); tpg->random_line[plane] = vzalloc(max_w * 2 * pixelsz);
if (!tpg->random_line[plane]) if (!tpg->random_line[plane])
return -ENOMEM; return -ENOMEM;
} }
......
...@@ -1256,7 +1256,7 @@ static int fm_download_firmware(struct fmdev *fmdev, const u8 *fw_name) ...@@ -1256,7 +1256,7 @@ static int fm_download_firmware(struct fmdev *fmdev, const u8 *fw_name)
fmerr("Unable to read firmware(%s) content\n", fw_name); fmerr("Unable to read firmware(%s) content\n", fw_name);
return ret; return ret;
} }
fmdbg("Firmware(%s) length : %d bytes\n", fw_name, fw_entry->size); fmdbg("Firmware(%s) length : %zu bytes\n", fw_name, fw_entry->size);
fw_data = (void *)fw_entry->data; fw_data = (void *)fw_entry->data;
fw_len = fw_entry->size; fw_len = fw_entry->size;
......
...@@ -1333,9 +1333,9 @@ static int xc5000_release(struct dvb_frontend *fe) ...@@ -1333,9 +1333,9 @@ static int xc5000_release(struct dvb_frontend *fe)
if (priv) { if (priv) {
cancel_delayed_work(&priv->timer_sleep); cancel_delayed_work(&priv->timer_sleep);
hybrid_tuner_release_state(priv);
if (priv->firmware) if (priv->firmware)
release_firmware(priv->firmware); release_firmware(priv->firmware);
hybrid_tuner_release_state(priv);
} }
mutex_unlock(&xc5000_list_mutex); mutex_unlock(&xc5000_list_mutex);
......
...@@ -193,8 +193,8 @@ static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val, ...@@ -193,8 +193,8 @@ static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val,
return af9035_wr_regs(d, reg, &val, 1); return af9035_wr_regs(d, reg, &val, 1);
} }
static int af9035_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr, static int af9035_add_i2c_dev(struct dvb_usb_device *d, const char *type,
void *platform_data, struct i2c_adapter *adapter) u8 addr, void *platform_data, struct i2c_adapter *adapter)
{ {
int ret, num; int ret, num;
struct state *state = d_to_priv(d); struct state *state = d_to_priv(d);
...@@ -221,7 +221,7 @@ static int af9035_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr, ...@@ -221,7 +221,7 @@ static int af9035_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
goto err; goto err;
} }
request_module(board_info.type); request_module("%s", board_info.type);
/* register I2C device */ /* register I2C device */
client = i2c_new_device(adapter, &board_info); client = i2c_new_device(adapter, &board_info);
......
...@@ -630,8 +630,8 @@ static int anysee_frontend_ctrl(struct dvb_frontend *fe, int onoff) ...@@ -630,8 +630,8 @@ static int anysee_frontend_ctrl(struct dvb_frontend *fe, int onoff)
return ret; return ret;
} }
static int anysee_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr, static int anysee_add_i2c_dev(struct dvb_usb_device *d, const char *type,
void *platform_data) u8 addr, void *platform_data)
{ {
int ret, num; int ret, num;
struct anysee_state *state = d_to_priv(d); struct anysee_state *state = d_to_priv(d);
...@@ -659,7 +659,7 @@ static int anysee_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr, ...@@ -659,7 +659,7 @@ static int anysee_add_i2c_dev(struct dvb_usb_device *d, char *type, u8 addr,
goto err; goto err;
} }
request_module(board_info.type); request_module("%s", board_info.type);
/* register I2C device */ /* register I2C device */
client = i2c_new_device(adapter, &board_info); client = i2c_new_device(adapter, &board_info);
......
...@@ -504,7 +504,7 @@ EXPORT_SYMBOL_GPL(em28xx_audio_analog_set); ...@@ -504,7 +504,7 @@ EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
int em28xx_audio_setup(struct em28xx *dev) int em28xx_audio_setup(struct em28xx *dev)
{ {
int vid1, vid2, feat, cfg; int vid1, vid2, feat, cfg;
u32 vid; u32 vid = 0;
u8 i2s_samplerates; u8 i2s_samplerates;
if (dev->chip_id == CHIP_ID_EM2870 || if (dev->chip_id == CHIP_ID_EM2870 ||
......
...@@ -712,8 +712,10 @@ static int em28xx_ir_init(struct em28xx *dev) ...@@ -712,8 +712,10 @@ static int em28xx_ir_init(struct em28xx *dev)
em28xx_info("Registering input extension\n"); em28xx_info("Registering input extension\n");
ir = kzalloc(sizeof(*ir), GFP_KERNEL); ir = kzalloc(sizeof(*ir), GFP_KERNEL);
if (!ir)
return -ENOMEM;
rc = rc_allocate_device(); rc = rc_allocate_device();
if (!ir || !rc) if (!rc)
goto error; goto error;
/* record handles to ourself */ /* record handles to ourself */
......
...@@ -932,7 +932,7 @@ static int hackrf_set_bandwidth(struct hackrf_dev *dev) ...@@ -932,7 +932,7 @@ static int hackrf_set_bandwidth(struct hackrf_dev *dev)
dev->bandwidth->val = bandwidth; dev->bandwidth->val = bandwidth;
dev->bandwidth->cur.val = bandwidth; dev->bandwidth->cur.val = bandwidth;
dev_dbg(dev->dev, "bandwidth selected=%d\n", bandwidth_lut[i].freq); dev_dbg(dev->dev, "bandwidth selected=%d\n", bandwidth);
u16tmp = 0; u16tmp = 0;
u16tmp |= ((bandwidth >> 0) & 0xff) << 0; u16tmp |= ((bandwidth >> 0) & 0xff) << 0;
......
...@@ -446,6 +446,7 @@ static int usbvision_v4l2_close(struct file *file) ...@@ -446,6 +446,7 @@ static int usbvision_v4l2_close(struct file *file)
if (usbvision->remove_pending) { if (usbvision->remove_pending) {
printk(KERN_INFO "%s: Final disconnect\n", __func__); printk(KERN_INFO "%s: Final disconnect\n", __func__);
usbvision_release(usbvision); usbvision_release(usbvision);
return 0;
} }
mutex_unlock(&usbvision->v4l2_lock); mutex_unlock(&usbvision->v4l2_lock);
...@@ -1221,6 +1222,7 @@ static int usbvision_radio_close(struct file *file) ...@@ -1221,6 +1222,7 @@ static int usbvision_radio_close(struct file *file)
if (usbvision->remove_pending) { if (usbvision->remove_pending) {
printk(KERN_INFO "%s: Final disconnect\n", __func__); printk(KERN_INFO "%s: Final disconnect\n", __func__);
usbvision_release(usbvision); usbvision_release(usbvision);
return err_code;
} }
mutex_unlock(&usbvision->v4l2_lock); mutex_unlock(&usbvision->v4l2_lock);
......
...@@ -318,7 +318,6 @@ static int uvc_v4l2_set_format(struct uvc_streaming *stream, ...@@ -318,7 +318,6 @@ static int uvc_v4l2_set_format(struct uvc_streaming *stream,
stream->ctrl = probe; stream->ctrl = probe;
stream->cur_format = format; stream->cur_format = format;
stream->cur_frame = frame; stream->cur_frame = frame;
stream->frame_size = fmt->fmt.pix.sizeimage;
done: done:
mutex_unlock(&stream->mutex); mutex_unlock(&stream->mutex);
......
...@@ -1143,7 +1143,7 @@ static int uvc_video_encode_data(struct uvc_streaming *stream, ...@@ -1143,7 +1143,7 @@ static int uvc_video_encode_data(struct uvc_streaming *stream,
static void uvc_video_validate_buffer(const struct uvc_streaming *stream, static void uvc_video_validate_buffer(const struct uvc_streaming *stream,
struct uvc_buffer *buf) struct uvc_buffer *buf)
{ {
if (stream->frame_size != buf->bytesused && if (stream->ctrl.dwMaxVideoFrameSize != buf->bytesused &&
!(stream->cur_format->flags & UVC_FMT_FLAG_COMPRESSED)) !(stream->cur_format->flags & UVC_FMT_FLAG_COMPRESSED))
buf->error = 1; buf->error = 1;
} }
......
...@@ -457,7 +457,6 @@ struct uvc_streaming { ...@@ -457,7 +457,6 @@ struct uvc_streaming {
struct uvc_format *def_format; struct uvc_format *def_format;
struct uvc_format *cur_format; struct uvc_format *cur_format;
struct uvc_frame *cur_frame; struct uvc_frame *cur_frame;
size_t frame_size;
/* Protect access to ctrl, cur_format, cur_frame and hardware video /* Protect access to ctrl, cur_format, cur_frame and hardware video
* probe control. * probe control.
......
...@@ -305,6 +305,15 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q, ...@@ -305,6 +305,15 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q,
/* Try to remap memory */ /* Try to remap memory */
size = vma->vm_end - vma->vm_start; size = vma->vm_end - vma->vm_start;
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
/* the "vm_pgoff" is just used in v4l2 to find the
* corresponding buffer data structure which is allocated
* earlier and it does not mean the offset from the physical
* buffer start address as usual. So set it to 0 to pass
* the sanity check in vm_iomap_memory().
*/
vma->vm_pgoff = 0;
retval = vm_iomap_memory(vma, mem->dma_handle, size); retval = vm_iomap_memory(vma, mem->dma_handle, size);
if (retval) { if (retval) {
dev_err(q->dev, "mmap: remap failed with error %d. ", dev_err(q->dev, "mmap: remap failed with error %d. ",
......
...@@ -21,8 +21,17 @@ ...@@ -21,8 +21,17 @@
#ifndef _V4L2_DV_TIMINGS_H #ifndef _V4L2_DV_TIMINGS_H
#define _V4L2_DV_TIMINGS_H #define _V4L2_DV_TIMINGS_H
#if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6))
/* Sadly gcc versions older than 4.6 have a bug in how they initialize
anonymous unions where they require additional curly brackets.
This violates the C1x standard. This workaround adds the curly brackets
if needed. */
#define V4L2_INIT_BT_TIMINGS(_width, args...) \ #define V4L2_INIT_BT_TIMINGS(_width, args...) \
{ .bt = { _width , ## args } } { .bt = { _width , ## args } }
#else
#define V4L2_INIT_BT_TIMINGS(_width, args...) \
.bt = { _width , ## args }
#endif
/* CEA-861-E timings (i.e. standard HDTV timings) */ /* CEA-861-E timings (i.e. standard HDTV timings) */
......
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