diff options
Diffstat (limited to 'drivers/media/video/usbvision/usbvision-video.c')
| -rw-r--r-- | drivers/media/video/usbvision/usbvision-video.c | 113 |
1 files changed, 48 insertions, 65 deletions
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c index cd6c41d67899..b977116a0dd9 100644 --- a/drivers/media/video/usbvision/usbvision-video.c +++ b/drivers/media/video/usbvision/usbvision-video.c | |||
| @@ -53,7 +53,6 @@ | |||
| 53 | #include <linux/mm.h> | 53 | #include <linux/mm.h> |
| 54 | #include <linux/utsname.h> | 54 | #include <linux/utsname.h> |
| 55 | #include <linux/highmem.h> | 55 | #include <linux/highmem.h> |
| 56 | #include <linux/videodev.h> | ||
| 57 | #include <linux/vmalloc.h> | 56 | #include <linux/vmalloc.h> |
| 58 | #include <linux/module.h> | 57 | #include <linux/module.h> |
| 59 | #include <linux/init.h> | 58 | #include <linux/init.h> |
| @@ -65,8 +64,8 @@ | |||
| 65 | 64 | ||
| 66 | #include <media/saa7115.h> | 65 | #include <media/saa7115.h> |
| 67 | #include <media/v4l2-common.h> | 66 | #include <media/v4l2-common.h> |
| 67 | #include <media/v4l2-ioctl.h> | ||
| 68 | #include <media/tuner.h> | 68 | #include <media/tuner.h> |
| 69 | #include <media/audiochip.h> | ||
| 70 | 69 | ||
| 71 | #include <linux/workqueue.h> | 70 | #include <linux/workqueue.h> |
| 72 | 71 | ||
| @@ -184,7 +183,7 @@ MODULE_ALIAS(DRIVER_ALIAS); | |||
| 184 | static inline struct usb_usbvision *cd_to_usbvision(struct device *cd) | 183 | static inline struct usb_usbvision *cd_to_usbvision(struct device *cd) |
| 185 | { | 184 | { |
| 186 | struct video_device *vdev = | 185 | struct video_device *vdev = |
| 187 | container_of(cd, struct video_device, class_dev); | 186 | container_of(cd, struct video_device, dev); |
| 188 | return video_get_drvdata(vdev); | 187 | return video_get_drvdata(vdev); |
| 189 | } | 188 | } |
| 190 | 189 | ||
| @@ -199,7 +198,7 @@ static ssize_t show_model(struct device *cd, | |||
| 199 | struct device_attribute *attr, char *buf) | 198 | struct device_attribute *attr, char *buf) |
| 200 | { | 199 | { |
| 201 | struct video_device *vdev = | 200 | struct video_device *vdev = |
| 202 | container_of(cd, struct video_device, class_dev); | 201 | container_of(cd, struct video_device, dev); |
| 203 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 202 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 204 | return sprintf(buf, "%s\n", | 203 | return sprintf(buf, "%s\n", |
| 205 | usbvision_device_data[usbvision->DevModel].ModelString); | 204 | usbvision_device_data[usbvision->DevModel].ModelString); |
| @@ -210,7 +209,7 @@ static ssize_t show_hue(struct device *cd, | |||
| 210 | struct device_attribute *attr, char *buf) | 209 | struct device_attribute *attr, char *buf) |
| 211 | { | 210 | { |
| 212 | struct video_device *vdev = | 211 | struct video_device *vdev = |
| 213 | container_of(cd, struct video_device, class_dev); | 212 | container_of(cd, struct video_device, dev); |
| 214 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 213 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 215 | struct v4l2_control ctrl; | 214 | struct v4l2_control ctrl; |
| 216 | ctrl.id = V4L2_CID_HUE; | 215 | ctrl.id = V4L2_CID_HUE; |
| @@ -225,7 +224,7 @@ static ssize_t show_contrast(struct device *cd, | |||
| 225 | struct device_attribute *attr, char *buf) | 224 | struct device_attribute *attr, char *buf) |
| 226 | { | 225 | { |
| 227 | struct video_device *vdev = | 226 | struct video_device *vdev = |
| 228 | container_of(cd, struct video_device, class_dev); | 227 | container_of(cd, struct video_device, dev); |
| 229 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 228 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 230 | struct v4l2_control ctrl; | 229 | struct v4l2_control ctrl; |
| 231 | ctrl.id = V4L2_CID_CONTRAST; | 230 | ctrl.id = V4L2_CID_CONTRAST; |
| @@ -240,7 +239,7 @@ static ssize_t show_brightness(struct device *cd, | |||
| 240 | struct device_attribute *attr, char *buf) | 239 | struct device_attribute *attr, char *buf) |
| 241 | { | 240 | { |
| 242 | struct video_device *vdev = | 241 | struct video_device *vdev = |
| 243 | container_of(cd, struct video_device, class_dev); | 242 | container_of(cd, struct video_device, dev); |
| 244 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 243 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 245 | struct v4l2_control ctrl; | 244 | struct v4l2_control ctrl; |
| 246 | ctrl.id = V4L2_CID_BRIGHTNESS; | 245 | ctrl.id = V4L2_CID_BRIGHTNESS; |
| @@ -255,7 +254,7 @@ static ssize_t show_saturation(struct device *cd, | |||
| 255 | struct device_attribute *attr, char *buf) | 254 | struct device_attribute *attr, char *buf) |
| 256 | { | 255 | { |
| 257 | struct video_device *vdev = | 256 | struct video_device *vdev = |
| 258 | container_of(cd, struct video_device, class_dev); | 257 | container_of(cd, struct video_device, dev); |
| 259 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 258 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 260 | struct v4l2_control ctrl; | 259 | struct v4l2_control ctrl; |
| 261 | ctrl.id = V4L2_CID_SATURATION; | 260 | ctrl.id = V4L2_CID_SATURATION; |
| @@ -270,7 +269,7 @@ static ssize_t show_streaming(struct device *cd, | |||
| 270 | struct device_attribute *attr, char *buf) | 269 | struct device_attribute *attr, char *buf) |
| 271 | { | 270 | { |
| 272 | struct video_device *vdev = | 271 | struct video_device *vdev = |
| 273 | container_of(cd, struct video_device, class_dev); | 272 | container_of(cd, struct video_device, dev); |
| 274 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 273 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 275 | return sprintf(buf, "%s\n", | 274 | return sprintf(buf, "%s\n", |
| 276 | YES_NO(usbvision->streaming==Stream_On?1:0)); | 275 | YES_NO(usbvision->streaming==Stream_On?1:0)); |
| @@ -281,7 +280,7 @@ static ssize_t show_compression(struct device *cd, | |||
| 281 | struct device_attribute *attr, char *buf) | 280 | struct device_attribute *attr, char *buf) |
| 282 | { | 281 | { |
| 283 | struct video_device *vdev = | 282 | struct video_device *vdev = |
| 284 | container_of(cd, struct video_device, class_dev); | 283 | container_of(cd, struct video_device, dev); |
| 285 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 284 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 286 | return sprintf(buf, "%s\n", | 285 | return sprintf(buf, "%s\n", |
| 287 | YES_NO(usbvision->isocMode==ISOC_MODE_COMPRESS)); | 286 | YES_NO(usbvision->isocMode==ISOC_MODE_COMPRESS)); |
| @@ -292,7 +291,7 @@ static ssize_t show_device_bridge(struct device *cd, | |||
| 292 | struct device_attribute *attr, char *buf) | 291 | struct device_attribute *attr, char *buf) |
| 293 | { | 292 | { |
| 294 | struct video_device *vdev = | 293 | struct video_device *vdev = |
| 295 | container_of(cd, struct video_device, class_dev); | 294 | container_of(cd, struct video_device, dev); |
| 296 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); | 295 | struct usb_usbvision *usbvision = video_get_drvdata(vdev); |
| 297 | return sprintf(buf, "%d\n", usbvision->bridgeType); | 296 | return sprintf(buf, "%d\n", usbvision->bridgeType); |
| 298 | } | 297 | } |
| @@ -304,40 +303,31 @@ static void usbvision_create_sysfs(struct video_device *vdev) | |||
| 304 | if (!vdev) | 303 | if (!vdev) |
| 305 | return; | 304 | return; |
| 306 | do { | 305 | do { |
| 307 | res = device_create_file(&vdev->class_dev, | 306 | res = device_create_file(&vdev->dev, &dev_attr_version); |
| 308 | &dev_attr_version); | ||
| 309 | if (res<0) | 307 | if (res<0) |
| 310 | break; | 308 | break; |
| 311 | res = device_create_file(&vdev->class_dev, | 309 | res = device_create_file(&vdev->dev, &dev_attr_model); |
| 312 | &dev_attr_model); | ||
| 313 | if (res<0) | 310 | if (res<0) |
| 314 | break; | 311 | break; |
| 315 | res = device_create_file(&vdev->class_dev, | 312 | res = device_create_file(&vdev->dev, &dev_attr_hue); |
| 316 | &dev_attr_hue); | ||
| 317 | if (res<0) | 313 | if (res<0) |
| 318 | break; | 314 | break; |
| 319 | res = device_create_file(&vdev->class_dev, | 315 | res = device_create_file(&vdev->dev, &dev_attr_contrast); |
| 320 | &dev_attr_contrast); | ||
| 321 | if (res<0) | 316 | if (res<0) |
| 322 | break; | 317 | break; |
| 323 | res = device_create_file(&vdev->class_dev, | 318 | res = device_create_file(&vdev->dev, &dev_attr_brightness); |
| 324 | &dev_attr_brightness); | ||
| 325 | if (res<0) | 319 | if (res<0) |
| 326 | break; | 320 | break; |
| 327 | res = device_create_file(&vdev->class_dev, | 321 | res = device_create_file(&vdev->dev, &dev_attr_saturation); |
| 328 | &dev_attr_saturation); | ||
| 329 | if (res<0) | 322 | if (res<0) |
| 330 | break; | 323 | break; |
| 331 | res = device_create_file(&vdev->class_dev, | 324 | res = device_create_file(&vdev->dev, &dev_attr_streaming); |
| 332 | &dev_attr_streaming); | ||
| 333 | if (res<0) | 325 | if (res<0) |
| 334 | break; | 326 | break; |
| 335 | res = device_create_file(&vdev->class_dev, | 327 | res = device_create_file(&vdev->dev, &dev_attr_compression); |
| 336 | &dev_attr_compression); | ||
| 337 | if (res<0) | 328 | if (res<0) |
| 338 | break; | 329 | break; |
| 339 | res = device_create_file(&vdev->class_dev, | 330 | res = device_create_file(&vdev->dev, &dev_attr_bridge); |
| 340 | &dev_attr_bridge); | ||
| 341 | if (res>=0) | 331 | if (res>=0) |
| 342 | return; | 332 | return; |
| 343 | } while (0); | 333 | } while (0); |
| @@ -348,24 +338,15 @@ static void usbvision_create_sysfs(struct video_device *vdev) | |||
| 348 | static void usbvision_remove_sysfs(struct video_device *vdev) | 338 | static void usbvision_remove_sysfs(struct video_device *vdev) |
| 349 | { | 339 | { |
| 350 | if (vdev) { | 340 | if (vdev) { |
| 351 | device_remove_file(&vdev->class_dev, | 341 | device_remove_file(&vdev->dev, &dev_attr_version); |
| 352 | &dev_attr_version); | 342 | device_remove_file(&vdev->dev, &dev_attr_model); |
| 353 | device_remove_file(&vdev->class_dev, | 343 | device_remove_file(&vdev->dev, &dev_attr_hue); |
| 354 | &dev_attr_model); | 344 | device_remove_file(&vdev->dev, &dev_attr_contrast); |
| 355 | device_remove_file(&vdev->class_dev, | 345 | device_remove_file(&vdev->dev, &dev_attr_brightness); |
| 356 | &dev_attr_hue); | 346 | device_remove_file(&vdev->dev, &dev_attr_saturation); |
| 357 | device_remove_file(&vdev->class_dev, | 347 | device_remove_file(&vdev->dev, &dev_attr_streaming); |
| 358 | &dev_attr_contrast); | 348 | device_remove_file(&vdev->dev, &dev_attr_compression); |
| 359 | device_remove_file(&vdev->class_dev, | 349 | device_remove_file(&vdev->dev, &dev_attr_bridge); |
| 360 | &dev_attr_brightness); | ||
| 361 | device_remove_file(&vdev->class_dev, | ||
| 362 | &dev_attr_saturation); | ||
| 363 | device_remove_file(&vdev->class_dev, | ||
| 364 | &dev_attr_streaming); | ||
| 365 | device_remove_file(&vdev->class_dev, | ||
| 366 | &dev_attr_compression); | ||
| 367 | device_remove_file(&vdev->class_dev, | ||
| 368 | &dev_attr_bridge); | ||
| 369 | } | 350 | } |
| 370 | } | 351 | } |
| 371 | 352 | ||
| @@ -1388,13 +1369,8 @@ static const struct file_operations usbvision_fops = { | |||
| 1388 | /* .poll = video_poll, */ | 1369 | /* .poll = video_poll, */ |
| 1389 | .compat_ioctl = v4l_compat_ioctl32, | 1370 | .compat_ioctl = v4l_compat_ioctl32, |
| 1390 | }; | 1371 | }; |
| 1391 | static struct video_device usbvision_video_template = { | 1372 | |
| 1392 | .owner = THIS_MODULE, | 1373 | static const struct v4l2_ioctl_ops usbvision_ioctl_ops = { |
| 1393 | .type = VID_TYPE_TUNER | VID_TYPE_CAPTURE, | ||
| 1394 | .fops = &usbvision_fops, | ||
| 1395 | .name = "usbvision-video", | ||
| 1396 | .release = video_device_release, | ||
| 1397 | .minor = -1, | ||
| 1398 | .vidioc_querycap = vidioc_querycap, | 1374 | .vidioc_querycap = vidioc_querycap, |
| 1399 | .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, | 1375 | .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, |
| 1400 | .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, | 1376 | .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, |
| @@ -1426,6 +1402,14 @@ static struct video_device usbvision_video_template = { | |||
| 1426 | .vidioc_g_register = vidioc_g_register, | 1402 | .vidioc_g_register = vidioc_g_register, |
| 1427 | .vidioc_s_register = vidioc_s_register, | 1403 | .vidioc_s_register = vidioc_s_register, |
| 1428 | #endif | 1404 | #endif |
| 1405 | }; | ||
| 1406 | |||
| 1407 | static struct video_device usbvision_video_template = { | ||
| 1408 | .fops = &usbvision_fops, | ||
| 1409 | .ioctl_ops = &usbvision_ioctl_ops, | ||
| 1410 | .name = "usbvision-video", | ||
| 1411 | .release = video_device_release, | ||
| 1412 | .minor = -1, | ||
| 1429 | .tvnorms = USBVISION_NORMS, | 1413 | .tvnorms = USBVISION_NORMS, |
| 1430 | .current_norm = V4L2_STD_PAL | 1414 | .current_norm = V4L2_STD_PAL |
| 1431 | }; | 1415 | }; |
| @@ -1441,14 +1425,7 @@ static const struct file_operations usbvision_radio_fops = { | |||
| 1441 | .compat_ioctl = v4l_compat_ioctl32, | 1425 | .compat_ioctl = v4l_compat_ioctl32, |
| 1442 | }; | 1426 | }; |
| 1443 | 1427 | ||
| 1444 | static struct video_device usbvision_radio_template= | 1428 | static const struct v4l2_ioctl_ops usbvision_radio_ioctl_ops = { |
| 1445 | { | ||
| 1446 | .owner = THIS_MODULE, | ||
| 1447 | .type = VID_TYPE_TUNER, | ||
| 1448 | .fops = &usbvision_radio_fops, | ||
| 1449 | .name = "usbvision-radio", | ||
| 1450 | .release = video_device_release, | ||
| 1451 | .minor = -1, | ||
| 1452 | .vidioc_querycap = vidioc_querycap, | 1429 | .vidioc_querycap = vidioc_querycap, |
| 1453 | .vidioc_enum_input = vidioc_enum_input, | 1430 | .vidioc_enum_input = vidioc_enum_input, |
| 1454 | .vidioc_g_input = vidioc_g_input, | 1431 | .vidioc_g_input = vidioc_g_input, |
| @@ -1462,6 +1439,14 @@ static struct video_device usbvision_radio_template= | |||
| 1462 | .vidioc_s_tuner = vidioc_s_tuner, | 1439 | .vidioc_s_tuner = vidioc_s_tuner, |
| 1463 | .vidioc_g_frequency = vidioc_g_frequency, | 1440 | .vidioc_g_frequency = vidioc_g_frequency, |
| 1464 | .vidioc_s_frequency = vidioc_s_frequency, | 1441 | .vidioc_s_frequency = vidioc_s_frequency, |
| 1442 | }; | ||
| 1443 | |||
| 1444 | static struct video_device usbvision_radio_template = { | ||
| 1445 | .fops = &usbvision_radio_fops, | ||
| 1446 | .name = "usbvision-radio", | ||
| 1447 | .release = video_device_release, | ||
| 1448 | .minor = -1, | ||
| 1449 | .ioctl_ops = &usbvision_radio_ioctl_ops, | ||
| 1465 | 1450 | ||
| 1466 | .tvnorms = USBVISION_NORMS, | 1451 | .tvnorms = USBVISION_NORMS, |
| 1467 | .current_norm = V4L2_STD_PAL | 1452 | .current_norm = V4L2_STD_PAL |
| @@ -1479,8 +1464,6 @@ static const struct file_operations usbvision_vbi_fops = { | |||
| 1479 | 1464 | ||
| 1480 | static struct video_device usbvision_vbi_template= | 1465 | static struct video_device usbvision_vbi_template= |
| 1481 | { | 1466 | { |
| 1482 | .owner = THIS_MODULE, | ||
| 1483 | .type = VID_TYPE_TUNER, | ||
| 1484 | .fops = &usbvision_vbi_fops, | 1467 | .fops = &usbvision_vbi_fops, |
| 1485 | .release = video_device_release, | 1468 | .release = video_device_release, |
| 1486 | .name = "usbvision-vbi", | 1469 | .name = "usbvision-vbi", |
| @@ -1506,7 +1489,7 @@ static struct video_device *usbvision_vdev_init(struct usb_usbvision *usbvision, | |||
| 1506 | } | 1489 | } |
| 1507 | *vdev = *vdev_template; | 1490 | *vdev = *vdev_template; |
| 1508 | // vdev->minor = -1; | 1491 | // vdev->minor = -1; |
| 1509 | vdev->dev = &usb_dev->dev; | 1492 | vdev->parent = &usb_dev->dev; |
| 1510 | snprintf(vdev->name, sizeof(vdev->name), "%s", name); | 1493 | snprintf(vdev->name, sizeof(vdev->name), "%s", name); |
| 1511 | video_set_drvdata(vdev, usbvision); | 1494 | video_set_drvdata(vdev, usbvision); |
| 1512 | return vdev; | 1495 | return vdev; |
