mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 10:29:37 +00:00
V4L/DVB (4741): {ov511,stv680}: handle sysfs errors
Signed-off-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
474ce78130
commit
2444a2fca4
2 changed files with 90 additions and 21 deletions
|
@ -5648,17 +5648,49 @@ static ssize_t show_exposure(struct class_device *cd, char *buf)
|
|||
}
|
||||
static CLASS_DEVICE_ATTR(exposure, S_IRUGO, show_exposure, NULL);
|
||||
|
||||
static void ov_create_sysfs(struct video_device *vdev)
|
||||
static int ov_create_sysfs(struct video_device *vdev)
|
||||
{
|
||||
video_device_create_file(vdev, &class_device_attr_custom_id);
|
||||
video_device_create_file(vdev, &class_device_attr_model);
|
||||
video_device_create_file(vdev, &class_device_attr_bridge);
|
||||
video_device_create_file(vdev, &class_device_attr_sensor);
|
||||
video_device_create_file(vdev, &class_device_attr_brightness);
|
||||
video_device_create_file(vdev, &class_device_attr_saturation);
|
||||
video_device_create_file(vdev, &class_device_attr_contrast);
|
||||
video_device_create_file(vdev, &class_device_attr_hue);
|
||||
video_device_create_file(vdev, &class_device_attr_exposure);
|
||||
int rc;
|
||||
|
||||
rc = video_device_create_file(vdev, &class_device_attr_custom_id);
|
||||
if (rc) goto err;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_model);
|
||||
if (rc) goto err_id;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_bridge);
|
||||
if (rc) goto err_model;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_sensor);
|
||||
if (rc) goto err_bridge;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_brightness);
|
||||
if (rc) goto err_sensor;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_saturation);
|
||||
if (rc) goto err_bright;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_contrast);
|
||||
if (rc) goto err_sat;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_hue);
|
||||
if (rc) goto err_contrast;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_exposure);
|
||||
if (rc) goto err_hue;
|
||||
|
||||
return 0;
|
||||
|
||||
err_hue:
|
||||
video_device_remove_file(vdev, &class_device_attr_hue);
|
||||
err_contrast:
|
||||
video_device_remove_file(vdev, &class_device_attr_contrast);
|
||||
err_sat:
|
||||
video_device_remove_file(vdev, &class_device_attr_saturation);
|
||||
err_bright:
|
||||
video_device_remove_file(vdev, &class_device_attr_brightness);
|
||||
err_sensor:
|
||||
video_device_remove_file(vdev, &class_device_attr_sensor);
|
||||
err_bridge:
|
||||
video_device_remove_file(vdev, &class_device_attr_bridge);
|
||||
err_model:
|
||||
video_device_remove_file(vdev, &class_device_attr_model);
|
||||
err_id:
|
||||
video_device_remove_file(vdev, &class_device_attr_custom_id);
|
||||
err:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -5817,7 +5849,11 @@ ov51x_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
ov->vdev->minor);
|
||||
|
||||
usb_set_intfdata(intf, ov);
|
||||
ov_create_sysfs(ov->vdev);
|
||||
if (ov_create_sysfs(ov->vdev)) {
|
||||
err("ov_create_sysfs failed");
|
||||
goto error;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
|
|
@ -516,16 +516,45 @@ stv680_file(frames_read, framecount, "%d\n");
|
|||
stv680_file(packets_dropped, dropped, "%d\n");
|
||||
stv680_file(decoding_errors, error, "%d\n");
|
||||
|
||||
static void stv680_create_sysfs_files(struct video_device *vdev)
|
||||
static int stv680_create_sysfs_files(struct video_device *vdev)
|
||||
{
|
||||
video_device_create_file(vdev, &class_device_attr_model);
|
||||
video_device_create_file(vdev, &class_device_attr_in_use);
|
||||
video_device_create_file(vdev, &class_device_attr_streaming);
|
||||
video_device_create_file(vdev, &class_device_attr_palette);
|
||||
video_device_create_file(vdev, &class_device_attr_frames_total);
|
||||
video_device_create_file(vdev, &class_device_attr_frames_read);
|
||||
video_device_create_file(vdev, &class_device_attr_packets_dropped);
|
||||
video_device_create_file(vdev, &class_device_attr_decoding_errors);
|
||||
int rc;
|
||||
|
||||
rc = video_device_create_file(vdev, &class_device_attr_model);
|
||||
if (rc) goto err;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_in_use);
|
||||
if (rc) goto err_model;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_streaming);
|
||||
if (rc) goto err_inuse;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_palette);
|
||||
if (rc) goto err_stream;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_frames_total);
|
||||
if (rc) goto err_pal;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_frames_read);
|
||||
if (rc) goto err_framtot;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_packets_dropped);
|
||||
if (rc) goto err_framread;
|
||||
rc = video_device_create_file(vdev, &class_device_attr_decoding_errors);
|
||||
if (rc) goto err_dropped;
|
||||
|
||||
return 0;
|
||||
|
||||
err_dropped:
|
||||
video_device_remove_file(vdev, &class_device_attr_packets_dropped);
|
||||
err_framread:
|
||||
video_device_remove_file(vdev, &class_device_attr_frames_read);
|
||||
err_framtot:
|
||||
video_device_remove_file(vdev, &class_device_attr_frames_total);
|
||||
err_pal:
|
||||
video_device_remove_file(vdev, &class_device_attr_palette);
|
||||
err_stream:
|
||||
video_device_remove_file(vdev, &class_device_attr_streaming);
|
||||
err_inuse:
|
||||
video_device_remove_file(vdev, &class_device_attr_in_use);
|
||||
err_model:
|
||||
video_device_remove_file(vdev, &class_device_attr_model);
|
||||
err:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void stv680_remove_sysfs_files(struct video_device *vdev)
|
||||
|
@ -1418,9 +1447,13 @@ static int stv680_probe (struct usb_interface *intf, const struct usb_device_id
|
|||
PDEBUG (0, "STV(i): registered new video device: video%d", stv680->vdev->minor);
|
||||
|
||||
usb_set_intfdata (intf, stv680);
|
||||
stv680_create_sysfs_files(stv680->vdev);
|
||||
retval = stv680_create_sysfs_files(stv680->vdev);
|
||||
if (retval)
|
||||
goto error_unreg;
|
||||
return 0;
|
||||
|
||||
error_unreg:
|
||||
video_unregister_device(stv680->vdev);
|
||||
error_vdev:
|
||||
video_device_release(stv680->vdev);
|
||||
error:
|
||||
|
|
Loading…
Reference in a new issue