Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357455
b: refs/heads/master
c: ed986d1
h: refs/heads/master
i:
  357453: ad625cc
  357451: e74b236
  357447: 8a41365
  357439: 5e48864
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Feb 5, 2013
1 parent 69d50a9 commit ab917c1
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 195 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cd13823f5db3e66552801c04f0e761408ef17eb0
refs/heads/master: ed986d1fee77bbbb62291a1db1c7edbb00d99515
278 changes: 89 additions & 189 deletions trunk/drivers/media/pci/meye/meye.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
#include <media/v4l2-common.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-fh.h>
#include <media/v4l2-event.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/delay.h>
Expand Down Expand Up @@ -865,15 +867,15 @@ static int meye_open(struct file *file)
meye.grab_buffer[i].state = MEYE_BUF_UNUSED;
kfifo_reset(&meye.grabq);
kfifo_reset(&meye.doneq);
return 0;
return v4l2_fh_open(file);
}

static int meye_release(struct file *file)
{
mchip_hic_stop();
mchip_dma_free();
clear_bit(0, &meye.in_use);
return 0;
return v4l2_fh_release(file);
}

static int meyeioc_g_params(struct meye_params *p)
Expand Down Expand Up @@ -1032,8 +1034,9 @@ static int vidioc_querycap(struct file *file, void *fh,
cap->version = (MEYE_DRIVER_MAJORVERSION << 8) +
MEYE_DRIVER_MINORVERSION;

cap->capabilities = V4L2_CAP_VIDEO_CAPTURE |
cap->device_caps = V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_STREAMING;
cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;

return 0;
}
Expand Down Expand Up @@ -1063,191 +1066,50 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int i)
return 0;
}

static int vidioc_queryctrl(struct file *file, void *fh,
struct v4l2_queryctrl *c)
{
switch (c->id) {

case V4L2_CID_BRIGHTNESS:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Brightness");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 32;
c->flags = 0;
break;
case V4L2_CID_HUE:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Hue");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 32;
c->flags = 0;
break;
case V4L2_CID_CONTRAST:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Contrast");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 32;
c->flags = 0;
break;
case V4L2_CID_SATURATION:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Saturation");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 32;
c->flags = 0;
break;
case V4L2_CID_AGC:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Agc");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 48;
c->flags = 0;
break;
case V4L2_CID_MEYE_SHARPNESS:
case V4L2_CID_SHARPNESS:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Sharpness");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 32;

/* Continue to report legacy private SHARPNESS ctrl but
* say it is disabled in preference to ctrl in the spec
*/
c->flags = (c->id == V4L2_CID_SHARPNESS) ? 0 :
V4L2_CTRL_FLAG_DISABLED;
break;
case V4L2_CID_PICTURE:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Picture");
c->minimum = 0;
c->maximum = 63;
c->step = 1;
c->default_value = 0;
c->flags = 0;
break;
case V4L2_CID_JPEGQUAL:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "JPEG quality");
c->minimum = 0;
c->maximum = 10;
c->step = 1;
c->default_value = 8;
c->flags = 0;
break;
case V4L2_CID_FRAMERATE:
c->type = V4L2_CTRL_TYPE_INTEGER;
strcpy(c->name, "Framerate");
c->minimum = 0;
c->maximum = 31;
c->step = 1;
c->default_value = 0;
c->flags = 0;
break;
default:
return -EINVAL;
}

return 0;
}

static int vidioc_s_ctrl(struct file *file, void *fh, struct v4l2_control *c)
static int meye_s_ctrl(struct v4l2_ctrl *ctrl)
{
mutex_lock(&meye.lock);
switch (c->id) {
switch (ctrl->id) {
case V4L2_CID_BRIGHTNESS:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, c->value);
meye.brightness = c->value << 10;
SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, ctrl->val);
meye.brightness = ctrl->val << 10;
break;
case V4L2_CID_HUE:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERAHUE, c->value);
meye.hue = c->value << 10;
SONY_PIC_COMMAND_SETCAMERAHUE, ctrl->val);
meye.hue = ctrl->val << 10;
break;
case V4L2_CID_CONTRAST:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERACONTRAST, c->value);
meye.contrast = c->value << 10;
SONY_PIC_COMMAND_SETCAMERACONTRAST, ctrl->val);
meye.contrast = ctrl->val << 10;
break;
case V4L2_CID_SATURATION:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERACOLOR, c->value);
meye.colour = c->value << 10;
SONY_PIC_COMMAND_SETCAMERACOLOR, ctrl->val);
meye.colour = ctrl->val << 10;
break;
case V4L2_CID_AGC:
case V4L2_CID_MEYE_AGC:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERAAGC, c->value);
meye.params.agc = c->value;
SONY_PIC_COMMAND_SETCAMERAAGC, ctrl->val);
meye.params.agc = ctrl->val;
break;
case V4L2_CID_SHARPNESS:
case V4L2_CID_MEYE_SHARPNESS:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERASHARPNESS, c->value);
meye.params.sharpness = c->value;
SONY_PIC_COMMAND_SETCAMERASHARPNESS, ctrl->val);
meye.params.sharpness = ctrl->val;
break;
case V4L2_CID_PICTURE:
case V4L2_CID_MEYE_PICTURE:
sony_pic_camera_command(
SONY_PIC_COMMAND_SETCAMERAPICTURE, c->value);
meye.params.picture = c->value;
SONY_PIC_COMMAND_SETCAMERAPICTURE, ctrl->val);
meye.params.picture = ctrl->val;
break;
case V4L2_CID_JPEGQUAL:
meye.params.quality = c->value;
case V4L2_CID_JPEG_COMPRESSION_QUALITY:
meye.params.quality = ctrl->val;
break;
case V4L2_CID_FRAMERATE:
meye.params.framerate = c->value;
break;
default:
mutex_unlock(&meye.lock);
return -EINVAL;
}
mutex_unlock(&meye.lock);

return 0;
}

static int vidioc_g_ctrl(struct file *file, void *fh, struct v4l2_control *c)
{
mutex_lock(&meye.lock);
switch (c->id) {
case V4L2_CID_BRIGHTNESS:
c->value = meye.brightness >> 10;
break;
case V4L2_CID_HUE:
c->value = meye.hue >> 10;
break;
case V4L2_CID_CONTRAST:
c->value = meye.contrast >> 10;
break;
case V4L2_CID_SATURATION:
c->value = meye.colour >> 10;
break;
case V4L2_CID_AGC:
c->value = meye.params.agc;
break;
case V4L2_CID_SHARPNESS:
case V4L2_CID_MEYE_SHARPNESS:
c->value = meye.params.sharpness;
break;
case V4L2_CID_PICTURE:
c->value = meye.params.picture;
break;
case V4L2_CID_JPEGQUAL:
c->value = meye.params.quality;
break;
case V4L2_CID_FRAMERATE:
c->value = meye.params.framerate;
case V4L2_CID_MEYE_FRAMERATE:
meye.params.framerate = ctrl->val;
break;
default:
mutex_unlock(&meye.lock);
Expand Down Expand Up @@ -1577,12 +1439,12 @@ static long vidioc_default(struct file *file, void *fh, bool valid_prio,

static unsigned int meye_poll(struct file *file, poll_table *wait)
{
unsigned int res = 0;
unsigned int res = v4l2_ctrl_poll(file, wait);

mutex_lock(&meye.lock);
poll_wait(file, &meye.proc_list, wait);
if (kfifo_len(&meye.doneq))
res = POLLIN | POLLRDNORM;
res |= POLLIN | POLLRDNORM;
mutex_unlock(&meye.lock);
return res;
}
Expand Down Expand Up @@ -1669,9 +1531,6 @@ static const struct v4l2_ioctl_ops meye_ioctl_ops = {
.vidioc_enum_input = vidioc_enum_input,
.vidioc_g_input = vidioc_g_input,
.vidioc_s_input = vidioc_s_input,
.vidioc_queryctrl = vidioc_queryctrl,
.vidioc_s_ctrl = vidioc_s_ctrl,
.vidioc_g_ctrl = vidioc_g_ctrl,
.vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
.vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
.vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
Expand All @@ -1682,6 +1541,9 @@ static const struct v4l2_ioctl_ops meye_ioctl_ops = {
.vidioc_dqbuf = vidioc_dqbuf,
.vidioc_streamon = vidioc_streamon,
.vidioc_streamoff = vidioc_streamoff,
.vidioc_log_status = v4l2_ctrl_log_status,
.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
.vidioc_default = vidioc_default,
};

Expand All @@ -1692,6 +1554,10 @@ static struct video_device meye_template = {
.release = video_device_release,
};

static const struct v4l2_ctrl_ops meye_ctrl_ops = {
.s_ctrl = meye_s_ctrl,
};

#ifdef CONFIG_PM
static int meye_suspend(struct pci_dev *pdev, pm_message_t state)
{
Expand Down Expand Up @@ -1730,6 +1596,32 @@ static int meye_resume(struct pci_dev *pdev)

static int meye_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
{
static const struct v4l2_ctrl_config ctrl_agc = {
.id = V4L2_CID_MEYE_AGC,
.type = V4L2_CTRL_TYPE_INTEGER,
.ops = &meye_ctrl_ops,
.name = "AGC",
.max = 63,
.step = 1,
.def = 48,
.flags = V4L2_CTRL_FLAG_SLIDER,
};
static const struct v4l2_ctrl_config ctrl_picture = {
.id = V4L2_CID_MEYE_PICTURE,
.type = V4L2_CTRL_TYPE_INTEGER,
.ops = &meye_ctrl_ops,
.name = "Picture",
.max = 63,
.step = 1,
};
static const struct v4l2_ctrl_config ctrl_framerate = {
.id = V4L2_CID_MEYE_FRAMERATE,
.type = V4L2_CTRL_TYPE_INTEGER,
.ops = &meye_ctrl_ops,
.name = "Framerate",
.max = 31,
.step = 1,
};
struct v4l2_device *v4l2_dev = &meye.v4l2_dev;
int ret = -EBUSY;
unsigned long mchip_adr;
Expand Down Expand Up @@ -1833,24 +1725,31 @@ static int meye_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)

mutex_init(&meye.lock);
init_waitqueue_head(&meye.proc_list);
meye.brightness = 32 << 10;
meye.hue = 32 << 10;
meye.colour = 32 << 10;
meye.contrast = 32 << 10;
meye.params.subsample = 0;
meye.params.quality = 8;
meye.params.sharpness = 32;
meye.params.agc = 48;
meye.params.picture = 0;
meye.params.framerate = 0;

sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERABRIGHTNESS, 32);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAHUE, 32);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACOLOR, 32);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERACONTRAST, 32);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERASHARPNESS, 32);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAPICTURE, 0);
sony_pic_camera_command(SONY_PIC_COMMAND_SETCAMERAAGC, 48);

v4l2_ctrl_handler_init(&meye.hdl, 3);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_BRIGHTNESS, 0, 63, 1, 32);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_HUE, 0, 63, 1, 32);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_CONTRAST, 0, 63, 1, 32);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_SATURATION, 0, 63, 1, 32);
v4l2_ctrl_new_custom(&meye.hdl, &ctrl_agc, NULL);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_SHARPNESS, 0, 63, 1, 32);
v4l2_ctrl_new_custom(&meye.hdl, &ctrl_picture, NULL);
v4l2_ctrl_new_std(&meye.hdl, &meye_ctrl_ops,
V4L2_CID_JPEG_COMPRESSION_QUALITY, 0, 10, 1, 8);
v4l2_ctrl_new_custom(&meye.hdl, &ctrl_framerate, NULL);
if (meye.hdl.error) {
v4l2_err(v4l2_dev, "couldn't register controls\n");
goto outvideoreg;
}

v4l2_ctrl_handler_setup(&meye.hdl);
meye.vdev->ctrl_handler = &meye.hdl;
set_bit(V4L2_FL_USE_FH_PRIO, &meye.vdev->flags);

if (video_register_device(meye.vdev, VFL_TYPE_GRABBER,
video_nr) < 0) {
Expand All @@ -1866,6 +1765,7 @@ static int meye_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
return 0;

outvideoreg:
v4l2_ctrl_handler_free(&meye.hdl);
free_irq(meye.mchip_irq, meye_irq);
outreqirq:
iounmap(meye.mchip_mmregs);
Expand Down
Loading

0 comments on commit ab917c1

Please sign in to comment.