48 #include <linux/kernel.h>
49 #include <linux/list.h>
51 #include <linux/slab.h>
55 #include <linux/module.h>
59 #include <linux/videodev2.h>
60 #include <linux/i2c.h>
72 #define DRIVER_AUTHOR \
75 #define DRIVER_NAME "usbvision"
76 #define DRIVER_ALIAS "USBVision"
77 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux"
78 #define DRIVER_LICENSE "GPL"
79 #define USBVISION_VERSION_STRING "0.9.11"
81 #define ENABLE_HEXDUMP 0
84 #ifdef USBVISION_DEBUG
85 #define PDEBUG(level, fmt, args...) { \
86 if (video_debug & (level)) \
87 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \
88 __func__, __LINE__ , ## args); \
91 #define PDEBUG(level, fmt, args...) do {} while (0)
94 #define DBG_IO (1 << 1)
95 #define DBG_PROBE (1 << 2)
96 #define DBG_MMAP (1 << 3)
99 #define rmspace(str) while (*str == ' ') str++;
100 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++;
104 static int usbvision_nr;
118 static void usbvision_release(
struct usb_usbvision *usbvision);
126 static int power_on_at_open = 1;
128 static int video_nr = -1;
130 static int radio_nr = -1;
141 MODULE_PARM_DESC(isoc_mode,
" Set the default format for ISOC endpoint. Default: 0x60 (Compression On)");
142 MODULE_PARM_DESC(video_debug,
" Set the default Debug Mode of the device driver. Default: 0 (Off)");
143 MODULE_PARM_DESC(power_on_at_open,
" Set the default device to power on when device is opened. Default: 1 (On)");
144 MODULE_PARM_DESC(video_nr,
"Set video device number (/dev/videoX). Default: -1 (autodetect)");
145 MODULE_PARM_DESC(radio_nr,
"Set radio device number (/dev/radioX). Default: -1 (autodetect)");
164 #define YES_NO(x) ((x) ? "Yes" : "No")
170 return video_get_drvdata(vdev);
283 static void usbvision_create_sysfs(
struct video_device *vdev)
319 dev_err(&vdev->
dev,
"%s error: %d\n", __func__, res);
322 static void usbvision_remove_sysfs(
struct video_device *vdev)
345 static int usbvision_v4l2_open(
struct file *
file)
375 if (usbvision->
power == 0) {
397 if (power_on_at_open) {
421 static int usbvision_v4l2_close(
struct file *file)
439 if (power_on_at_open) {
448 usbvision_release(usbvision);
463 #ifdef CONFIG_VIDEO_ADV_DEBUG
464 static int vidioc_g_register(
struct file *file,
void *
priv,
476 "%s: VIDIOC_DBG_G_REGISTER failed: error %d\n",
485 static int vidioc_s_register(
struct file *file,
void *priv,
497 "%s: VIDIOC_DBG_S_REGISTER failed: error %d\n",
505 static int vidioc_querycap(
struct file *file,
void *priv,
523 static int vidioc_enum_input(
struct file *file,
void *priv,
534 chan = vi->
index + 1;
575 static int vidioc_g_input(
struct file *file,
void *priv,
unsigned int *
input)
583 static int vidioc_s_input(
struct file *file,
void *priv,
unsigned int input)
598 static int vidioc_s_std(
struct file *file,
void *priv,
v4l2_std_id *
id)
611 static int vidioc_g_tuner(
struct file *file,
void *priv,
618 if (usbvision->
radio) {
630 static int vidioc_s_tuner(
struct file *file,
void *priv,
644 static int vidioc_g_frequency(
struct file *file,
void *priv,
650 if (usbvision->
radio)
659 static int vidioc_s_frequency(
struct file *file,
void *priv,
674 static int vidioc_g_audio(
struct file *file,
void *priv,
struct v4l2_audio *
a)
678 if (usbvision->
radio)
686 static int vidioc_s_audio(
struct file *file,
void *fh,
694 static int vidioc_queryctrl(
struct file *file,
void *priv,
707 static int vidioc_g_ctrl(
struct file *file,
void *priv,
716 static int vidioc_s_ctrl(
struct file *file,
void *priv,
725 static int vidioc_reqbufs(
struct file *file,
753 static int vidioc_querybuf(
struct file *file,
780 usbvision->
palette.bytes_per_pixel;
786 static int vidioc_qbuf(
struct file *file,
void *priv,
struct v4l2_buffer *vb)
813 spin_unlock_irqrestore(&usbvision->
queue_lock, lock_flags);
818 static int vidioc_dqbuf(
struct file *file,
void *priv,
struct v4l2_buffer *vb)
825 if (list_empty(&(usbvision->
outqueue))) {
830 !list_empty(&(usbvision->
outqueue)));
839 spin_unlock_irqrestore(&usbvision->
queue_lock, lock_flags);
856 static int vidioc_streamon(
struct file *file,
void *priv,
enum v4l2_buf_type i)
861 call_all(usbvision, video, s_stream, 1);
866 static int vidioc_streamoff(
struct file *file,
877 call_all(usbvision, video, s_stream, 0);
884 static int vidioc_enum_fmt_vid_cap(
struct file *file,
void *priv,
894 static int vidioc_g_fmt_vid_cap(
struct file *file,
void *priv,
901 vf->
fmt.
pix.bytesperline =
910 static int vidioc_try_fmt_vid_cap(
struct file *file,
void *priv,
918 if (vf->
fmt.
pix.pixelformat ==
919 usbvision_v4l2_format[format_idx].
format) {
920 usbvision->
palette = usbvision_v4l2_format[format_idx];
925 if (format_idx == USBVISION_SUPPORTED_PALETTES)
931 usbvision->
palette.bytes_per_pixel;
937 static int vidioc_s_fmt_vid_cap(
struct file *file,
void *priv,
943 ret = vidioc_try_fmt_vid_cap(file, priv, vf);
964 static ssize_t usbvision_read(
struct file *file,
char __user *buf,
965 size_t count, loff_t *ppos)
974 (
unsigned long)count, noblock);
993 call_all(usbvision, video, s_stream, 1);
999 frame = &usbvision->
frame[
i];
1012 spin_unlock_irqrestore(&usbvision->
queue_lock,
1018 if (list_empty(&(usbvision->
outqueue))) {
1024 !list_empty(&(usbvision->
outqueue)));
1033 spin_unlock_irqrestore(&usbvision->
queue_lock, lock_flags);
1041 PDEBUG(
DBG_IO,
"%s: frmx=%d, bytes_read=%ld, scanlength=%ld",
1053 PDEBUG(
DBG_IO,
"%s: {copy} count used=%ld, new bytes_read=%ld",
1068 static ssize_t usbvision_v4l2_read(
struct file *file,
char __user *buf,
1069 size_t count, loff_t *ppos)
1076 res = usbvision_read(file, buf, count, ppos);
1081 static int usbvision_mmap(
struct file *file,
struct vm_area_struct *vma)
1099 for (i = 0; i < usbvision->
num_frames; i++) {
1106 "mmap: user supplied mapping address is out of range");
1111 vma->
vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
1113 pos = usbvision->
frame[
i].data;
1127 static int usbvision_v4l2_mmap(
struct file *file,
struct vm_area_struct *vma)
1134 res = usbvision_mmap(file, vma);
1143 static int usbvision_radio_open(
struct file *file)
1152 if (usbvision->
user) {
1154 "%s: Someone tried to open an already opened USBVision Radio!\n",
1158 if (power_on_at_open) {
1160 if (usbvision->
power == 0) {
1175 usbvision->
radio = 1;
1182 if (power_on_at_open) {
1194 static int usbvision_radio_close(
struct file *file)
1208 usbvision->
radio = 0;
1211 if (power_on_at_open) {
1218 usbvision_release(usbvision);
1231 .open = usbvision_v4l2_open,
1232 .release = usbvision_v4l2_close,
1233 .read = usbvision_v4l2_read,
1234 .mmap = usbvision_v4l2_mmap,
1264 #ifdef CONFIG_VIDEO_ADV_DEBUG
1265 .vidioc_g_register = vidioc_g_register,
1266 .vidioc_s_register = vidioc_s_register,
1270 static struct video_device usbvision_video_template = {
1271 .fops = &usbvision_fops,
1272 .ioctl_ops = &usbvision_ioctl_ops,
1273 .name =
"usbvision-video",
1283 .open = usbvision_radio_open,
1284 .release = usbvision_radio_close,
1304 static struct video_device usbvision_radio_template = {
1305 .fops = &usbvision_radio_fops,
1306 .name =
"usbvision-radio",
1308 .ioctl_ops = &usbvision_radio_ioctl_ops,
1319 struct usb_device *usb_dev = usbvision->
dev;
1322 if (usb_dev ==
NULL) {
1324 "%s: usbvision->dev is not set\n", __func__);
1331 *vdev = *vdev_template;
1335 video_set_drvdata(vdev, usbvision);
1340 static void usbvision_unregister_video(
struct usb_usbvision *usbvision)
1343 if (usbvision->
rdev) {
1345 video_device_node_name(usbvision->
rdev));
1346 if (video_is_registered(usbvision->
rdev))
1354 if (usbvision->
vdev) {
1356 video_device_node_name(usbvision->
vdev));
1357 if (video_is_registered(usbvision->
vdev))
1369 usbvision->
vdev = usbvision_vdev_init(usbvision,
1370 &usbvision_video_template,
1376 printk(
KERN_INFO "USBVision[%d]: registered USBVision Video device %s [v4l2]\n",
1377 usbvision->
nr, video_device_node_name(usbvision->
vdev));
1382 usbvision->
rdev = usbvision_vdev_init(usbvision,
1383 &usbvision_radio_template,
1389 printk(
KERN_INFO "USBVision[%d]: registered USBVision Radio device %s [v4l2]\n",
1390 usbvision->
nr, video_device_node_name(usbvision->
rdev));
1397 "USBVision[%d]: video_register_device() failed\n",
1399 usbvision_unregister_video(usbvision);
1418 if (usbvision ==
NULL)
1451 static void usbvision_release(
struct usb_usbvision *usbvision)
1459 usbvision_remove_sysfs(usbvision->
vdev);
1460 usbvision_unregister_video(usbvision);
1473 static void usbvision_configure_video(
struct usb_usbvision *usbvision)
1477 if (usbvision ==
NULL)
1481 usbvision->
palette = usbvision_v4l2_format[2];
1499 if (!power_on_at_open) {
1516 struct usb_device *dev =
usb_get_dev(interface_to_usbdev(intf));
1518 __u8 ifnum = intf->altsetting->desc.bInterfaceNumber;
1519 const struct usb_host_interface *
interface;
1525 dev->descriptor.idVendor,
1526 dev->descriptor.idProduct, ifnum);
1528 model = devid->driver_info;
1539 interface = &dev->actconfig->interface[ifnum]->altsetting[0];
1540 endpoint = &interface->endpoint[1].desc;
1541 if (!usb_endpoint_xfer_isoc(endpoint)) {
1542 dev_err(&intf->dev,
"%s: interface %d. has non-ISO endpoint!\n",
1544 dev_err(&intf->dev,
"%s: Endpoint attributes %d",
1548 if (usb_endpoint_dir_out(endpoint)) {
1549 dev_err(&intf->dev,
"%s: interface %d. has ISO OUT endpoint!\n",
1554 usbvision = usbvision_alloc(dev, intf);
1555 if (usbvision ==
NULL) {
1556 dev_err(&intf->dev,
"%s: couldn't allocate USBVision struct\n", __func__);
1560 if (dev->descriptor.bNumConfigurations > 1)
1569 uif = dev->actconfig->interface[0];
1571 usbvision->
num_alt = uif->num_altsetting;
1575 dev_err(&intf->dev,
"usbvision: out of memory!\n");
1579 for (i = 0; i < usbvision->
num_alt; i++) {
1583 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
1589 usbvision->
nr = usbvision_nr++;
1597 usbvision->
iface = ifnum;
1602 usbvision->
user = 0;
1604 usbvision_configure_video(usbvision);
1605 usbvision_register_video(usbvision);
1607 usbvision_create_sysfs(usbvision->
vdev);
1624 struct usb_usbvision *usbvision = to_usbvision(usb_get_intfdata(intf));
1628 if (usbvision ==
NULL) {
1629 pr_err(
"%s: usb_get_intfdata() failed\n", __func__);
1640 if (usbvision->
power) {
1651 if (usbvision->
user) {
1657 usbvision_release(usbvision);
1663 static struct usb_driver usbvision_driver = {
1664 .name =
"usbvision",
1666 .probe = usbvision_probe,
1676 static int __init usbvision_init(
void)
1693 err_code = usb_register(&usbvision_driver);
1695 if (err_code == 0) {
1702 static void __exit usbvision_exit(
void)