Skip to content

Commit

Permalink
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/ke…
Browse files Browse the repository at this point in the history
…rnel/git/mchehab/linux-media

* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  [media] hdpvr: update picture controls to support firmware versions > 0.15
  [media] wl128x: fix build errors when GPIOLIB is not enabled
  [media] hdpvr: fix race conditon during start of streaming
  [media] omap3isp: Fix crash caused by subdevs now having a pointer to devnodes
  [media] imon: don't wedge hardware after early callbacks
  • Loading branch information
Linus Torvalds committed Feb 24, 2012
2 parents 971316f + fda2787 commit e98092b
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 23 deletions.
4 changes: 2 additions & 2 deletions drivers/media/radio/wl128x/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
menu "Texas Instruments WL128x FM driver (ST based)"
config RADIO_WL128X
tristate "Texas Instruments WL128x FM Radio"
depends on VIDEO_V4L2 && RFKILL
select TI_ST if NET && GPIOLIB
depends on VIDEO_V4L2 && RFKILL && GPIOLIB
select TI_ST if NET
help
Choose Y here if you have this FM radio chip.

Expand Down
26 changes: 22 additions & 4 deletions drivers/media/rc/imon.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
#define MOD_AUTHOR "Jarod Wilson <jarod@wilsonet.com>"
#define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display"
#define MOD_NAME "imon"
#define MOD_VERSION "0.9.3"
#define MOD_VERSION "0.9.4"

#define DISPLAY_MINOR_BASE 144
#define DEVICE_NAME "lcd%d"
Expand Down Expand Up @@ -1658,9 +1658,17 @@ static void usb_rx_callback_intf0(struct urb *urb)
return;

ictx = (struct imon_context *)urb->context;
if (!ictx || !ictx->dev_present_intf0)
if (!ictx)
return;

/*
* if we get a callback before we're done configuring the hardware, we
* can't yet process the data, as there's nowhere to send it, but we
* still need to submit a new rx URB to avoid wedging the hardware
*/
if (!ictx->dev_present_intf0)
goto out;

switch (urb->status) {
case -ENOENT: /* usbcore unlink successful! */
return;
Expand All @@ -1678,6 +1686,7 @@ static void usb_rx_callback_intf0(struct urb *urb)
break;
}

out:
usb_submit_urb(ictx->rx_urb_intf0, GFP_ATOMIC);
}

Expand All @@ -1690,9 +1699,17 @@ static void usb_rx_callback_intf1(struct urb *urb)
return;

ictx = (struct imon_context *)urb->context;
if (!ictx || !ictx->dev_present_intf1)
if (!ictx)
return;

/*
* if we get a callback before we're done configuring the hardware, we
* can't yet process the data, as there's nowhere to send it, but we
* still need to submit a new rx URB to avoid wedging the hardware
*/
if (!ictx->dev_present_intf1)
goto out;

switch (urb->status) {
case -ENOENT: /* usbcore unlink successful! */
return;
Expand All @@ -1710,6 +1727,7 @@ static void usb_rx_callback_intf1(struct urb *urb)
break;
}

out:
usb_submit_urb(ictx->rx_urb_intf1, GFP_ATOMIC);
}

Expand Down Expand Up @@ -2242,7 +2260,7 @@ static struct imon_context *imon_init_intf1(struct usb_interface *intf,
mutex_unlock(&ictx->lock);
usb_free_urb(rx_urb);
rx_urb_alloc_failed:
dev_err(ictx->dev, "unable to initialize intf0, err %d\n", ret);
dev_err(ictx->dev, "unable to initialize intf1, err %d\n", ret);

return NULL;
}
Expand Down
18 changes: 15 additions & 3 deletions drivers/media/video/hdpvr/hdpvr-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,20 @@ static int device_authorization(struct hdpvr_device *dev)
}
#endif

dev->fw_ver = dev->usbc_buf[1];

v4l2_info(&dev->v4l2_dev, "firmware version 0x%x dated %s\n",
dev->usbc_buf[1], &dev->usbc_buf[2]);
dev->fw_ver, &dev->usbc_buf[2]);

if (dev->fw_ver > 0x15) {
dev->options.brightness = 0x80;
dev->options.contrast = 0x40;
dev->options.hue = 0xf;
dev->options.saturation = 0x40;
dev->options.sharpness = 0x80;
}

switch (dev->usbc_buf[1]) {
switch (dev->fw_ver) {
case HDPVR_FIRMWARE_VERSION:
dev->flags &= ~HDPVR_FLAG_AC3_CAP;
break;
Expand All @@ -169,7 +179,7 @@ static int device_authorization(struct hdpvr_device *dev)
default:
v4l2_info(&dev->v4l2_dev, "untested firmware, the driver might"
" not work.\n");
if (dev->usbc_buf[1] >= HDPVR_FIRMWARE_VERSION_AC3)
if (dev->fw_ver >= HDPVR_FIRMWARE_VERSION_AC3)
dev->flags |= HDPVR_FLAG_AC3_CAP;
else
dev->flags &= ~HDPVR_FLAG_AC3_CAP;
Expand Down Expand Up @@ -270,6 +280,8 @@ static const struct hdpvr_options hdpvr_default_options = {
.bitrate_mode = HDPVR_CONSTANT,
.gop_mode = HDPVR_SIMPLE_IDR_GOP,
.audio_codec = V4L2_MPEG_AUDIO_ENCODING_AAC,
/* original picture controls for firmware version <= 0x15 */
/* updated in device_authorization() for newer firmware */
.brightness = 0x86,
.contrast = 0x80,
.hue = 0x80,
Expand Down
46 changes: 33 additions & 13 deletions drivers/media/video/hdpvr/hdpvr-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,13 @@ static int hdpvr_start_streaming(struct hdpvr_device *dev)

hdpvr_config_call(dev, CTRL_START_STREAMING_VALUE, 0x00);

dev->status = STATUS_STREAMING;

INIT_WORK(&dev->worker, hdpvr_transmit_buffers);
queue_work(dev->workqueue, &dev->worker);

v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev,
"streaming started\n");
dev->status = STATUS_STREAMING;

return 0;
}
Expand Down Expand Up @@ -722,21 +723,39 @@ static const s32 supported_v4l2_ctrls[] = {
};

static int fill_queryctrl(struct hdpvr_options *opt, struct v4l2_queryctrl *qc,
int ac3)
int ac3, int fw_ver)
{
int err;

if (fw_ver > 0x15) {
switch (qc->id) {
case V4L2_CID_BRIGHTNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_CONTRAST:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x40);
case V4L2_CID_SATURATION:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x40);
case V4L2_CID_HUE:
return v4l2_ctrl_query_fill(qc, 0x0, 0x1e, 1, 0xf);
case V4L2_CID_SHARPNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
}
} else {
switch (qc->id) {
case V4L2_CID_BRIGHTNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x86);
case V4L2_CID_CONTRAST:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_SATURATION:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_HUE:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_SHARPNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
}
}

switch (qc->id) {
case V4L2_CID_BRIGHTNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x86);
case V4L2_CID_CONTRAST:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_SATURATION:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_HUE:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_SHARPNESS:
return v4l2_ctrl_query_fill(qc, 0x0, 0xff, 1, 0x80);
case V4L2_CID_MPEG_AUDIO_ENCODING:
return v4l2_ctrl_query_fill(
qc, V4L2_MPEG_AUDIO_ENCODING_AAC,
Expand Down Expand Up @@ -794,7 +813,8 @@ static int vidioc_queryctrl(struct file *file, void *private_data,

if (qc->id == supported_v4l2_ctrls[i])
return fill_queryctrl(&dev->options, qc,
dev->flags & HDPVR_FLAG_AC3_CAP);
dev->flags & HDPVR_FLAG_AC3_CAP,
dev->fw_ver);

if (qc->id < supported_v4l2_ctrls[i])
break;
Expand Down
1 change: 1 addition & 0 deletions drivers/media/video/hdpvr/hdpvr.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ struct hdpvr_device {
/* usb control transfer buffer and lock */
struct mutex usbc_mutex;
u8 *usbc_buf;
u8 fw_ver;
};

static inline struct hdpvr_device *to_hdpvr_dev(struct v4l2_device *v4l2_dev)
Expand Down
2 changes: 1 addition & 1 deletion drivers/media/video/omap3isp/ispccdc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1407,7 +1407,7 @@ static int __ccdc_handle_stopping(struct isp_ccdc_device *ccdc, u32 event)
static void ccdc_hs_vs_isr(struct isp_ccdc_device *ccdc)
{
struct isp_pipeline *pipe = to_isp_pipeline(&ccdc->subdev.entity);
struct video_device *vdev = &ccdc->subdev.devnode;
struct video_device *vdev = ccdc->subdev.devnode;
struct v4l2_event event;

memset(&event, 0, sizeof(event));
Expand Down

0 comments on commit e98092b

Please sign in to comment.