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 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);
|
int rc;
|
||||||
video_device_create_file(vdev, &class_device_attr_model);
|
|
||||||
video_device_create_file(vdev, &class_device_attr_bridge);
|
rc = video_device_create_file(vdev, &class_device_attr_custom_id);
|
||||||
video_device_create_file(vdev, &class_device_attr_sensor);
|
if (rc) goto err;
|
||||||
video_device_create_file(vdev, &class_device_attr_brightness);
|
rc = video_device_create_file(vdev, &class_device_attr_model);
|
||||||
video_device_create_file(vdev, &class_device_attr_saturation);
|
if (rc) goto err_id;
|
||||||
video_device_create_file(vdev, &class_device_attr_contrast);
|
rc = video_device_create_file(vdev, &class_device_attr_bridge);
|
||||||
video_device_create_file(vdev, &class_device_attr_hue);
|
if (rc) goto err_model;
|
||||||
video_device_create_file(vdev, &class_device_attr_exposure);
|
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);
|
ov->vdev->minor);
|
||||||
|
|
||||||
usb_set_intfdata(intf, ov);
|
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;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
|
|
@ -516,16 +516,45 @@ stv680_file(frames_read, framecount, "%d\n");
|
||||||
stv680_file(packets_dropped, dropped, "%d\n");
|
stv680_file(packets_dropped, dropped, "%d\n");
|
||||||
stv680_file(decoding_errors, error, "%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);
|
int rc;
|
||||||
video_device_create_file(vdev, &class_device_attr_in_use);
|
|
||||||
video_device_create_file(vdev, &class_device_attr_streaming);
|
rc = video_device_create_file(vdev, &class_device_attr_model);
|
||||||
video_device_create_file(vdev, &class_device_attr_palette);
|
if (rc) goto err;
|
||||||
video_device_create_file(vdev, &class_device_attr_frames_total);
|
rc = video_device_create_file(vdev, &class_device_attr_in_use);
|
||||||
video_device_create_file(vdev, &class_device_attr_frames_read);
|
if (rc) goto err_model;
|
||||||
video_device_create_file(vdev, &class_device_attr_packets_dropped);
|
rc = video_device_create_file(vdev, &class_device_attr_streaming);
|
||||||
video_device_create_file(vdev, &class_device_attr_decoding_errors);
|
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)
|
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);
|
PDEBUG (0, "STV(i): registered new video device: video%d", stv680->vdev->minor);
|
||||||
|
|
||||||
usb_set_intfdata (intf, stv680);
|
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;
|
return 0;
|
||||||
|
|
||||||
|
error_unreg:
|
||||||
|
video_unregister_device(stv680->vdev);
|
||||||
error_vdev:
|
error_vdev:
|
||||||
video_device_release(stv680->vdev);
|
video_device_release(stv680->vdev);
|
||||||
error:
|
error:
|
||||||
|
|
Loading…
Add table
Reference in a new issue