.. | .. |
---|
2 | 2 | * vpif-display - VPIF display driver |
---|
3 | 3 | * Display driver for TI DaVinci VPIF |
---|
4 | 4 | * |
---|
5 | | - * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ |
---|
| 5 | + * Copyright (C) 2009 Texas Instruments Incorporated - https://www.ti.com/ |
---|
6 | 6 | * Copyright (C) 2014 Lad, Prabhakar <prabhakar.csengg@gmail.com> |
---|
7 | 7 | * |
---|
8 | 8 | * This program is free software; you can redistribute it and/or |
---|
.. | .. |
---|
138 | 138 | * vpif_buffer_queue : Callback function to add buffer to DMA queue |
---|
139 | 139 | * @vb: ptr to vb2_buffer |
---|
140 | 140 | * |
---|
141 | | - * This callback fucntion queues the buffer to DMA engine |
---|
| 141 | + * This callback function queues the buffer to DMA engine |
---|
142 | 142 | */ |
---|
143 | 143 | static void vpif_buffer_queue(struct vb2_buffer *vb) |
---|
144 | 144 | { |
---|
.. | .. |
---|
584 | 584 | { |
---|
585 | 585 | struct vpif_display_config *config = vpif_dev->platform_data; |
---|
586 | 586 | |
---|
587 | | - cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; |
---|
588 | | - cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; |
---|
589 | | - strlcpy(cap->driver, VPIF_DRIVER_NAME, sizeof(cap->driver)); |
---|
| 587 | + strscpy(cap->driver, VPIF_DRIVER_NAME, sizeof(cap->driver)); |
---|
590 | 588 | snprintf(cap->bus_info, sizeof(cap->bus_info), "platform:%s", |
---|
591 | 589 | dev_name(vpif_dev)); |
---|
592 | | - strlcpy(cap->card, config->card_name, sizeof(cap->card)); |
---|
| 590 | + strscpy(cap->card, config->card_name, sizeof(cap->card)); |
---|
593 | 591 | |
---|
594 | 592 | return 0; |
---|
595 | 593 | } |
---|
.. | .. |
---|
601 | 599 | return -EINVAL; |
---|
602 | 600 | |
---|
603 | 601 | /* Fill in the information about format */ |
---|
604 | | - fmt->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; |
---|
605 | | - strcpy(fmt->description, "YCbCr4:2:2 YC Planar"); |
---|
606 | 602 | fmt->pixelformat = V4L2_PIX_FMT_YUV422P; |
---|
607 | | - fmt->flags = 0; |
---|
608 | 603 | return 0; |
---|
609 | 604 | } |
---|
610 | 605 | |
---|
.. | .. |
---|
634 | 629 | struct v4l2_pix_format *pixfmt = &fmt->fmt.pix; |
---|
635 | 630 | |
---|
636 | 631 | /* |
---|
637 | | - * to supress v4l-compliance warnings silently correct |
---|
| 632 | + * to suppress v4l-compliance warnings silently correct |
---|
638 | 633 | * the pixelformat |
---|
639 | 634 | */ |
---|
640 | 635 | if (pixfmt->pixelformat != V4L2_PIX_FMT_YUV422P) |
---|
.. | .. |
---|
986 | 981 | } else { |
---|
987 | 982 | std_info->l5 = std_info->vsize - (bt->vfrontporch - 1); |
---|
988 | 983 | } |
---|
989 | | - strncpy(std_info->name, "Custom timings BT656/1120", |
---|
990 | | - VPIF_MAX_NAME); |
---|
| 984 | + strscpy(std_info->name, "Custom timings BT656/1120", |
---|
| 985 | + sizeof(std_info->name)); |
---|
991 | 986 | std_info->width = bt->width; |
---|
992 | 987 | std_info->height = bt->height; |
---|
993 | 988 | std_info->frm_fmt = bt->interlaced ? 0 : 1; |
---|
.. | .. |
---|
1209 | 1204 | |
---|
1210 | 1205 | /* Initialize the video_device structure */ |
---|
1211 | 1206 | vdev = &ch->video_dev; |
---|
1212 | | - strlcpy(vdev->name, VPIF_DRIVER_NAME, sizeof(vdev->name)); |
---|
| 1207 | + strscpy(vdev->name, VPIF_DRIVER_NAME, sizeof(vdev->name)); |
---|
1213 | 1208 | vdev->release = video_device_release_empty; |
---|
1214 | 1209 | vdev->fops = &vpif_fops; |
---|
1215 | 1210 | vdev->ioctl_ops = &vpif_ioctl_ops; |
---|
.. | .. |
---|
1217 | 1212 | vdev->vfl_dir = VFL_DIR_TX; |
---|
1218 | 1213 | vdev->queue = q; |
---|
1219 | 1214 | vdev->lock = &common->lock; |
---|
| 1215 | + vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING; |
---|
1220 | 1216 | video_set_drvdata(&ch->video_dev, ch); |
---|
1221 | | - err = video_register_device(vdev, VFL_TYPE_GRABBER, |
---|
| 1217 | + err = video_register_device(vdev, VFL_TYPE_VIDEO, |
---|
1222 | 1218 | (j ? 3 : 2)); |
---|
1223 | 1219 | if (err < 0) |
---|
1224 | 1220 | goto probe_out; |
---|
.. | .. |
---|
1229 | 1225 | probe_out: |
---|
1230 | 1226 | for (k = 0; k < j; k++) { |
---|
1231 | 1227 | ch = vpif_obj.dev[k]; |
---|
1232 | | - common = &ch->common[k]; |
---|
1233 | 1228 | video_unregister_device(&ch->video_dev); |
---|
1234 | 1229 | } |
---|
1235 | 1230 | return err; |
---|
.. | .. |
---|
1299 | 1294 | goto vpif_unregister; |
---|
1300 | 1295 | } |
---|
1301 | 1296 | |
---|
| 1297 | + v4l2_async_notifier_init(&vpif_obj.notifier); |
---|
| 1298 | + |
---|
1302 | 1299 | if (!vpif_obj.config->asd_sizes) { |
---|
1303 | 1300 | i2c_adap = i2c_get_adapter(vpif_obj.config->i2c_adapter_id); |
---|
1304 | 1301 | for (i = 0; i < subdev_count; i++) { |
---|
.. | .. |
---|
1322 | 1319 | goto probe_subdev_out; |
---|
1323 | 1320 | } |
---|
1324 | 1321 | } else { |
---|
1325 | | - vpif_obj.notifier.subdevs = vpif_obj.config->asd; |
---|
1326 | | - vpif_obj.notifier.num_subdevs = vpif_obj.config->asd_sizes[0]; |
---|
| 1322 | + for (i = 0; i < vpif_obj.config->asd_sizes[0]; i++) { |
---|
| 1323 | + err = v4l2_async_notifier_add_subdev( |
---|
| 1324 | + &vpif_obj.notifier, vpif_obj.config->asd[i]); |
---|
| 1325 | + if (err) |
---|
| 1326 | + goto probe_cleanup; |
---|
| 1327 | + } |
---|
| 1328 | + |
---|
1327 | 1329 | vpif_obj.notifier.ops = &vpif_async_ops; |
---|
1328 | 1330 | err = v4l2_async_notifier_register(&vpif_obj.v4l2_dev, |
---|
1329 | 1331 | &vpif_obj.notifier); |
---|
1330 | 1332 | if (err) { |
---|
1331 | 1333 | vpif_err("Error registering async notifier\n"); |
---|
1332 | 1334 | err = -EINVAL; |
---|
1333 | | - goto probe_subdev_out; |
---|
| 1335 | + goto probe_cleanup; |
---|
1334 | 1336 | } |
---|
1335 | 1337 | } |
---|
1336 | 1338 | |
---|
1337 | 1339 | return 0; |
---|
1338 | 1340 | |
---|
| 1341 | +probe_cleanup: |
---|
| 1342 | + v4l2_async_notifier_cleanup(&vpif_obj.notifier); |
---|
1339 | 1343 | probe_subdev_out: |
---|
1340 | 1344 | kfree(vpif_obj.sd); |
---|
1341 | 1345 | vpif_unregister: |
---|
.. | .. |
---|
1354 | 1358 | struct channel_obj *ch; |
---|
1355 | 1359 | int i; |
---|
1356 | 1360 | |
---|
| 1361 | + if (vpif_obj.config->asd_sizes) { |
---|
| 1362 | + v4l2_async_notifier_unregister(&vpif_obj.notifier); |
---|
| 1363 | + v4l2_async_notifier_cleanup(&vpif_obj.notifier); |
---|
| 1364 | + } |
---|
| 1365 | + |
---|
1357 | 1366 | v4l2_device_unregister(&vpif_obj.v4l2_dev); |
---|
1358 | 1367 | |
---|
1359 | 1368 | kfree(vpif_obj.sd); |
---|