Error Trace

[Home]

Bug # 53

Show/hide error trace
Error trace
Function bodies
Blocks
  • Others...
    Function bodies without model function calls
    Initialization function calls
    Initialization function bodies
    Entry point
    Entry point body
    Function calls
    Skipped function calls
    Formal parameter names
    Declarations
    Assumes
    Assume conditions
    Returns
    Return values
    DEG initialization
    DEG function calls
    Model function calls
    Model function bodies
    Model asserts
    Model state changes
    Model function function calls
    Model function function bodies
    Model returns
    Model others
    Identation
    Line numbers
    Expand signs
-__BLAST_initialize_/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/rcv/132_1a/main-ldv_main1_sequence_infinite_withcheck_stateful/preprocess/1-cpp/drivers/media/usb/usbvision/usbvision-core.o.i()
{
52 -adjust_compression = 1;
adjust_x_offset = 4294967295;
adjust_y_offset = 4294967295;
scratch_buf_size = 131072;
return ;
}
-__BLAST_initialize_/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/rcv/132_1a/main-ldv_main1_sequence_infinite_withcheck_stateful/preprocess/1-cpp/drivers/media/usb/usbvision/usbvision-video.o.i()
{
107 -usbvision_v4l2_format[ 0 ].supported = 1;
usbvision_v4l2_format[ 0 ].bytes_per_pixel = 1;
usbvision_v4l2_format[ 0 ].depth = 8;
usbvision_v4l2_format[ 0 ].format = 1497715271;
usbvision_v4l2_format[ 0 ].desc = "GREY";
usbvision_v4l2_format[ 1 ].supported = 1;
usbvision_v4l2_format[ 1 ].bytes_per_pixel = 2;
usbvision_v4l2_format[ 1 ].depth = 16;
usbvision_v4l2_format[ 1 ].format = 1346520914;
usbvision_v4l2_format[ 1 ].desc = "RGB565";
usbvision_v4l2_format[ 2 ].supported = 1;
usbvision_v4l2_format[ 2 ].bytes_per_pixel = 3;
usbvision_v4l2_format[ 2 ].depth = 24;
usbvision_v4l2_format[ 2 ].format = 859981650;
usbvision_v4l2_format[ 2 ].desc = "RGB24";
usbvision_v4l2_format[ 3 ].supported = 1;
usbvision_v4l2_format[ 3 ].bytes_per_pixel = 4;
usbvision_v4l2_format[ 3 ].depth = 32;
usbvision_v4l2_format[ 3 ].format = 876758866;
usbvision_v4l2_format[ 3 ].desc = "RGB32";
usbvision_v4l2_format[ 4 ].supported = 1;
usbvision_v4l2_format[ 4 ].bytes_per_pixel = 2;
usbvision_v4l2_format[ 4 ].depth = 16;
usbvision_v4l2_format[ 4 ].format = 1329743698;
usbvision_v4l2_format[ 4 ].desc = "RGB555";
usbvision_v4l2_format[ 5 ].supported = 1;
usbvision_v4l2_format[ 5 ].bytes_per_pixel = 2;
usbvision_v4l2_format[ 5 ].depth = 16;
usbvision_v4l2_format[ 5 ].format = 1448695129;
usbvision_v4l2_format[ 5 ].desc = "YUV422";
usbvision_v4l2_format[ 6 ].supported = 1;
usbvision_v4l2_format[ 6 ].bytes_per_pixel = 2;
usbvision_v4l2_format[ 6 ].depth = 12;
usbvision_v4l2_format[ 6 ].format = 842094169;
usbvision_v4l2_format[ 6 ].desc = "YUV420P";
usbvision_v4l2_format[ 7 ].supported = 1;
usbvision_v4l2_format[ 7 ].bytes_per_pixel = 2;
usbvision_v4l2_format[ 7 ].depth = 16;
usbvision_v4l2_format[ 7 ].format = 1345466932;
usbvision_v4l2_format[ 7 ].desc = "YUV422P";
isoc_mode = 96;
power_on_at_open = 1;
video_nr = -1;
radio_nr = -1;
dev_attr_version.attr.name = "version";
dev_attr_version.attr.mode = 292;
dev_attr_version.attr.ignore_lockdep = 0;
dev_attr_version.attr.key = 0;
dev_attr_version.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_version.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_version.show = &(show_version);
dev_attr_version.store = 0;
dev_attr_model.attr.name = "model";
dev_attr_model.attr.mode = 292;
dev_attr_model.attr.ignore_lockdep = 0;
dev_attr_model.attr.key = 0;
dev_attr_model.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_model.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_model.show = &(show_model);
dev_attr_model.store = 0;
dev_attr_hue.attr.name = "hue";
dev_attr_hue.attr.mode = 292;
dev_attr_hue.attr.ignore_lockdep = 0;
dev_attr_hue.attr.key = 0;
dev_attr_hue.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_hue.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_hue.show = &(show_hue);
dev_attr_hue.store = 0;
dev_attr_contrast.attr.name = "contrast";
dev_attr_contrast.attr.mode = 292;
dev_attr_contrast.attr.ignore_lockdep = 0;
dev_attr_contrast.attr.key = 0;
dev_attr_contrast.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_contrast.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_contrast.show = &(show_contrast);
dev_attr_contrast.store = 0;
dev_attr_brightness.attr.name = "brightness";
dev_attr_brightness.attr.mode = 292;
dev_attr_brightness.attr.ignore_lockdep = 0;
dev_attr_brightness.attr.key = 0;
dev_attr_brightness.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_brightness.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_brightness.show = &(show_brightness);
dev_attr_brightness.store = 0;
dev_attr_saturation.attr.name = "saturation";
dev_attr_saturation.attr.mode = 292;
dev_attr_saturation.attr.ignore_lockdep = 0;
dev_attr_saturation.attr.key = 0;
dev_attr_saturation.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_saturation.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_saturation.show = &(show_saturation);
dev_attr_saturation.store = 0;
dev_attr_streaming.attr.name = "streaming";
dev_attr_streaming.attr.mode = 292;
dev_attr_streaming.attr.ignore_lockdep = 0;
dev_attr_streaming.attr.key = 0;
dev_attr_streaming.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_streaming.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_streaming.show = &(show_streaming);
dev_attr_streaming.store = 0;
dev_attr_compression.attr.name = "compression";
dev_attr_compression.attr.mode = 292;
dev_attr_compression.attr.ignore_lockdep = 0;
dev_attr_compression.attr.key = 0;
dev_attr_compression.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_compression.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_compression.show = &(show_compression);
dev_attr_compression.store = 0;
dev_attr_bridge.attr.name = "bridge";
dev_attr_bridge.attr.mode = 292;
dev_attr_bridge.attr.ignore_lockdep = 0;
dev_attr_bridge.attr.key = 0;
dev_attr_bridge.attr.skey.subkeys[ 0 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 1 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 2 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 3 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 4 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 5 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 6 ].__one_byte = 0;
dev_attr_bridge.attr.skey.subkeys[ 7 ].__one_byte = 0;
dev_attr_bridge.show = &(show_device_bridge);
dev_attr_bridge.store = 0;
usbvision_fops.owner = &(__this_module);
usbvision_fops.read = &(usbvision_v4l2_read);
usbvision_fops.write = 0;
usbvision_fops.poll = 0;
usbvision_fops.ioctl = 0;
usbvision_fops.unlocked_ioctl = &(video_ioctl2);
usbvision_fops.compat_ioctl32 = 0;
usbvision_fops.get_unmapped_area = 0;
usbvision_fops.mmap = &(usbvision_v4l2_mmap);
usbvision_fops.open = &(usbvision_v4l2_open);
usbvision_fops.release = &(usbvision_v4l2_close);
usbvision_ioctl_ops.vidioc_querycap = &(vidioc_querycap);
usbvision_ioctl_ops.vidioc_g_priority = 0;
usbvision_ioctl_ops.vidioc_s_priority = 0;
usbvision_ioctl_ops.vidioc_enum_fmt_vid_cap = &(vidioc_enum_fmt_vid_cap);
usbvision_ioctl_ops.vidioc_enum_fmt_vid_overlay = 0;
usbvision_ioctl_ops.vidioc_enum_fmt_vid_out = 0;
usbvision_ioctl_ops.vidioc_enum_fmt_vid_cap_mplane = 0;
usbvision_ioctl_ops.vidioc_enum_fmt_vid_out_mplane = 0;
usbvision_ioctl_ops.vidioc_enum_fmt_sdr_cap = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vid_cap = &(vidioc_g_fmt_vid_cap);
usbvision_ioctl_ops.vidioc_g_fmt_vid_overlay = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vid_out = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vid_out_overlay = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vbi_out = 0;
usbvision_ioctl_ops.vidioc_g_fmt_sliced_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_g_fmt_sliced_vbi_out = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vid_cap_mplane = 0;
usbvision_ioctl_ops.vidioc_g_fmt_vid_out_mplane = 0;
usbvision_ioctl_ops.vidioc_g_fmt_sdr_cap = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vid_cap = &(vidioc_s_fmt_vid_cap);
usbvision_ioctl_ops.vidioc_s_fmt_vid_overlay = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vid_out = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vid_out_overlay = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vbi_out = 0;
usbvision_ioctl_ops.vidioc_s_fmt_sliced_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_s_fmt_sliced_vbi_out = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vid_cap_mplane = 0;
usbvision_ioctl_ops.vidioc_s_fmt_vid_out_mplane = 0;
usbvision_ioctl_ops.vidioc_s_fmt_sdr_cap = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vid_cap = &(vidioc_try_fmt_vid_cap);
usbvision_ioctl_ops.vidioc_try_fmt_vid_overlay = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vid_out = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vid_out_overlay = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vbi_out = 0;
usbvision_ioctl_ops.vidioc_try_fmt_sliced_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_try_fmt_sliced_vbi_out = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vid_cap_mplane = 0;
usbvision_ioctl_ops.vidioc_try_fmt_vid_out_mplane = 0;
usbvision_ioctl_ops.vidioc_try_fmt_sdr_cap = 0;
usbvision_ioctl_ops.vidioc_reqbufs = &(vidioc_reqbufs);
usbvision_ioctl_ops.vidioc_querybuf = &(vidioc_querybuf);
usbvision_ioctl_ops.vidioc_qbuf = &(vidioc_qbuf);
usbvision_ioctl_ops.vidioc_expbuf = 0;
usbvision_ioctl_ops.vidioc_dqbuf = &(vidioc_dqbuf);
usbvision_ioctl_ops.vidioc_create_bufs = 0;
usbvision_ioctl_ops.vidioc_prepare_buf = 0;
usbvision_ioctl_ops.vidioc_overlay = 0;
usbvision_ioctl_ops.vidioc_g_fbuf = 0;
usbvision_ioctl_ops.vidioc_s_fbuf = 0;
usbvision_ioctl_ops.vidioc_streamon = &(vidioc_streamon);
usbvision_ioctl_ops.vidioc_streamoff = &(vidioc_streamoff);
usbvision_ioctl_ops.vidioc_g_std = &(vidioc_g_std);
usbvision_ioctl_ops.vidioc_s_std = &(vidioc_s_std);
usbvision_ioctl_ops.vidioc_querystd = 0;
usbvision_ioctl_ops.vidioc_enum_input = &(vidioc_enum_input);
usbvision_ioctl_ops.vidioc_g_input = &(vidioc_g_input);
usbvision_ioctl_ops.vidioc_s_input = &(vidioc_s_input);
usbvision_ioctl_ops.vidioc_enum_output = 0;
usbvision_ioctl_ops.vidioc_g_output = 0;
usbvision_ioctl_ops.vidioc_s_output = 0;
usbvision_ioctl_ops.vidioc_queryctrl = &(vidioc_queryctrl);
usbvision_ioctl_ops.vidioc_query_ext_ctrl = 0;
usbvision_ioctl_ops.vidioc_g_ctrl = &(vidioc_g_ctrl);
usbvision_ioctl_ops.vidioc_s_ctrl = &(vidioc_s_ctrl);
usbvision_ioctl_ops.vidioc_g_ext_ctrls = 0;
usbvision_ioctl_ops.vidioc_s_ext_ctrls = 0;
usbvision_ioctl_ops.vidioc_try_ext_ctrls = 0;
usbvision_ioctl_ops.vidioc_querymenu = 0;
usbvision_ioctl_ops.vidioc_enumaudio = 0;
usbvision_ioctl_ops.vidioc_g_audio = &(vidioc_g_audio);
usbvision_ioctl_ops.vidioc_s_audio = &(vidioc_s_audio);
usbvision_ioctl_ops.vidioc_enumaudout = 0;
usbvision_ioctl_ops.vidioc_g_audout = 0;
usbvision_ioctl_ops.vidioc_s_audout = 0;
usbvision_ioctl_ops.vidioc_g_modulator = 0;
usbvision_ioctl_ops.vidioc_s_modulator = 0;
usbvision_ioctl_ops.vidioc_cropcap = 0;
usbvision_ioctl_ops.vidioc_g_crop = 0;
usbvision_ioctl_ops.vidioc_s_crop = 0;
usbvision_ioctl_ops.vidioc_g_selection = 0;
usbvision_ioctl_ops.vidioc_s_selection = 0;
usbvision_ioctl_ops.vidioc_g_jpegcomp = 0;
usbvision_ioctl_ops.vidioc_s_jpegcomp = 0;
usbvision_ioctl_ops.vidioc_g_enc_index = 0;
usbvision_ioctl_ops.vidioc_encoder_cmd = 0;
usbvision_ioctl_ops.vidioc_try_encoder_cmd = 0;
usbvision_ioctl_ops.vidioc_decoder_cmd = 0;
usbvision_ioctl_ops.vidioc_try_decoder_cmd = 0;
usbvision_ioctl_ops.vidioc_g_parm = 0;
usbvision_ioctl_ops.vidioc_s_parm = 0;
usbvision_ioctl_ops.vidioc_g_tuner = &(vidioc_g_tuner);
usbvision_ioctl_ops.vidioc_s_tuner = &(vidioc_s_tuner);
usbvision_ioctl_ops.vidioc_g_frequency = &(vidioc_g_frequency);
usbvision_ioctl_ops.vidioc_s_frequency = &(vidioc_s_frequency);
usbvision_ioctl_ops.vidioc_enum_freq_bands = 0;
usbvision_ioctl_ops.vidioc_g_sliced_vbi_cap = 0;
usbvision_ioctl_ops.vidioc_log_status = 0;
usbvision_ioctl_ops.vidioc_s_hw_freq_seek = 0;
usbvision_ioctl_ops.vidioc_g_register = &(vidioc_g_register);
usbvision_ioctl_ops.vidioc_s_register = &(vidioc_s_register);
usbvision_ioctl_ops.vidioc_g_chip_info = 0;
usbvision_ioctl_ops.vidioc_enum_framesizes = 0;
usbvision_ioctl_ops.vidioc_enum_frameintervals = 0;
usbvision_ioctl_ops.vidioc_s_dv_timings = 0;
usbvision_ioctl_ops.vidioc_g_dv_timings = 0;
usbvision_ioctl_ops.vidioc_query_dv_timings = 0;
usbvision_ioctl_ops.vidioc_enum_dv_timings = 0;
usbvision_ioctl_ops.vidioc_dv_timings_cap = 0;
usbvision_ioctl_ops.vidioc_g_edid = 0;
usbvision_ioctl_ops.vidioc_s_edid = 0;
usbvision_ioctl_ops.vidioc_subscribe_event = 0;
usbvision_ioctl_ops.vidioc_unsubscribe_event = 0;
usbvision_ioctl_ops.vidioc_default = 0;
usbvision_video_template.entity.list.next = 0;
usbvision_video_template.entity.list.prev = 0;
usbvision_video_template.entity.parent = 0;
usbvision_video_template.entity.id = 0;
usbvision_video_template.entity.name = 0;
usbvision_video_template.entity.type = 0;
usbvision_video_template.entity.revision = 0;
usbvision_video_template.entity.flags = 0;
usbvision_video_template.entity.group_id = 0;
usbvision_video_template.entity.num_pads = 0;
usbvision_video_template.entity.num_links = 0;
usbvision_video_template.entity.num_backlinks = 0;
usbvision_video_template.entity.max_links = 0;
usbvision_video_template.entity.pads = 0;
usbvision_video_template.entity.links = 0;
usbvision_video_template.entity.ops = 0;
usbvision_video_template.entity.stream_count = 0;
usbvision_video_template.entity.use_count = 0;
usbvision_video_template.entity.pipe = 0;
usbvision_video_template.entity.info.alsa.card = 0;
usbvision_video_template.entity.info.alsa.device = 0;
usbvision_video_template.entity.info.alsa.subdevice = 0;
usbvision_video_template.fops = &(usbvision_fops);
usbvision_video_template.dev.parent = 0;
usbvision_video_template.dev.p = 0;
usbvision_video_template.dev.kobj.name = 0;
usbvision_video_template.dev.kobj.entry.next = 0;
usbvision_video_template.dev.kobj.entry.prev = 0;
usbvision_video_template.dev.kobj.parent = 0;
usbvision_video_template.dev.kobj.kset = 0;
usbvision_video_template.dev.kobj.ktype = 0;
usbvision_video_template.dev.kobj.sd = 0;
usbvision_video_template.dev.kobj.kref.refcount.counter = 0;
usbvision_video_template.dev.kobj.release.work.data.counter = 0;
usbvision_video_template.dev.kobj.release.work.entry.next = 0;
usbvision_video_template.dev.kobj.release.work.entry.prev = 0;
usbvision_video_template.dev.kobj.release.work.func = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.key = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.name = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.cpu = 0;
usbvision_video_template.dev.kobj.release.work.lockdep_map.ip = 0;
usbvision_video_template.dev.kobj.release.timer.entry.next = 0;
usbvision_video_template.dev.kobj.release.timer.entry.prev = 0;
usbvision_video_template.dev.kobj.release.timer.expires = 0;
usbvision_video_template.dev.kobj.release.timer.base = 0;
usbvision_video_template.dev.kobj.release.timer.function = 0;
usbvision_video_template.dev.kobj.release.timer.data = 0;
usbvision_video_template.dev.kobj.release.timer.slack = 0;
usbvision_video_template.dev.kobj.release.timer.start_pid = 0;
usbvision_video_template.dev.kobj.release.timer.start_site = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 0 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 1 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 2 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 3 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 4 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 5 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 6 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 7 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 8 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 9 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 10 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 11 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 12 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 13 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 14 ] = 0;
usbvision_video_template.dev.kobj.release.timer.start_comm[ 15 ] = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.key = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.name = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.cpu = 0;
usbvision_video_template.dev.kobj.release.timer.lockdep_map.ip = 0;
usbvision_video_template.dev.kobj.release.wq = 0;
usbvision_video_template.dev.kobj.release.cpu = 0;
usbvision_video_template.dev.kobj.state_initialized = 0;
usbvision_video_template.dev.kobj.state_in_sysfs = 0;
usbvision_video_template.dev.kobj.state_add_uevent_sent = 0;
usbvision_video_template.dev.kobj.state_remove_uevent_sent = 0;
usbvision_video_template.dev.kobj.uevent_suppress = 0;
usbvision_video_template.dev.init_name = 0;
usbvision_video_template.dev.type = 0;
usbvision_video_template.dev.mutex.count.counter = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.dev.mutex.wait_list.next = 0;
usbvision_video_template.dev.mutex.wait_list.prev = 0;
usbvision_video_template.dev.mutex.owner = 0;
usbvision_video_template.dev.mutex.magic = 0;
usbvision_video_template.dev.mutex.dep_map.key = 0;
usbvision_video_template.dev.mutex.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.mutex.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.mutex.dep_map.name = 0;
usbvision_video_template.dev.mutex.dep_map.cpu = 0;
usbvision_video_template.dev.mutex.dep_map.ip = 0;
usbvision_video_template.dev.bus = 0;
usbvision_video_template.dev.driver = 0;
usbvision_video_template.dev.platform_data = 0;
usbvision_video_template.dev.driver_data = 0;
usbvision_video_template.dev.power.power_state.event = 0;
usbvision_video_template.dev.power.can_wakeup = 0;
usbvision_video_template.dev.power.async_suspend = 0;
usbvision_video_template.dev.power.is_prepared = 0;
usbvision_video_template.dev.power.is_suspended = 0;
usbvision_video_template.dev.power.is_noirq_suspended = 0;
usbvision_video_template.dev.power.is_late_suspended = 0;
usbvision_video_template.dev.power.ignore_children = 0;
usbvision_video_template.dev.power.early_init = 0;
usbvision_video_template.dev.power.direct_complete = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.dev.power.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.dev.power.entry.next = 0;
usbvision_video_template.dev.power.entry.prev = 0;
usbvision_video_template.dev.power.completion.done = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.dev.power.completion.wait.task_list.next = 0;
usbvision_video_template.dev.power.completion.wait.task_list.prev = 0;
usbvision_video_template.dev.power.wakeup = 0;
usbvision_video_template.dev.power.wakeup_path = 0;
usbvision_video_template.dev.power.syscore = 0;
usbvision_video_template.dev.power.suspend_timer.entry.next = 0;
usbvision_video_template.dev.power.suspend_timer.entry.prev = 0;
usbvision_video_template.dev.power.suspend_timer.expires = 0;
usbvision_video_template.dev.power.suspend_timer.base = 0;
usbvision_video_template.dev.power.suspend_timer.function = 0;
usbvision_video_template.dev.power.suspend_timer.data = 0;
usbvision_video_template.dev.power.suspend_timer.slack = 0;
usbvision_video_template.dev.power.suspend_timer.start_pid = 0;
usbvision_video_template.dev.power.suspend_timer.start_site = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 0 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 1 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 2 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 3 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 4 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 5 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 6 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 7 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 8 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 9 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 10 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 11 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 12 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 13 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 14 ] = 0;
usbvision_video_template.dev.power.suspend_timer.start_comm[ 15 ] = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.key = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.name = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.cpu = 0;
usbvision_video_template.dev.power.suspend_timer.lockdep_map.ip = 0;
usbvision_video_template.dev.power.timer_expires = 0;
usbvision_video_template.dev.power.work.data.counter = 0;
usbvision_video_template.dev.power.work.entry.next = 0;
usbvision_video_template.dev.power.work.entry.prev = 0;
usbvision_video_template.dev.power.work.func = 0;
usbvision_video_template.dev.power.work.lockdep_map.key = 0;
usbvision_video_template.dev.power.work.lockdep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.power.work.lockdep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.power.work.lockdep_map.name = 0;
usbvision_video_template.dev.power.work.lockdep_map.cpu = 0;
usbvision_video_template.dev.power.work.lockdep_map.ip = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.dev.power.wait_queue.task_list.next = 0;
usbvision_video_template.dev.power.wait_queue.task_list.prev = 0;
usbvision_video_template.dev.power.usage_count.counter = 0;
usbvision_video_template.dev.power.child_count.counter = 0;
usbvision_video_template.dev.power.disable_depth = 0;
usbvision_video_template.dev.power.idle_notification = 0;
usbvision_video_template.dev.power.request_pending = 0;
usbvision_video_template.dev.power.deferred_resume = 0;
usbvision_video_template.dev.power.run_wake = 0;
usbvision_video_template.dev.power.runtime_auto = 0;
usbvision_video_template.dev.power.no_callbacks = 0;
usbvision_video_template.dev.power.irq_safe = 0;
usbvision_video_template.dev.power.use_autosuspend = 0;
usbvision_video_template.dev.power.timer_autosuspends = 0;
usbvision_video_template.dev.power.memalloc_noio = 0;
usbvision_video_template.dev.power.request = 0;
usbvision_video_template.dev.power.runtime_status = 0;
usbvision_video_template.dev.power.runtime_error = 0;
usbvision_video_template.dev.power.autosuspend_delay = 0;
usbvision_video_template.dev.power.last_busy = 0;
usbvision_video_template.dev.power.active_jiffies = 0;
usbvision_video_template.dev.power.suspended_jiffies = 0;
usbvision_video_template.dev.power.accounting_timestamp = 0;
usbvision_video_template.dev.power.subsys_data = 0;
usbvision_video_template.dev.power.set_latency_tolerance = 0;
usbvision_video_template.dev.power.qos = 0;
usbvision_video_template.dev.pm_domain = 0;
usbvision_video_template.dev.pins = 0;
usbvision_video_template.dev.numa_node = 0;
usbvision_video_template.dev.dma_mask = 0;
usbvision_video_template.dev.coherent_dma_mask = 0;
usbvision_video_template.dev.dma_pfn_offset = 0;
usbvision_video_template.dev.dma_parms = 0;
usbvision_video_template.dev.dma_pools.next = 0;
usbvision_video_template.dev.dma_pools.prev = 0;
usbvision_video_template.dev.dma_mem = 0;
usbvision_video_template.dev.cma_area = 0;
usbvision_video_template.dev.archdata.dma_ops = 0;
usbvision_video_template.dev.archdata.iommu = 0;
usbvision_video_template.dev.of_node = 0;
usbvision_video_template.dev.acpi_node.companion = 0;
usbvision_video_template.dev.devt = 0;
usbvision_video_template.dev.id = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.dev.devres_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.dev.devres_head.next = 0;
usbvision_video_template.dev.devres_head.prev = 0;
usbvision_video_template.dev.knode_class.n_klist = 0;
usbvision_video_template.dev.knode_class.n_node.next = 0;
usbvision_video_template.dev.knode_class.n_node.prev = 0;
usbvision_video_template.dev.knode_class.n_ref.refcount.counter = 0;
usbvision_video_template.dev.class = 0;
usbvision_video_template.dev.groups = 0;
usbvision_video_template.dev.release = 0;
usbvision_video_template.dev.iommu_group = 0;
usbvision_video_template.dev.offline_disabled = 0;
usbvision_video_template.dev.offline = 0;
usbvision_video_template.cdev = 0;
usbvision_video_template.v4l2_dev = 0;
usbvision_video_template.dev_parent = 0;
usbvision_video_template.ctrl_handler = 0;
usbvision_video_template.queue = 0;
usbvision_video_template.prio = 0;
usbvision_video_template.name[ 0 ] = 117;
usbvision_video_template.name[ 1 ] = 115;
usbvision_video_template.name[ 2 ] = 98;
usbvision_video_template.name[ 3 ] = 118;
usbvision_video_template.name[ 4 ] = 105;
usbvision_video_template.name[ 5 ] = 115;
usbvision_video_template.name[ 6 ] = 105;
usbvision_video_template.name[ 7 ] = 111;
usbvision_video_template.name[ 8 ] = 110;
usbvision_video_template.name[ 9 ] = 45;
usbvision_video_template.name[ 10 ] = 118;
usbvision_video_template.name[ 11 ] = 105;
usbvision_video_template.name[ 12 ] = 100;
usbvision_video_template.name[ 13 ] = 101;
usbvision_video_template.name[ 14 ] = 111;
usbvision_video_template.name[ 15 ] = 0;
usbvision_video_template.name[ 16 ] = 0;
usbvision_video_template.name[ 17 ] = 0;
usbvision_video_template.name[ 18 ] = 0;
usbvision_video_template.name[ 19 ] = 0;
usbvision_video_template.name[ 20 ] = 0;
usbvision_video_template.name[ 21 ] = 0;
usbvision_video_template.name[ 22 ] = 0;
usbvision_video_template.name[ 23 ] = 0;
usbvision_video_template.name[ 24 ] = 0;
usbvision_video_template.name[ 25 ] = 0;
usbvision_video_template.name[ 26 ] = 0;
usbvision_video_template.name[ 27 ] = 0;
usbvision_video_template.name[ 28 ] = 0;
usbvision_video_template.name[ 29 ] = 0;
usbvision_video_template.name[ 30 ] = 0;
usbvision_video_template.name[ 31 ] = 0;
usbvision_video_template.vfl_type = 0;
usbvision_video_template.vfl_dir = 0;
usbvision_video_template.minor = 0;
usbvision_video_template.num = 0;
usbvision_video_template.flags = 0;
usbvision_video_template.index = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.magic = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.owner = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_video_template.fh_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_video_template.fh_list.next = 0;
usbvision_video_template.fh_list.prev = 0;
usbvision_video_template.dev_debug = 0;
usbvision_video_template.tvnorms = 16757247;
usbvision_video_template.release = &(video_device_release);
usbvision_video_template.ioctl_ops = &(usbvision_ioctl_ops);
usbvision_video_template.valid_ioctls[ 0 ] = 0;
usbvision_video_template.valid_ioctls[ 1 ] = 0;
usbvision_video_template.valid_ioctls[ 2 ] = 0;
usbvision_video_template.disable_locking[ 0 ] = 0;
usbvision_video_template.disable_locking[ 1 ] = 0;
usbvision_video_template.disable_locking[ 2 ] = 0;
usbvision_video_template.lock = 0;
usbvision_radio_fops.owner = &(__this_module);
usbvision_radio_fops.read = 0;
usbvision_radio_fops.write = 0;
usbvision_radio_fops.poll = 0;
usbvision_radio_fops.ioctl = 0;
usbvision_radio_fops.unlocked_ioctl = &(video_ioctl2);
usbvision_radio_fops.compat_ioctl32 = 0;
usbvision_radio_fops.get_unmapped_area = 0;
usbvision_radio_fops.mmap = 0;
usbvision_radio_fops.open = &(usbvision_radio_open);
usbvision_radio_fops.release = &(usbvision_radio_close);
usbvision_radio_ioctl_ops.vidioc_querycap = &(vidioc_querycap);
usbvision_radio_ioctl_ops.vidioc_g_priority = 0;
usbvision_radio_ioctl_ops.vidioc_s_priority = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_vid_cap = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_vid_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_vid_out = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_vid_cap_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_vid_out_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_enum_fmt_sdr_cap = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_cap = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_out = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_out_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_sliced_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_sliced_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_cap_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_vid_out_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_g_fmt_sdr_cap = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_cap = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_out = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_out_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_sliced_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_sliced_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_cap_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_vid_out_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_s_fmt_sdr_cap = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_cap = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_out = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_out_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_sliced_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_sliced_vbi_out = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_cap_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_vid_out_mplane = 0;
usbvision_radio_ioctl_ops.vidioc_try_fmt_sdr_cap = 0;
usbvision_radio_ioctl_ops.vidioc_reqbufs = 0;
usbvision_radio_ioctl_ops.vidioc_querybuf = 0;
usbvision_radio_ioctl_ops.vidioc_qbuf = 0;
usbvision_radio_ioctl_ops.vidioc_expbuf = 0;
usbvision_radio_ioctl_ops.vidioc_dqbuf = 0;
usbvision_radio_ioctl_ops.vidioc_create_bufs = 0;
usbvision_radio_ioctl_ops.vidioc_prepare_buf = 0;
usbvision_radio_ioctl_ops.vidioc_overlay = 0;
usbvision_radio_ioctl_ops.vidioc_g_fbuf = 0;
usbvision_radio_ioctl_ops.vidioc_s_fbuf = 0;
usbvision_radio_ioctl_ops.vidioc_streamon = 0;
usbvision_radio_ioctl_ops.vidioc_streamoff = 0;
usbvision_radio_ioctl_ops.vidioc_g_std = 0;
usbvision_radio_ioctl_ops.vidioc_s_std = 0;
usbvision_radio_ioctl_ops.vidioc_querystd = 0;
usbvision_radio_ioctl_ops.vidioc_enum_input = &(vidioc_enum_input);
usbvision_radio_ioctl_ops.vidioc_g_input = &(vidioc_g_input);
usbvision_radio_ioctl_ops.vidioc_s_input = &(vidioc_s_input);
usbvision_radio_ioctl_ops.vidioc_enum_output = 0;
usbvision_radio_ioctl_ops.vidioc_g_output = 0;
usbvision_radio_ioctl_ops.vidioc_s_output = 0;
usbvision_radio_ioctl_ops.vidioc_queryctrl = &(vidioc_queryctrl);
usbvision_radio_ioctl_ops.vidioc_query_ext_ctrl = 0;
usbvision_radio_ioctl_ops.vidioc_g_ctrl = &(vidioc_g_ctrl);
usbvision_radio_ioctl_ops.vidioc_s_ctrl = &(vidioc_s_ctrl);
usbvision_radio_ioctl_ops.vidioc_g_ext_ctrls = 0;
usbvision_radio_ioctl_ops.vidioc_s_ext_ctrls = 0;
usbvision_radio_ioctl_ops.vidioc_try_ext_ctrls = 0;
usbvision_radio_ioctl_ops.vidioc_querymenu = 0;
usbvision_radio_ioctl_ops.vidioc_enumaudio = 0;
usbvision_radio_ioctl_ops.vidioc_g_audio = &(vidioc_g_audio);
usbvision_radio_ioctl_ops.vidioc_s_audio = &(vidioc_s_audio);
usbvision_radio_ioctl_ops.vidioc_enumaudout = 0;
usbvision_radio_ioctl_ops.vidioc_g_audout = 0;
usbvision_radio_ioctl_ops.vidioc_s_audout = 0;
usbvision_radio_ioctl_ops.vidioc_g_modulator = 0;
usbvision_radio_ioctl_ops.vidioc_s_modulator = 0;
usbvision_radio_ioctl_ops.vidioc_cropcap = 0;
usbvision_radio_ioctl_ops.vidioc_g_crop = 0;
usbvision_radio_ioctl_ops.vidioc_s_crop = 0;
usbvision_radio_ioctl_ops.vidioc_g_selection = 0;
usbvision_radio_ioctl_ops.vidioc_s_selection = 0;
usbvision_radio_ioctl_ops.vidioc_g_jpegcomp = 0;
usbvision_radio_ioctl_ops.vidioc_s_jpegcomp = 0;
usbvision_radio_ioctl_ops.vidioc_g_enc_index = 0;
usbvision_radio_ioctl_ops.vidioc_encoder_cmd = 0;
usbvision_radio_ioctl_ops.vidioc_try_encoder_cmd = 0;
usbvision_radio_ioctl_ops.vidioc_decoder_cmd = 0;
usbvision_radio_ioctl_ops.vidioc_try_decoder_cmd = 0;
usbvision_radio_ioctl_ops.vidioc_g_parm = 0;
usbvision_radio_ioctl_ops.vidioc_s_parm = 0;
usbvision_radio_ioctl_ops.vidioc_g_tuner = &(vidioc_g_tuner);
usbvision_radio_ioctl_ops.vidioc_s_tuner = &(vidioc_s_tuner);
usbvision_radio_ioctl_ops.vidioc_g_frequency = &(vidioc_g_frequency);
usbvision_radio_ioctl_ops.vidioc_s_frequency = &(vidioc_s_frequency);
usbvision_radio_ioctl_ops.vidioc_enum_freq_bands = 0;
usbvision_radio_ioctl_ops.vidioc_g_sliced_vbi_cap = 0;
usbvision_radio_ioctl_ops.vidioc_log_status = 0;
usbvision_radio_ioctl_ops.vidioc_s_hw_freq_seek = 0;
usbvision_radio_ioctl_ops.vidioc_g_register = 0;
usbvision_radio_ioctl_ops.vidioc_s_register = 0;
usbvision_radio_ioctl_ops.vidioc_g_chip_info = 0;
usbvision_radio_ioctl_ops.vidioc_enum_framesizes = 0;
usbvision_radio_ioctl_ops.vidioc_enum_frameintervals = 0;
usbvision_radio_ioctl_ops.vidioc_s_dv_timings = 0;
usbvision_radio_ioctl_ops.vidioc_g_dv_timings = 0;
usbvision_radio_ioctl_ops.vidioc_query_dv_timings = 0;
usbvision_radio_ioctl_ops.vidioc_enum_dv_timings = 0;
usbvision_radio_ioctl_ops.vidioc_dv_timings_cap = 0;
usbvision_radio_ioctl_ops.vidioc_g_edid = 0;
usbvision_radio_ioctl_ops.vidioc_s_edid = 0;
usbvision_radio_ioctl_ops.vidioc_subscribe_event = 0;
usbvision_radio_ioctl_ops.vidioc_unsubscribe_event = 0;
usbvision_radio_ioctl_ops.vidioc_default = 0;
usbvision_radio_template.entity.list.next = 0;
usbvision_radio_template.entity.list.prev = 0;
usbvision_radio_template.entity.parent = 0;
usbvision_radio_template.entity.id = 0;
usbvision_radio_template.entity.name = 0;
usbvision_radio_template.entity.type = 0;
usbvision_radio_template.entity.revision = 0;
usbvision_radio_template.entity.flags = 0;
usbvision_radio_template.entity.group_id = 0;
usbvision_radio_template.entity.num_pads = 0;
usbvision_radio_template.entity.num_links = 0;
usbvision_radio_template.entity.num_backlinks = 0;
usbvision_radio_template.entity.max_links = 0;
usbvision_radio_template.entity.pads = 0;
usbvision_radio_template.entity.links = 0;
usbvision_radio_template.entity.ops = 0;
usbvision_radio_template.entity.stream_count = 0;
usbvision_radio_template.entity.use_count = 0;
usbvision_radio_template.entity.pipe = 0;
usbvision_radio_template.entity.info.alsa.card = 0;
usbvision_radio_template.entity.info.alsa.device = 0;
usbvision_radio_template.entity.info.alsa.subdevice = 0;
usbvision_radio_template.fops = &(usbvision_radio_fops);
usbvision_radio_template.dev.parent = 0;
usbvision_radio_template.dev.p = 0;
usbvision_radio_template.dev.kobj.name = 0;
usbvision_radio_template.dev.kobj.entry.next = 0;
usbvision_radio_template.dev.kobj.entry.prev = 0;
usbvision_radio_template.dev.kobj.parent = 0;
usbvision_radio_template.dev.kobj.kset = 0;
usbvision_radio_template.dev.kobj.ktype = 0;
usbvision_radio_template.dev.kobj.sd = 0;
usbvision_radio_template.dev.kobj.kref.refcount.counter = 0;
usbvision_radio_template.dev.kobj.release.work.data.counter = 0;
usbvision_radio_template.dev.kobj.release.work.entry.next = 0;
usbvision_radio_template.dev.kobj.release.work.entry.prev = 0;
usbvision_radio_template.dev.kobj.release.work.func = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.key = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.name = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.cpu = 0;
usbvision_radio_template.dev.kobj.release.work.lockdep_map.ip = 0;
usbvision_radio_template.dev.kobj.release.timer.entry.next = 0;
usbvision_radio_template.dev.kobj.release.timer.entry.prev = 0;
usbvision_radio_template.dev.kobj.release.timer.expires = 0;
usbvision_radio_template.dev.kobj.release.timer.base = 0;
usbvision_radio_template.dev.kobj.release.timer.function = 0;
usbvision_radio_template.dev.kobj.release.timer.data = 0;
usbvision_radio_template.dev.kobj.release.timer.slack = 0;
usbvision_radio_template.dev.kobj.release.timer.start_pid = 0;
usbvision_radio_template.dev.kobj.release.timer.start_site = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 0 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 1 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 2 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 3 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 4 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 5 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 6 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 7 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 8 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 9 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 10 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 11 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 12 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 13 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 14 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.start_comm[ 15 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.key = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.name = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.cpu = 0;
usbvision_radio_template.dev.kobj.release.timer.lockdep_map.ip = 0;
usbvision_radio_template.dev.kobj.release.wq = 0;
usbvision_radio_template.dev.kobj.release.cpu = 0;
usbvision_radio_template.dev.kobj.state_initialized = 0;
usbvision_radio_template.dev.kobj.state_in_sysfs = 0;
usbvision_radio_template.dev.kobj.state_add_uevent_sent = 0;
usbvision_radio_template.dev.kobj.state_remove_uevent_sent = 0;
usbvision_radio_template.dev.kobj.uevent_suppress = 0;
usbvision_radio_template.dev.init_name = 0;
usbvision_radio_template.dev.type = 0;
usbvision_radio_template.dev.mutex.count.counter = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.dev.mutex.wait_list.next = 0;
usbvision_radio_template.dev.mutex.wait_list.prev = 0;
usbvision_radio_template.dev.mutex.owner = 0;
usbvision_radio_template.dev.mutex.magic = 0;
usbvision_radio_template.dev.mutex.dep_map.key = 0;
usbvision_radio_template.dev.mutex.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.mutex.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.mutex.dep_map.name = 0;
usbvision_radio_template.dev.mutex.dep_map.cpu = 0;
usbvision_radio_template.dev.mutex.dep_map.ip = 0;
usbvision_radio_template.dev.bus = 0;
usbvision_radio_template.dev.driver = 0;
usbvision_radio_template.dev.platform_data = 0;
usbvision_radio_template.dev.driver_data = 0;
usbvision_radio_template.dev.power.power_state.event = 0;
usbvision_radio_template.dev.power.can_wakeup = 0;
usbvision_radio_template.dev.power.async_suspend = 0;
usbvision_radio_template.dev.power.is_prepared = 0;
usbvision_radio_template.dev.power.is_suspended = 0;
usbvision_radio_template.dev.power.is_noirq_suspended = 0;
usbvision_radio_template.dev.power.is_late_suspended = 0;
usbvision_radio_template.dev.power.ignore_children = 0;
usbvision_radio_template.dev.power.early_init = 0;
usbvision_radio_template.dev.power.direct_complete = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.dev.power.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.dev.power.entry.next = 0;
usbvision_radio_template.dev.power.entry.prev = 0;
usbvision_radio_template.dev.power.completion.done = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.dev.power.completion.wait.task_list.next = 0;
usbvision_radio_template.dev.power.completion.wait.task_list.prev = 0;
usbvision_radio_template.dev.power.wakeup = 0;
usbvision_radio_template.dev.power.wakeup_path = 0;
usbvision_radio_template.dev.power.syscore = 0;
usbvision_radio_template.dev.power.suspend_timer.entry.next = 0;
usbvision_radio_template.dev.power.suspend_timer.entry.prev = 0;
usbvision_radio_template.dev.power.suspend_timer.expires = 0;
usbvision_radio_template.dev.power.suspend_timer.base = 0;
usbvision_radio_template.dev.power.suspend_timer.function = 0;
usbvision_radio_template.dev.power.suspend_timer.data = 0;
usbvision_radio_template.dev.power.suspend_timer.slack = 0;
usbvision_radio_template.dev.power.suspend_timer.start_pid = 0;
usbvision_radio_template.dev.power.suspend_timer.start_site = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 0 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 1 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 2 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 3 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 4 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 5 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 6 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 7 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 8 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 9 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 10 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 11 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 12 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 13 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 14 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.start_comm[ 15 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.key = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.name = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.cpu = 0;
usbvision_radio_template.dev.power.suspend_timer.lockdep_map.ip = 0;
usbvision_radio_template.dev.power.timer_expires = 0;
usbvision_radio_template.dev.power.work.data.counter = 0;
usbvision_radio_template.dev.power.work.entry.next = 0;
usbvision_radio_template.dev.power.work.entry.prev = 0;
usbvision_radio_template.dev.power.work.func = 0;
usbvision_radio_template.dev.power.work.lockdep_map.key = 0;
usbvision_radio_template.dev.power.work.lockdep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.power.work.lockdep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.power.work.lockdep_map.name = 0;
usbvision_radio_template.dev.power.work.lockdep_map.cpu = 0;
usbvision_radio_template.dev.power.work.lockdep_map.ip = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.dev.power.wait_queue.task_list.next = 0;
usbvision_radio_template.dev.power.wait_queue.task_list.prev = 0;
usbvision_radio_template.dev.power.usage_count.counter = 0;
usbvision_radio_template.dev.power.child_count.counter = 0;
usbvision_radio_template.dev.power.disable_depth = 0;
usbvision_radio_template.dev.power.idle_notification = 0;
usbvision_radio_template.dev.power.request_pending = 0;
usbvision_radio_template.dev.power.deferred_resume = 0;
usbvision_radio_template.dev.power.run_wake = 0;
usbvision_radio_template.dev.power.runtime_auto = 0;
usbvision_radio_template.dev.power.no_callbacks = 0;
usbvision_radio_template.dev.power.irq_safe = 0;
usbvision_radio_template.dev.power.use_autosuspend = 0;
usbvision_radio_template.dev.power.timer_autosuspends = 0;
usbvision_radio_template.dev.power.memalloc_noio = 0;
usbvision_radio_template.dev.power.request = 0;
usbvision_radio_template.dev.power.runtime_status = 0;
usbvision_radio_template.dev.power.runtime_error = 0;
usbvision_radio_template.dev.power.autosuspend_delay = 0;
usbvision_radio_template.dev.power.last_busy = 0;
usbvision_radio_template.dev.power.active_jiffies = 0;
usbvision_radio_template.dev.power.suspended_jiffies = 0;
usbvision_radio_template.dev.power.accounting_timestamp = 0;
usbvision_radio_template.dev.power.subsys_data = 0;
usbvision_radio_template.dev.power.set_latency_tolerance = 0;
usbvision_radio_template.dev.power.qos = 0;
usbvision_radio_template.dev.pm_domain = 0;
usbvision_radio_template.dev.pins = 0;
usbvision_radio_template.dev.numa_node = 0;
usbvision_radio_template.dev.dma_mask = 0;
usbvision_radio_template.dev.coherent_dma_mask = 0;
usbvision_radio_template.dev.dma_pfn_offset = 0;
usbvision_radio_template.dev.dma_parms = 0;
usbvision_radio_template.dev.dma_pools.next = 0;
usbvision_radio_template.dev.dma_pools.prev = 0;
usbvision_radio_template.dev.dma_mem = 0;
usbvision_radio_template.dev.cma_area = 0;
usbvision_radio_template.dev.archdata.dma_ops = 0;
usbvision_radio_template.dev.archdata.iommu = 0;
usbvision_radio_template.dev.of_node = 0;
usbvision_radio_template.dev.acpi_node.companion = 0;
usbvision_radio_template.dev.devt = 0;
usbvision_radio_template.dev.id = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.dev.devres_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.dev.devres_head.next = 0;
usbvision_radio_template.dev.devres_head.prev = 0;
usbvision_radio_template.dev.knode_class.n_klist = 0;
usbvision_radio_template.dev.knode_class.n_node.next = 0;
usbvision_radio_template.dev.knode_class.n_node.prev = 0;
usbvision_radio_template.dev.knode_class.n_ref.refcount.counter = 0;
usbvision_radio_template.dev.class = 0;
usbvision_radio_template.dev.groups = 0;
usbvision_radio_template.dev.release = 0;
usbvision_radio_template.dev.iommu_group = 0;
usbvision_radio_template.dev.offline_disabled = 0;
usbvision_radio_template.dev.offline = 0;
usbvision_radio_template.cdev = 0;
usbvision_radio_template.v4l2_dev = 0;
usbvision_radio_template.dev_parent = 0;
usbvision_radio_template.ctrl_handler = 0;
usbvision_radio_template.queue = 0;
usbvision_radio_template.prio = 0;
usbvision_radio_template.name[ 0 ] = 117;
usbvision_radio_template.name[ 1 ] = 115;
usbvision_radio_template.name[ 2 ] = 98;
usbvision_radio_template.name[ 3 ] = 118;
usbvision_radio_template.name[ 4 ] = 105;
usbvision_radio_template.name[ 5 ] = 115;
usbvision_radio_template.name[ 6 ] = 105;
usbvision_radio_template.name[ 7 ] = 111;
usbvision_radio_template.name[ 8 ] = 110;
usbvision_radio_template.name[ 9 ] = 45;
usbvision_radio_template.name[ 10 ] = 114;
usbvision_radio_template.name[ 11 ] = 97;
usbvision_radio_template.name[ 12 ] = 100;
usbvision_radio_template.name[ 13 ] = 105;
usbvision_radio_template.name[ 14 ] = 111;
usbvision_radio_template.name[ 15 ] = 0;
usbvision_radio_template.name[ 16 ] = 0;
usbvision_radio_template.name[ 17 ] = 0;
usbvision_radio_template.name[ 18 ] = 0;
usbvision_radio_template.name[ 19 ] = 0;
usbvision_radio_template.name[ 20 ] = 0;
usbvision_radio_template.name[ 21 ] = 0;
usbvision_radio_template.name[ 22 ] = 0;
usbvision_radio_template.name[ 23 ] = 0;
usbvision_radio_template.name[ 24 ] = 0;
usbvision_radio_template.name[ 25 ] = 0;
usbvision_radio_template.name[ 26 ] = 0;
usbvision_radio_template.name[ 27 ] = 0;
usbvision_radio_template.name[ 28 ] = 0;
usbvision_radio_template.name[ 29 ] = 0;
usbvision_radio_template.name[ 30 ] = 0;
usbvision_radio_template.name[ 31 ] = 0;
usbvision_radio_template.vfl_type = 0;
usbvision_radio_template.vfl_dir = 0;
usbvision_radio_template.minor = 0;
usbvision_radio_template.num = 0;
usbvision_radio_template.flags = 0;
usbvision_radio_template.index = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.magic = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.owner = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_radio_template.fh_lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_radio_template.fh_list.next = 0;
usbvision_radio_template.fh_list.prev = 0;
usbvision_radio_template.dev_debug = 0;
usbvision_radio_template.tvnorms = 0;
usbvision_radio_template.release = &(video_device_release);
usbvision_radio_template.ioctl_ops = &(usbvision_radio_ioctl_ops);
usbvision_radio_template.valid_ioctls[ 0 ] = 0;
usbvision_radio_template.valid_ioctls[ 1 ] = 0;
usbvision_radio_template.valid_ioctls[ 2 ] = 0;
usbvision_radio_template.disable_locking[ 0 ] = 0;
usbvision_radio_template.disable_locking[ 1 ] = 0;
usbvision_radio_template.disable_locking[ 2 ] = 0;
usbvision_radio_template.lock = 0;
usbvision_driver.name = "usbvision";
usbvision_driver.probe = &(usbvision_probe);
usbvision_driver.disconnect = &(usbvision_disconnect);
usbvision_driver.unlocked_ioctl = 0;
usbvision_driver.suspend = 0;
usbvision_driver.resume = 0;
usbvision_driver.reset_resume = 0;
usbvision_driver.pre_reset = 0;
usbvision_driver.post_reset = 0;
usbvision_driver.id_table = &(usbvision_table);
usbvision_driver.dynids.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.magic = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.owner_cpu = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.owner = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.key = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.name = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.cpu = 0;
usbvision_driver.dynids.lock.__annonCompField19.rlock.dep_map.ip = 0;
usbvision_driver.dynids.list.next = 0;
usbvision_driver.dynids.list.prev = 0;
usbvision_driver.drvwrap.driver.name = 0;
usbvision_driver.drvwrap.driver.bus = 0;
usbvision_driver.drvwrap.driver.owner = 0;
usbvision_driver.drvwrap.driver.mod_name = 0;
usbvision_driver.drvwrap.driver.suppress_bind_attrs = 0;
usbvision_driver.drvwrap.driver.of_match_table = 0;
usbvision_driver.drvwrap.driver.acpi_match_table = 0;
usbvision_driver.drvwrap.driver.probe = 0;
usbvision_driver.drvwrap.driver.remove = 0;
usbvision_driver.drvwrap.driver.shutdown = 0;
usbvision_driver.drvwrap.driver.suspend = 0;
usbvision_driver.drvwrap.driver.resume = 0;
usbvision_driver.drvwrap.driver.groups = 0;
usbvision_driver.drvwrap.driver.pm = 0;
usbvision_driver.drvwrap.driver.p = 0;
usbvision_driver.drvwrap.for_devices = 0;
usbvision_driver.no_dynamic_id = 0;
usbvision_driver.supports_autosuspend = 0;
usbvision_driver.disable_hub_initiated_lpm = 0;
usbvision_driver.soft_unbind = 0;
return ;
}
-__BLAST_initialize_/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/rcv/132_1a/main-ldv_main1_sequence_infinite_withcheck_stateful/preprocess/1-cpp/drivers/media/usb/usbvision/usbvision-i2c.o.i()
{
171 -usbvision_algo.master_xfer = &(usbvision_i2c_xfer);
usbvision_algo.smbus_xfer = 0;
usbvision_algo.functionality = &(functionality);
usbvision_algo.reg_slave = 0;
usbvision_algo.unreg_slave = 0;
i2c_adap_template.owner = &(__this_module);
i2c_adap_template.class = 0;
i2c_adap_template.algo = 0;
i2c_adap_template.algo_data = 0;
i2c_adap_template.bus_lock.wait_lock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.bus_lock.wait_lock.magic = 0;
i2c_adap_template.bus_lock.wait_lock.owner_cpu = 0;
i2c_adap_template.bus_lock.wait_lock.owner = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.key = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.name = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.cpu = 0;
i2c_adap_template.bus_lock.wait_lock.dep_map.ip = 0;
i2c_adap_template.bus_lock.waiters.rb_node = 0;
i2c_adap_template.bus_lock.waiters_leftmost = 0;
i2c_adap_template.bus_lock.owner = 0;
i2c_adap_template.bus_lock.save_state = 0;
i2c_adap_template.bus_lock.name = 0;
i2c_adap_template.bus_lock.file = 0;
i2c_adap_template.bus_lock.line = 0;
i2c_adap_template.bus_lock.magic = 0;
i2c_adap_template.timeout = 0;
i2c_adap_template.retries = 0;
i2c_adap_template.dev.parent = 0;
i2c_adap_template.dev.p = 0;
i2c_adap_template.dev.kobj.name = 0;
i2c_adap_template.dev.kobj.entry.next = 0;
i2c_adap_template.dev.kobj.entry.prev = 0;
i2c_adap_template.dev.kobj.parent = 0;
i2c_adap_template.dev.kobj.kset = 0;
i2c_adap_template.dev.kobj.ktype = 0;
i2c_adap_template.dev.kobj.sd = 0;
i2c_adap_template.dev.kobj.kref.refcount.counter = 0;
i2c_adap_template.dev.kobj.release.work.data.counter = 0;
i2c_adap_template.dev.kobj.release.work.entry.next = 0;
i2c_adap_template.dev.kobj.release.work.entry.prev = 0;
i2c_adap_template.dev.kobj.release.work.func = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.key = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.name = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.cpu = 0;
i2c_adap_template.dev.kobj.release.work.lockdep_map.ip = 0;
i2c_adap_template.dev.kobj.release.timer.entry.next = 0;
i2c_adap_template.dev.kobj.release.timer.entry.prev = 0;
i2c_adap_template.dev.kobj.release.timer.expires = 0;
i2c_adap_template.dev.kobj.release.timer.base = 0;
i2c_adap_template.dev.kobj.release.timer.function = 0;
i2c_adap_template.dev.kobj.release.timer.data = 0;
i2c_adap_template.dev.kobj.release.timer.slack = 0;
i2c_adap_template.dev.kobj.release.timer.start_pid = 0;
i2c_adap_template.dev.kobj.release.timer.start_site = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 0 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 1 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 2 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 3 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 4 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 5 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 6 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 7 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 8 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 9 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 10 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 11 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 12 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 13 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 14 ] = 0;
i2c_adap_template.dev.kobj.release.timer.start_comm[ 15 ] = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.key = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.name = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.cpu = 0;
i2c_adap_template.dev.kobj.release.timer.lockdep_map.ip = 0;
i2c_adap_template.dev.kobj.release.wq = 0;
i2c_adap_template.dev.kobj.release.cpu = 0;
i2c_adap_template.dev.kobj.state_initialized = 0;
i2c_adap_template.dev.kobj.state_in_sysfs = 0;
i2c_adap_template.dev.kobj.state_add_uevent_sent = 0;
i2c_adap_template.dev.kobj.state_remove_uevent_sent = 0;
i2c_adap_template.dev.kobj.uevent_suppress = 0;
i2c_adap_template.dev.init_name = 0;
i2c_adap_template.dev.type = 0;
i2c_adap_template.dev.mutex.count.counter = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev.mutex.wait_lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev.mutex.wait_list.next = 0;
i2c_adap_template.dev.mutex.wait_list.prev = 0;
i2c_adap_template.dev.mutex.owner = 0;
i2c_adap_template.dev.mutex.magic = 0;
i2c_adap_template.dev.mutex.dep_map.key = 0;
i2c_adap_template.dev.mutex.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.mutex.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.mutex.dep_map.name = 0;
i2c_adap_template.dev.mutex.dep_map.cpu = 0;
i2c_adap_template.dev.mutex.dep_map.ip = 0;
i2c_adap_template.dev.bus = 0;
i2c_adap_template.dev.driver = 0;
i2c_adap_template.dev.platform_data = 0;
i2c_adap_template.dev.driver_data = 0;
i2c_adap_template.dev.power.power_state.event = 0;
i2c_adap_template.dev.power.can_wakeup = 0;
i2c_adap_template.dev.power.async_suspend = 0;
i2c_adap_template.dev.power.is_prepared = 0;
i2c_adap_template.dev.power.is_suspended = 0;
i2c_adap_template.dev.power.is_noirq_suspended = 0;
i2c_adap_template.dev.power.is_late_suspended = 0;
i2c_adap_template.dev.power.ignore_children = 0;
i2c_adap_template.dev.power.early_init = 0;
i2c_adap_template.dev.power.direct_complete = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev.power.lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev.power.entry.next = 0;
i2c_adap_template.dev.power.entry.prev = 0;
i2c_adap_template.dev.power.completion.done = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev.power.completion.wait.lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev.power.completion.wait.task_list.next = 0;
i2c_adap_template.dev.power.completion.wait.task_list.prev = 0;
i2c_adap_template.dev.power.wakeup = 0;
i2c_adap_template.dev.power.wakeup_path = 0;
i2c_adap_template.dev.power.syscore = 0;
i2c_adap_template.dev.power.suspend_timer.entry.next = 0;
i2c_adap_template.dev.power.suspend_timer.entry.prev = 0;
i2c_adap_template.dev.power.suspend_timer.expires = 0;
i2c_adap_template.dev.power.suspend_timer.base = 0;
i2c_adap_template.dev.power.suspend_timer.function = 0;
i2c_adap_template.dev.power.suspend_timer.data = 0;
i2c_adap_template.dev.power.suspend_timer.slack = 0;
i2c_adap_template.dev.power.suspend_timer.start_pid = 0;
i2c_adap_template.dev.power.suspend_timer.start_site = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 0 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 1 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 2 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 3 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 4 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 5 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 6 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 7 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 8 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 9 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 10 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 11 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 12 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 13 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 14 ] = 0;
i2c_adap_template.dev.power.suspend_timer.start_comm[ 15 ] = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.key = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.name = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.cpu = 0;
i2c_adap_template.dev.power.suspend_timer.lockdep_map.ip = 0;
i2c_adap_template.dev.power.timer_expires = 0;
i2c_adap_template.dev.power.work.data.counter = 0;
i2c_adap_template.dev.power.work.entry.next = 0;
i2c_adap_template.dev.power.work.entry.prev = 0;
i2c_adap_template.dev.power.work.func = 0;
i2c_adap_template.dev.power.work.lockdep_map.key = 0;
i2c_adap_template.dev.power.work.lockdep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.power.work.lockdep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.power.work.lockdep_map.name = 0;
i2c_adap_template.dev.power.work.lockdep_map.cpu = 0;
i2c_adap_template.dev.power.work.lockdep_map.ip = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev.power.wait_queue.lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev.power.wait_queue.task_list.next = 0;
i2c_adap_template.dev.power.wait_queue.task_list.prev = 0;
i2c_adap_template.dev.power.usage_count.counter = 0;
i2c_adap_template.dev.power.child_count.counter = 0;
i2c_adap_template.dev.power.disable_depth = 0;
i2c_adap_template.dev.power.idle_notification = 0;
i2c_adap_template.dev.power.request_pending = 0;
i2c_adap_template.dev.power.deferred_resume = 0;
i2c_adap_template.dev.power.run_wake = 0;
i2c_adap_template.dev.power.runtime_auto = 0;
i2c_adap_template.dev.power.no_callbacks = 0;
i2c_adap_template.dev.power.irq_safe = 0;
i2c_adap_template.dev.power.use_autosuspend = 0;
i2c_adap_template.dev.power.timer_autosuspends = 0;
i2c_adap_template.dev.power.memalloc_noio = 0;
i2c_adap_template.dev.power.request = 0;
i2c_adap_template.dev.power.runtime_status = 0;
i2c_adap_template.dev.power.runtime_error = 0;
i2c_adap_template.dev.power.autosuspend_delay = 0;
i2c_adap_template.dev.power.last_busy = 0;
i2c_adap_template.dev.power.active_jiffies = 0;
i2c_adap_template.dev.power.suspended_jiffies = 0;
i2c_adap_template.dev.power.accounting_timestamp = 0;
i2c_adap_template.dev.power.subsys_data = 0;
i2c_adap_template.dev.power.set_latency_tolerance = 0;
i2c_adap_template.dev.power.qos = 0;
i2c_adap_template.dev.pm_domain = 0;
i2c_adap_template.dev.pins = 0;
i2c_adap_template.dev.numa_node = 0;
i2c_adap_template.dev.dma_mask = 0;
i2c_adap_template.dev.coherent_dma_mask = 0;
i2c_adap_template.dev.dma_pfn_offset = 0;
i2c_adap_template.dev.dma_parms = 0;
i2c_adap_template.dev.dma_pools.next = 0;
i2c_adap_template.dev.dma_pools.prev = 0;
i2c_adap_template.dev.dma_mem = 0;
i2c_adap_template.dev.cma_area = 0;
i2c_adap_template.dev.archdata.dma_ops = 0;
i2c_adap_template.dev.archdata.iommu = 0;
i2c_adap_template.dev.of_node = 0;
i2c_adap_template.dev.acpi_node.companion = 0;
i2c_adap_template.dev.devt = 0;
i2c_adap_template.dev.id = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev.devres_lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev.devres_head.next = 0;
i2c_adap_template.dev.devres_head.prev = 0;
i2c_adap_template.dev.knode_class.n_klist = 0;
i2c_adap_template.dev.knode_class.n_node.next = 0;
i2c_adap_template.dev.knode_class.n_node.prev = 0;
i2c_adap_template.dev.knode_class.n_ref.refcount.counter = 0;
i2c_adap_template.dev.class = 0;
i2c_adap_template.dev.groups = 0;
i2c_adap_template.dev.release = 0;
i2c_adap_template.dev.iommu_group = 0;
i2c_adap_template.dev.offline_disabled = 0;
i2c_adap_template.dev.offline = 0;
i2c_adap_template.nr = 0;
i2c_adap_template.name[ 0 ] = 117;
i2c_adap_template.name[ 1 ] = 115;
i2c_adap_template.name[ 2 ] = 98;
i2c_adap_template.name[ 3 ] = 118;
i2c_adap_template.name[ 4 ] = 105;
i2c_adap_template.name[ 5 ] = 115;
i2c_adap_template.name[ 6 ] = 105;
i2c_adap_template.name[ 7 ] = 111;
i2c_adap_template.name[ 8 ] = 110;
i2c_adap_template.name[ 9 ] = 0;
i2c_adap_template.dev_released.done = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.dev_released.wait.lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.dev_released.wait.task_list.next = 0;
i2c_adap_template.dev_released.wait.task_list.prev = 0;
i2c_adap_template.userspace_clients_lock.count.counter = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.raw_lock.__annonCompField7.head_tail = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.magic = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.owner_cpu = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.owner = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.key = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.name = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.cpu = 0;
i2c_adap_template.userspace_clients_lock.wait_lock.__annonCompField19.rlock.dep_map.ip = 0;
i2c_adap_template.userspace_clients_lock.wait_list.next = 0;
i2c_adap_template.userspace_clients_lock.wait_list.prev = 0;
i2c_adap_template.userspace_clients_lock.owner = 0;
i2c_adap_template.userspace_clients_lock.magic = 0;
i2c_adap_template.userspace_clients_lock.dep_map.key = 0;
i2c_adap_template.userspace_clients_lock.dep_map.class_cache[ 0 ] = 0;
i2c_adap_template.userspace_clients_lock.dep_map.class_cache[ 1 ] = 0;
i2c_adap_template.userspace_clients_lock.dep_map.name = 0;
i2c_adap_template.userspace_clients_lock.dep_map.cpu = 0;
i2c_adap_template.userspace_clients_lock.dep_map.ip = 0;
i2c_adap_template.userspace_clients.next = 0;
i2c_adap_template.userspace_clients.prev = 0;
i2c_adap_template.bus_recovery_info = 0;
return ;
}
-__BLAST_initialize_/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/rcv/132_1a/main-ldv_main1_sequence_infinite_withcheck_stateful/preprocess/1-cpp/drivers/media/usb/usbvision/usbvision-cards.o.i()
{
34 -usbvision_device_data[ 0 ].video_norm = 45056;
usbvision_device_data[ 0 ].model_string = "Xanboo";
usbvision_device_data[ 0 ].interface = -1;
usbvision_device_data[ 0 ].codec = 7113;
usbvision_device_data[ 0 ].video_channels = 4;
usbvision_device_data[ 0 ].audio_channels = 1;
usbvision_device_data[ 0 ].radio = 0;
usbvision_device_data[ 0 ].vbi = 1;
usbvision_device_data[ 0 ].tuner = 0;
usbvision_device_data[ 0 ].vin_reg1_override = 0;
usbvision_device_data[ 0 ].vin_reg2_override = 0;
usbvision_device_data[ 0 ].dvi_yuv_override = 0;
usbvision_device_data[ 0 ].vin_reg1 = 0;
usbvision_device_data[ 0 ].vin_reg2 = 0;
usbvision_device_data[ 0 ].dvi_yuv = 0;
usbvision_device_data[ 0 ].tuner_type = 0;
usbvision_device_data[ 0 ].x_offset = -1;
usbvision_device_data[ 0 ].y_offset = -1;
usbvision_device_data[ 1 ].video_norm = 255;
usbvision_device_data[ 1 ].model_string = "Belkin USB VideoBus II Adapter";
usbvision_device_data[ 1 ].interface = -1;
usbvision_device_data[ 1 ].codec = 7113;
usbvision_device_data[ 1 ].video_channels = 2;
usbvision_device_data[ 1 ].audio_channels = 1;
usbvision_device_data[ 1 ].radio = 0;
usbvision_device_data[ 1 ].vbi = 1;
usbvision_device_data[ 1 ].tuner = 0;
usbvision_device_data[ 1 ].vin_reg1_override = 0;
usbvision_device_data[ 1 ].vin_reg2_override = 0;
usbvision_device_data[ 1 ].dvi_yuv_override = 1;
usbvision_device_data[ 1 ].vin_reg1 = 0;
usbvision_device_data[ 1 ].vin_reg2 = 0;
usbvision_device_data[ 1 ].dvi_yuv = 7;
usbvision_device_data[ 1 ].tuner_type = 0;
usbvision_device_data[ 1 ].x_offset = 0;
usbvision_device_data[ 1 ].y_offset = 3;
usbvision_device_data[ 2 ].video_norm = 45056;
usbvision_device_data[ 2 ].model_string = "Belkin Components USB VideoBus";
usbvision_device_data[ 2 ].interface = -1;
usbvision_device_data[ 2 ].codec = 7111;
usbvision_device_data[ 2 ].video_channels = 2;
usbvision_device_data[ 2 ].audio_channels = 1;
usbvision_device_data[ 2 ].radio = 0;
usbvision_device_data[ 2 ].vbi = 1;
usbvision_device_data[ 2 ].tuner = 0;
usbvision_device_data[ 2 ].vin_reg1_override = 0;
usbvision_device_data[ 2 ].vin_reg2_override = 0;
usbvision_device_data[ 2 ].dvi_yuv_override = 0;
usbvision_device_data[ 2 ].vin_reg1 = 0;
usbvision_device_data[ 2 ].vin_reg2 = 0;
usbvision_device_data[ 2 ].dvi_yuv = 0;
usbvision_device_data[ 2 ].tuner_type = 0;
usbvision_device_data[ 2 ].x_offset = -1;
usbvision_device_data[ 2 ].y_offset = -1;
usbvision_device_data[ 3 ].video_norm = 45056;
usbvision_device_data[ 3 ].model_string = "Belkin USB VideoBus II";
usbvision_device_data[ 3 ].interface = -1;
usbvision_device_data[ 3 ].codec = 7113;
usbvision_device_data[ 3 ].video_channels = 2;
usbvision_device_data[ 3 ].audio_channels = 1;
usbvision_device_data[ 3 ].radio = 0;
usbvision_device_data[ 3 ].vbi = 1;
usbvision_device_data[ 3 ].tuner = 0;
usbvision_device_data[ 3 ].vin_reg1_override = 0;
usbvision_device_data[ 3 ].vin_reg2_override = 0;
usbvision_device_data[ 3 ].dvi_yuv_override = 1;
usbvision_device_data[ 3 ].vin_reg1 = 0;
usbvision_device_data[ 3 ].vin_reg2 = 0;
usbvision_device_data[ 3 ].dvi_yuv = 7;
usbvision_device_data[ 3 ].tuner_type = 0;
usbvision_device_data[ 3 ].x_offset = 0;
usbvision_device_data[ 3 ].y_offset = 3;
usbvision_device_data[ 4 ].video_norm = 255;
usbvision_device_data[ 4 ].model_string = "echoFX InterView Lite";
usbvision_device_data[ 4 ].interface = 0;
usbvision_device_data[ 4 ].codec = 7111;
usbvision_device_data[ 4 ].video_channels = 2;
usbvision_device_data[ 4 ].audio_channels = 0;
usbvision_device_data[ 4 ].radio = 0;
usbvision_device_data[ 4 ].vbi = 1;
usbvision_device_data[ 4 ].tuner = 0;
usbvision_device_data[ 4 ].vin_reg1_override = 0;
usbvision_device_data[ 4 ].vin_reg2_override = 0;
usbvision_device_data[ 4 ].dvi_yuv_override = 1;
usbvision_device_data[ 4 ].vin_reg1 = 0;
usbvision_device_data[ 4 ].vin_reg2 = 0;
usbvision_device_data[ 4 ].dvi_yuv = 7;
usbvision_device_data[ 4 ].tuner_type = 0;
usbvision_device_data[ 4 ].x_offset = -1;
usbvision_device_data[ 4 ].y_offset = -1;
usbvision_device_data[ 5 ].video_norm = 45056;
usbvision_device_data[ 5 ].model_string = "USBGear USBG-V1 resp. HAMA USB";
usbvision_device_data[ 5 ].interface = -1;
usbvision_device_data[ 5 ].codec = 7111;
usbvision_device_data[ 5 ].video_channels = 2;
usbvision_device_data[ 5 ].audio_channels = 1;
usbvision_device_data[ 5 ].radio = 0;
usbvision_device_data[ 5 ].vbi = 1;
usbvision_device_data[ 5 ].tuner = 0;
usbvision_device_data[ 5 ].vin_reg1_override = 0;
usbvision_device_data[ 5 ].vin_reg2_override = 0;
usbvision_device_data[ 5 ].dvi_yuv_override = 0;
usbvision_device_data[ 5 ].vin_reg1 = 0;
usbvision_device_data[ 5 ].vin_reg2 = 0;
usbvision_device_data[ 5 ].dvi_yuv = 0;
usbvision_device_data[ 5 ].tuner_type = 0;
usbvision_device_data[ 5 ].x_offset = -1;
usbvision_device_data[ 5 ].y_offset = -1;
usbvision_device_data[ 6 ].video_norm = 45056;
usbvision_device_data[ 6 ].model_string = "D-Link V100";
usbvision_device_data[ 6 ].interface = -1;
usbvision_device_data[ 6 ].codec = 7113;
usbvision_device_data[ 6 ].video_channels = 4;
usbvision_device_data[ 6 ].audio_channels = 0;
usbvision_device_data[ 6 ].radio = 0;
usbvision_device_data[ 6 ].vbi = 1;
usbvision_device_data[ 6 ].tuner = 0;
usbvision_device_data[ 6 ].vin_reg1_override = 0;
usbvision_device_data[ 6 ].vin_reg2_override = 0;
usbvision_device_data[ 6 ].dvi_yuv_override = 1;
usbvision_device_data[ 6 ].vin_reg1 = 0;
usbvision_device_data[ 6 ].vin_reg2 = 0;
usbvision_device_data[ 6 ].dvi_yuv = 7;
usbvision_device_data[ 6 ].tuner_type = 0;
usbvision_device_data[ 6 ].x_offset = 0;
usbvision_device_data[ 6 ].y_offset = 3;
usbvision_device_data[ 7 ].video_norm = 45056;
usbvision_device_data[ 7 ].model_string = "X10 USB Camera";
usbvision_device_data[ 7 ].interface = -1;
usbvision_device_data[ 7 ].codec = 7111;
usbvision_device_data[ 7 ].video_channels = 2;
usbvision_device_data[ 7 ].audio_channels = 1;
usbvision_device_data[ 7 ].radio = 0;
usbvision_device_data[ 7 ].vbi = 1;
usbvision_device_data[ 7 ].tuner = 0;
usbvision_device_data[ 7 ].vin_reg1_override = 0;
usbvision_device_data[ 7 ].vin_reg2_override = 0;
usbvision_device_data[ 7 ].dvi_yuv_override = 0;
usbvision_device_data[ 7 ].vin_reg1 = 0;
usbvision_device_data[ 7 ].vin_reg2 = 0;
usbvision_device_data[ 7 ].dvi_yuv = 0;
usbvision_device_data[ 7 ].tuner_type = 0;
usbvision_device_data[ 7 ].x_offset = -1;
usbvision_device_data[ 7 ].y_offset = -1;
usbvision_device_data[ 8 ].video_norm = 255;
usbvision_device_data[ 8 ].model_string = "Hauppauge WinTV USB Live (PAL B/G)";
usbvision_device_data[ 8 ].interface = -1;
usbvision_device_data[ 8 ].codec = 7111;
usbvision_device_data[ 8 ].video_channels = 2;
usbvision_device_data[ 8 ].audio_channels = 1;
usbvision_device_data[ 8 ].radio = 0;
usbvision_device_data[ 8 ].vbi = 1;
usbvision_device_data[ 8 ].tuner = 0;
usbvision_device_data[ 8 ].vin_reg1_override = 0;
usbvision_device_data[ 8 ].vin_reg2_override = 0;
usbvision_device_data[ 8 ].dvi_yuv_override = 1;
usbvision_device_data[ 8 ].vin_reg1 = 0;
usbvision_device_data[ 8 ].vin_reg2 = 0;
usbvision_device_data[ 8 ].dvi_yuv = 7;
usbvision_device_data[ 8 ].tuner_type = 0;
usbvision_device_data[ 8 ].x_offset = -1;
usbvision_device_data[ 8 ].y_offset = 3;
usbvision_device_data[ 9 ].video_norm = 45056;
usbvision_device_data[ 9 ].model_string = "Hauppauge WinTV USB Live Pro (NTSC M/N)";
usbvision_device_data[ 9 ].interface = -1;
usbvision_device_data[ 9 ].codec = 7113;
usbvision_device_data[ 9 ].video_channels = 2;
usbvision_device_data[ 9 ].audio_channels = 0;
usbvision_device_data[ 9 ].radio = 0;
usbvision_device_data[ 9 ].vbi = 1;
usbvision_device_data[ 9 ].tuner = 0;
usbvision_device_data[ 9 ].vin_reg1_override = 0;
usbvision_device_data[ 9 ].vin_reg2_override = 0;
usbvision_device_data[ 9 ].dvi_yuv_override = 1;
usbvision_device_data[ 9 ].vin_reg1 = 0;
usbvision_device_data[ 9 ].vin_reg2 = 0;
usbvision_device_data[ 9 ].dvi_yuv = 7;
usbvision_device_data[ 9 ].tuner_type = 0;
usbvision_device_data[ 9 ].x_offset = 0;
usbvision_device_data[ 9 ].y_offset = 3;
usbvision_device_data[ 10 ].video_norm = 255;
usbvision_device_data[ 10 ].model_string = "Zoran Co. PMD (Nogatech) AV-grabber Manhattan";
usbvision_device_data[ 10 ].interface = -1;
usbvision_device_data[ 10 ].codec = 7113;
usbvision_device_data[ 10 ].video_channels = 2;
usbvision_device_data[ 10 ].audio_channels = 2;
usbvision_device_data[ 10 ].radio = 0;
usbvision_device_data[ 10 ].vbi = 1;
usbvision_device_data[ 10 ].tuner = 0;
usbvision_device_data[ 10 ].vin_reg1_override = 0;
usbvision_device_data[ 10 ].vin_reg2_override = 0;
usbvision_device_data[ 10 ].dvi_yuv_override = 1;
usbvision_device_data[ 10 ].vin_reg1 = 0;
usbvision_device_data[ 10 ].vin_reg2 = 0;
usbvision_device_data[ 10 ].dvi_yuv = 7;
usbvision_device_data[ 10 ].tuner_type = 0;
usbvision_device_data[ 10 ].x_offset = 0;
usbvision_device_data[ 10 ].y_offset = 3;
usbvision_device_data[ 11 ].video_norm = 45056;
usbvision_device_data[ 11 ].model_string = "Nogatech USB-TV (NTSC) FM";
usbvision_device_data[ 11 ].interface = -1;
usbvision_device_data[ 11 ].codec = 7111;
usbvision_device_data[ 11 ].video_channels = 3;
usbvision_device_data[ 11 ].audio_channels = 1;
usbvision_device_data[ 11 ].radio = 1;
usbvision_device_data[ 11 ].vbi = 1;
usbvision_device_data[ 11 ].tuner = 1;
usbvision_device_data[ 11 ].vin_reg1_override = 0;
usbvision_device_data[ 11 ].vin_reg2_override = 0;
usbvision_device_data[ 11 ].dvi_yuv_override = 0;
usbvision_device_data[ 11 ].vin_reg1 = 0;
usbvision_device_data[ 11 ].vin_reg2 = 0;
usbvision_device_data[ 11 ].dvi_yuv = 0;
usbvision_device_data[ 11 ].tuner_type = 17;
usbvision_device_data[ 11 ].x_offset = -1;
usbvision_device_data[ 11 ].y_offset = 20;
usbvision_device_data[ 12 ].video_norm = 45056;
usbvision_device_data[ 12 ].model_string = "PNY USB-TV (NTSC) FM";
usbvision_device_data[ 12 ].interface = -1;
usbvision_device_data[ 12 ].codec = 7111;
usbvision_device_data[ 12 ].video_channels = 3;
usbvision_device_data[ 12 ].audio_channels = 1;
usbvision_device_data[ 12 ].radio = 1;
usbvision_device_data[ 12 ].vbi = 1;
usbvision_device_data[ 12 ].tuner = 1;
usbvision_device_data[ 12 ].vin_reg1_override = 0;
usbvision_device_data[ 12 ].vin_reg2_override = 0;
usbvision_device_data[ 12 ].dvi_yuv_override = 0;
usbvision_device_data[ 12 ].vin_reg1 = 0;
usbvision_device_data[ 12 ].vin_reg2 = 0;
usbvision_device_data[ 12 ].dvi_yuv = 0;
usbvision_device_data[ 12 ].tuner_type = 17;
usbvision_device_data[ 12 ].x_offset = -1;
usbvision_device_data[ 12 ].y_offset = 20;
usbvision_device_data[ 13 ].video_norm = 255;
usbvision_device_data[ 13 ].model_string = "PixelView PlayTv-USB PRO (PAL) FM";
usbvision_device_data[ 13 ].interface = 0;
usbvision_device_data[ 13 ].codec = 7113;
usbvision_device_data[ 13 ].video_channels = 3;
usbvision_device_data[ 13 ].audio_channels = 1;
usbvision_device_data[ 13 ].radio = 1;
usbvision_device_data[ 13 ].vbi = 1;
usbvision_device_data[ 13 ].tuner = 1;
usbvision_device_data[ 13 ].vin_reg1_override = 0;
usbvision_device_data[ 13 ].vin_reg2_override = 0;
usbvision_device_data[ 13 ].dvi_yuv_override = 1;
usbvision_device_data[ 13 ].vin_reg1 = 0;
usbvision_device_data[ 13 ].vin_reg2 = 0;
usbvision_device_data[ 13 ].dvi_yuv = 7;
usbvision_device_data[ 13 ].tuner_type = 5;
usbvision_device_data[ 13 ].x_offset = 0;
usbvision_device_data[ 13 ].y_offset = 3;
usbvision_device_data[ 14 ].video_norm = 255;
usbvision_device_data[ 14 ].model_string = "ZTV ZT-721 2.4GHz USB A/V Receiver";
usbvision_device_data[ 14 ].interface = 0;
usbvision_device_data[ 14 ].codec = 7113;
usbvision_device_data[ 14 ].video_channels = 3;
usbvision_device_data[ 14 ].audio_channels = 1;
usbvision_device_data[ 14 ].radio = 1;
usbvision_device_data[ 14 ].vbi = 1;
usbvision_device_data[ 14 ].tuner = 1;
usbvision_device_data[ 14 ].vin_reg1_override = 0;
usbvision_device_data[ 14 ].vin_reg2_override = 0;
usbvision_device_data[ 14 ].dvi_yuv_override = 1;
usbvision_device_data[ 14 ].vin_reg1 = 0;
usbvision_device_data[ 14 ].vin_reg2 = 0;
usbvision_device_data[ 14 ].dvi_yuv = 7;
usbvision_device_data[ 14 ].tuner_type = 5;
usbvision_device_data[ 14 ].x_offset = 0;
usbvision_device_data[ 14 ].y_offset = 3;
usbvision_device_data[ 15 ].video_norm = 45056;
usbvision_device_data[ 15 ].model_string = "Hauppauge WinTV USB (NTSC M/N)";
usbvision_device_data[ 15 ].interface = -1;
usbvision_device_data[ 15 ].codec = 7111;
usbvision_device_data[ 15 ].video_channels = 3;
usbvision_device_data[ 15 ].audio_channels = 1;
usbvision_device_data[ 15 ].radio = 0;
usbvision_device_data[ 15 ].vbi = 1;
usbvision_device_data[ 15 ].tuner = 1;
usbvision_device_data[ 15 ].vin_reg1_override = 0;
usbvision_device_data[ 15 ].vin_reg2_override = 0;
usbvision_device_data[ 15 ].dvi_yuv_override = 0;
usbvision_device_data[ 15 ].vin_reg1 = 0;
usbvision_device_data[ 15 ].vin_reg2 = 0;
usbvision_device_data[ 15 ].dvi_yuv = 0;
usbvision_device_data[ 15 ].tuner_type = 17;
usbvision_device_data[ 15 ].x_offset = -1;
usbvision_device_data[ 15 ].y_offset = 20;
usbvision_device_data[ 16 ].video_norm = 255;
usbvision_device_data[ 16 ].model_string = "Hauppauge WinTV USB (PAL B/G)";
usbvision_device_data[ 16 ].interface = -1;
usbvision_device_data[ 16 ].codec = 7111;
usbvision_device_data[ 16 ].video_channels = 3;
usbvision_device_data[ 16 ].audio_channels = 1;
usbvision_device_data[ 16 ].radio = 0;
usbvision_device_data[ 16 ].vbi = 1;
usbvision_device_data[ 16 ].tuner = 1;
usbvision_device_data[ 16 ].vin_reg1_override = 0;
usbvision_device_data[ 16 ].vin_reg2_override = 0;
usbvision_device_data[ 16 ].dvi_yuv_override = 0;
usbvision_device_data[ 16 ].vin_reg1 = 0;
usbvision_device_data[ 16 ].vin_reg2 = 0;
usbvision_device_data[ 16 ].dvi_yuv = 0;
usbvision_device_data[ 16 ].tuner_type = 5;
usbvision_device_data[ 16 ].x_offset = -1;
usbvision_device_data[ 16 ].y_offset = -1;
usbvision_device_data[ 17 ].video_norm = 255;
usbvision_device_data[ 17 ].model_string = "Hauppauge WinTV USB (PAL I)";
usbvision_device_data[ 17 ].interface = -1;
usbvision_device_data[ 17 ].codec = 7111;
usbvision_device_data[ 17 ].video_channels = 3;
usbvision_device_data[ 17 ].audio_channels = 1;
usbvision_device_data[ 17 ].radio = 0;
usbvision_device_data[ 17 ].vbi = 1;
usbvision_device_data[ 17 ].tuner = 1;
usbvision_device_data[ 17 ].vin_reg1_override = 0;
usbvision_device_data[ 17 ].vin_reg2_override = 0;
usbvision_device_data[ 17 ].dvi_yuv_override = 0;
usbvision_device_data[ 17 ].vin_reg1 = 0;
usbvision_device_data[ 17 ].vin_reg2 = 0;
usbvision_device_data[ 17 ].dvi_yuv = 0;
usbvision_device_data[ 17 ].tuner_type = 5;
usbvision_device_data[ 17 ].x_offset = -1;
usbvision_device_data[ 17 ].y_offset = -1;
usbvision_device_data[ 18 ].video_norm = 16711680;
usbvision_device_data[ 18 ].model_string = "Hauppauge WinTV USB (PAL/SECAM L)";
usbvision_device_data[ 18 ].interface = -1;
usbvision_device_data[ 18 ].codec = 7111;
usbvision_device_data[ 18 ].video_channels = 3;
usbvision_device_data[ 18 ].audio_channels = 1;
usbvision_device_data[ 18 ].radio = 0;
usbvision_device_data[ 18 ].vbi = 1;
usbvision_device_data[ 18 ].tuner = 1;
usbvision_device_data[ 18 ].vin_reg1_override = 0;
usbvision_device_data[ 18 ].vin_reg2_override = 0;
usbvision_device_data[ 18 ].dvi_yuv_override = 0;
usbvision_device_data[ 18 ].vin_reg1 = 0;
usbvision_device_data[ 18 ].vin_reg2 = 0;
usbvision_device_data[ 18 ].dvi_yuv = 0;
usbvision_device_data[ 18 ].tuner_type = 3;
usbvision_device_data[ 18 ].x_offset = 128;
usbvision_device_data[ 18 ].y_offset = 22;
usbvision_device_data[ 19 ].video_norm = 255;
usbvision_device_data[ 19 ].model_string = "Hauppauge WinTV USB (PAL D/K)";
usbvision_device_data[ 19 ].interface = -1;
usbvision_device_data[ 19 ].codec = 7111;
usbvision_device_data[ 19 ].video_channels = 3;
usbvision_device_data[ 19 ].audio_channels = 1;
usbvision_device_data[ 19 ].radio = 0;
usbvision_device_data[ 19 ].vbi = 1;
usbvision_device_data[ 19 ].tuner = 1;
usbvision_device_data[ 19 ].vin_reg1_override = 0;
usbvision_device_data[ 19 ].vin_reg2_override = 0;
usbvision_device_data[ 19 ].dvi_yuv_override = 0;
usbvision_device_data[ 19 ].vin_reg1 = 0;
usbvision_device_data[ 19 ].vin_reg2 = 0;
usbvision_device_data[ 19 ].dvi_yuv = 0;
usbvision_device_data[ 19 ].tuner_type = 5;
usbvision_device_data[ 19 ].x_offset = -1;
usbvision_device_data[ 19 ].y_offset = -1;
usbvision_device_data[ 20 ].video_norm = 45056;
usbvision_device_data[ 20 ].model_string = "Hauppauge WinTV USB (NTSC FM)";
usbvision_device_data[ 20 ].interface = -1;
usbvision_device_data[ 20 ].codec = 7111;
usbvision_device_data[ 20 ].video_channels = 3;
usbvision_device_data[ 20 ].audio_channels = 1;
usbvision_device_data[ 20 ].radio = 1;
usbvision_device_data[ 20 ].vbi = 1;
usbvision_device_data[ 20 ].tuner = 1;
usbvision_device_data[ 20 ].vin_reg1_override = 0;
usbvision_device_data[ 20 ].vin_reg2_override = 0;
usbvision_device_data[ 20 ].dvi_yuv_override = 0;
usbvision_device_data[ 20 ].vin_reg1 = 0;
usbvision_device_data[ 20 ].vin_reg2 = 0;
usbvision_device_data[ 20 ].dvi_yuv = 0;
usbvision_device_data[ 20 ].tuner_type = 17;
usbvision_device_data[ 20 ].x_offset = -1;
usbvision_device_data[ 20 ].y_offset = -1;
usbvision_device_data[ 21 ].video_norm = 255;
usbvision_device_data[ 21 ].model_string = "Hauppauge WinTV USB (PAL B/G FM)";
usbvision_device_data[ 21 ].interface = -1;
usbvision_device_data[ 21 ].codec = 7111;
usbvision_device_data[ 21 ].video_channels = 3;
usbvision_device_data[ 21 ].audio_channels = 1;
usbvision_device_data[ 21 ].radio = 1;
usbvision_device_data[ 21 ].vbi = 1;
usbvision_device_data[ 21 ].tuner = 1;
usbvision_device_data[ 21 ].vin_reg1_override = 0;
usbvision_device_data[ 21 ].vin_reg2_override = 0;
usbvision_device_data[ 21 ].dvi_yuv_override = 0;
usbvision_device_data[ 21 ].vin_reg1 = 0;
usbvision_device_data[ 21 ].vin_reg2 = 0;
usbvision_device_data[ 21 ].dvi_yuv = 0;
usbvision_device_data[ 21 ].tuner_type = 5;
usbvision_device_data[ 21 ].x_offset = -1;
usbvision_device_data[ 21 ].y_offset = -1;
usbvision_device_data[ 22 ].video_norm = 255;
usbvision_device_data[ 22 ].model_string = "Hauppauge WinTV USB (PAL I FM)";
usbvision_device_data[ 22 ].interface = -1;
usbvision_device_data[ 22 ].codec = 7111;
usbvision_device_data[ 22 ].video_channels = 3;
usbvision_device_data[ 22 ].audio_channels = 1;
usbvision_device_data[ 22 ].radio = 1;
usbvision_device_data[ 22 ].vbi = 1;
usbvision_device_data[ 22 ].tuner = 1;
usbvision_device_data[ 22 ].vin_reg1_override = 0;
usbvision_device_data[ 22 ].vin_reg2_override = 0;
usbvision_device_data[ 22 ].dvi_yuv_override = 0;
usbvision_device_data[ 22 ].vin_reg1 = 0;
usbvision_device_data[ 22 ].vin_reg2 = 0;
usbvision_device_data[ 22 ].dvi_yuv = 0;
usbvision_device_data[ 22 ].tuner_type = 5;
usbvision_device_data[ 22 ].x_offset = -1;
usbvision_device_data[ 22 ].y_offset = -1;
usbvision_device_data[ 23 ].video_norm = 255;
usbvision_device_data[ 23 ].model_string = "Hauppauge WinTV USB (PAL D/K FM)";
usbvision_device_data[ 23 ].interface = -1;
usbvision_device_data[ 23 ].codec = 7111;
usbvision_device_data[ 23 ].video_channels = 3;
usbvision_device_data[ 23 ].audio_channels = 1;
usbvision_device_data[ 23 ].radio = 1;
usbvision_device_data[ 23 ].vbi = 1;
usbvision_device_data[ 23 ].tuner = 1;
usbvision_device_data[ 23 ].vin_reg1_override = 0;
usbvision_device_data[ 23 ].vin_reg2_override = 0;
usbvision_device_data[ 23 ].dvi_yuv_override = 0;
usbvision_device_data[ 23 ].vin_reg1 = 0;
usbvision_device_data[ 23 ].vin_reg2 = 0;
usbvision_device_data[ 23 ].dvi_yuv = 0;
usbvision_device_data[ 23 ].tuner_type = 5;
usbvision_device_data[ 23 ].x_offset = -1;
usbvision_device_data[ 23 ].y_offset = -1;
usbvision_device_data[ 24 ].video_norm = 45056;
usbvision_device_data[ 24 ].model_string = "Hauppauge WinTV USB Pro (NTSC M/N)";
usbvision_device_data[ 24 ].interface = 0;
usbvision_device_data[ 24 ].codec = 7113;
usbvision_device_data[ 24 ].video_channels = 3;
usbvision_device_data[ 24 ].audio_channels = 1;
usbvision_device_data[ 24 ].radio = 1;
usbvision_device_data[ 24 ].vbi = 1;
usbvision_device_data[ 24 ].tuner = 1;
usbvision_device_data[ 24 ].vin_reg1_override = 0;
usbvision_device_data[ 24 ].vin_reg2_override = 0;
usbvision_device_data[ 24 ].dvi_yuv_override = 1;
usbvision_device_data[ 24 ].vin_reg1 = 0;
usbvision_device_data[ 24 ].vin_reg2 = 0;
usbvision_device_data[ 24 ].dvi_yuv = 7;
usbvision_device_data[ 24 ].tuner_type = 45;
usbvision_device_data[ 24 ].x_offset = 0;
usbvision_device_data[ 24 ].y_offset = 3;
usbvision_device_data[ 25 ].video_norm = 45056;
usbvision_device_data[ 25 ].model_string = "Hauppauge WinTV USB Pro (NTSC M/N) V2";
usbvision_device_data[ 25 ].interface = 0;
usbvision_device_data[ 25 ].codec = 7113;
usbvision_device_data[ 25 ].video_channels = 3;
usbvision_device_data[ 25 ].audio_channels = 1;
usbvision_device_data[ 25 ].radio = 1;
usbvision_device_data[ 25 ].vbi = 1;
usbvision_device_data[ 25 ].tuner = 1;
usbvision_device_data[ 25 ].vin_reg1_override = 0;
usbvision_device_data[ 25 ].vin_reg2_override = 0;
usbvision_device_data[ 25 ].dvi_yuv_override = 1;
usbvision_device_data[ 25 ].vin_reg1 = 0;
usbvision_device_data[ 25 ].vin_reg2 = 0;
usbvision_device_data[ 25 ].dvi_yuv = 7;
usbvision_device_data[ 25 ].tuner_type = 45;
usbvision_device_data[ 25 ].x_offset = 0;
usbvision_device_data[ 25 ].y_offset = 3;
usbvision_device_data[ 26 ].video_norm = 255;
usbvision_device_data[ 26 ].model_string = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)";
usbvision_device_data[ 26 ].interface = 0;
usbvision_device_data[ 26 ].codec = 7113;
usbvision_device_data[ 26 ].video_channels = 3;
usbvision_device_data[ 26 ].audio_channels = 1;
usbvision_device_data[ 26 ].radio = 0;
usbvision_device_data[ 26 ].vbi = 1;
usbvision_device_data[ 26 ].tuner = 1;
usbvision_device_data[ 26 ].vin_reg1_override = 0;
usbvision_device_data[ 26 ].vin_reg2_override = 0;
usbvision_device_data[ 26 ].dvi_yuv_override = 1;
usbvision_device_data[ 26 ].vin_reg1 = 0;
usbvision_device_data[ 26 ].vin_reg2 = 0;
usbvision_device_data[ 26 ].dvi_yuv = 7;
usbvision_device_data[ 26 ].tuner_type = 38;
usbvision_device_data[ 26 ].x_offset = 0;
usbvision_device_data[ 26 ].y_offset = 3;
usbvision_device_data[ 27 ].video_norm = 45056;
usbvision_device_data[ 27 ].model_string = "Hauppauge WinTV USB Pro (NTSC M/N) V3";
usbvision_device_data[ 27 ].interface = 0;
usbvision_device_data[ 27 ].codec = 7113;
usbvision_device_data[ 27 ].video_channels = 3;
usbvision_device_data[ 27 ].audio_channels = 1;
usbvision_device_data[ 27 ].radio = 1;
usbvision_device_data[ 27 ].vbi = 1;
usbvision_device_data[ 27 ].tuner = 1;
usbvision_device_data[ 27 ].vin_reg1_override = 0;
usbvision_device_data[ 27 ].vin_reg2_override = 0;
usbvision_device_data[ 27 ].dvi_yuv_override = 1;
usbvision_device_data[ 27 ].vin_reg1 = 0;
usbvision_device_data[ 27 ].vin_reg2 = 0;
usbvision_device_data[ 27 ].dvi_yuv = 7;
usbvision_device_data[ 27 ].tuner_type = 17;
usbvision_device_data[ 27 ].x_offset = 0;
usbvision_device_data[ 27 ].y_offset = 3;
usbvision_device_data[ 28 ].video_norm = 255;
usbvision_device_data[ 28 ].model_string = "Hauppauge WinTV USB Pro (PAL B/G)";
usbvision_device_data[ 28 ].interface = 0;
usbvision_device_data[ 28 ].codec = 7113;
usbvision_device_data[ 28 ].video_channels = 3;
usbvision_device_data[ 28 ].audio_channels = 1;
usbvision_device_data[ 28 ].radio = 0;
usbvision_device_data[ 28 ].vbi = 1;
usbvision_device_data[ 28 ].tuner = 1;
usbvision_device_data[ 28 ].vin_reg1_override = 0;
usbvision_device_data[ 28 ].vin_reg2_override = 0;
usbvision_device_data[ 28 ].dvi_yuv_override = 1;
usbvision_device_data[ 28 ].vin_reg1 = 0;
usbvision_device_data[ 28 ].vin_reg2 = 0;
usbvision_device_data[ 28 ].dvi_yuv = 7;
usbvision_device_data[ 28 ].tuner_type = 5;
usbvision_device_data[ 28 ].x_offset = 0;
usbvision_device_data[ 28 ].y_offset = 3;
usbvision_device_data[ 29 ].video_norm = 255;
usbvision_device_data[ 29 ].model_string = "Hauppauge WinTV USB Pro (PAL I)";
usbvision_device_data[ 29 ].interface = 0;
usbvision_device_data[ 29 ].codec = 7113;
usbvision_device_data[ 29 ].video_channels = 3;
usbvision_device_data[ 29 ].audio_channels = 1;
usbvision_device_data[ 29 ].radio = 0;
usbvision_device_data[ 29 ].vbi = 1;
usbvision_device_data[ 29 ].tuner = 1;
usbvision_device_data[ 29 ].vin_reg1_override = 0;
usbvision_device_data[ 29 ].vin_reg2_override = 0;
usbvision_device_data[ 29 ].dvi_yuv_override = 1;
usbvision_device_data[ 29 ].vin_reg1 = 0;
usbvision_device_data[ 29 ].vin_reg2 = 0;
usbvision_device_data[ 29 ].dvi_yuv = 7;
usbvision_device_data[ 29 ].tuner_type = 5;
usbvision_device_data[ 29 ].x_offset = 0;
usbvision_device_data[ 29 ].y_offset = 3;
usbvision_device_data[ 30 ].video_norm = 16711680;
usbvision_device_data[ 30 ].model_string = "Hauppauge WinTV USB Pro (PAL/SECAM L)";
usbvision_device_data[ 30 ].interface = -1;
usbvision_device_data[ 30 ].codec = 7113;
usbvision_device_data[ 30 ].video_channels = 3;
usbvision_device_data[ 30 ].audio_channels = 1;
usbvision_device_data[ 30 ].radio = 0;
usbvision_device_data[ 30 ].vbi = 1;
usbvision_device_data[ 30 ].tuner = 1;
usbvision_device_data[ 30 ].vin_reg1_override = 0;
usbvision_device_data[ 30 ].vin_reg2_override = 0;
usbvision_device_data[ 30 ].dvi_yuv_override = 1;
usbvision_device_data[ 30 ].vin_reg1 = 0;
usbvision_device_data[ 30 ].vin_reg2 = 0;
usbvision_device_data[ 30 ].dvi_yuv = 7;
usbvision_device_data[ 30 ].tuner_type = 3;
usbvision_device_data[ 30 ].x_offset = 0;
usbvision_device_data[ 30 ].y_offset = 3;
usbvision_device_data[ 31 ].video_norm = 255;
usbvision_device_data[ 31 ].model_string = "Hauppauge WinTV USB Pro (PAL D/K)";
usbvision_device_data[ 31 ].interface = -1;
usbvision_device_data[ 31 ].codec = 7113;
usbvision_device_data[ 31 ].video_channels = 3;
usbvision_device_data[ 31 ].audio_channels = 1;
usbvision_device_data[ 31 ].radio = 0;
usbvision_device_data[ 31 ].vbi = 1;
usbvision_device_data[ 31 ].tuner = 1;
usbvision_device_data[ 31 ].vin_reg1_override = 0;
usbvision_device_data[ 31 ].vin_reg2_override = 0;
usbvision_device_data[ 31 ].dvi_yuv_override = 1;
usbvision_device_data[ 31 ].vin_reg1 = 0;
usbvision_device_data[ 31 ].vin_reg2 = 0;
usbvision_device_data[ 31 ].dvi_yuv = 7;
usbvision_device_data[ 31 ].tuner_type = 5;
usbvision_device_data[ 31 ].x_offset = 0;
usbvision_device_data[ 31 ].y_offset = 3;
usbvision_device_data[ 32 ].video_norm = 16711680;
usbvision_device_data[ 32 ].model_string = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)";
usbvision_device_data[ 32 ].interface = -1;
usbvision_device_data[ 32 ].codec = 7113;
usbvision_device_data[ 32 ].video_channels = 3;
usbvision_device_data[ 32 ].audio_channels = 1;
usbvision_device_data[ 32 ].radio = 0;
usbvision_device_data[ 32 ].vbi = 1;
usbvision_device_data[ 32 ].tuner = 1;
usbvision_device_data[ 32 ].vin_reg1_override = 0;
usbvision_device_data[ 32 ].vin_reg2_override = 0;
usbvision_device_data[ 32 ].dvi_yuv_override = 1;
usbvision_device_data[ 32 ].vin_reg1 = 0;
usbvision_device_data[ 32 ].vin_reg2 = 0;
usbvision_device_data[ 32 ].dvi_yuv = 7;
usbvision_device_data[ 32 ].tuner_type = 3;
usbvision_device_data[ 32 ].x_offset = 0;
usbvision_device_data[ 32 ].y_offset = 3;
usbvision_device_data[ 33 ].video_norm = 16711680;
usbvision_device_data[ 33 ].model_string = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2";
usbvision_device_data[ 33 ].interface = -1;
usbvision_device_data[ 33 ].codec = 7113;
usbvision_device_data[ 33 ].video_channels = 3;
usbvision_device_data[ 33 ].audio_channels = 1;
usbvision_device_data[ 33 ].radio = 0;
usbvision_device_data[ 33 ].vbi = 1;
usbvision_device_data[ 33 ].tuner = 1;
usbvision_device_data[ 33 ].vin_reg1_override = 0;
usbvision_device_data[ 33 ].vin_reg2_override = 0;
usbvision_device_data[ 33 ].dvi_yuv_override = 1;
usbvision_device_data[ 33 ].vin_reg1 = 0;
usbvision_device_data[ 33 ].vin_reg2 = 0;
usbvision_device_data[ 33 ].dvi_yuv = 7;
usbvision_device_data[ 33 ].tuner_type = 3;
usbvision_device_data[ 33 ].x_offset = 0;
usbvision_device_data[ 33 ].y_offset = 3;
usbvision_device_data[ 34 ].video_norm = 255;
usbvision_device_data[ 34 ].model_string = "Hauppauge WinTV USB Pro (PAL B/G) V2";
usbvision_device_data[ 34 ].interface = -1;
usbvision_device_data[ 34 ].codec = 7113;
usbvision_device_data[ 34 ].video_channels = 3;
usbvision_device_data[ 34 ].audio_channels = 1;
usbvision_device_data[ 34 ].radio = 0;
usbvision_device_data[ 34 ].vbi = 1;
usbvision_device_data[ 34 ].tuner = 1;
usbvision_device_data[ 34 ].vin_reg1_override = 0;
usbvision_device_data[ 34 ].vin_reg2_override = 0;
usbvision_device_data[ 34 ].dvi_yuv_override = 1;
usbvision_device_data[ 34 ].vin_reg1 = 0;
usbvision_device_data[ 34 ].vin_reg2 = 0;
usbvision_device_data[ 34 ].dvi_yuv = 7;
usbvision_device_data[ 34 ].tuner_type = 10;
usbvision_device_data[ 34 ].x_offset = 0;
usbvision_device_data[ 34 ].y_offset = 3;
usbvision_device_data[ 35 ].video_norm = 255;
usbvision_device_data[ 35 ].model_string = "Hauppauge WinTV USB Pro (PAL B/G,D/K)";
usbvision_device_data[ 35 ].interface = -1;
usbvision_device_data[ 35 ].codec = 7113;
usbvision_device_data[ 35 ].video_channels = 3;
usbvision_device_data[ 35 ].audio_channels = 1;
usbvision_device_data[ 35 ].radio = 0;
usbvision_device_data[ 35 ].vbi = 1;
usbvision_device_data[ 35 ].tuner = 1;
usbvision_device_data[ 35 ].vin_reg1_override = 0;
usbvision_device_data[ 35 ].vin_reg2_override = 0;
usbvision_device_data[ 35 ].dvi_yuv_override = 1;
usbvision_device_data[ 35 ].vin_reg1 = 0;
usbvision_device_data[ 35 ].vin_reg2 = 0;
usbvision_device_data[ 35 ].dvi_yuv = 7;
usbvision_device_data[ 35 ].tuner_type = 10;
usbvision_device_data[ 35 ].x_offset = 0;
usbvision_device_data[ 35 ].y_offset = 3;
usbvision_device_data[ 36 ].video_norm = 255;
usbvision_device_data[ 36 ].model_string = "Hauppauge WinTV USB Pro (PAL I,D/K)";
usbvision_device_data[ 36 ].interface = -1;
usbvision_device_data[ 36 ].codec = 7113;
usbvision_device_data[ 36 ].video_channels = 3;
usbvision_device_data[ 36 ].audio_channels = 1;
usbvision_device_data[ 36 ].radio = 0;
usbvision_device_data[ 36 ].vbi = 1;
usbvision_device_data[ 36 ].tuner = 1;
usbvision_device_data[ 36 ].vin_reg1_override = 0;
usbvision_device_data[ 36 ].vin_reg2_override = 0;
usbvision_device_data[ 36 ].dvi_yuv_override = 1;
usbvision_device_data[ 36 ].vin_reg1 = 0;
usbvision_device_data[ 36 ].vin_reg2 = 0;
usbvision_device_data[ 36 ].dvi_yuv = 7;
usbvision_device_data[ 36 ].tuner_type = 37;
usbvision_device_data[ 36 ].x_offset = 0;
usbvision_device_data[ 36 ].y_offset = 3;
usbvision_device_data[ 37 ].video_norm = 45056;
usbvision_device_data[ 37 ].model_string = "Hauppauge WinTV USB Pro (NTSC M/N FM)";
usbvision_device_data[ 37 ].interface = -1;
usbvision_device_data[ 37 ].codec = 7113;
usbvision_device_data[ 37 ].video_channels = 3;
usbvision_device_data[ 37 ].audio_channels = 1;
usbvision_device_data[ 37 ].radio = 1;
usbvision_device_data[ 37 ].vbi = 1;
usbvision_device_data[ 37 ].tuner = 1;
usbvision_device_data[ 37 ].vin_reg1_override = 0;
usbvision_device_data[ 37 ].vin_reg2_override = 0;
usbvision_device_data[ 37 ].dvi_yuv_override = 1;
usbvision_device_data[ 37 ].vin_reg1 = 0;
usbvision_device_data[ 37 ].vin_reg2 = 0;
usbvision_device_data[ 37 ].dvi_yuv = 7;
usbvision_device_data[ 37 ].tuner_type = 17;
usbvision_device_data[ 37 ].x_offset = 0;
usbvision_device_data[ 37 ].y_offset = 3;
usbvision_device_data[ 38 ].video_norm = 255;
usbvision_device_data[ 38 ].model_string = "Hauppauge WinTV USB Pro (PAL B/G FM)";
usbvision_device_data[ 38 ].interface = 0;
usbvision_device_data[ 38 ].codec = 7113;
usbvision_device_data[ 38 ].video_channels = 3;
usbvision_device_data[ 38 ].audio_channels = 1;
usbvision_device_data[ 38 ].radio = 1;
usbvision_device_data[ 38 ].vbi = 1;
usbvision_device_data[ 38 ].tuner = 1;
usbvision_device_data[ 38 ].vin_reg1_override = 0;
usbvision_device_data[ 38 ].vin_reg2_override = 0;
usbvision_device_data[ 38 ].dvi_yuv_override = 1;
usbvision_device_data[ 38 ].vin_reg1 = 0;
usbvision_device_data[ 38 ].vin_reg2 = 0;
usbvision_device_data[ 38 ].dvi_yuv = 7;
usbvision_device_data[ 38 ].tuner_type = 5;
usbvision_device_data[ 38 ].x_offset = 0;
usbvision_device_data[ 38 ].y_offset = 3;
usbvision_device_data[ 39 ].video_norm = 255;
usbvision_device_data[ 39 ].model_string = "Hauppauge WinTV USB Pro (PAL I FM)";
usbvision_device_data[ 39 ].interface = 0;
usbvision_device_data[ 39 ].codec = 7113;
usbvision_device_data[ 39 ].video_channels = 3;
usbvision_device_data[ 39 ].audio_channels = 1;
usbvision_device_data[ 39 ].radio = 1;
usbvision_device_data[ 39 ].vbi = 1;
usbvision_device_data[ 39 ].tuner = 1;
usbvision_device_data[ 39 ].vin_reg1_override = 0;
usbvision_device_data[ 39 ].vin_reg2_override = 0;
usbvision_device_data[ 39 ].dvi_yuv_override = 1;
usbvision_device_data[ 39 ].vin_reg1 = 0;
usbvision_device_data[ 39 ].vin_reg2 = 0;
usbvision_device_data[ 39 ].dvi_yuv = 7;
usbvision_device_data[ 39 ].tuner_type = 5;
usbvision_device_data[ 39 ].x_offset = 0;
usbvision_device_data[ 39 ].y_offset = 3;
usbvision_device_data[ 40 ].video_norm = 255;
usbvision_device_data[ 40 ].model_string = "Hauppauge WinTV USB Pro (PAL D/K FM)";
usbvision_device_data[ 40 ].interface = 0;
usbvision_device_data[ 40 ].codec = 7113;
usbvision_device_data[ 40 ].video_channels = 3;
usbvision_device_data[ 40 ].audio_channels = 1;
usbvision_device_data[ 40 ].radio = 1;
usbvision_device_data[ 40 ].vbi = 1;
usbvision_device_data[ 40 ].tuner = 1;
usbvision_device_data[ 40 ].vin_reg1_override = 0;
usbvision_device_data[ 40 ].vin_reg2_override = 0;
usbvision_device_data[ 40 ].dvi_yuv_override = 1;
usbvision_device_data[ 40 ].vin_reg1 = 0;
usbvision_device_data[ 40 ].vin_reg2 = 0;
usbvision_device_data[ 40 ].dvi_yuv = 7;
usbvision_device_data[ 40 ].tuner_type = 5;
usbvision_device_data[ 40 ].x_offset = 0;
usbvision_device_data[ 40 ].y_offset = 3;
usbvision_device_data[ 41 ].video_norm = 255;
usbvision_device_data[ 41 ].model_string = "Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)";
usbvision_device_data[ 41 ].interface = 0;
usbvision_device_data[ 41 ].codec = 7113;
usbvision_device_data[ 41 ].video_channels = 3;
usbvision_device_data[ 41 ].audio_channels = 1;
usbvision_device_data[ 41 ].radio = 1;
usbvision_device_data[ 41 ].vbi = 1;
usbvision_device_data[ 41 ].tuner = 1;
usbvision_device_data[ 41 ].vin_reg1_override = 0;
usbvision_device_data[ 41 ].vin_reg2_override = 0;
usbvision_device_data[ 41 ].dvi_yuv_override = 1;
usbvision_device_data[ 41 ].vin_reg1 = 0;
usbvision_device_data[ 41 ].vin_reg2 = 0;
usbvision_device_data[ 41 ].dvi_yuv = 7;
usbvision_device_data[ 41 ].tuner_type = 45;
usbvision_device_data[ 41 ].x_offset = 0;
usbvision_device_data[ 41 ].y_offset = 3;
usbvision_device_data[ 42 ].video_norm = 255;
usbvision_device_data[ 42 ].model_string = "Hauppauge WinTV USB Pro (Temic PAL B/G FM)";
usbvision_device_data[ 42 ].interface = 0;
usbvision_device_data[ 42 ].codec = 7113;
usbvision_device_data[ 42 ].video_channels = 3;
usbvision_device_data[ 42 ].audio_channels = 1;
usbvision_device_data[ 42 ].radio = 1;
usbvision_device_data[ 42 ].vbi = 1;
usbvision_device_data[ 42 ].tuner = 1;
usbvision_device_data[ 42 ].vin_reg1_override = 0;
usbvision_device_data[ 42 ].vin_reg2_override = 0;
usbvision_device_data[ 42 ].dvi_yuv_override = 1;
usbvision_device_data[ 42 ].vin_reg1 = 0;
usbvision_device_data[ 42 ].vin_reg2 = 0;
usbvision_device_data[ 42 ].dvi_yuv = 7;
usbvision_device_data[ 42 ].tuner_type = 45;
usbvision_device_data[ 42 ].x_offset = 0;
usbvision_device_data[ 42 ].y_offset = 3;
usbvision_device_data[ 43 ].video_norm = 255;
usbvision_device_data[ 43 ].model_string = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)";
usbvision_device_data[ 43 ].interface = 0;
usbvision_device_data[ 43 ].codec = 7113;
usbvision_device_data[ 43 ].video_channels = 3;
usbvision_device_data[ 43 ].audio_channels = 1;
usbvision_device_data[ 43 ].radio = 1;
usbvision_device_data[ 43 ].vbi = 1;
usbvision_device_data[ 43 ].tuner = 1;
usbvision_device_data[ 43 ].vin_reg1_override = 0;
usbvision_device_data[ 43 ].vin_reg2_override = 0;
usbvision_device_data[ 43 ].dvi_yuv_override = 1;
usbvision_device_data[ 43 ].vin_reg1 = 0;
usbvision_device_data[ 43 ].vin_reg2 = 0;
usbvision_device_data[ 43 ].dvi_yuv = 7;
usbvision_device_data[ 43 ].tuner_type = 38;
usbvision_device_data[ 43 ].x_offset = 0;
usbvision_device_data[ 43 ].y_offset = 3;
usbvision_device_data[ 44 ].video_norm = 45056;
usbvision_device_data[ 44 ].model_string = "Hauppauge WinTV USB Pro (NTSC M/N FM) V2";
usbvision_device_data[ 44 ].interface = 0;
usbvision_device_data[ 44 ].codec = 7113;
usbvision_device_data[ 44 ].video_channels = 3;
usbvision_device_data[ 44 ].audio_channels = 1;
usbvision_device_data[ 44 ].radio = 1;
usbvision_device_data[ 44 ].vbi = 1;
usbvision_device_data[ 44 ].tuner = 1;
usbvision_device_data[ 44 ].vin_reg1_override = 0;
usbvision_device_data[ 44 ].vin_reg2_override = 0;
usbvision_device_data[ 44 ].dvi_yuv_override = 1;
usbvision_device_data[ 44 ].vin_reg1 = 0;
usbvision_device_data[ 44 ].vin_reg2 = 0;
usbvision_device_data[ 44 ].dvi_yuv = 7;
usbvision_device_data[ 44 ].tuner_type = 17;
usbvision_device_data[ 44 ].x_offset = 0;
usbvision_device_data[ 44 ].y_offset = 3;
usbvision_device_data[ 45 ].video_norm = 45056;
usbvision_device_data[ 45 ].model_string = "Camtel Technology USB TV Genie Pro FM Model TVB330";
usbvision_device_data[ 45 ].interface = -1;
usbvision_device_data[ 45 ].codec = 7113;
usbvision_device_data[ 45 ].video_channels = 3;
usbvision_device_data[ 45 ].audio_channels = 1;
usbvision_device_data[ 45 ].radio = 1;
usbvision_device_data[ 45 ].vbi = 1;
usbvision_device_data[ 45 ].tuner = 1;
usbvision_device_data[ 45 ].vin_reg1_override = 0;
usbvision_device_data[ 45 ].vin_reg2_override = 0;
usbvision_device_data[ 45 ].dvi_yuv_override = 0;
usbvision_device_data[ 45 ].vin_reg1 = 0;
usbvision_device_data[ 45 ].vin_reg2 = 0;
usbvision_device_data[ 45 ].dvi_yuv = 0;
usbvision_device_data[ 45 ].tuner_type = 17;
usbvision_device_data[ 45 ].x_offset = 5;
usbvision_device_data[ 45 ].y_offset = 5;
usbvision_device_data[ 46 ].video_norm = 255;
usbvision_device_data[ 46 ].model_string = "Digital Video Creator I";
usbvision_device_data[ 46 ].interface = -1;
usbvision_device_data[ 46 ].codec = 7113;
usbvision_device_data[ 46 ].video_channels = 2;
usbvision_device_data[ 46 ].audio_channels = 0;
usbvision_device_data[ 46 ].radio = 0;
usbvision_device_data[ 46 ].vbi = 1;
usbvision_device_data[ 46 ].tuner = 0;
usbvision_device_data[ 46 ].vin_reg1_override = 0;
usbvision_device_data[ 46 ].vin_reg2_override = 0;
usbvision_device_data[ 46 ].dvi_yuv_override = 1;
usbvision_device_data[ 46 ].vin_reg1 = 0;
usbvision_device_data[ 46 ].vin_reg2 = 0;
usbvision_device_data[ 46 ].dvi_yuv = 7;
usbvision_device_data[ 46 ].tuner_type = 0;
usbvision_device_data[ 46 ].x_offset = 0;
usbvision_device_data[ 46 ].y_offset = 3;
usbvision_device_data[ 47 ].video_norm = 45056;
usbvision_device_data[ 47 ].model_string = "Global Village GV-007 (NTSC)";
usbvision_device_data[ 47 ].interface = -1;
usbvision_device_data[ 47 ].codec = 7111;
usbvision_device_data[ 47 ].video_channels = 2;
usbvision_device_data[ 47 ].audio_channels = 0;
usbvision_device_data[ 47 ].radio = 0;
usbvision_device_data[ 47 ].vbi = 1;
usbvision_device_data[ 47 ].tuner = 0;
usbvision_device_data[ 47 ].vin_reg1_override = 0;
usbvision_device_data[ 47 ].vin_reg2_override = 0;
usbvision_device_data[ 47 ].dvi_yuv_override = 1;
usbvision_device_data[ 47 ].vin_reg1 = 0;
usbvision_device_data[ 47 ].vin_reg2 = 0;
usbvision_device_data[ 47 ].dvi_yuv = 7;
usbvision_device_data[ 47 ].tuner_type = 0;
usbvision_device_data[ 47 ].x_offset = 82;
usbvision_device_data[ 47 ].y_offset = 20;
usbvision_device_data[ 48 ].video_norm = 45056;
usbvision_device_data[ 48 ].model_string = "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)";
usbvision_device_data[ 48 ].interface = 0;
usbvision_device_data[ 48 ].codec = 7113;
usbvision_device_data[ 48 ].video_channels = 2;
usbvision_device_data[ 48 ].audio_channels = 0;
usbvision_device_data[ 48 ].radio = 0;
usbvision_device_data[ 48 ].vbi = 1;
usbvision_device_data[ 48 ].tuner = 0;
usbvision_device_data[ 48 ].vin_reg1_override = 0;
usbvision_device_data[ 48 ].vin_reg2_override = 0;
usbvision_device_data[ 48 ].dvi_yuv_override = 1;
usbvision_device_data[ 48 ].vin_reg1 = 0;
usbvision_device_data[ 48 ].vin_reg2 = 0;
usbvision_device_data[ 48 ].dvi_yuv = 7;
usbvision_device_data[ 48 ].tuner_type = 0;
usbvision_device_data[ 48 ].x_offset = 0;
usbvision_device_data[ 48 ].y_offset = 3;
usbvision_device_data[ 49 ].video_norm = 255;
usbvision_device_data[ 49 ].model_string = "Dazzle Fusion Model DVC-80 Rev 1 (PAL)";
usbvision_device_data[ 49 ].interface = 0;
usbvision_device_data[ 49 ].codec = 7113;
usbvision_device_data[ 49 ].video_channels = 2;
usbvision_device_data[ 49 ].audio_channels = 0;
usbvision_device_data[ 49 ].radio = 0;
usbvision_device_data[ 49 ].vbi = 1;
usbvision_device_data[ 49 ].tuner = 0;
usbvision_device_data[ 49 ].vin_reg1_override = 0;
usbvision_device_data[ 49 ].vin_reg2_override = 0;
usbvision_device_data[ 49 ].dvi_yuv_override = 1;
usbvision_device_data[ 49 ].vin_reg1 = 0;
usbvision_device_data[ 49 ].vin_reg2 = 0;
usbvision_device_data[ 49 ].dvi_yuv = 7;
usbvision_device_data[ 49 ].tuner_type = 0;
usbvision_device_data[ 49 ].x_offset = 0;
usbvision_device_data[ 49 ].y_offset = 3;
usbvision_device_data[ 50 ].video_norm = 16711680;
usbvision_device_data[ 50 ].model_string = "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)";
usbvision_device_data[ 50 ].interface = 0;
usbvision_device_data[ 50 ].codec = 7113;
usbvision_device_data[ 50 ].video_channels = 2;
usbvision_device_data[ 50 ].audio_channels = 0;
usbvision_device_data[ 50 ].radio = 0;
usbvision_device_data[ 50 ].vbi = 1;
usbvision_device_data[ 50 ].tuner = 0;
usbvision_device_data[ 50 ].vin_reg1_override = 0;
usbvision_device_data[ 50 ].vin_reg2_override = 0;
usbvision_device_data[ 50 ].dvi_yuv_override = 1;
usbvision_device_data[ 50 ].vin_reg1 = 0;
usbvision_device_data[ 50 ].vin_reg2 = 0;
usbvision_device_data[ 50 ].dvi_yuv = 7;
usbvision_device_data[ 50 ].tuner_type = 0;
usbvision_device_data[ 50 ].x_offset = 0;
usbvision_device_data[ 50 ].y_offset = 3;
usbvision_device_data[ 51 ].video_norm = 255;
usbvision_device_data[ 51 ].model_string = "Eskape Labs MyTV2Go";
usbvision_device_data[ 51 ].interface = 0;
usbvision_device_data[ 51 ].codec = 7113;
usbvision_device_data[ 51 ].video_channels = 2;
usbvision_device_data[ 51 ].audio_channels = 1;
usbvision_device_data[ 51 ].radio = 1;
usbvision_device_data[ 51 ].vbi = 1;
usbvision_device_data[ 51 ].tuner = 1;
usbvision_device_data[ 51 ].vin_reg1_override = 0;
usbvision_device_data[ 51 ].vin_reg2_override = 0;
usbvision_device_data[ 51 ].dvi_yuv_override = 1;
usbvision_device_data[ 51 ].vin_reg1 = 0;
usbvision_device_data[ 51 ].vin_reg2 = 0;
usbvision_device_data[ 51 ].dvi_yuv = 7;
usbvision_device_data[ 51 ].tuner_type = 38;
usbvision_device_data[ 51 ].x_offset = 0;
usbvision_device_data[ 51 ].y_offset = 3;
usbvision_device_data[ 52 ].video_norm = 255;
usbvision_device_data[ 52 ].model_string = "Pinnacle Studio PCTV USB (PAL)";
usbvision_device_data[ 52 ].interface = -1;
usbvision_device_data[ 52 ].codec = 7111;
usbvision_device_data[ 52 ].video_channels = 3;
usbvision_device_data[ 52 ].audio_channels = 1;
usbvision_device_data[ 52 ].radio = 0;
usbvision_device_data[ 52 ].vbi = 0;
usbvision_device_data[ 52 ].tuner = 1;
usbvision_device_data[ 52 ].vin_reg1_override = 0;
usbvision_device_data[ 52 ].vin_reg2_override = 0;
usbvision_device_data[ 52 ].dvi_yuv_override = 0;
usbvision_device_data[ 52 ].vin_reg1 = 0;
usbvision_device_data[ 52 ].vin_reg2 = 0;
usbvision_device_data[ 52 ].dvi_yuv = 0;
usbvision_device_data[ 52 ].tuner_type = 18;
usbvision_device_data[ 52 ].x_offset = -1;
usbvision_device_data[ 52 ].y_offset = -1;
usbvision_device_data[ 53 ].video_norm = 16711680;
usbvision_device_data[ 53 ].model_string = "Pinnacle Studio PCTV USB (SECAM)";
usbvision_device_data[ 53 ].interface = -1;
usbvision_device_data[ 53 ].codec = 7111;
usbvision_device_data[ 53 ].video_channels = 3;
usbvision_device_data[ 53 ].audio_channels = 1;
usbvision_device_data[ 53 ].radio = 0;
usbvision_device_data[ 53 ].vbi = 1;
usbvision_device_data[ 53 ].tuner = 1;
usbvision_device_data[ 53 ].vin_reg1_override = 0;
usbvision_device_data[ 53 ].vin_reg2_override = 0;
usbvision_device_data[ 53 ].dvi_yuv_override = 0;
usbvision_device_data[ 53 ].vin_reg1 = 0;
usbvision_device_data[ 53 ].vin_reg2 = 0;
usbvision_device_data[ 53 ].dvi_yuv = 0;
usbvision_device_data[ 53 ].tuner_type = 3;
usbvision_device_data[ 53 ].x_offset = -1;
usbvision_device_data[ 53 ].y_offset = -1;
usbvision_device_data[ 54 ].video_norm = 255;
usbvision_device_data[ 54 ].model_string = "Pinnacle Studio PCTV USB (PAL) FM";
usbvision_device_data[ 54 ].interface = -1;
usbvision_device_data[ 54 ].codec = 7111;
usbvision_device_data[ 54 ].video_channels = 3;
usbvision_device_data[ 54 ].audio_channels = 1;
usbvision_device_data[ 54 ].radio = 1;
usbvision_device_data[ 54 ].vbi = 1;
usbvision_device_data[ 54 ].tuner = 1;
usbvision_device_data[ 54 ].vin_reg1_override = 0;
usbvision_device_data[ 54 ].vin_reg2_override = 0;
usbvision_device_data[ 54 ].dvi_yuv_override = 0;
usbvision_device_data[ 54 ].vin_reg1 = 0;
usbvision_device_data[ 54 ].vin_reg2 = 0;
usbvision_device_data[ 54 ].dvi_yuv = 0;
usbvision_device_data[ 54 ].tuner_type = 5;
usbvision_device_data[ 54 ].x_offset = 128;
usbvision_device_data[ 54 ].y_offset = 23;
usbvision_device_data[ 55 ].video_norm = 255;
usbvision_device_data[ 55 ].model_string = "Miro PCTV USB";
usbvision_device_data[ 55 ].interface = -1;
usbvision_device_data[ 55 ].codec = 7111;
usbvision_device_data[ 55 ].video_channels = 3;
usbvision_device_data[ 55 ].audio_channels = 1;
usbvision_device_data[ 55 ].radio = 0;
usbvision_device_data[ 55 ].vbi = 1;
usbvision_device_data[ 55 ].tuner = 1;
usbvision_device_data[ 55 ].vin_reg1_override = 0;
usbvision_device_data[ 55 ].vin_reg2_override = 0;
usbvision_device_data[ 55 ].dvi_yuv_override = 0;
usbvision_device_data[ 55 ].vin_reg1 = 0;
usbvision_device_data[ 55 ].vin_reg2 = 0;
usbvision_device_data[ 55 ].dvi_yuv = 0;
usbvision_device_data[ 55 ].tuner_type = 5;
usbvision_device_data[ 55 ].x_offset = -1;
usbvision_device_data[ 55 ].y_offset = -1;
usbvision_device_data[ 56 ].video_norm = 45056;
usbvision_device_data[ 56 ].model_string = "Pinnacle Studio PCTV USB (NTSC) FM";
usbvision_device_data[ 56 ].interface = -1;
usbvision_device_data[ 56 ].codec = 7111;
usbvision_device_data[ 56 ].video_channels = 3;
usbvision_device_data[ 56 ].audio_channels = 1;
usbvision_device_data[ 56 ].radio = 1;
usbvision_device_data[ 56 ].vbi = 1;
usbvision_device_data[ 56 ].tuner = 1;
usbvision_device_data[ 56 ].vin_reg1_override = 0;
usbvision_device_data[ 56 ].vin_reg2_override = 0;
usbvision_device_data[ 56 ].dvi_yuv_override = 0;
usbvision_device_data[ 56 ].vin_reg1 = 0;
usbvision_device_data[ 56 ].vin_reg2 = 0;
usbvision_device_data[ 56 ].dvi_yuv = 0;
usbvision_device_data[ 56 ].tuner_type = 17;
usbvision_device_data[ 56 ].x_offset = -1;
usbvision_device_data[ 56 ].y_offset = -1;
usbvision_device_data[ 57 ].video_norm = 255;
usbvision_device_data[ 57 ].model_string = "Pinnacle Studio PCTV USB (PAL) FM V2";
usbvision_device_data[ 57 ].interface = -1;
usbvision_device_data[ 57 ].codec = 7113;
usbvision_device_data[ 57 ].video_channels = 3;
usbvision_device_data[ 57 ].audio_channels = 1;
usbvision_device_data[ 57 ].radio = 1;
usbvision_device_data[ 57 ].vbi = 1;
usbvision_device_data[ 57 ].tuner = 1;
usbvision_device_data[ 57 ].vin_reg1_override = 0;
usbvision_device_data[ 57 ].vin_reg2_override = 0;
usbvision_device_data[ 57 ].dvi_yuv_override = 1;
usbvision_device_data[ 57 ].vin_reg1 = 0;
usbvision_device_data[ 57 ].vin_reg2 = 0;
usbvision_device_data[ 57 ].dvi_yuv = 7;
usbvision_device_data[ 57 ].tuner_type = 20;
usbvision_device_data[ 57 ].x_offset = 0;
usbvision_device_data[ 57 ].y_offset = 3;
usbvision_device_data[ 58 ].video_norm = 45056;
usbvision_device_data[ 58 ].model_string = "Pinnacle Studio PCTV USB (NTSC) FM V2";
usbvision_device_data[ 58 ].interface = -1;
usbvision_device_data[ 58 ].codec = 7111;
usbvision_device_data[ 58 ].video_channels = 3;
usbvision_device_data[ 58 ].audio_channels = 1;
usbvision_device_data[ 58 ].radio = 1;
usbvision_device_data[ 58 ].vbi = 1;
usbvision_device_data[ 58 ].tuner = 1;
usbvision_device_data[ 58 ].vin_reg1_override = 0;
usbvision_device_data[ 58 ].vin_reg2_override = 0;
usbvision_device_data[ 58 ].dvi_yuv_override = 1;
usbvision_device_data[ 58 ].vin_reg1 = 0;
usbvision_device_data[ 58 ].vin_reg2 = 0;
usbvision_device_data[ 58 ].dvi_yuv = 7;
usbvision_device_data[ 58 ].tuner_type = 21;
usbvision_device_data[ 58 ].x_offset = 0;
usbvision_device_data[ 58 ].y_offset = 3;
usbvision_device_data[ 59 ].video_norm = 255;
usbvision_device_data[ 59 ].model_string = "Pinnacle Studio PCTV USB (PAL) FM V3";
usbvision_device_data[ 59 ].interface = -1;
usbvision_device_data[ 59 ].codec = 7113;
usbvision_device_data[ 59 ].video_channels = 3;
usbvision_device_data[ 59 ].audio_channels = 1;
usbvision_device_data[ 59 ].radio = 1;
usbvision_device_data[ 59 ].vbi = 1;
usbvision_device_data[ 59 ].tuner = 1;
usbvision_device_data[ 59 ].vin_reg1_override = 0;
usbvision_device_data[ 59 ].vin_reg2_override = 0;
usbvision_device_data[ 59 ].dvi_yuv_override = 1;
usbvision_device_data[ 59 ].vin_reg1 = 0;
usbvision_device_data[ 59 ].vin_reg2 = 0;
usbvision_device_data[ 59 ].dvi_yuv = 7;
usbvision_device_data[ 59 ].tuner_type = 20;
usbvision_device_data[ 59 ].x_offset = 0;
usbvision_device_data[ 59 ].y_offset = 3;
usbvision_device_data[ 60 ].video_norm = 45056;
usbvision_device_data[ 60 ].model_string = "Pinnacle Studio Linx Video input cable (NTSC)";
usbvision_device_data[ 60 ].interface = -1;
usbvision_device_data[ 60 ].codec = 7113;
usbvision_device_data[ 60 ].video_channels = 2;
usbvision_device_data[ 60 ].audio_channels = 1;
usbvision_device_data[ 60 ].radio = 0;
usbvision_device_data[ 60 ].vbi = 1;
usbvision_device_data[ 60 ].tuner = 0;
usbvision_device_data[ 60 ].vin_reg1_override = 0;
usbvision_device_data[ 60 ].vin_reg2_override = 0;
usbvision_device_data[ 60 ].dvi_yuv_override = 1;
usbvision_device_data[ 60 ].vin_reg1 = 0;
usbvision_device_data[ 60 ].vin_reg2 = 0;
usbvision_device_data[ 60 ].dvi_yuv = 7;
usbvision_device_data[ 60 ].tuner_type = 0;
usbvision_device_data[ 60 ].x_offset = 0;
usbvision_device_data[ 60 ].y_offset = 3;
usbvision_device_data[ 61 ].video_norm = 255;
usbvision_device_data[ 61 ].model_string = "Pinnacle Studio Linx Video input cable (PAL)";
usbvision_device_data[ 61 ].interface = -1;
usbvision_device_data[ 61 ].codec = 7113;
usbvision_device_data[ 61 ].video_channels = 2;
usbvision_device_data[ 61 ].audio_channels = 1;
usbvision_device_data[ 61 ].radio = 0;
usbvision_device_data[ 61 ].vbi = 1;
usbvision_device_data[ 61 ].tuner = 0;
usbvision_device_data[ 61 ].vin_reg1_override = 0;
usbvision_device_data[ 61 ].vin_reg2_override = 0;
usbvision_device_data[ 61 ].dvi_yuv_override = 1;
usbvision_device_data[ 61 ].vin_reg1 = 0;
usbvision_device_data[ 61 ].vin_reg2 = 0;
usbvision_device_data[ 61 ].dvi_yuv = 7;
usbvision_device_data[ 61 ].tuner_type = 0;
usbvision_device_data[ 61 ].x_offset = 0;
usbvision_device_data[ 61 ].y_offset = 3;
usbvision_device_data[ 62 ].video_norm = 255;
usbvision_device_data[ 62 ].model_string = "Pinnacle PCTV Bungee USB (PAL) FM";
usbvision_device_data[ 62 ].interface = -1;
usbvision_device_data[ 62 ].codec = 7113;
usbvision_device_data[ 62 ].video_channels = 3;
usbvision_device_data[ 62 ].audio_channels = 1;
usbvision_device_data[ 62 ].radio = 1;
usbvision_device_data[ 62 ].vbi = 1;
usbvision_device_data[ 62 ].tuner = 1;
usbvision_device_data[ 62 ].vin_reg1_override = 0;
usbvision_device_data[ 62 ].vin_reg2_override = 0;
usbvision_device_data[ 62 ].dvi_yuv_override = 1;
usbvision_device_data[ 62 ].vin_reg1 = 0;
usbvision_device_data[ 62 ].vin_reg2 = 0;
usbvision_device_data[ 62 ].dvi_yuv = 7;
usbvision_device_data[ 62 ].tuner_type = 20;
usbvision_device_data[ 62 ].x_offset = 0;
usbvision_device_data[ 62 ].y_offset = 3;
usbvision_device_data[ 63 ].video_norm = 45056;
usbvision_device_data[ 63 ].model_string = "Hauppauge WinTv-USB";
usbvision_device_data[ 63 ].interface = -1;
usbvision_device_data[ 63 ].codec = 7111;
usbvision_device_data[ 63 ].video_channels = 3;
usbvision_device_data[ 63 ].audio_channels = 1;
usbvision_device_data[ 63 ].radio = 0;
usbvision_device_data[ 63 ].vbi = 1;
usbvision_device_data[ 63 ].tuner = 1;
usbvision_device_data[ 63 ].vin_reg1_override = 0;
usbvision_device_data[ 63 ].vin_reg2_override = 0;
usbvision_device_data[ 63 ].dvi_yuv_override = 0;
usbvision_device_data[ 63 ].vin_reg1 = 0;
usbvision_device_data[ 63 ].vin_reg2 = 0;
usbvision_device_data[ 63 ].dvi_yuv = 0;
usbvision_device_data[ 63 ].tuner_type = 17;
usbvision_device_data[ 63 ].x_offset = -1;
usbvision_device_data[ 63 ].y_offset = -1;
usbvision_device_data[ 64 ].video_norm = 45056;
usbvision_device_data[ 64 ].model_string = "Pinnacle Studio PCTV USB (NTSC) FM V3";
usbvision_device_data[ 64 ].interface = -1;
usbvision_device_data[ 64 ].codec = 7111;
usbvision_device_data[ 64 ].video_channels = 3;
usbvision_device_data[ 64 ].audio_channels = 1;
usbvision_device_data[ 64 ].radio = 1;
usbvision_device_data[ 64 ].vbi = 1;
usbvision_device_data[ 64 ].tuner = 1;
usbvision_device_data[ 64 ].vin_reg1_override = 0;
usbvision_device_data[ 64 ].vin_reg2_override = 0;
usbvision_device_data[ 64 ].dvi_yuv_override = 0;
usbvision_device_data[ 64 ].vin_reg1 = 0;
usbvision_device_data[ 64 ].vin_reg2 = 0;
usbvision_device_data[ 64 ].dvi_yuv = 0;
usbvision_device_data[ 64 ].tuner_type = 17;
usbvision_device_data[ 64 ].x_offset = -1;
usbvision_device_data[ 64 ].y_offset = -1;
usbvision_device_data[ 65 ].video_norm = 45056;
usbvision_device_data[ 65 ].model_string = "Nogatech USB MicroCam NTSC (NV3000N)";
usbvision_device_data[ 65 ].interface = -1;
usbvision_device_data[ 65 ].codec = 3000;
usbvision_device_data[ 65 ].video_channels = 1;
usbvision_device_data[ 65 ].audio_channels = 0;
usbvision_device_data[ 65 ].radio = 0;
usbvision_device_data[ 65 ].vbi = 0;
usbvision_device_data[ 65 ].tuner = 0;
usbvision_device_data[ 65 ].vin_reg1_override = 0;
usbvision_device_data[ 65 ].vin_reg2_override = 0;
usbvision_device_data[ 65 ].dvi_yuv_override = 0;
usbvision_device_data[ 65 ].vin_reg1 = 0;
usbvision_device_data[ 65 ].vin_reg2 = 0;
usbvision_device_data[ 65 ].dvi_yuv = 0;
usbvision_device_data[ 65 ].tuner_type = 0;
usbvision_device_data[ 65 ].x_offset = 71;
usbvision_device_data[ 65 ].y_offset = 15;
usbvision_device_data[ 66 ].video_norm = 255;
usbvision_device_data[ 66 ].model_string = "Nogatech USB MicroCam PAL (NV3001P)";
usbvision_device_data[ 66 ].interface = -1;
usbvision_device_data[ 66 ].codec = 3000;
usbvision_device_data[ 66 ].video_channels = 1;
usbvision_device_data[ 66 ].audio_channels = 0;
usbvision_device_data[ 66 ].radio = 0;
usbvision_device_data[ 66 ].vbi = 0;
usbvision_device_data[ 66 ].tuner = 0;
usbvision_device_data[ 66 ].vin_reg1_override = 0;
usbvision_device_data[ 66 ].vin_reg2_override = 0;
usbvision_device_data[ 66 ].dvi_yuv_override = 0;
usbvision_device_data[ 66 ].vin_reg1 = 0;
usbvision_device_data[ 66 ].vin_reg2 = 0;
usbvision_device_data[ 66 ].dvi_yuv = 0;
usbvision_device_data[ 66 ].tuner_type = 0;
usbvision_device_data[ 66 ].x_offset = 71;
usbvision_device_data[ 66 ].y_offset = 18;
usbvision_device_data_size = 67;
usbvision_table[ 0 ].match_flags = 3;
usbvision_table[ 0 ].idVendor = 2671;
usbvision_table[ 0 ].idProduct = 1024;
usbvision_table[ 0 ].bcdDevice_lo = 0;
usbvision_table[ 0 ].bcdDevice_hi = 0;
usbvision_table[ 0 ].bDeviceClass = 0;
usbvision_table[ 0 ].bDeviceSubClass = 0;
usbvision_table[ 0 ].bDeviceProtocol = 0;
usbvision_table[ 0 ].bInterfaceClass = 0;
usbvision_table[ 0 ].bInterfaceSubClass = 0;
usbvision_table[ 0 ].bInterfaceProtocol = 0;
usbvision_table[ 0 ].bInterfaceNumber = 0;
usbvision_table[ 0 ].driver_info = 0;
usbvision_table[ 1 ].match_flags = 3;
usbvision_table[ 1 ].idVendor = 1293;
usbvision_table[ 1 ].idProduct = 262;
usbvision_table[ 1 ].bcdDevice_lo = 0;
usbvision_table[ 1 ].bcdDevice_hi = 0;
usbvision_table[ 1 ].bDeviceClass = 0;
usbvision_table[ 1 ].bDeviceSubClass = 0;
usbvision_table[ 1 ].bDeviceProtocol = 0;
usbvision_table[ 1 ].bInterfaceClass = 0;
usbvision_table[ 1 ].bInterfaceSubClass = 0;
usbvision_table[ 1 ].bInterfaceProtocol = 0;
usbvision_table[ 1 ].bInterfaceNumber = 0;
usbvision_table[ 1 ].driver_info = 1;
usbvision_table[ 2 ].match_flags = 3;
usbvision_table[ 2 ].idVendor = 1293;
usbvision_table[ 2 ].idProduct = 519;
usbvision_table[ 2 ].bcdDevice_lo = 0;
usbvision_table[ 2 ].bcdDevice_hi = 0;
usbvision_table[ 2 ].bDeviceClass = 0;
usbvision_table[ 2 ].bDeviceSubClass = 0;
usbvision_table[ 2 ].bDeviceProtocol = 0;
usbvision_table[ 2 ].bInterfaceClass = 0;
usbvision_table[ 2 ].bInterfaceSubClass = 0;
usbvision_table[ 2 ].bInterfaceProtocol = 0;
usbvision_table[ 2 ].bInterfaceNumber = 0;
usbvision_table[ 2 ].driver_info = 2;
usbvision_table[ 3 ].match_flags = 3;
usbvision_table[ 3 ].idVendor = 1293;
usbvision_table[ 3 ].idProduct = 520;
usbvision_table[ 3 ].bcdDevice_lo = 0;
usbvision_table[ 3 ].bcdDevice_hi = 0;
usbvision_table[ 3 ].bDeviceClass = 0;
usbvision_table[ 3 ].bDeviceSubClass = 0;
usbvision_table[ 3 ].bDeviceProtocol = 0;
usbvision_table[ 3 ].bInterfaceClass = 0;
usbvision_table[ 3 ].bInterfaceSubClass = 0;
usbvision_table[ 3 ].bInterfaceProtocol = 0;
usbvision_table[ 3 ].bInterfaceNumber = 0;
usbvision_table[ 3 ].driver_info = 3;
usbvision_table[ 4 ].match_flags = 3;
usbvision_table[ 4 ].idVendor = 1393;
usbvision_table[ 4 ].idProduct = 2;
usbvision_table[ 4 ].bcdDevice_lo = 0;
usbvision_table[ 4 ].bcdDevice_hi = 0;
usbvision_table[ 4 ].bDeviceClass = 0;
usbvision_table[ 4 ].bDeviceSubClass = 0;
usbvision_table[ 4 ].bDeviceProtocol = 0;
usbvision_table[ 4 ].bInterfaceClass = 0;
usbvision_table[ 4 ].bInterfaceSubClass = 0;
usbvision_table[ 4 ].bInterfaceProtocol = 0;
usbvision_table[ 4 ].bInterfaceNumber = 0;
usbvision_table[ 4 ].driver_info = 4;
usbvision_table[ 5 ].match_flags = 3;
usbvision_table[ 5 ].idVendor = 1395;
usbvision_table[ 5 ].idProduct = 3;
usbvision_table[ 5 ].bcdDevice_lo = 0;
usbvision_table[ 5 ].bcdDevice_hi = 0;
usbvision_table[ 5 ].bDeviceClass = 0;
usbvision_table[ 5 ].bDeviceSubClass = 0;
usbvision_table[ 5 ].bDeviceProtocol = 0;
usbvision_table[ 5 ].bInterfaceClass = 0;
usbvision_table[ 5 ].bInterfaceSubClass = 0;
usbvision_table[ 5 ].bInterfaceProtocol = 0;
usbvision_table[ 5 ].bInterfaceNumber = 0;
usbvision_table[ 5 ].driver_info = 5;
usbvision_table[ 6 ].match_flags = 3;
usbvision_table[ 6 ].idVendor = 1395;
usbvision_table[ 6 ].idProduct = 1024;
usbvision_table[ 6 ].bcdDevice_lo = 0;
usbvision_table[ 6 ].bcdDevice_hi = 0;
usbvision_table[ 6 ].bDeviceClass = 0;
usbvision_table[ 6 ].bDeviceSubClass = 0;
usbvision_table[ 6 ].bDeviceProtocol = 0;
usbvision_table[ 6 ].bInterfaceClass = 0;
usbvision_table[ 6 ].bInterfaceSubClass = 0;
usbvision_table[ 6 ].bInterfaceProtocol = 0;
usbvision_table[ 6 ].bInterfaceNumber = 0;
usbvision_table[ 6 ].driver_info = 6;
usbvision_table[ 7 ].match_flags = 3;
usbvision_table[ 7 ].idVendor = 1395;
usbvision_table[ 7 ].idProduct = 8192;
usbvision_table[ 7 ].bcdDevice_lo = 0;
usbvision_table[ 7 ].bcdDevice_hi = 0;
usbvision_table[ 7 ].bDeviceClass = 0;
usbvision_table[ 7 ].bDeviceSubClass = 0;
usbvision_table[ 7 ].bDeviceProtocol = 0;
usbvision_table[ 7 ].bInterfaceClass = 0;
usbvision_table[ 7 ].bInterfaceSubClass = 0;
usbvision_table[ 7 ].bInterfaceProtocol = 0;
usbvision_table[ 7 ].bInterfaceNumber = 0;
usbvision_table[ 7 ].driver_info = 7;
usbvision_table[ 8 ].match_flags = 3;
usbvision_table[ 8 ].idVendor = 1395;
usbvision_table[ 8 ].idProduct = 11520;
usbvision_table[ 8 ].bcdDevice_lo = 0;
usbvision_table[ 8 ].bcdDevice_hi = 0;
usbvision_table[ 8 ].bDeviceClass = 0;
usbvision_table[ 8 ].bDeviceSubClass = 0;
usbvision_table[ 8 ].bDeviceProtocol = 0;
usbvision_table[ 8 ].bInterfaceClass = 0;
usbvision_table[ 8 ].bInterfaceSubClass = 0;
usbvision_table[ 8 ].bInterfaceProtocol = 0;
usbvision_table[ 8 ].bInterfaceNumber = 0;
usbvision_table[ 8 ].driver_info = 8;
usbvision_table[ 9 ].match_flags = 3;
usbvision_table[ 9 ].idVendor = 1395;
usbvision_table[ 9 ].idProduct = 11521;
usbvision_table[ 9 ].bcdDevice_lo = 0;
usbvision_table[ 9 ].bcdDevice_hi = 0;
usbvision_table[ 9 ].bDeviceClass = 0;
usbvision_table[ 9 ].bDeviceSubClass = 0;
usbvision_table[ 9 ].bDeviceProtocol = 0;
usbvision_table[ 9 ].bInterfaceClass = 0;
usbvision_table[ 9 ].bInterfaceSubClass = 0;
usbvision_table[ 9 ].bInterfaceProtocol = 0;
usbvision_table[ 9 ].bInterfaceNumber = 0;
usbvision_table[ 9 ].driver_info = 9;
usbvision_table[ 10 ].match_flags = 3;
usbvision_table[ 10 ].idVendor = 1395;
usbvision_table[ 10 ].idProduct = 8449;
usbvision_table[ 10 ].bcdDevice_lo = 0;
usbvision_table[ 10 ].bcdDevice_hi = 0;
usbvision_table[ 10 ].bDeviceClass = 0;
usbvision_table[ 10 ].bDeviceSubClass = 0;
usbvision_table[ 10 ].bDeviceProtocol = 0;
usbvision_table[ 10 ].bInterfaceClass = 0;
usbvision_table[ 10 ].bInterfaceSubClass = 0;
usbvision_table[ 10 ].bInterfaceProtocol = 0;
usbvision_table[ 10 ].bInterfaceNumber = 0;
usbvision_table[ 10 ].driver_info = 10;
usbvision_table[ 11 ].match_flags = 3;
usbvision_table[ 11 ].idVendor = 1395;
usbvision_table[ 11 ].idProduct = 12288;
usbvision_table[ 11 ].bcdDevice_lo = 0;
usbvision_table[ 11 ].bcdDevice_hi = 0;
usbvision_table[ 11 ].bDeviceClass = 0;
usbvision_table[ 11 ].bDeviceSubClass = 0;
usbvision_table[ 11 ].bDeviceProtocol = 0;
usbvision_table[ 11 ].bInterfaceClass = 0;
usbvision_table[ 11 ].bInterfaceSubClass = 0;
usbvision_table[ 11 ].bInterfaceProtocol = 0;
usbvision_table[ 11 ].bInterfaceNumber = 0;
usbvision_table[ 11 ].driver_info = 65;
usbvision_table[ 12 ].match_flags = 3;
usbvision_table[ 12 ].idVendor = 1395;
usbvision_table[ 12 ].idProduct = 12289;
usbvision_table[ 12 ].bcdDevice_lo = 0;
usbvision_table[ 12 ].bcdDevice_hi = 0;
usbvision_table[ 12 ].bDeviceClass = 0;
usbvision_table[ 12 ].bDeviceSubClass = 0;
usbvision_table[ 12 ].bDeviceProtocol = 0;
usbvision_table[ 12 ].bInterfaceClass = 0;
usbvision_table[ 12 ].bInterfaceSubClass = 0;
usbvision_table[ 12 ].bInterfaceProtocol = 0;
usbvision_table[ 12 ].bInterfaceNumber = 0;
usbvision_table[ 12 ].driver_info = 66;
usbvision_table[ 13 ].match_flags = 3;
usbvision_table[ 13 ].idVendor = 1395;
usbvision_table[ 13 ].idProduct = 16640;
usbvision_table[ 13 ].bcdDevice_lo = 0;
usbvision_table[ 13 ].bcdDevice_hi = 0;
usbvision_table[ 13 ].bDeviceClass = 0;
usbvision_table[ 13 ].bDeviceSubClass = 0;
usbvision_table[ 13 ].bDeviceProtocol = 0;
usbvision_table[ 13 ].bInterfaceClass = 0;
usbvision_table[ 13 ].bInterfaceSubClass = 0;
usbvision_table[ 13 ].bInterfaceProtocol = 0;
usbvision_table[ 13 ].bInterfaceNumber = 0;
usbvision_table[ 13 ].driver_info = 11;
usbvision_table[ 14 ].match_flags = 3;
usbvision_table[ 14 ].idVendor = 1395;
usbvision_table[ 14 ].idProduct = 16656;
usbvision_table[ 14 ].bcdDevice_lo = 0;
usbvision_table[ 14 ].bcdDevice_hi = 0;
usbvision_table[ 14 ].bDeviceClass = 0;
usbvision_table[ 14 ].bDeviceSubClass = 0;
usbvision_table[ 14 ].bDeviceProtocol = 0;
usbvision_table[ 14 ].bInterfaceClass = 0;
usbvision_table[ 14 ].bInterfaceSubClass = 0;
usbvision_table[ 14 ].bInterfaceProtocol = 0;
usbvision_table[ 14 ].bInterfaceNumber = 0;
usbvision_table[ 14 ].driver_info = 12;
usbvision_table[ 15 ].match_flags = 3;
usbvision_table[ 15 ].idVendor = 1395;
usbvision_table[ 15 ].idProduct = 17488;
usbvision_table[ 15 ].bcdDevice_lo = 0;
usbvision_table[ 15 ].bcdDevice_hi = 0;
usbvision_table[ 15 ].bDeviceClass = 0;
usbvision_table[ 15 ].bDeviceSubClass = 0;
usbvision_table[ 15 ].bDeviceProtocol = 0;
usbvision_table[ 15 ].bInterfaceClass = 0;
usbvision_table[ 15 ].bInterfaceSubClass = 0;
usbvision_table[ 15 ].bInterfaceProtocol = 0;
usbvision_table[ 15 ].bInterfaceNumber = 0;
usbvision_table[ 15 ].driver_info = 13;
usbvision_table[ 16 ].match_flags = 3;
usbvision_table[ 16 ].idVendor = 1395;
usbvision_table[ 16 ].idProduct = 17744;
usbvision_table[ 16 ].bcdDevice_lo = 0;
usbvision_table[ 16 ].bcdDevice_hi = 0;
usbvision_table[ 16 ].bDeviceClass = 0;
usbvision_table[ 16 ].bDeviceSubClass = 0;
usbvision_table[ 16 ].bDeviceProtocol = 0;
usbvision_table[ 16 ].bInterfaceClass = 0;
usbvision_table[ 16 ].bInterfaceSubClass = 0;
usbvision_table[ 16 ].bInterfaceProtocol = 0;
usbvision_table[ 16 ].bInterfaceNumber = 0;
usbvision_table[ 16 ].driver_info = 14;
usbvision_table[ 17 ].match_flags = 3;
usbvision_table[ 17 ].idVendor = 1395;
usbvision_table[ 17 ].idProduct = 19712;
usbvision_table[ 17 ].bcdDevice_lo = 0;
usbvision_table[ 17 ].bcdDevice_hi = 0;
usbvision_table[ 17 ].bDeviceClass = 0;
usbvision_table[ 17 ].bDeviceSubClass = 0;
usbvision_table[ 17 ].bDeviceProtocol = 0;
usbvision_table[ 17 ].bInterfaceClass = 0;
usbvision_table[ 17 ].bInterfaceSubClass = 0;
usbvision_table[ 17 ].bInterfaceProtocol = 0;
usbvision_table[ 17 ].bInterfaceNumber = 0;
usbvision_table[ 17 ].driver_info = 15;
usbvision_table[ 18 ].match_flags = 3;
usbvision_table[ 18 ].idVendor = 1395;
usbvision_table[ 18 ].idProduct = 19713;
usbvision_table[ 18 ].bcdDevice_lo = 0;
usbvision_table[ 18 ].bcdDevice_hi = 0;
usbvision_table[ 18 ].bDeviceClass = 0;
usbvision_table[ 18 ].bDeviceSubClass = 0;
usbvision_table[ 18 ].bDeviceProtocol = 0;
usbvision_table[ 18 ].bInterfaceClass = 0;
usbvision_table[ 18 ].bInterfaceSubClass = 0;
usbvision_table[ 18 ].bInterfaceProtocol = 0;
usbvision_table[ 18 ].bInterfaceNumber = 0;
usbvision_table[ 18 ].driver_info = 16;
usbvision_table[ 19 ].match_flags = 3;
usbvision_table[ 19 ].idVendor = 1395;
usbvision_table[ 19 ].idProduct = 19714;
usbvision_table[ 19 ].bcdDevice_lo = 0;
usbvision_table[ 19 ].bcdDevice_hi = 0;
usbvision_table[ 19 ].bDeviceClass = 0;
usbvision_table[ 19 ].bDeviceSubClass = 0;
usbvision_table[ 19 ].bDeviceProtocol = 0;
usbvision_table[ 19 ].bInterfaceClass = 0;
usbvision_table[ 19 ].bInterfaceSubClass = 0;
usbvision_table[ 19 ].bInterfaceProtocol = 0;
usbvision_table[ 19 ].bInterfaceNumber = 0;
usbvision_table[ 19 ].driver_info = 17;
usbvision_table[ 20 ].match_flags = 3;
usbvision_table[ 20 ].idVendor = 1395;
usbvision_table[ 20 ].idProduct = 19715;
usbvision_table[ 20 ].bcdDevice_lo = 0;
usbvision_table[ 20 ].bcdDevice_hi = 0;
usbvision_table[ 20 ].bDeviceClass = 0;
usbvision_table[ 20 ].bDeviceSubClass = 0;
usbvision_table[ 20 ].bDeviceProtocol = 0;
usbvision_table[ 20 ].bInterfaceClass = 0;
usbvision_table[ 20 ].bInterfaceSubClass = 0;
usbvision_table[ 20 ].bInterfaceProtocol = 0;
usbvision_table[ 20 ].bInterfaceNumber = 0;
usbvision_table[ 20 ].driver_info = 18;
usbvision_table[ 21 ].match_flags = 3;
usbvision_table[ 21 ].idVendor = 1395;
usbvision_table[ 21 ].idProduct = 19716;
usbvision_table[ 21 ].bcdDevice_lo = 0;
usbvision_table[ 21 ].bcdDevice_hi = 0;
usbvision_table[ 21 ].bDeviceClass = 0;
usbvision_table[ 21 ].bDeviceSubClass = 0;
usbvision_table[ 21 ].bDeviceProtocol = 0;
usbvision_table[ 21 ].bInterfaceClass = 0;
usbvision_table[ 21 ].bInterfaceSubClass = 0;
usbvision_table[ 21 ].bInterfaceProtocol = 0;
usbvision_table[ 21 ].bInterfaceNumber = 0;
usbvision_table[ 21 ].driver_info = 19;
usbvision_table[ 22 ].match_flags = 3;
usbvision_table[ 22 ].idVendor = 1395;
usbvision_table[ 22 ].idProduct = 19728;
usbvision_table[ 22 ].bcdDevice_lo = 0;
usbvision_table[ 22 ].bcdDevice_hi = 0;
usbvision_table[ 22 ].bDeviceClass = 0;
usbvision_table[ 22 ].bDeviceSubClass = 0;
usbvision_table[ 22 ].bDeviceProtocol = 0;
usbvision_table[ 22 ].bInterfaceClass = 0;
usbvision_table[ 22 ].bInterfaceSubClass = 0;
usbvision_table[ 22 ].bInterfaceProtocol = 0;
usbvision_table[ 22 ].bInterfaceNumber = 0;
usbvision_table[ 22 ].driver_info = 20;
usbvision_table[ 23 ].match_flags = 3;
usbvision_table[ 23 ].idVendor = 1395;
usbvision_table[ 23 ].idProduct = 19729;
usbvision_table[ 23 ].bcdDevice_lo = 0;
usbvision_table[ 23 ].bcdDevice_hi = 0;
usbvision_table[ 23 ].bDeviceClass = 0;
usbvision_table[ 23 ].bDeviceSubClass = 0;
usbvision_table[ 23 ].bDeviceProtocol = 0;
usbvision_table[ 23 ].bInterfaceClass = 0;
usbvision_table[ 23 ].bInterfaceSubClass = 0;
usbvision_table[ 23 ].bInterfaceProtocol = 0;
usbvision_table[ 23 ].bInterfaceNumber = 0;
usbvision_table[ 23 ].driver_info = 21;
usbvision_table[ 24 ].match_flags = 3;
usbvision_table[ 24 ].idVendor = 1395;
usbvision_table[ 24 ].idProduct = 19730;
usbvision_table[ 24 ].bcdDevice_lo = 0;
usbvision_table[ 24 ].bcdDevice_hi = 0;
usbvision_table[ 24 ].bDeviceClass = 0;
usbvision_table[ 24 ].bDeviceSubClass = 0;
usbvision_table[ 24 ].bDeviceProtocol = 0;
usbvision_table[ 24 ].bInterfaceClass = 0;
usbvision_table[ 24 ].bInterfaceSubClass = 0;
usbvision_table[ 24 ].bInterfaceProtocol = 0;
usbvision_table[ 24 ].bInterfaceNumber = 0;
usbvision_table[ 24 ].driver_info = 22;
usbvision_table[ 25 ].match_flags = 3;
usbvision_table[ 25 ].idVendor = 1395;
usbvision_table[ 25 ].idProduct = 19732;
usbvision_table[ 25 ].bcdDevice_lo = 0;
usbvision_table[ 25 ].bcdDevice_hi = 0;
usbvision_table[ 25 ].bDeviceClass = 0;
usbvision_table[ 25 ].bDeviceSubClass = 0;
usbvision_table[ 25 ].bDeviceProtocol = 0;
usbvision_table[ 25 ].bInterfaceClass = 0;
usbvision_table[ 25 ].bInterfaceSubClass = 0;
usbvision_table[ 25 ].bInterfaceProtocol = 0;
usbvision_table[ 25 ].bInterfaceNumber = 0;
usbvision_table[ 25 ].driver_info = 23;
usbvision_table[ 26 ].match_flags = 3;
usbvision_table[ 26 ].idVendor = 1395;
usbvision_table[ 26 ].idProduct = 19754;
usbvision_table[ 26 ].bcdDevice_lo = 0;
usbvision_table[ 26 ].bcdDevice_hi = 0;
usbvision_table[ 26 ].bDeviceClass = 0;
usbvision_table[ 26 ].bDeviceSubClass = 0;
usbvision_table[ 26 ].bDeviceProtocol = 0;
usbvision_table[ 26 ].bInterfaceClass = 0;
usbvision_table[ 26 ].bInterfaceSubClass = 0;
usbvision_table[ 26 ].bInterfaceProtocol = 0;
usbvision_table[ 26 ].bInterfaceNumber = 0;
usbvision_table[ 26 ].driver_info = 24;
usbvision_table[ 27 ].match_flags = 3;
usbvision_table[ 27 ].idVendor = 1395;
usbvision_table[ 27 ].idProduct = 19755;
usbvision_table[ 27 ].bcdDevice_lo = 0;
usbvision_table[ 27 ].bcdDevice_hi = 0;
usbvision_table[ 27 ].bDeviceClass = 0;
usbvision_table[ 27 ].bDeviceSubClass = 0;
usbvision_table[ 27 ].bDeviceProtocol = 0;
usbvision_table[ 27 ].bInterfaceClass = 0;
usbvision_table[ 27 ].bInterfaceSubClass = 0;
usbvision_table[ 27 ].bInterfaceProtocol = 0;
usbvision_table[ 27 ].bInterfaceNumber = 0;
usbvision_table[ 27 ].driver_info = 25;
usbvision_table[ 28 ].match_flags = 3;
usbvision_table[ 28 ].idVendor = 1395;
usbvision_table[ 28 ].idProduct = 19756;
usbvision_table[ 28 ].bcdDevice_lo = 0;
usbvision_table[ 28 ].bcdDevice_hi = 0;
usbvision_table[ 28 ].bDeviceClass = 0;
usbvision_table[ 28 ].bDeviceSubClass = 0;
usbvision_table[ 28 ].bDeviceProtocol = 0;
usbvision_table[ 28 ].bInterfaceClass = 0;
usbvision_table[ 28 ].bInterfaceSubClass = 0;
usbvision_table[ 28 ].bInterfaceProtocol = 0;
usbvision_table[ 28 ].bInterfaceNumber = 0;
usbvision_table[ 28 ].driver_info = 26;
usbvision_table[ 29 ].match_flags = 3;
usbvision_table[ 29 ].idVendor = 1395;
usbvision_table[ 29 ].idProduct = 19744;
usbvision_table[ 29 ].bcdDevice_lo = 0;
usbvision_table[ 29 ].bcdDevice_hi = 0;
usbvision_table[ 29 ].bDeviceClass = 0;
usbvision_table[ 29 ].bDeviceSubClass = 0;
usbvision_table[ 29 ].bDeviceProtocol = 0;
usbvision_table[ 29 ].bInterfaceClass = 0;
usbvision_table[ 29 ].bInterfaceSubClass = 0;
usbvision_table[ 29 ].bInterfaceProtocol = 0;
usbvision_table[ 29 ].bInterfaceNumber = 0;
usbvision_table[ 29 ].driver_info = 27;
usbvision_table[ 30 ].match_flags = 3;
usbvision_table[ 30 ].idVendor = 1395;
usbvision_table[ 30 ].idProduct = 19745;
usbvision_table[ 30 ].bcdDevice_lo = 0;
usbvision_table[ 30 ].bcdDevice_hi = 0;
usbvision_table[ 30 ].bDeviceClass = 0;
usbvision_table[ 30 ].bDeviceSubClass = 0;
usbvision_table[ 30 ].bDeviceProtocol = 0;
usbvision_table[ 30 ].bInterfaceClass = 0;
usbvision_table[ 30 ].bInterfaceSubClass = 0;
usbvision_table[ 30 ].bInterfaceProtocol = 0;
usbvision_table[ 30 ].bInterfaceNumber = 0;
usbvision_table[ 30 ].driver_info = 28;
usbvision_table[ 31 ].match_flags = 3;
usbvision_table[ 31 ].idVendor = 1395;
usbvision_table[ 31 ].idProduct = 19746;
usbvision_table[ 31 ].bcdDevice_lo = 0;
usbvision_table[ 31 ].bcdDevice_hi = 0;
usbvision_table[ 31 ].bDeviceClass = 0;
usbvision_table[ 31 ].bDeviceSubClass = 0;
usbvision_table[ 31 ].bDeviceProtocol = 0;
usbvision_table[ 31 ].bInterfaceClass = 0;
usbvision_table[ 31 ].bInterfaceSubClass = 0;
usbvision_table[ 31 ].bInterfaceProtocol = 0;
usbvision_table[ 31 ].bInterfaceNumber = 0;
usbvision_table[ 31 ].driver_info = 29;
usbvision_table[ 32 ].match_flags = 3;
usbvision_table[ 32 ].idVendor = 1395;
usbvision_table[ 32 ].idProduct = 19747;
usbvision_table[ 32 ].bcdDevice_lo = 0;
usbvision_table[ 32 ].bcdDevice_hi = 0;
usbvision_table[ 32 ].bDeviceClass = 0;
usbvision_table[ 32 ].bDeviceSubClass = 0;
usbvision_table[ 32 ].bDeviceProtocol = 0;
usbvision_table[ 32 ].bInterfaceClass = 0;
usbvision_table[ 32 ].bInterfaceSubClass = 0;
usbvision_table[ 32 ].bInterfaceProtocol = 0;
usbvision_table[ 32 ].bInterfaceNumber = 0;
usbvision_table[ 32 ].driver_info = 30;
usbvision_table[ 33 ].match_flags = 3;
usbvision_table[ 33 ].idVendor = 1395;
usbvision_table[ 33 ].idProduct = 19748;
usbvision_table[ 33 ].bcdDevice_lo = 0;
usbvision_table[ 33 ].bcdDevice_hi = 0;
usbvision_table[ 33 ].bDeviceClass = 0;
usbvision_table[ 33 ].bDeviceSubClass = 0;
usbvision_table[ 33 ].bDeviceProtocol = 0;
usbvision_table[ 33 ].bInterfaceClass = 0;
usbvision_table[ 33 ].bInterfaceSubClass = 0;
usbvision_table[ 33 ].bInterfaceProtocol = 0;
usbvision_table[ 33 ].bInterfaceNumber = 0;
usbvision_table[ 33 ].driver_info = 31;
usbvision_table[ 34 ].match_flags = 3;
usbvision_table[ 34 ].idVendor = 1395;
usbvision_table[ 34 ].idProduct = 19749;
usbvision_table[ 34 ].bcdDevice_lo = 0;
usbvision_table[ 34 ].bcdDevice_hi = 0;
usbvision_table[ 34 ].bDeviceClass = 0;
usbvision_table[ 34 ].bDeviceSubClass = 0;
usbvision_table[ 34 ].bDeviceProtocol = 0;
usbvision_table[ 34 ].bInterfaceClass = 0;
usbvision_table[ 34 ].bInterfaceSubClass = 0;
usbvision_table[ 34 ].bInterfaceProtocol = 0;
usbvision_table[ 34 ].bInterfaceNumber = 0;
usbvision_table[ 34 ].driver_info = 32;
usbvision_table[ 35 ].match_flags = 3;
usbvision_table[ 35 ].idVendor = 1395;
usbvision_table[ 35 ].idProduct = 19750;
usbvision_table[ 35 ].bcdDevice_lo = 0;
usbvision_table[ 35 ].bcdDevice_hi = 0;
usbvision_table[ 35 ].bDeviceClass = 0;
usbvision_table[ 35 ].bDeviceSubClass = 0;
usbvision_table[ 35 ].bDeviceProtocol = 0;
usbvision_table[ 35 ].bInterfaceClass = 0;
usbvision_table[ 35 ].bInterfaceSubClass = 0;
usbvision_table[ 35 ].bInterfaceProtocol = 0;
usbvision_table[ 35 ].bInterfaceNumber = 0;
usbvision_table[ 35 ].driver_info = 33;
usbvision_table[ 36 ].match_flags = 3;
usbvision_table[ 36 ].idVendor = 1395;
usbvision_table[ 36 ].idProduct = 19751;
usbvision_table[ 36 ].bcdDevice_lo = 0;
usbvision_table[ 36 ].bcdDevice_hi = 0;
usbvision_table[ 36 ].bDeviceClass = 0;
usbvision_table[ 36 ].bDeviceSubClass = 0;
usbvision_table[ 36 ].bDeviceProtocol = 0;
usbvision_table[ 36 ].bInterfaceClass = 0;
usbvision_table[ 36 ].bInterfaceSubClass = 0;
usbvision_table[ 36 ].bInterfaceProtocol = 0;
usbvision_table[ 36 ].bInterfaceNumber = 0;
usbvision_table[ 36 ].driver_info = 34;
usbvision_table[ 37 ].match_flags = 3;
usbvision_table[ 37 ].idVendor = 1395;
usbvision_table[ 37 ].idProduct = 19752;
usbvision_table[ 37 ].bcdDevice_lo = 0;
usbvision_table[ 37 ].bcdDevice_hi = 0;
usbvision_table[ 37 ].bDeviceClass = 0;
usbvision_table[ 37 ].bDeviceSubClass = 0;
usbvision_table[ 37 ].bDeviceProtocol = 0;
usbvision_table[ 37 ].bInterfaceClass = 0;
usbvision_table[ 37 ].bInterfaceSubClass = 0;
usbvision_table[ 37 ].bInterfaceProtocol = 0;
usbvision_table[ 37 ].bInterfaceNumber = 0;
usbvision_table[ 37 ].driver_info = 35;
usbvision_table[ 38 ].match_flags = 3;
usbvision_table[ 38 ].idVendor = 1395;
usbvision_table[ 38 ].idProduct = 19753;
usbvision_table[ 38 ].bcdDevice_lo = 0;
usbvision_table[ 38 ].bcdDevice_hi = 0;
usbvision_table[ 38 ].bDeviceClass = 0;
usbvision_table[ 38 ].bDeviceSubClass = 0;
usbvision_table[ 38 ].bDeviceProtocol = 0;
usbvision_table[ 38 ].bInterfaceClass = 0;
usbvision_table[ 38 ].bInterfaceSubClass = 0;
usbvision_table[ 38 ].bInterfaceProtocol = 0;
usbvision_table[ 38 ].bInterfaceNumber = 0;
usbvision_table[ 38 ].driver_info = 36;
usbvision_table[ 39 ].match_flags = 3;
usbvision_table[ 39 ].idVendor = 1395;
usbvision_table[ 39 ].idProduct = 19760;
usbvision_table[ 39 ].bcdDevice_lo = 0;
usbvision_table[ 39 ].bcdDevice_hi = 0;
usbvision_table[ 39 ].bDeviceClass = 0;
usbvision_table[ 39 ].bDeviceSubClass = 0;
usbvision_table[ 39 ].bDeviceProtocol = 0;
usbvision_table[ 39 ].bInterfaceClass = 0;
usbvision_table[ 39 ].bInterfaceSubClass = 0;
usbvision_table[ 39 ].bInterfaceProtocol = 0;
usbvision_table[ 39 ].bInterfaceNumber = 0;
usbvision_table[ 39 ].driver_info = 37;
usbvision_table[ 40 ].match_flags = 3;
usbvision_table[ 40 ].idVendor = 1395;
usbvision_table[ 40 ].idProduct = 19761;
usbvision_table[ 40 ].bcdDevice_lo = 0;
usbvision_table[ 40 ].bcdDevice_hi = 0;
usbvision_table[ 40 ].bDeviceClass = 0;
usbvision_table[ 40 ].bDeviceSubClass = 0;
usbvision_table[ 40 ].bDeviceProtocol = 0;
usbvision_table[ 40 ].bInterfaceClass = 0;
usbvision_table[ 40 ].bInterfaceSubClass = 0;
usbvision_table[ 40 ].bInterfaceProtocol = 0;
usbvision_table[ 40 ].bInterfaceNumber = 0;
usbvision_table[ 40 ].driver_info = 38;
usbvision_table[ 41 ].match_flags = 3;
usbvision_table[ 41 ].idVendor = 1395;
usbvision_table[ 41 ].idProduct = 19762;
usbvision_table[ 41 ].bcdDevice_lo = 0;
usbvision_table[ 41 ].bcdDevice_hi = 0;
usbvision_table[ 41 ].bDeviceClass = 0;
usbvision_table[ 41 ].bDeviceSubClass = 0;
usbvision_table[ 41 ].bDeviceProtocol = 0;
usbvision_table[ 41 ].bInterfaceClass = 0;
usbvision_table[ 41 ].bInterfaceSubClass = 0;
usbvision_table[ 41 ].bInterfaceProtocol = 0;
usbvision_table[ 41 ].bInterfaceNumber = 0;
usbvision_table[ 41 ].driver_info = 39;
usbvision_table[ 42 ].match_flags = 3;
usbvision_table[ 42 ].idVendor = 1395;
usbvision_table[ 42 ].idProduct = 19764;
usbvision_table[ 42 ].bcdDevice_lo = 0;
usbvision_table[ 42 ].bcdDevice_hi = 0;
usbvision_table[ 42 ].bDeviceClass = 0;
usbvision_table[ 42 ].bDeviceSubClass = 0;
usbvision_table[ 42 ].bDeviceProtocol = 0;
usbvision_table[ 42 ].bInterfaceClass = 0;
usbvision_table[ 42 ].bInterfaceSubClass = 0;
usbvision_table[ 42 ].bInterfaceProtocol = 0;
usbvision_table[ 42 ].bInterfaceNumber = 0;
usbvision_table[ 42 ].driver_info = 40;
usbvision_table[ 43 ].match_flags = 3;
usbvision_table[ 43 ].idVendor = 1395;
usbvision_table[ 43 ].idProduct = 19765;
usbvision_table[ 43 ].bcdDevice_lo = 0;
usbvision_table[ 43 ].bcdDevice_hi = 0;
usbvision_table[ 43 ].bDeviceClass = 0;
usbvision_table[ 43 ].bDeviceSubClass = 0;
usbvision_table[ 43 ].bDeviceProtocol = 0;
usbvision_table[ 43 ].bInterfaceClass = 0;
usbvision_table[ 43 ].bInterfaceSubClass = 0;
usbvision_table[ 43 ].bInterfaceProtocol = 0;
usbvision_table[ 43 ].bInterfaceNumber = 0;
usbvision_table[ 43 ].driver_info = 41;
usbvision_table[ 44 ].match_flags = 3;
usbvision_table[ 44 ].idVendor = 1395;
usbvision_table[ 44 ].idProduct = 19766;
usbvision_table[ 44 ].bcdDevice_lo = 0;
usbvision_table[ 44 ].bcdDevice_hi = 0;
usbvision_table[ 44 ].bDeviceClass = 0;
usbvision_table[ 44 ].bDeviceSubClass = 0;
usbvision_table[ 44 ].bDeviceProtocol = 0;
usbvision_table[ 44 ].bInterfaceClass = 0;
usbvision_table[ 44 ].bInterfaceSubClass = 0;
usbvision_table[ 44 ].bInterfaceProtocol = 0;
usbvision_table[ 44 ].bInterfaceNumber = 0;
usbvision_table[ 44 ].driver_info = 42;
usbvision_table[ 45 ].match_flags = 3;
usbvision_table[ 45 ].idVendor = 1395;
usbvision_table[ 45 ].idProduct = 19767;
usbvision_table[ 45 ].bcdDevice_lo = 0;
usbvision_table[ 45 ].bcdDevice_hi = 0;
usbvision_table[ 45 ].bDeviceClass = 0;
usbvision_table[ 45 ].bDeviceSubClass = 0;
usbvision_table[ 45 ].bDeviceProtocol = 0;
usbvision_table[ 45 ].bInterfaceClass = 0;
usbvision_table[ 45 ].bInterfaceSubClass = 0;
usbvision_table[ 45 ].bInterfaceProtocol = 0;
usbvision_table[ 45 ].bInterfaceNumber = 0;
usbvision_table[ 45 ].driver_info = 43;
usbvision_table[ 46 ].match_flags = 3;
usbvision_table[ 46 ].idVendor = 1395;
usbvision_table[ 46 ].idProduct = 19768;
usbvision_table[ 46 ].bcdDevice_lo = 0;
usbvision_table[ 46 ].bcdDevice_hi = 0;
usbvision_table[ 46 ].bDeviceClass = 0;
usbvision_table[ 46 ].bDeviceSubClass = 0;
usbvision_table[ 46 ].bDeviceProtocol = 0;
usbvision_table[ 46 ].bInterfaceClass = 0;
usbvision_table[ 46 ].bInterfaceSubClass = 0;
usbvision_table[ 46 ].bInterfaceProtocol = 0;
usbvision_table[ 46 ].bInterfaceNumber = 0;
usbvision_table[ 46 ].driver_info = 44;
usbvision_table[ 47 ].match_flags = 3;
usbvision_table[ 47 ].idVendor = 1896;
usbvision_table[ 47 ].idProduct = 6;
usbvision_table[ 47 ].bcdDevice_lo = 0;
usbvision_table[ 47 ].bcdDevice_hi = 0;
usbvision_table[ 47 ].bDeviceClass = 0;
usbvision_table[ 47 ].bDeviceSubClass = 0;
usbvision_table[ 47 ].bDeviceProtocol = 0;
usbvision_table[ 47 ].bInterfaceClass = 0;
usbvision_table[ 47 ].bInterfaceSubClass = 0;
usbvision_table[ 47 ].bInterfaceProtocol = 0;
usbvision_table[ 47 ].bInterfaceNumber = 0;
usbvision_table[ 47 ].driver_info = 45;
usbvision_table[ 48 ].match_flags = 3;
usbvision_table[ 48 ].idVendor = 2000;
usbvision_table[ 48 ].idProduct = 1;
usbvision_table[ 48 ].bcdDevice_lo = 0;
usbvision_table[ 48 ].bcdDevice_hi = 0;
usbvision_table[ 48 ].bDeviceClass = 0;
usbvision_table[ 48 ].bDeviceSubClass = 0;
usbvision_table[ 48 ].bDeviceProtocol = 0;
usbvision_table[ 48 ].bInterfaceClass = 0;
usbvision_table[ 48 ].bInterfaceSubClass = 0;
usbvision_table[ 48 ].bInterfaceProtocol = 0;
usbvision_table[ 48 ].bInterfaceNumber = 0;
usbvision_table[ 48 ].driver_info = 46;
usbvision_table[ 49 ].match_flags = 3;
usbvision_table[ 49 ].idVendor = 2000;
usbvision_table[ 49 ].idProduct = 2;
usbvision_table[ 49 ].bcdDevice_lo = 0;
usbvision_table[ 49 ].bcdDevice_hi = 0;
usbvision_table[ 49 ].bDeviceClass = 0;
usbvision_table[ 49 ].bDeviceSubClass = 0;
usbvision_table[ 49 ].bDeviceProtocol = 0;
usbvision_table[ 49 ].bInterfaceClass = 0;
usbvision_table[ 49 ].bInterfaceSubClass = 0;
usbvision_table[ 49 ].bInterfaceProtocol = 0;
usbvision_table[ 49 ].bInterfaceNumber = 0;
usbvision_table[ 49 ].driver_info = 47;
usbvision_table[ 50 ].match_flags = 3;
usbvision_table[ 50 ].idVendor = 2000;
usbvision_table[ 50 ].idProduct = 3;
usbvision_table[ 50 ].bcdDevice_lo = 0;
usbvision_table[ 50 ].bcdDevice_hi = 0;
usbvision_table[ 50 ].bDeviceClass = 0;
usbvision_table[ 50 ].bDeviceSubClass = 0;
usbvision_table[ 50 ].bDeviceProtocol = 0;
usbvision_table[ 50 ].bInterfaceClass = 0;
usbvision_table[ 50 ].bInterfaceSubClass = 0;
usbvision_table[ 50 ].bInterfaceProtocol = 0;
usbvision_table[ 50 ].bInterfaceNumber = 0;
usbvision_table[ 50 ].driver_info = 48;
usbvision_table[ 51 ].match_flags = 3;
usbvision_table[ 51 ].idVendor = 2000;
usbvision_table[ 51 ].idProduct = 4;
usbvision_table[ 51 ].bcdDevice_lo = 0;
usbvision_table[ 51 ].bcdDevice_hi = 0;
usbvision_table[ 51 ].bDeviceClass = 0;
usbvision_table[ 51 ].bDeviceSubClass = 0;
usbvision_table[ 51 ].bDeviceProtocol = 0;
usbvision_table[ 51 ].bInterfaceClass = 0;
usbvision_table[ 51 ].bInterfaceSubClass = 0;
usbvision_table[ 51 ].bInterfaceProtocol = 0;
usbvision_table[ 51 ].bInterfaceNumber = 0;
usbvision_table[ 51 ].driver_info = 49;
usbvision_table[ 52 ].match_flags = 3;
usbvision_table[ 52 ].idVendor = 2000;
usbvision_table[ 52 ].idProduct = 5;
usbvision_table[ 52 ].bcdDevice_lo = 0;
usbvision_table[ 52 ].bcdDevice_hi = 0;
usbvision_table[ 52 ].bDeviceClass = 0;
usbvision_table[ 52 ].bDeviceSubClass = 0;
usbvision_table[ 52 ].bDeviceProtocol = 0;
usbvision_table[ 52 ].bInterfaceClass = 0;
usbvision_table[ 52 ].bInterfaceSubClass = 0;
usbvision_table[ 52 ].bInterfaceProtocol = 0;
usbvision_table[ 52 ].bInterfaceNumber = 0;
usbvision_table[ 52 ].driver_info = 50;
usbvision_table[ 53 ].match_flags = 3;
usbvision_table[ 53 ].idVendor = 2040;
usbvision_table[ 53 ].idProduct = 37124;
usbvision_table[ 53 ].bcdDevice_lo = 0;
usbvision_table[ 53 ].bcdDevice_hi = 0;
usbvision_table[ 53 ].bDeviceClass = 0;
usbvision_table[ 53 ].bDeviceSubClass = 0;
usbvision_table[ 53 ].bDeviceProtocol = 0;
usbvision_table[ 53 ].bInterfaceClass = 0;
usbvision_table[ 53 ].bInterfaceSubClass = 0;
usbvision_table[ 53 ].bInterfaceProtocol = 0;
usbvision_table[ 53 ].bInterfaceNumber = 0;
usbvision_table[ 53 ].driver_info = 51;
usbvision_table[ 54 ].match_flags = 3;
usbvision_table[ 54 ].idVendor = 8964;
usbvision_table[ 54 ].idProduct = 269;
usbvision_table[ 54 ].bcdDevice_lo = 0;
usbvision_table[ 54 ].bcdDevice_hi = 0;
usbvision_table[ 54 ].bDeviceClass = 0;
usbvision_table[ 54 ].bDeviceSubClass = 0;
usbvision_table[ 54 ].bDeviceProtocol = 0;
usbvision_table[ 54 ].bInterfaceClass = 0;
usbvision_table[ 54 ].bInterfaceSubClass = 0;
usbvision_table[ 54 ].bInterfaceProtocol = 0;
usbvision_table[ 54 ].bInterfaceNumber = 0;
usbvision_table[ 54 ].driver_info = 52;
usbvision_table[ 55 ].match_flags = 3;
usbvision_table[ 55 ].idVendor = 8964;
usbvision_table[ 55 ].idProduct = 265;
usbvision_table[ 55 ].bcdDevice_lo = 0;
usbvision_table[ 55 ].bcdDevice_hi = 0;
usbvision_table[ 55 ].bDeviceClass = 0;
usbvision_table[ 55 ].bDeviceSubClass = 0;
usbvision_table[ 55 ].bDeviceProtocol = 0;
usbvision_table[ 55 ].bInterfaceClass = 0;
usbvision_table[ 55 ].bInterfaceSubClass = 0;
usbvision_table[ 55 ].bInterfaceProtocol = 0;
usbvision_table[ 55 ].bInterfaceNumber = 0;
usbvision_table[ 55 ].driver_info = 53;
usbvision_table[ 56 ].match_flags = 3;
usbvision_table[ 56 ].idVendor = 8964;
usbvision_table[ 56 ].idProduct = 272;
usbvision_table[ 56 ].bcdDevice_lo = 0;
usbvision_table[ 56 ].bcdDevice_hi = 0;
usbvision_table[ 56 ].bDeviceClass = 0;
usbvision_table[ 56 ].bDeviceSubClass = 0;
usbvision_table[ 56 ].bDeviceProtocol = 0;
usbvision_table[ 56 ].bInterfaceClass = 0;
usbvision_table[ 56 ].bInterfaceSubClass = 0;
usbvision_table[ 56 ].bInterfaceProtocol = 0;
usbvision_table[ 56 ].bInterfaceNumber = 0;
usbvision_table[ 56 ].driver_info = 54;
usbvision_table[ 57 ].match_flags = 3;
usbvision_table[ 57 ].idVendor = 8964;
usbvision_table[ 57 ].idProduct = 273;
usbvision_table[ 57 ].bcdDevice_lo = 0;
usbvision_table[ 57 ].bcdDevice_hi = 0;
usbvision_table[ 57 ].bDeviceClass = 0;
usbvision_table[ 57 ].bDeviceSubClass = 0;
usbvision_table[ 57 ].bDeviceProtocol = 0;
usbvision_table[ 57 ].bInterfaceClass = 0;
usbvision_table[ 57 ].bInterfaceSubClass = 0;
usbvision_table[ 57 ].bInterfaceProtocol = 0;
usbvision_table[ 57 ].bInterfaceNumber = 0;
usbvision_table[ 57 ].driver_info = 55;
usbvision_table[ 58 ].match_flags = 3;
usbvision_table[ 58 ].idVendor = 8964;
usbvision_table[ 58 ].idProduct = 274;
usbvision_table[ 58 ].bcdDevice_lo = 0;
usbvision_table[ 58 ].bcdDevice_hi = 0;
usbvision_table[ 58 ].bDeviceClass = 0;
usbvision_table[ 58 ].bDeviceSubClass = 0;
usbvision_table[ 58 ].bDeviceProtocol = 0;
usbvision_table[ 58 ].bInterfaceClass = 0;
usbvision_table[ 58 ].bInterfaceSubClass = 0;
usbvision_table[ 58 ].bInterfaceProtocol = 0;
usbvision_table[ 58 ].bInterfaceNumber = 0;
usbvision_table[ 58 ].driver_info = 56;
usbvision_table[ 59 ].match_flags = 3;
usbvision_table[ 59 ].idVendor = 8964;
usbvision_table[ 59 ].idProduct = 275;
usbvision_table[ 59 ].bcdDevice_lo = 0;
usbvision_table[ 59 ].bcdDevice_hi = 0;
usbvision_table[ 59 ].bDeviceClass = 0;
usbvision_table[ 59 ].bDeviceSubClass = 0;
usbvision_table[ 59 ].bDeviceProtocol = 0;
usbvision_table[ 59 ].bInterfaceClass = 0;
usbvision_table[ 59 ].bInterfaceSubClass = 0;
usbvision_table[ 59 ].bInterfaceProtocol = 0;
usbvision_table[ 59 ].bInterfaceNumber = 0;
usbvision_table[ 59 ].driver_info = 64;
usbvision_table[ 60 ].match_flags = 3;
usbvision_table[ 60 ].idVendor = 8964;
usbvision_table[ 60 ].idProduct = 528;
usbvision_table[ 60 ].bcdDevice_lo = 0;
usbvision_table[ 60 ].bcdDevice_hi = 0;
usbvision_table[ 60 ].bDeviceClass = 0;
usbvision_table[ 60 ].bDeviceSubClass = 0;
usbvision_table[ 60 ].bDeviceProtocol = 0;
usbvision_table[ 60 ].bInterfaceClass = 0;
usbvision_table[ 60 ].bInterfaceSubClass = 0;
usbvision_table[ 60 ].bInterfaceProtocol = 0;
usbvision_table[ 60 ].bInterfaceNumber = 0;
usbvision_table[ 60 ].driver_info = 57;
usbvision_table[ 61 ].match_flags = 3;
usbvision_table[ 61 ].idVendor = 8964;
usbvision_table[ 61 ].idProduct = 530;
usbvision_table[ 61 ].bcdDevice_lo = 0;
usbvision_table[ 61 ].bcdDevice_hi = 0;
usbvision_table[ 61 ].bDeviceClass = 0;
usbvision_table[ 61 ].bDeviceSubClass = 0;
usbvision_table[ 61 ].bDeviceProtocol = 0;
usbvision_table[ 61 ].bInterfaceClass = 0;
usbvision_table[ 61 ].bInterfaceSubClass = 0;
usbvision_table[ 61 ].bInterfaceProtocol = 0;
usbvision_table[ 61 ].bInterfaceNumber = 0;
usbvision_table[ 61 ].driver_info = 58;
usbvision_table[ 62 ].match_flags = 3;
usbvision_table[ 62 ].idVendor = 8964;
usbvision_table[ 62 ].idProduct = 532;
usbvision_table[ 62 ].bcdDevice_lo = 0;
usbvision_table[ 62 ].bcdDevice_hi = 0;
usbvision_table[ 62 ].bDeviceClass = 0;
usbvision_table[ 62 ].bDeviceSubClass = 0;
usbvision_table[ 62 ].bDeviceProtocol = 0;
usbvision_table[ 62 ].bInterfaceClass = 0;
usbvision_table[ 62 ].bInterfaceSubClass = 0;
usbvision_table[ 62 ].bInterfaceProtocol = 0;
usbvision_table[ 62 ].bInterfaceNumber = 0;
usbvision_table[ 62 ].driver_info = 59;
usbvision_table[ 63 ].match_flags = 3;
usbvision_table[ 63 ].idVendor = 8964;
usbvision_table[ 63 ].idProduct = 768;
usbvision_table[ 63 ].bcdDevice_lo = 0;
usbvision_table[ 63 ].bcdDevice_hi = 0;
usbvision_table[ 63 ].bDeviceClass = 0;
usbvision_table[ 63 ].bDeviceSubClass = 0;
usbvision_table[ 63 ].bDeviceProtocol = 0;
usbvision_table[ 63 ].bInterfaceClass = 0;
usbvision_table[ 63 ].bInterfaceSubClass = 0;
usbvision_table[ 63 ].bInterfaceProtocol = 0;
usbvision_table[ 63 ].bInterfaceNumber = 0;
usbvision_table[ 63 ].driver_info = 60;
usbvision_table[ 64 ].match_flags = 3;
usbvision_table[ 64 ].idVendor = 8964;
usbvision_table[ 64 ].idProduct = 769;
usbvision_table[ 64 ].bcdDevice_lo = 0;
usbvision_table[ 64 ].bcdDevice_hi = 0;
usbvision_table[ 64 ].bDeviceClass = 0;
usbvision_table[ 64 ].bDeviceSubClass = 0;
usbvision_table[ 64 ].bDeviceProtocol = 0;
usbvision_table[ 64 ].bInterfaceClass = 0;
usbvision_table[ 64 ].bInterfaceSubClass = 0;
usbvision_table[ 64 ].bInterfaceProtocol = 0;
usbvision_table[ 64 ].bInterfaceNumber = 0;
usbvision_table[ 64 ].driver_info = 61;
usbvision_table[ 65 ].match_flags = 3;
usbvision_table[ 65 ].idVendor = 8964;
usbvision_table[ 65 ].idProduct = 1049;
usbvision_table[ 65 ].bcdDevice_lo = 0;
usbvision_table[ 65 ].bcdDevice_hi = 0;
usbvision_table[ 65 ].bDeviceClass = 0;
usbvision_table[ 65 ].bDeviceSubClass = 0;
usbvision_table[ 65 ].bDeviceProtocol = 0;
usbvision_table[ 65 ].bInterfaceClass = 0;
usbvision_table[ 65 ].bInterfaceSubClass = 0;
usbvision_table[ 65 ].bInterfaceProtocol = 0;
usbvision_table[ 65 ].bInterfaceNumber = 0;
usbvision_table[ 65 ].driver_info = 62;
usbvision_table[ 66 ].match_flags = 3;
usbvision_table[ 66 ].idVendor = 9216;
usbvision_table[ 66 ].idProduct = 16896;
usbvision_table[ 66 ].bcdDevice_lo = 0;
usbvision_table[ 66 ].bcdDevice_hi = 0;
usbvision_table[ 66 ].bDeviceClass = 0;
usbvision_table[ 66 ].bDeviceSubClass = 0;
usbvision_table[ 66 ].bDeviceProtocol = 0;
usbvision_table[ 66 ].bInterfaceClass = 0;
usbvision_table[ 66 ].bInterfaceSubClass = 0;
usbvision_table[ 66 ].bInterfaceProtocol = 0;
usbvision_table[ 66 ].bInterfaceNumber = 0;
usbvision_table[ 66 ].driver_info = 63;
usbvision_table[ 67 ].match_flags = 0;
usbvision_table[ 67 ].idVendor = 0;
usbvision_table[ 67 ].idProduct = 0;
usbvision_table[ 67 ].bcdDevice_lo = 0;
usbvision_table[ 67 ].bcdDevice_hi = 0;
usbvision_table[ 67 ].bDeviceClass = 0;
usbvision_table[ 67 ].bDeviceSubClass = 0;
usbvision_table[ 67 ].bDeviceProtocol = 0;
usbvision_table[ 67 ].bInterfaceClass = 0;
usbvision_table[ 67 ].bInterfaceSubClass = 0;
usbvision_table[ 67 ].bInterfaceProtocol = 0;
usbvision_table[ 67 ].bInterfaceNumber = 0;
usbvision_table[ 67 ].driver_info = 0;
return ;
}
-__BLAST_initialize_/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/rcv/132_1a/main-ldv_main1_sequence_infinite_withcheck_stateful/preprocess/1-cpp//work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/rule-instrumentor/132_1a/common-model/ldv_common_model.o.i()
{
13 ldv_usb_dev_state = 0;
return ;
}
-entry_point
{
3535 -ldv_s_usbvision_fops_v4l2_file_operations = 0;
ldv_s_usbvision_radio_fops_v4l2_file_operations = 0;
ldv_s_usbvision_driver_usb_driver = 0;
LDV_IN_INTERRUPT = 1;
3497 ldv_initialize() { /* Function call is skipped due to function is undefined */}
3532 ldv_handler_precall() { /* Function call is skipped due to function is undefined */}
3533 -tmp = usbvision_init()
{
1688 assume(video_debug & 4 == 0);
1690 assume(video_debug & 2 == 0);
1691 assume(video_debug & 4 == 0);
1692 assume(video_debug & 8 == 0);
1695 assume(isoc_mode == 96);
1701 err_code = usb_register_driver(&(usbvision_driver), &(__this_module), "usbvision") { /* Function call is skipped due to function is undefined */}
1703 assume(err_code == 0);
1704 printk("\014USBVision USB Video Device Driver for Linux : 0.9.11\n") { /* Function call is skipped due to function is undefined */}
1705 assume(video_debug & 4 == 0);
1707 return err_code;
}
3533 assume(tmp == 0);
3547 tmp___1 = nondet_int() { /* Function call is skipped due to function is undefined */}
3547 assume(tmp___1 != 0);
3553 tmp___0 = nondet_int() { /* Function call is skipped due to function is undefined */}
3555 assume(tmp___0 != 0);
3606 assume(tmp___0 != 1);
3654 assume(tmp___0 != 2);
3702 assume(tmp___0 != 3);
3750 assume(tmp___0 != 4);
3798 assume(tmp___0 != 5);
3846 assume(tmp___0 != 6);
3894 assume(tmp___0 != 7);
3942 assume(tmp___0 != 8);
3990 assume(tmp___0 != 9);
4038 assume(tmp___0 != 10);
4086 assume(tmp___0 != 11);
4134 assume(tmp___0 != 12);
4182 assume(tmp___0 != 13);
4230 assume(tmp___0 != 14);
4278 assume(tmp___0 != 15);
4326 assume(tmp___0 != 16);
4374 assume(tmp___0 != 17);
4422 assume(tmp___0 != 18);
4470 assume(tmp___0 != 19);
4518 assume(tmp___0 != 20);
4566 assume(tmp___0 != 21);
4614 assume(tmp___0 != 22);
4662 assume(tmp___0 != 23);
4710 assume(tmp___0 != 24);
4758 assume(tmp___0 != 25);
4806 assume(tmp___0 != 26);
4854 assume(tmp___0 != 27);
4902 assume(tmp___0 != 28);
4950 assume(tmp___0 != 29);
4998 assume(tmp___0 != 30);
5046 assume(tmp___0 != 31);
5097 assume(tmp___0 != 32);
5145 assume(tmp___0 != 33);
5193 assume(tmp___0 != 34);
5241 assume(tmp___0 != 35);
5289 assume(tmp___0 != 36);
5337 assume(tmp___0 != 37);
5385 assume(tmp___0 != 38);
5433 assume(tmp___0 != 39);
5481 assume(tmp___0 != 40);
5529 assume(tmp___0 != 41);
5577 assume(tmp___0 != 42);
5625 assume(tmp___0 != 43);
5673 assume(tmp___0 != 44);
5721 assume(tmp___0 != 45);
5769 assume(tmp___0 == 46);
5772 assume(ldv_s_usbvision_driver_usb_driver == 0);
5806 -res_usbvision_probe_53 = usbvision_probe(var_group3 /* intf */, var_usbvision_probe_53_p1 /* devid */)
{
1523 -tmp = interface_to_usbdev(intf /* intf */)
{
592 __mptr = *(intf).dev.parent;
592 __retres3 = __mptr + -144;
590 return __retres3;
}
1523 -tmp___0 = ldv_usb_get_dev_9(tmp /* ldv_func_arg1 */)
{
43 tmp = usb_get_dev(ldv_func_arg1) { /* Function call is skipped due to function is undefined */}
43 ldv_func_res = tmp;
45 -ldv_usb_get_dev()
{
19 ldv_usb_dev_state = ldv_usb_dev_state + 1;
16 return ;
}
47 return ldv_func_res;
}
1523 -dev = tmp___0;
ifnum = *(*(intf).altsetting).desc.bInterfaceNumber;
usbvision = 0;
1531 assume(video_debug & 4 == 0);
1535 model = *(devid).driver_info;
1536 assume(model < 0);
1537 assume(video_debug & 4 == 0);
1538 __retres29 = -19;
1520 return __retres29;
}
5807 ldv_check_return_value(res_usbvision_probe_53) { /* Function call is skipped due to function is undefined */}
5808 -ldv_check_return_value_probe(res_usbvision_probe_53 /* retval */)
{
35 assume(retval != 0);
37 assume(ldv_usb_dev_state > 0);
37 -ldv_error()
{
}
}
}
Source code
1 2 /* 3 * USB USBVISION Video device driver 0.9.10 4 * 5 * 6 * 7 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de> 8 * 9 * This module is part of usbvision driver project. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * 25 * Let's call the version 0.... until compression decoding is completely 26 * implemented. 27 * 28 * This driver is written by Jose Ignacio Gijon and Joerg Heckenbach. 29 * It was based on USB CPiA driver written by Peter Pregler, 30 * Scott J. Bertin and Johannes Erdfelt 31 * Ideas are taken from bttv driver by Ralph Metzler, Marcus Metzler & 32 * Gerd Knorr and zoran 36120/36125 driver by Pauline Middelink 33 * Updates to driver completed by Dwaine P. Garden 34 * 35 * 36 * TODO: 37 * - use submit_urb for all setup packets 38 * - Fix memory settings for nt1004. It is 4 times as big as the 39 * nt1003 memory. 40 * - Add audio on endpoint 3 for nt1004 chip. 41 * Seems impossible, needs a codec interface. Which one? 42 * - Clean up the driver. 43 * - optimization for performance. 44 * - Add Videotext capability (VBI). Working on it..... 45 * - Check audio for other devices 46 * 47 */ 48 49 #include <linux/kernel.h> 50 #include <linux/list.h> 51 #include <linux/timer.h> 52 #include <linux/slab.h> 53 #include <linux/mm.h> 54 #include <linux/highmem.h> 55 #include <linux/vmalloc.h> 56 #include <linux/module.h> 57 #include <linux/init.h> 58 #include <linux/spinlock.h> 59 #include <linux/io.h> 60 #include <linux/videodev2.h> 61 #include <linux/i2c.h> 62 63 #include <media/saa7115.h> 64 #include <media/v4l2-common.h> 65 #include <media/v4l2-ioctl.h> 66 #include <media/tuner.h> 67 68 #include <linux/workqueue.h> 69 70 #include "usbvision.h" 71 #include "usbvision-cards.h" 72 73 #define DRIVER_AUTHOR \ 74 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 75 "Dwaine Garden <DwaineGarden@rogers.com>" 76 #define DRIVER_NAME "usbvision" 77 #define DRIVER_ALIAS "USBVision" 78 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 79 #define DRIVER_LICENSE "GPL" 80 #define USBVISION_VERSION_STRING "0.9.11" 81 82 #define ENABLE_HEXDUMP 0 /* Enable if you need it */ 83 84 85 #ifdef USBVISION_DEBUG 86 #define PDEBUG(level, fmt, args...) { \ 87 if (video_debug & (level)) \ 88 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 89 __func__, __LINE__ , ## args); \ 90 } 91 #else 92 #define PDEBUG(level, fmt, args...) do {} while (0) 93 #endif 94 95 #define DBG_IO (1 << 1) 96 #define DBG_PROBE (1 << 2) 97 #define DBG_MMAP (1 << 3) 98 99 /* String operations */ 100 #define rmspace(str) while (*str == ' ') str++; 101 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 102 103 104 /* sequential number of usbvision device */ 105 static int usbvision_nr; 106 107 static struct usbvision_v4l2_format_st usbvision_v4l2_format[] = { 108 { 1, 1, 8, V4L2_PIX_FMT_GREY , "GREY" }, 109 { 1, 2, 16, V4L2_PIX_FMT_RGB565 , "RGB565" }, 110 { 1, 3, 24, V4L2_PIX_FMT_RGB24 , "RGB24" }, 111 { 1, 4, 32, V4L2_PIX_FMT_RGB32 , "RGB32" }, 112 { 1, 2, 16, V4L2_PIX_FMT_RGB555 , "RGB555" }, 113 { 1, 2, 16, V4L2_PIX_FMT_YUYV , "YUV422" }, 114 { 1, 2, 12, V4L2_PIX_FMT_YVU420 , "YUV420P" }, /* 1.5 ! */ 115 { 1, 2, 16, V4L2_PIX_FMT_YUV422P , "YUV422P" } 116 }; 117 118 /* Function prototypes */ 119 static void usbvision_release(struct usb_usbvision *usbvision); 120 121 /* Default initialization of device driver parameters */ 122 /* Set the default format for ISOC endpoint */ 123 static int isoc_mode = ISOC_MODE_COMPRESS; 124 /* Set the default Debug Mode of the device driver */ 125 static int video_debug; 126 /* Set the default device to power on at startup */ 127 static int power_on_at_open = 1; 128 /* Sequential Number of Video Device */ 129 static int video_nr = -1; 130 /* Sequential Number of Radio Device */ 131 static int radio_nr = -1; 132 133 /* Grab parameters for the device driver */ 134 135 /* Showing parameters under SYSFS */ 136 module_param(isoc_mode, int, 0444); 137 module_param(video_debug, int, 0444); 138 module_param(power_on_at_open, int, 0444); 139 module_param(video_nr, int, 0444); 140 module_param(radio_nr, int, 0444); 141 142 MODULE_PARM_DESC(isoc_mode, " Set the default format for ISOC endpoint. Default: 0x60 (Compression On)"); 143 MODULE_PARM_DESC(video_debug, " Set the default Debug Mode of the device driver. Default: 0 (Off)"); 144 MODULE_PARM_DESC(power_on_at_open, " Set the default device to power on when device is opened. Default: 1 (On)"); 145 MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)"); 146 MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)"); 147 148 149 /* Misc stuff */ 150 MODULE_AUTHOR(DRIVER_AUTHOR); 151 MODULE_DESCRIPTION(DRIVER_DESC); 152 MODULE_LICENSE(DRIVER_LICENSE); 153 MODULE_VERSION(USBVISION_VERSION_STRING); 154 MODULE_ALIAS(DRIVER_ALIAS); 155 156 157 /*****************************************************************************/ 158 /* SYSFS Code - Copied from the stv680.c usb module. */ 159 /* Device information is located at /sys/class/video4linux/video0 */ 160 /* Device parameters information is located at /sys/module/usbvision */ 161 /* Device USB Information is located at */ 162 /* /sys/bus/usb/drivers/USBVision Video Grabber */ 163 /*****************************************************************************/ 164 165 #define YES_NO(x) ((x) ? "Yes" : "No") 166 167 static inline struct usb_usbvision *cd_to_usbvision(struct device *cd) 168 { 169 struct video_device *vdev = 170 container_of(cd, struct video_device, dev); 171 return video_get_drvdata(vdev); 172 } 173 174 static ssize_t show_version(struct device *cd, 175 struct device_attribute *attr, char *buf) 176 { 177 return sprintf(buf, "%s\n", USBVISION_VERSION_STRING); 178 } 179 static DEVICE_ATTR(version, S_IRUGO, show_version, NULL); 180 181 static ssize_t show_model(struct device *cd, 182 struct device_attribute *attr, char *buf) 183 { 184 struct video_device *vdev = 185 container_of(cd, struct video_device, dev); 186 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 187 return sprintf(buf, "%s\n", 188 usbvision_device_data[usbvision->dev_model].model_string); 189 } 190 static DEVICE_ATTR(model, S_IRUGO, show_model, NULL); 191 192 static ssize_t show_hue(struct device *cd, 193 struct device_attribute *attr, char *buf) 194 { 195 struct video_device *vdev = 196 container_of(cd, struct video_device, dev); 197 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 198 struct v4l2_control ctrl; 199 ctrl.id = V4L2_CID_HUE; 200 ctrl.value = 0; 201 if (usbvision->user) 202 call_all(usbvision, core, g_ctrl, &ctrl); 203 return sprintf(buf, "%d\n", ctrl.value); 204 } 205 static DEVICE_ATTR(hue, S_IRUGO, show_hue, NULL); 206 207 static ssize_t show_contrast(struct device *cd, 208 struct device_attribute *attr, char *buf) 209 { 210 struct video_device *vdev = 211 container_of(cd, struct video_device, dev); 212 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 213 struct v4l2_control ctrl; 214 ctrl.id = V4L2_CID_CONTRAST; 215 ctrl.value = 0; 216 if (usbvision->user) 217 call_all(usbvision, core, g_ctrl, &ctrl); 218 return sprintf(buf, "%d\n", ctrl.value); 219 } 220 static DEVICE_ATTR(contrast, S_IRUGO, show_contrast, NULL); 221 222 static ssize_t show_brightness(struct device *cd, 223 struct device_attribute *attr, char *buf) 224 { 225 struct video_device *vdev = 226 container_of(cd, struct video_device, dev); 227 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 228 struct v4l2_control ctrl; 229 ctrl.id = V4L2_CID_BRIGHTNESS; 230 ctrl.value = 0; 231 if (usbvision->user) 232 call_all(usbvision, core, g_ctrl, &ctrl); 233 return sprintf(buf, "%d\n", ctrl.value); 234 } 235 static DEVICE_ATTR(brightness, S_IRUGO, show_brightness, NULL); 236 237 static ssize_t show_saturation(struct device *cd, 238 struct device_attribute *attr, char *buf) 239 { 240 struct video_device *vdev = 241 container_of(cd, struct video_device, dev); 242 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 243 struct v4l2_control ctrl; 244 ctrl.id = V4L2_CID_SATURATION; 245 ctrl.value = 0; 246 if (usbvision->user) 247 call_all(usbvision, core, g_ctrl, &ctrl); 248 return sprintf(buf, "%d\n", ctrl.value); 249 } 250 static DEVICE_ATTR(saturation, S_IRUGO, show_saturation, NULL); 251 252 static ssize_t show_streaming(struct device *cd, 253 struct device_attribute *attr, char *buf) 254 { 255 struct video_device *vdev = 256 container_of(cd, struct video_device, dev); 257 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 258 return sprintf(buf, "%s\n", 259 YES_NO(usbvision->streaming == stream_on ? 1 : 0)); 260 } 261 static DEVICE_ATTR(streaming, S_IRUGO, show_streaming, NULL); 262 263 static ssize_t show_compression(struct device *cd, 264 struct device_attribute *attr, char *buf) 265 { 266 struct video_device *vdev = 267 container_of(cd, struct video_device, dev); 268 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 269 return sprintf(buf, "%s\n", 270 YES_NO(usbvision->isoc_mode == ISOC_MODE_COMPRESS)); 271 } 272 static DEVICE_ATTR(compression, S_IRUGO, show_compression, NULL); 273 274 static ssize_t show_device_bridge(struct device *cd, 275 struct device_attribute *attr, char *buf) 276 { 277 struct video_device *vdev = 278 container_of(cd, struct video_device, dev); 279 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 280 return sprintf(buf, "%d\n", usbvision->bridge_type); 281 } 282 static DEVICE_ATTR(bridge, S_IRUGO, show_device_bridge, NULL); 283 284 static void usbvision_create_sysfs(struct video_device *vdev) 285 { 286 int res; 287 288 if (!vdev) 289 return; 290 do { 291 res = device_create_file(&vdev->dev, &dev_attr_version); 292 if (res < 0) 293 break; 294 res = device_create_file(&vdev->dev, &dev_attr_model); 295 if (res < 0) 296 break; 297 res = device_create_file(&vdev->dev, &dev_attr_hue); 298 if (res < 0) 299 break; 300 res = device_create_file(&vdev->dev, &dev_attr_contrast); 301 if (res < 0) 302 break; 303 res = device_create_file(&vdev->dev, &dev_attr_brightness); 304 if (res < 0) 305 break; 306 res = device_create_file(&vdev->dev, &dev_attr_saturation); 307 if (res < 0) 308 break; 309 res = device_create_file(&vdev->dev, &dev_attr_streaming); 310 if (res < 0) 311 break; 312 res = device_create_file(&vdev->dev, &dev_attr_compression); 313 if (res < 0) 314 break; 315 res = device_create_file(&vdev->dev, &dev_attr_bridge); 316 if (res >= 0) 317 return; 318 } while (0); 319 320 dev_err(&vdev->dev, "%s error: %d\n", __func__, res); 321 } 322 323 static void usbvision_remove_sysfs(struct video_device *vdev) 324 { 325 if (vdev) { 326 device_remove_file(&vdev->dev, &dev_attr_version); 327 device_remove_file(&vdev->dev, &dev_attr_model); 328 device_remove_file(&vdev->dev, &dev_attr_hue); 329 device_remove_file(&vdev->dev, &dev_attr_contrast); 330 device_remove_file(&vdev->dev, &dev_attr_brightness); 331 device_remove_file(&vdev->dev, &dev_attr_saturation); 332 device_remove_file(&vdev->dev, &dev_attr_streaming); 333 device_remove_file(&vdev->dev, &dev_attr_compression); 334 device_remove_file(&vdev->dev, &dev_attr_bridge); 335 } 336 } 337 338 /* 339 * usbvision_open() 340 * 341 * This is part of Video 4 Linux API. The driver can be opened by one 342 * client only (checks internal counter 'usbvision->user'). The procedure 343 * then allocates buffers needed for video processing. 344 * 345 */ 346 static int usbvision_v4l2_open(struct file *file) 347 { 348 struct usb_usbvision *usbvision = video_drvdata(file); 349 int err_code = 0; 350 351 PDEBUG(DBG_IO, "open"); 352 353 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 354 return -ERESTARTSYS; 355 usbvision_reset_power_off_timer(usbvision); 356 357 if (usbvision->user) 358 err_code = -EBUSY; 359 else { 360 /* Allocate memory for the scratch ring buffer */ 361 err_code = usbvision_scratch_alloc(usbvision); 362 if (isoc_mode == ISOC_MODE_COMPRESS) { 363 /* Allocate intermediate decompression buffers 364 only if needed */ 365 err_code = usbvision_decompress_alloc(usbvision); 366 } 367 if (err_code) { 368 /* Deallocate all buffers if trouble */ 369 usbvision_scratch_free(usbvision); 370 usbvision_decompress_free(usbvision); 371 } 372 } 373 374 /* If so far no errors then we shall start the camera */ 375 if (!err_code) { 376 if (usbvision->power == 0) { 377 usbvision_power_on(usbvision); 378 usbvision_i2c_register(usbvision); 379 } 380 381 /* Send init sequence only once, it's large! */ 382 if (!usbvision->initialized) { 383 int setup_ok = 0; 384 setup_ok = usbvision_setup(usbvision, isoc_mode); 385 if (setup_ok) 386 usbvision->initialized = 1; 387 else 388 err_code = -EBUSY; 389 } 390 391 if (!err_code) { 392 usbvision_begin_streaming(usbvision); 393 err_code = usbvision_init_isoc(usbvision); 394 /* device must be initialized before isoc transfer */ 395 usbvision_muxsel(usbvision, 0); 396 usbvision->user++; 397 } else { 398 if (power_on_at_open) { 399 usbvision_i2c_unregister(usbvision); 400 usbvision_power_off(usbvision); 401 usbvision->initialized = 0; 402 } 403 } 404 } 405 406 /* prepare queues */ 407 usbvision_empty_framequeues(usbvision); 408 mutex_unlock(&usbvision->v4l2_lock); 409 410 PDEBUG(DBG_IO, "success"); 411 return err_code; 412 } 413 414 /* 415 * usbvision_v4l2_close() 416 * 417 * This is part of Video 4 Linux API. The procedure 418 * stops streaming and deallocates all buffers that were earlier 419 * allocated in usbvision_v4l2_open(). 420 * 421 */ 422 static int usbvision_v4l2_close(struct file *file) 423 { 424 struct usb_usbvision *usbvision = video_drvdata(file); 425 426 PDEBUG(DBG_IO, "close"); 427 428 mutex_lock(&usbvision->v4l2_lock); 429 usbvision_audio_off(usbvision); 430 usbvision_restart_isoc(usbvision); 431 usbvision_stop_isoc(usbvision); 432 433 usbvision_decompress_free(usbvision); 434 usbvision_frames_free(usbvision); 435 usbvision_empty_framequeues(usbvision); 436 usbvision_scratch_free(usbvision); 437 438 usbvision->user--; 439 440 if (power_on_at_open) { 441 /* power off in a little while 442 to avoid off/on every close/open short sequences */ 443 usbvision_set_power_off_timer(usbvision); 444 usbvision->initialized = 0; 445 } 446 447 if (usbvision->remove_pending) { 448 printk(KERN_INFO "%s: Final disconnect\n", __func__); 449 usbvision_release(usbvision); 450 return 0; 451 } 452 mutex_unlock(&usbvision->v4l2_lock); 453 454 PDEBUG(DBG_IO, "success"); 455 return 0; 456 } 457 458 459 /* 460 * usbvision_ioctl() 461 * 462 * This is part of Video 4 Linux API. The procedure handles ioctl() calls. 463 * 464 */ 465 #ifdef CONFIG_VIDEO_ADV_DEBUG 466 static int vidioc_g_register(struct file *file, void *priv, 467 struct v4l2_dbg_register *reg) 468 { 469 struct usb_usbvision *usbvision = video_drvdata(file); 470 int err_code; 471 472 /* NT100x has a 8-bit register space */ 473 err_code = usbvision_read_reg(usbvision, reg->reg&0xff); 474 if (err_code < 0) { 475 dev_err(&usbvision->vdev->dev, 476 "%s: VIDIOC_DBG_G_REGISTER failed: error %d\n", 477 __func__, err_code); 478 return err_code; 479 } 480 reg->val = err_code; 481 reg->size = 1; 482 return 0; 483 } 484 485 static int vidioc_s_register(struct file *file, void *priv, 486 const struct v4l2_dbg_register *reg) 487 { 488 struct usb_usbvision *usbvision = video_drvdata(file); 489 int err_code; 490 491 /* NT100x has a 8-bit register space */ 492 err_code = usbvision_write_reg(usbvision, reg->reg & 0xff, reg->val); 493 if (err_code < 0) { 494 dev_err(&usbvision->vdev->dev, 495 "%s: VIDIOC_DBG_S_REGISTER failed: error %d\n", 496 __func__, err_code); 497 return err_code; 498 } 499 return 0; 500 } 501 #endif 502 503 static int vidioc_querycap(struct file *file, void *priv, 504 struct v4l2_capability *vc) 505 { 506 struct usb_usbvision *usbvision = video_drvdata(file); 507 508 strlcpy(vc->driver, "USBVision", sizeof(vc->driver)); 509 strlcpy(vc->card, 510 usbvision_device_data[usbvision->dev_model].model_string, 511 sizeof(vc->card)); 512 usb_make_path(usbvision->dev, vc->bus_info, sizeof(vc->bus_info)); 513 vc->device_caps = V4L2_CAP_VIDEO_CAPTURE | 514 V4L2_CAP_AUDIO | 515 V4L2_CAP_READWRITE | 516 V4L2_CAP_STREAMING | 517 (usbvision->have_tuner ? V4L2_CAP_TUNER : 0); 518 vc->capabilities = vc->device_caps | V4L2_CAP_DEVICE_CAPS; 519 return 0; 520 } 521 522 static int vidioc_enum_input(struct file *file, void *priv, 523 struct v4l2_input *vi) 524 { 525 struct usb_usbvision *usbvision = video_drvdata(file); 526 int chan; 527 528 if (vi->index >= usbvision->video_inputs) 529 return -EINVAL; 530 if (usbvision->have_tuner) 531 chan = vi->index; 532 else 533 chan = vi->index + 1; /* skip Television string*/ 534 535 /* Determine the requested input characteristics 536 specific for each usbvision card model */ 537 switch (chan) { 538 case 0: 539 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) { 540 strcpy(vi->name, "White Video Input"); 541 } else { 542 strcpy(vi->name, "Television"); 543 vi->type = V4L2_INPUT_TYPE_TUNER; 544 vi->audioset = 1; 545 vi->tuner = chan; 546 vi->std = USBVISION_NORMS; 547 } 548 break; 549 case 1: 550 vi->type = V4L2_INPUT_TYPE_CAMERA; 551 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) 552 strcpy(vi->name, "Green Video Input"); 553 else 554 strcpy(vi->name, "Composite Video Input"); 555 vi->std = V4L2_STD_PAL; 556 break; 557 case 2: 558 vi->type = V4L2_INPUT_TYPE_CAMERA; 559 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) 560 strcpy(vi->name, "Yellow Video Input"); 561 else 562 strcpy(vi->name, "S-Video Input"); 563 vi->std = V4L2_STD_PAL; 564 break; 565 case 3: 566 vi->type = V4L2_INPUT_TYPE_CAMERA; 567 strcpy(vi->name, "Red Video Input"); 568 vi->std = V4L2_STD_PAL; 569 break; 570 } 571 return 0; 572 } 573 574 static int vidioc_g_input(struct file *file, void *priv, unsigned int *input) 575 { 576 struct usb_usbvision *usbvision = video_drvdata(file); 577 578 *input = usbvision->ctl_input; 579 return 0; 580 } 581 582 static int vidioc_s_input(struct file *file, void *priv, unsigned int input) 583 { 584 struct usb_usbvision *usbvision = video_drvdata(file); 585 586 if (input >= usbvision->video_inputs) 587 return -EINVAL; 588 589 usbvision_muxsel(usbvision, input); 590 usbvision_set_input(usbvision); 591 usbvision_set_output(usbvision, 592 usbvision->curwidth, 593 usbvision->curheight); 594 return 0; 595 } 596 597 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id) 598 { 599 struct usb_usbvision *usbvision = video_drvdata(file); 600 601 usbvision->tvnorm_id = id; 602 603 call_all(usbvision, video, s_std, usbvision->tvnorm_id); 604 /* propagate the change to the decoder */ 605 usbvision_muxsel(usbvision, usbvision->ctl_input); 606 607 return 0; 608 } 609 610 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id) 611 { 612 struct usb_usbvision *usbvision = video_drvdata(file); 613 614 *id = usbvision->tvnorm_id; 615 return 0; 616 } 617 618 static int vidioc_g_tuner(struct file *file, void *priv, 619 struct v4l2_tuner *vt) 620 { 621 struct usb_usbvision *usbvision = video_drvdata(file); 622 623 if (!usbvision->have_tuner || vt->index) /* Only tuner 0 */ 624 return -EINVAL; 625 if (usbvision->radio) { 626 strcpy(vt->name, "Radio"); 627 vt->type = V4L2_TUNER_RADIO; 628 } else { 629 strcpy(vt->name, "Television"); 630 } 631 /* Let clients fill in the remainder of this struct */ 632 call_all(usbvision, tuner, g_tuner, vt); 633 634 return 0; 635 } 636 637 static int vidioc_s_tuner(struct file *file, void *priv, 638 const struct v4l2_tuner *vt) 639 { 640 struct usb_usbvision *usbvision = video_drvdata(file); 641 642 /* Only no or one tuner for now */ 643 if (!usbvision->have_tuner || vt->index) 644 return -EINVAL; 645 /* let clients handle this */ 646 call_all(usbvision, tuner, s_tuner, vt); 647 648 return 0; 649 } 650 651 static int vidioc_g_frequency(struct file *file, void *priv, 652 struct v4l2_frequency *freq) 653 { 654 struct usb_usbvision *usbvision = video_drvdata(file); 655 656 freq->tuner = 0; /* Only one tuner */ 657 if (usbvision->radio) 658 freq->type = V4L2_TUNER_RADIO; 659 else 660 freq->type = V4L2_TUNER_ANALOG_TV; 661 freq->frequency = usbvision->freq; 662 663 return 0; 664 } 665 666 static int vidioc_s_frequency(struct file *file, void *priv, 667 const struct v4l2_frequency *freq) 668 { 669 struct usb_usbvision *usbvision = video_drvdata(file); 670 671 /* Only no or one tuner for now */ 672 if (!usbvision->have_tuner || freq->tuner) 673 return -EINVAL; 674 675 usbvision->freq = freq->frequency; 676 call_all(usbvision, tuner, s_frequency, freq); 677 678 return 0; 679 } 680 681 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a) 682 { 683 struct usb_usbvision *usbvision = video_drvdata(file); 684 685 if (usbvision->radio) 686 strcpy(a->name, "Radio"); 687 else 688 strcpy(a->name, "TV"); 689 690 return 0; 691 } 692 693 static int vidioc_s_audio(struct file *file, void *fh, 694 const struct v4l2_audio *a) 695 { 696 if (a->index) 697 return -EINVAL; 698 return 0; 699 } 700 701 static int vidioc_queryctrl(struct file *file, void *priv, 702 struct v4l2_queryctrl *ctrl) 703 { 704 struct usb_usbvision *usbvision = video_drvdata(file); 705 706 call_all(usbvision, core, queryctrl, ctrl); 707 708 if (!ctrl->type) 709 return -EINVAL; 710 711 return 0; 712 } 713 714 static int vidioc_g_ctrl(struct file *file, void *priv, 715 struct v4l2_control *ctrl) 716 { 717 struct usb_usbvision *usbvision = video_drvdata(file); 718 719 call_all(usbvision, core, g_ctrl, ctrl); 720 return 0; 721 } 722 723 static int vidioc_s_ctrl(struct file *file, void *priv, 724 struct v4l2_control *ctrl) 725 { 726 struct usb_usbvision *usbvision = video_drvdata(file); 727 728 call_all(usbvision, core, s_ctrl, ctrl); 729 return 0; 730 } 731 732 static int vidioc_reqbufs(struct file *file, 733 void *priv, struct v4l2_requestbuffers *vr) 734 { 735 struct usb_usbvision *usbvision = video_drvdata(file); 736 int ret; 737 738 RESTRICT_TO_RANGE(vr->count, 1, USBVISION_NUMFRAMES); 739 740 /* Check input validity: 741 the user must do a VIDEO CAPTURE and MMAP method. */ 742 if (vr->memory != V4L2_MEMORY_MMAP) 743 return -EINVAL; 744 745 if (usbvision->streaming == stream_on) { 746 ret = usbvision_stream_interrupt(usbvision); 747 if (ret) 748 return ret; 749 } 750 751 usbvision_frames_free(usbvision); 752 usbvision_empty_framequeues(usbvision); 753 vr->count = usbvision_frames_alloc(usbvision, vr->count); 754 755 usbvision->cur_frame = NULL; 756 757 return 0; 758 } 759 760 static int vidioc_querybuf(struct file *file, 761 void *priv, struct v4l2_buffer *vb) 762 { 763 struct usb_usbvision *usbvision = video_drvdata(file); 764 struct usbvision_frame *frame; 765 766 /* FIXME : must control 767 that buffers are mapped (VIDIOC_REQBUFS has been called) */ 768 if (vb->index >= usbvision->num_frames) 769 return -EINVAL; 770 /* Updating the corresponding frame state */ 771 vb->flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 772 frame = &usbvision->frame[vb->index]; 773 if (frame->grabstate >= frame_state_ready) 774 vb->flags |= V4L2_BUF_FLAG_QUEUED; 775 if (frame->grabstate >= frame_state_done) 776 vb->flags |= V4L2_BUF_FLAG_DONE; 777 if (frame->grabstate == frame_state_unused) 778 vb->flags |= V4L2_BUF_FLAG_MAPPED; 779 vb->memory = V4L2_MEMORY_MMAP; 780 781 vb->m.offset = vb->index * PAGE_ALIGN(usbvision->max_frame_size); 782 783 vb->memory = V4L2_MEMORY_MMAP; 784 vb->field = V4L2_FIELD_NONE; 785 vb->length = usbvision->curwidth * 786 usbvision->curheight * 787 usbvision->palette.bytes_per_pixel; 788 vb->timestamp = usbvision->frame[vb->index].timestamp; 789 vb->sequence = usbvision->frame[vb->index].sequence; 790 return 0; 791 } 792 793 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb) 794 { 795 struct usb_usbvision *usbvision = video_drvdata(file); 796 struct usbvision_frame *frame; 797 unsigned long lock_flags; 798 799 /* FIXME : works only on VIDEO_CAPTURE MODE, MMAP. */ 800 if (vb->index >= usbvision->num_frames) 801 return -EINVAL; 802 803 frame = &usbvision->frame[vb->index]; 804 805 if (frame->grabstate != frame_state_unused) 806 return -EAGAIN; 807 808 /* Mark it as ready and enqueue frame */ 809 frame->grabstate = frame_state_ready; 810 frame->scanstate = scan_state_scanning; 811 frame->scanlength = 0; /* Accumulated in usbvision_parse_data() */ 812 813 vb->flags &= ~V4L2_BUF_FLAG_DONE; 814 815 /* set v4l2_format index */ 816 frame->v4l2_format = usbvision->palette; 817 818 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 819 list_add_tail(&usbvision->frame[vb->index].frame, &usbvision->inqueue); 820 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 821 822 return 0; 823 } 824 825 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb) 826 { 827 struct usb_usbvision *usbvision = video_drvdata(file); 828 int ret; 829 struct usbvision_frame *f; 830 unsigned long lock_flags; 831 832 if (list_empty(&(usbvision->outqueue))) { 833 if (usbvision->streaming == stream_idle) 834 return -EINVAL; 835 ret = wait_event_interruptible 836 (usbvision->wait_frame, 837 !list_empty(&(usbvision->outqueue))); 838 if (ret) 839 return ret; 840 } 841 842 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 843 f = list_entry(usbvision->outqueue.next, 844 struct usbvision_frame, frame); 845 list_del(usbvision->outqueue.next); 846 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 847 848 f->grabstate = frame_state_unused; 849 850 vb->memory = V4L2_MEMORY_MMAP; 851 vb->flags = V4L2_BUF_FLAG_MAPPED | 852 V4L2_BUF_FLAG_QUEUED | 853 V4L2_BUF_FLAG_DONE | 854 V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 855 vb->index = f->index; 856 vb->sequence = f->sequence; 857 vb->timestamp = f->timestamp; 858 vb->field = V4L2_FIELD_NONE; 859 vb->bytesused = f->scanlength; 860 861 return 0; 862 } 863 864 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i) 865 { 866 struct usb_usbvision *usbvision = video_drvdata(file); 867 868 usbvision->streaming = stream_on; 869 call_all(usbvision, video, s_stream, 1); 870 871 return 0; 872 } 873 874 static int vidioc_streamoff(struct file *file, 875 void *priv, enum v4l2_buf_type type) 876 { 877 struct usb_usbvision *usbvision = video_drvdata(file); 878 879 if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 880 return -EINVAL; 881 882 if (usbvision->streaming == stream_on) { 883 usbvision_stream_interrupt(usbvision); 884 /* Stop all video streamings */ 885 call_all(usbvision, video, s_stream, 0); 886 } 887 usbvision_empty_framequeues(usbvision); 888 889 return 0; 890 } 891 892 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, 893 struct v4l2_fmtdesc *vfd) 894 { 895 if (vfd->index >= USBVISION_SUPPORTED_PALETTES - 1) 896 return -EINVAL; 897 strcpy(vfd->description, usbvision_v4l2_format[vfd->index].desc); 898 vfd->pixelformat = usbvision_v4l2_format[vfd->index].format; 899 return 0; 900 } 901 902 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, 903 struct v4l2_format *vf) 904 { 905 struct usb_usbvision *usbvision = video_drvdata(file); 906 vf->fmt.pix.width = usbvision->curwidth; 907 vf->fmt.pix.height = usbvision->curheight; 908 vf->fmt.pix.pixelformat = usbvision->palette.format; 909 vf->fmt.pix.bytesperline = 910 usbvision->curwidth * usbvision->palette.bytes_per_pixel; 911 vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline * usbvision->curheight; 912 vf->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 913 vf->fmt.pix.field = V4L2_FIELD_NONE; /* Always progressive image */ 914 915 return 0; 916 } 917 918 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, 919 struct v4l2_format *vf) 920 { 921 struct usb_usbvision *usbvision = video_drvdata(file); 922 int format_idx; 923 924 /* Find requested format in available ones */ 925 for (format_idx = 0; format_idx < USBVISION_SUPPORTED_PALETTES; format_idx++) { 926 if (vf->fmt.pix.pixelformat == 927 usbvision_v4l2_format[format_idx].format) { 928 usbvision->palette = usbvision_v4l2_format[format_idx]; 929 break; 930 } 931 } 932 /* robustness */ 933 if (format_idx == USBVISION_SUPPORTED_PALETTES) 934 return -EINVAL; 935 RESTRICT_TO_RANGE(vf->fmt.pix.width, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH); 936 RESTRICT_TO_RANGE(vf->fmt.pix.height, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT); 937 938 vf->fmt.pix.bytesperline = vf->fmt.pix.width* 939 usbvision->palette.bytes_per_pixel; 940 vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline*vf->fmt.pix.height; 941 942 return 0; 943 } 944 945 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, 946 struct v4l2_format *vf) 947 { 948 struct usb_usbvision *usbvision = video_drvdata(file); 949 int ret; 950 951 ret = vidioc_try_fmt_vid_cap(file, priv, vf); 952 if (ret) 953 return ret; 954 955 /* stop io in case it is already in progress */ 956 if (usbvision->streaming == stream_on) { 957 ret = usbvision_stream_interrupt(usbvision); 958 if (ret) 959 return ret; 960 } 961 usbvision_frames_free(usbvision); 962 usbvision_empty_framequeues(usbvision); 963 964 usbvision->cur_frame = NULL; 965 966 /* by now we are committed to the new data... */ 967 usbvision_set_output(usbvision, vf->fmt.pix.width, vf->fmt.pix.height); 968 969 return 0; 970 } 971 972 static ssize_t usbvision_read(struct file *file, char __user *buf, 973 size_t count, loff_t *ppos) 974 { 975 struct usb_usbvision *usbvision = video_drvdata(file); 976 int noblock = file->f_flags & O_NONBLOCK; 977 unsigned long lock_flags; 978 int ret, i; 979 struct usbvision_frame *frame; 980 981 PDEBUG(DBG_IO, "%s: %ld bytes, noblock=%d", __func__, 982 (unsigned long)count, noblock); 983 984 if (!USBVISION_IS_OPERATIONAL(usbvision) || (buf == NULL)) 985 return -EFAULT; 986 987 /* This entry point is compatible with the mmap routines 988 so that a user can do either VIDIOC_QBUF/VIDIOC_DQBUF 989 to get frames or call read on the device. */ 990 if (!usbvision->num_frames) { 991 /* First, allocate some frames to work with 992 if this has not been done with VIDIOC_REQBUF */ 993 usbvision_frames_free(usbvision); 994 usbvision_empty_framequeues(usbvision); 995 usbvision_frames_alloc(usbvision, USBVISION_NUMFRAMES); 996 } 997 998 if (usbvision->streaming != stream_on) { 999 /* no stream is running, make it running ! */ 1000 usbvision->streaming = stream_on; 1001 call_all(usbvision, video, s_stream, 1); 1002 } 1003 1004 /* Then, enqueue as many frames as possible 1005 (like a user of VIDIOC_QBUF would do) */ 1006 for (i = 0; i < usbvision->num_frames; i++) { 1007 frame = &usbvision->frame[i]; 1008 if (frame->grabstate == frame_state_unused) { 1009 /* Mark it as ready and enqueue frame */ 1010 frame->grabstate = frame_state_ready; 1011 frame->scanstate = scan_state_scanning; 1012 /* Accumulated in usbvision_parse_data() */ 1013 frame->scanlength = 0; 1014 1015 /* set v4l2_format index */ 1016 frame->v4l2_format = usbvision->palette; 1017 1018 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 1019 list_add_tail(&frame->frame, &usbvision->inqueue); 1020 spin_unlock_irqrestore(&usbvision->queue_lock, 1021 lock_flags); 1022 } 1023 } 1024 1025 /* Then try to steal a frame (like a VIDIOC_DQBUF would do) */ 1026 if (list_empty(&(usbvision->outqueue))) { 1027 if (noblock) 1028 return -EAGAIN; 1029 1030 ret = wait_event_interruptible 1031 (usbvision->wait_frame, 1032 !list_empty(&(usbvision->outqueue))); 1033 if (ret) 1034 return ret; 1035 } 1036 1037 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 1038 frame = list_entry(usbvision->outqueue.next, 1039 struct usbvision_frame, frame); 1040 list_del(usbvision->outqueue.next); 1041 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 1042 1043 /* An error returns an empty frame */ 1044 if (frame->grabstate == frame_state_error) { 1045 frame->bytes_read = 0; 1046 return 0; 1047 } 1048 1049 PDEBUG(DBG_IO, "%s: frmx=%d, bytes_read=%ld, scanlength=%ld", 1050 __func__, 1051 frame->index, frame->bytes_read, frame->scanlength); 1052 1053 /* copy bytes to user space; we allow for partials reads */ 1054 if ((count + frame->bytes_read) > (unsigned long)frame->scanlength) 1055 count = frame->scanlength - frame->bytes_read; 1056 1057 if (copy_to_user(buf, frame->data + frame->bytes_read, count)) 1058 return -EFAULT; 1059 1060 frame->bytes_read += count; 1061 PDEBUG(DBG_IO, "%s: {copy} count used=%ld, new bytes_read=%ld", 1062 __func__, 1063 (unsigned long)count, frame->bytes_read); 1064 1065 /* For now, forget the frame if it has not been read in one shot. */ 1066 /* if (frame->bytes_read >= frame->scanlength) {*/ /* All data has been read */ 1067 frame->bytes_read = 0; 1068 1069 /* Mark it as available to be used again. */ 1070 frame->grabstate = frame_state_unused; 1071 /* } */ 1072 1073 return count; 1074 } 1075 1076 static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, 1077 size_t count, loff_t *ppos) 1078 { 1079 struct usb_usbvision *usbvision = video_drvdata(file); 1080 int res; 1081 1082 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1083 return -ERESTARTSYS; 1084 res = usbvision_read(file, buf, count, ppos); 1085 mutex_unlock(&usbvision->v4l2_lock); 1086 return res; 1087 } 1088 1089 static int usbvision_mmap(struct file *file, struct vm_area_struct *vma) 1090 { 1091 unsigned long size = vma->vm_end - vma->vm_start, 1092 start = vma->vm_start; 1093 void *pos; 1094 u32 i; 1095 struct usb_usbvision *usbvision = video_drvdata(file); 1096 1097 PDEBUG(DBG_MMAP, "mmap"); 1098 1099 if (!USBVISION_IS_OPERATIONAL(usbvision)) 1100 return -EFAULT; 1101 1102 if (!(vma->vm_flags & VM_WRITE) || 1103 size != PAGE_ALIGN(usbvision->max_frame_size)) { 1104 return -EINVAL; 1105 } 1106 1107 for (i = 0; i < usbvision->num_frames; i++) { 1108 if (((PAGE_ALIGN(usbvision->max_frame_size)*i) >> PAGE_SHIFT) == 1109 vma->vm_pgoff) 1110 break; 1111 } 1112 if (i == usbvision->num_frames) { 1113 PDEBUG(DBG_MMAP, 1114 "mmap: user supplied mapping address is out of range"); 1115 return -EINVAL; 1116 } 1117 1118 /* VM_IO is eventually going to replace PageReserved altogether */ 1119 vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP; 1120 1121 pos = usbvision->frame[i].data; 1122 while (size > 0) { 1123 if (vm_insert_page(vma, start, vmalloc_to_page(pos))) { 1124 PDEBUG(DBG_MMAP, "mmap: vm_insert_page failed"); 1125 return -EAGAIN; 1126 } 1127 start += PAGE_SIZE; 1128 pos += PAGE_SIZE; 1129 size -= PAGE_SIZE; 1130 } 1131 1132 return 0; 1133 } 1134 1135 static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma) 1136 { 1137 struct usb_usbvision *usbvision = video_drvdata(file); 1138 int res; 1139 1140 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1141 return -ERESTARTSYS; 1142 res = usbvision_mmap(file, vma); 1143 mutex_unlock(&usbvision->v4l2_lock); 1144 return res; 1145 } 1146 1147 /* 1148 * Here comes the stuff for radio on usbvision based devices 1149 * 1150 */ 1151 static int usbvision_radio_open(struct file *file) 1152 { 1153 struct usb_usbvision *usbvision = video_drvdata(file); 1154 int err_code = 0; 1155 1156 PDEBUG(DBG_IO, "%s:", __func__); 1157 1158 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1159 return -ERESTARTSYS; 1160 if (usbvision->user) { 1161 dev_err(&usbvision->rdev->dev, 1162 "%s: Someone tried to open an already opened USBVision Radio!\n", 1163 __func__); 1164 err_code = -EBUSY; 1165 } else { 1166 if (power_on_at_open) { 1167 usbvision_reset_power_off_timer(usbvision); 1168 if (usbvision->power == 0) { 1169 usbvision_power_on(usbvision); 1170 usbvision_i2c_register(usbvision); 1171 } 1172 } 1173 1174 /* Alternate interface 1 is is the biggest frame size */ 1175 err_code = usbvision_set_alternate(usbvision); 1176 if (err_code < 0) { 1177 usbvision->last_error = err_code; 1178 err_code = -EBUSY; 1179 goto out; 1180 } 1181 1182 /* If so far no errors then we shall start the radio */ 1183 usbvision->radio = 1; 1184 call_all(usbvision, tuner, s_radio); 1185 usbvision_set_audio(usbvision, USBVISION_AUDIO_RADIO); 1186 usbvision->user++; 1187 } 1188 1189 if (err_code) { 1190 if (power_on_at_open) { 1191 usbvision_i2c_unregister(usbvision); 1192 usbvision_power_off(usbvision); 1193 usbvision->initialized = 0; 1194 } 1195 } 1196 out: 1197 mutex_unlock(&usbvision->v4l2_lock); 1198 return err_code; 1199 } 1200 1201 1202 static int usbvision_radio_close(struct file *file) 1203 { 1204 struct usb_usbvision *usbvision = video_drvdata(file); 1205 int err_code = 0; 1206 1207 PDEBUG(DBG_IO, ""); 1208 1209 mutex_lock(&usbvision->v4l2_lock); 1210 /* Set packet size to 0 */ 1211 usbvision->iface_alt = 0; 1212 err_code = usb_set_interface(usbvision->dev, usbvision->iface, 1213 usbvision->iface_alt); 1214 1215 usbvision_audio_off(usbvision); 1216 usbvision->radio = 0; 1217 usbvision->user--; 1218 1219 if (power_on_at_open) { 1220 usbvision_set_power_off_timer(usbvision); 1221 usbvision->initialized = 0; 1222 } 1223 1224 if (usbvision->remove_pending) { 1225 printk(KERN_INFO "%s: Final disconnect\n", __func__); 1226 usbvision_release(usbvision); 1227 return err_code; 1228 } 1229 1230 mutex_unlock(&usbvision->v4l2_lock); 1231 PDEBUG(DBG_IO, "success"); 1232 return err_code; 1233 } 1234 1235 /* Video registration stuff */ 1236 1237 /* Video template */ 1238 static const struct v4l2_file_operations usbvision_fops = { 1239 .owner = THIS_MODULE, 1240 .open = usbvision_v4l2_open, 1241 .release = usbvision_v4l2_close, 1242 .read = usbvision_v4l2_read, 1243 .mmap = usbvision_v4l2_mmap, 1244 .unlocked_ioctl = video_ioctl2, 1245 /* .poll = video_poll, */ 1246 }; 1247 1248 static const struct v4l2_ioctl_ops usbvision_ioctl_ops = { 1249 .vidioc_querycap = vidioc_querycap, 1250 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, 1251 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, 1252 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap, 1253 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap, 1254 .vidioc_reqbufs = vidioc_reqbufs, 1255 .vidioc_querybuf = vidioc_querybuf, 1256 .vidioc_qbuf = vidioc_qbuf, 1257 .vidioc_dqbuf = vidioc_dqbuf, 1258 .vidioc_s_std = vidioc_s_std, 1259 .vidioc_g_std = vidioc_g_std, 1260 .vidioc_enum_input = vidioc_enum_input, 1261 .vidioc_g_input = vidioc_g_input, 1262 .vidioc_s_input = vidioc_s_input, 1263 .vidioc_queryctrl = vidioc_queryctrl, 1264 .vidioc_g_audio = vidioc_g_audio, 1265 .vidioc_s_audio = vidioc_s_audio, 1266 .vidioc_g_ctrl = vidioc_g_ctrl, 1267 .vidioc_s_ctrl = vidioc_s_ctrl, 1268 .vidioc_streamon = vidioc_streamon, 1269 .vidioc_streamoff = vidioc_streamoff, 1270 .vidioc_g_tuner = vidioc_g_tuner, 1271 .vidioc_s_tuner = vidioc_s_tuner, 1272 .vidioc_g_frequency = vidioc_g_frequency, 1273 .vidioc_s_frequency = vidioc_s_frequency, 1274 #ifdef CONFIG_VIDEO_ADV_DEBUG 1275 .vidioc_g_register = vidioc_g_register, 1276 .vidioc_s_register = vidioc_s_register, 1277 #endif 1278 }; 1279 1280 static struct video_device usbvision_video_template = { 1281 .fops = &usbvision_fops, 1282 .ioctl_ops = &usbvision_ioctl_ops, 1283 .name = "usbvision-video", 1284 .release = video_device_release, 1285 .tvnorms = USBVISION_NORMS, 1286 }; 1287 1288 1289 /* Radio template */ 1290 static const struct v4l2_file_operations usbvision_radio_fops = { 1291 .owner = THIS_MODULE, 1292 .open = usbvision_radio_open, 1293 .release = usbvision_radio_close, 1294 .unlocked_ioctl = video_ioctl2, 1295 }; 1296 1297 static const struct v4l2_ioctl_ops usbvision_radio_ioctl_ops = { 1298 .vidioc_querycap = vidioc_querycap, 1299 .vidioc_enum_input = vidioc_enum_input, 1300 .vidioc_g_input = vidioc_g_input, 1301 .vidioc_s_input = vidioc_s_input, 1302 .vidioc_queryctrl = vidioc_queryctrl, 1303 .vidioc_g_audio = vidioc_g_audio, 1304 .vidioc_s_audio = vidioc_s_audio, 1305 .vidioc_g_ctrl = vidioc_g_ctrl, 1306 .vidioc_s_ctrl = vidioc_s_ctrl, 1307 .vidioc_g_tuner = vidioc_g_tuner, 1308 .vidioc_s_tuner = vidioc_s_tuner, 1309 .vidioc_g_frequency = vidioc_g_frequency, 1310 .vidioc_s_frequency = vidioc_s_frequency, 1311 }; 1312 1313 static struct video_device usbvision_radio_template = { 1314 .fops = &usbvision_radio_fops, 1315 .name = "usbvision-radio", 1316 .release = video_device_release, 1317 .ioctl_ops = &usbvision_radio_ioctl_ops, 1318 }; 1319 1320 1321 static struct video_device *usbvision_vdev_init(struct usb_usbvision *usbvision, 1322 struct video_device *vdev_template, 1323 char *name) 1324 { 1325 struct usb_device *usb_dev = usbvision->dev; 1326 struct video_device *vdev; 1327 1328 if (usb_dev == NULL) { 1329 dev_err(&usbvision->dev->dev, 1330 "%s: usbvision->dev is not set\n", __func__); 1331 return NULL; 1332 } 1333 1334 vdev = video_device_alloc(); 1335 if (NULL == vdev) 1336 return NULL; 1337 *vdev = *vdev_template; 1338 vdev->lock = &usbvision->v4l2_lock; 1339 vdev->v4l2_dev = &usbvision->v4l2_dev; 1340 snprintf(vdev->name, sizeof(vdev->name), "%s", name); 1341 video_set_drvdata(vdev, usbvision); 1342 return vdev; 1343 } 1344 1345 /* unregister video4linux devices */ 1346 static void usbvision_unregister_video(struct usb_usbvision *usbvision) 1347 { 1348 /* Radio Device: */ 1349 if (usbvision->rdev) { 1350 PDEBUG(DBG_PROBE, "unregister %s [v4l2]", 1351 video_device_node_name(usbvision->rdev)); 1352 if (video_is_registered(usbvision->rdev)) 1353 video_unregister_device(usbvision->rdev); 1354 else 1355 video_device_release(usbvision->rdev); 1356 usbvision->rdev = NULL; 1357 } 1358 1359 /* Video Device: */ 1360 if (usbvision->vdev) { 1361 PDEBUG(DBG_PROBE, "unregister %s [v4l2]", 1362 video_device_node_name(usbvision->vdev)); 1363 if (video_is_registered(usbvision->vdev)) 1364 video_unregister_device(usbvision->vdev); 1365 else 1366 video_device_release(usbvision->vdev); 1367 usbvision->vdev = NULL; 1368 } 1369 } 1370 1371 /* register video4linux devices */ 1372 static int usbvision_register_video(struct usb_usbvision *usbvision) 1373 { 1374 /* Video Device: */ 1375 usbvision->vdev = usbvision_vdev_init(usbvision, 1376 &usbvision_video_template, 1377 "USBVision Video"); 1378 if (usbvision->vdev == NULL) 1379 goto err_exit; 1380 if (video_register_device(usbvision->vdev, VFL_TYPE_GRABBER, video_nr) < 0) 1381 goto err_exit; 1382 printk(KERN_INFO "USBVision[%d]: registered USBVision Video device %s [v4l2]\n", 1383 usbvision->nr, video_device_node_name(usbvision->vdev)); 1384 1385 /* Radio Device: */ 1386 if (usbvision_device_data[usbvision->dev_model].radio) { 1387 /* usbvision has radio */ 1388 usbvision->rdev = usbvision_vdev_init(usbvision, 1389 &usbvision_radio_template, 1390 "USBVision Radio"); 1391 if (usbvision->rdev == NULL) 1392 goto err_exit; 1393 if (video_register_device(usbvision->rdev, VFL_TYPE_RADIO, radio_nr) < 0) 1394 goto err_exit; 1395 printk(KERN_INFO "USBVision[%d]: registered USBVision Radio device %s [v4l2]\n", 1396 usbvision->nr, video_device_node_name(usbvision->rdev)); 1397 } 1398 /* all done */ 1399 return 0; 1400 1401 err_exit: 1402 dev_err(&usbvision->dev->dev, 1403 "USBVision[%d]: video_register_device() failed\n", 1404 usbvision->nr); 1405 usbvision_unregister_video(usbvision); 1406 return -1; 1407 } 1408 1409 /* 1410 * usbvision_alloc() 1411 * 1412 * This code allocates the struct usb_usbvision. 1413 * It is filled with default values. 1414 * 1415 * Returns NULL on error, a pointer to usb_usbvision else. 1416 * 1417 */ 1418 static struct usb_usbvision *usbvision_alloc(struct usb_device *dev, 1419 struct usb_interface *intf) 1420 { 1421 struct usb_usbvision *usbvision; 1422 1423 usbvision = kzalloc(sizeof(struct usb_usbvision), GFP_KERNEL); 1424 if (usbvision == NULL) 1425 return NULL; 1426 1427 usbvision->dev = dev; 1428 if (v4l2_device_register(&intf->dev, &usbvision->v4l2_dev)) 1429 goto err_free; 1430 1431 mutex_init(&usbvision->v4l2_lock); 1432 1433 /* prepare control urb for control messages during interrupts */ 1434 usbvision->ctrl_urb = usb_alloc_urb(USBVISION_URB_FRAMES, GFP_KERNEL); 1435 if (usbvision->ctrl_urb == NULL) 1436 goto err_unreg; 1437 init_waitqueue_head(&usbvision->ctrl_urb_wq); 1438 1439 usbvision_init_power_off_timer(usbvision); 1440 1441 return usbvision; 1442 1443 err_unreg: 1444 v4l2_device_unregister(&usbvision->v4l2_dev); 1445 err_free: 1446 kfree(usbvision); 1447 return NULL; 1448 } 1449 1450 /* 1451 * usbvision_release() 1452 * 1453 * This code does final release of struct usb_usbvision. This happens 1454 * after the device is disconnected -and- all clients closed their files. 1455 * 1456 */ 1457 static void usbvision_release(struct usb_usbvision *usbvision) 1458 { 1459 PDEBUG(DBG_PROBE, ""); 1460 1461 usbvision_reset_power_off_timer(usbvision); 1462 1463 usbvision->initialized = 0; 1464 1465 usbvision_remove_sysfs(usbvision->vdev); 1466 usbvision_unregister_video(usbvision); 1467 kfree(usbvision->alt_max_pkt_size); 1468 1469 usb_free_urb(usbvision->ctrl_urb); 1470 1471 v4l2_device_unregister(&usbvision->v4l2_dev); 1472 kfree(usbvision); 1473 1474 PDEBUG(DBG_PROBE, "success"); 1475 } 1476 1477 1478 /*********************** usb interface **********************************/ 1479 1480 static void usbvision_configure_video(struct usb_usbvision *usbvision) 1481 { 1482 int model; 1483 1484 if (usbvision == NULL) 1485 return; 1486 1487 model = usbvision->dev_model; 1488 usbvision->palette = usbvision_v4l2_format[2]; /* V4L2_PIX_FMT_RGB24; */ 1489 1490 if (usbvision_device_data[usbvision->dev_model].vin_reg2_override) { 1491 usbvision->vin_reg2_preset = 1492 usbvision_device_data[usbvision->dev_model].vin_reg2; 1493 } else { 1494 usbvision->vin_reg2_preset = 0; 1495 } 1496 1497 usbvision->tvnorm_id = usbvision_device_data[model].video_norm; 1498 1499 usbvision->video_inputs = usbvision_device_data[model].video_channels; 1500 usbvision->ctl_input = 0; 1501 1502 /* This should be here to make i2c clients to be able to register */ 1503 /* first switch off audio */ 1504 if (usbvision_device_data[model].audio_channels > 0) 1505 usbvision_audio_off(usbvision); 1506 if (!power_on_at_open) { 1507 /* and then power up the noisy tuner */ 1508 usbvision_power_on(usbvision); 1509 usbvision_i2c_register(usbvision); 1510 } 1511 } 1512 1513 /* 1514 * usbvision_probe() 1515 * 1516 * This procedure queries device descriptor and accepts the interface 1517 * if it looks like USBVISION video device 1518 * 1519 */ 1520 static int usbvision_probe(struct usb_interface *intf, 1521 const struct usb_device_id *devid) 1522 { 1523 struct usb_device *dev = usb_get_dev(interface_to_usbdev(intf)); 1524 struct usb_interface *uif; 1525 __u8 ifnum = intf->altsetting->desc.bInterfaceNumber; 1526 const struct usb_host_interface *interface; 1527 struct usb_usbvision *usbvision = NULL; 1528 const struct usb_endpoint_descriptor *endpoint; 1529 int model, i; 1530 1531 PDEBUG(DBG_PROBE, "VID=%#04x, PID=%#04x, ifnum=%u", 1532 dev->descriptor.idVendor, 1533 dev->descriptor.idProduct, ifnum); 1534 1535 model = devid->driver_info; 1536 if (model < 0 || model >= usbvision_device_data_size) { 1537 PDEBUG(DBG_PROBE, "model out of bounds %d", model); 1538 return -ENODEV; 1539 } 1540 printk(KERN_INFO "%s: %s found\n", __func__, 1541 usbvision_device_data[model].model_string); 1542 1543 if (usbvision_device_data[model].interface >= 0) 1544 interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0]; 1545 else 1546 interface = &dev->actconfig->interface[ifnum]->altsetting[0]; 1547 endpoint = &interface->endpoint[1].desc; 1548 if (!usb_endpoint_xfer_isoc(endpoint)) { 1549 dev_err(&intf->dev, "%s: interface %d. has non-ISO endpoint!\n", 1550 __func__, ifnum); 1551 dev_err(&intf->dev, "%s: Endpoint attributes %d", 1552 __func__, endpoint->bmAttributes); 1553 return -ENODEV; 1554 } 1555 if (usb_endpoint_dir_out(endpoint)) { 1556 dev_err(&intf->dev, "%s: interface %d. has ISO OUT endpoint!\n", 1557 __func__, ifnum); 1558 return -ENODEV; 1559 } 1560 1561 usbvision = usbvision_alloc(dev, intf); 1562 if (usbvision == NULL) { 1563 dev_err(&intf->dev, "%s: couldn't allocate USBVision struct\n", __func__); 1564 return -ENOMEM; 1565 } 1566 1567 if (dev->descriptor.bNumConfigurations > 1) 1568 usbvision->bridge_type = BRIDGE_NT1004; 1569 else if (model == DAZZLE_DVC_90_REV_1_SECAM) 1570 usbvision->bridge_type = BRIDGE_NT1005; 1571 else 1572 usbvision->bridge_type = BRIDGE_NT1003; 1573 PDEBUG(DBG_PROBE, "bridge_type %d", usbvision->bridge_type); 1574 1575 /* compute alternate max packet sizes */ 1576 uif = dev->actconfig->interface[0]; 1577 1578 usbvision->num_alt = uif->num_altsetting; 1579 PDEBUG(DBG_PROBE, "Alternate settings: %i", usbvision->num_alt); 1580 usbvision->alt_max_pkt_size = kmalloc(32 * usbvision->num_alt, GFP_KERNEL); 1581 if (usbvision->alt_max_pkt_size == NULL) { 1582 dev_err(&intf->dev, "usbvision: out of memory!\n"); 1583 usbvision_release(usbvision); 1584 return -ENOMEM; 1585 } 1586 1587 for (i = 0; i < usbvision->num_alt; i++) { 1588 u16 tmp = le16_to_cpu(uif->altsetting[i].endpoint[1].desc. 1589 wMaxPacketSize); 1590 usbvision->alt_max_pkt_size[i] = 1591 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1); 1592 PDEBUG(DBG_PROBE, "Alternate setting %i, max size= %i", i, 1593 usbvision->alt_max_pkt_size[i]); 1594 } 1595 1596 1597 usbvision->nr = usbvision_nr++; 1598 1599 usbvision->have_tuner = usbvision_device_data[model].tuner; 1600 if (usbvision->have_tuner) 1601 usbvision->tuner_type = usbvision_device_data[model].tuner_type; 1602 1603 usbvision->dev_model = model; 1604 usbvision->remove_pending = 0; 1605 usbvision->iface = ifnum; 1606 usbvision->iface_alt = 0; 1607 usbvision->video_endp = endpoint->bEndpointAddress; 1608 usbvision->isoc_packet_size = 0; 1609 usbvision->usb_bandwidth = 0; 1610 usbvision->user = 0; 1611 usbvision->streaming = stream_off; 1612 usbvision_configure_video(usbvision); 1613 usbvision_register_video(usbvision); 1614 1615 usbvision_create_sysfs(usbvision->vdev); 1616 1617 PDEBUG(DBG_PROBE, "success"); 1618 return 0; 1619 } 1620 1621 1622 /* 1623 * usbvision_disconnect() 1624 * 1625 * This procedure stops all driver activity, deallocates interface-private 1626 * structure (pointed by 'ptr') and after that driver should be removable 1627 * with no ill consequences. 1628 * 1629 */ 1630 static void usbvision_disconnect(struct usb_interface *intf) 1631 { 1632 struct usb_usbvision *usbvision = to_usbvision(usb_get_intfdata(intf)); 1633 1634 PDEBUG(DBG_PROBE, ""); 1635 1636 if (usbvision == NULL) { 1637 pr_err("%s: usb_get_intfdata() failed\n", __func__); 1638 return; 1639 } 1640 1641 mutex_lock(&usbvision->v4l2_lock); 1642 1643 /* At this time we ask to cancel outstanding URBs */ 1644 usbvision_stop_isoc(usbvision); 1645 1646 v4l2_device_disconnect(&usbvision->v4l2_dev); 1647 1648 if (usbvision->power) { 1649 usbvision_i2c_unregister(usbvision); 1650 usbvision_power_off(usbvision); 1651 } 1652 usbvision->remove_pending = 1; /* Now all ISO data will be ignored */ 1653 1654 usb_put_dev(usbvision->dev); 1655 usbvision->dev = NULL; /* USB device is no more */ 1656 1657 mutex_unlock(&usbvision->v4l2_lock); 1658 1659 if (usbvision->user) { 1660 printk(KERN_INFO "%s: In use, disconnect pending\n", 1661 __func__); 1662 wake_up_interruptible(&usbvision->wait_frame); 1663 wake_up_interruptible(&usbvision->wait_stream); 1664 } else { 1665 usbvision_release(usbvision); 1666 } 1667 1668 PDEBUG(DBG_PROBE, "success"); 1669 } 1670 1671 static struct usb_driver usbvision_driver = { 1672 .name = "usbvision", 1673 .id_table = usbvision_table, 1674 .probe = usbvision_probe, 1675 .disconnect = usbvision_disconnect, 1676 }; 1677 1678 /* 1679 * usbvision_init() 1680 * 1681 * This code is run to initialize the driver. 1682 * 1683 */ 1684 static int __init usbvision_init(void) 1685 { 1686 int err_code; 1687 1688 PDEBUG(DBG_PROBE, ""); 1689 1690 PDEBUG(DBG_IO, "IO debugging is enabled [video]"); 1691 PDEBUG(DBG_PROBE, "PROBE debugging is enabled [video]"); 1692 PDEBUG(DBG_MMAP, "MMAP debugging is enabled [video]"); 1693 1694 /* disable planar mode support unless compression enabled */ 1695 if (isoc_mode != ISOC_MODE_COMPRESS) { 1696 /* FIXME : not the right way to set supported flag */ 1697 usbvision_v4l2_format[6].supported = 0; /* V4L2_PIX_FMT_YVU420 */ 1698 usbvision_v4l2_format[7].supported = 0; /* V4L2_PIX_FMT_YUV422P */ 1699 } 1700 1701 err_code = usb_register(&usbvision_driver); 1702 1703 if (err_code == 0) { 1704 printk(KERN_INFO DRIVER_DESC " : " USBVISION_VERSION_STRING "\n"); 1705 PDEBUG(DBG_PROBE, "success"); 1706 } 1707 return err_code; 1708 } 1709 1710 static void __exit usbvision_exit(void) 1711 { 1712 PDEBUG(DBG_PROBE, ""); 1713 1714 usb_deregister(&usbvision_driver); 1715 PDEBUG(DBG_PROBE, "success"); 1716 } 1717 1718 module_init(usbvision_init); 1719 module_exit(usbvision_exit); 1720 1721 1722 1723 1724 1725 /* LDV_COMMENT_BEGIN_MAIN */ 1726 #ifdef LDV_MAIN1_sequence_infinite_withcheck_stateful 1727 1728 /*###########################################################################*/ 1729 1730 /*############## Driver Environment Generator 0.2 output ####################*/ 1731 1732 /*###########################################################################*/ 1733 1734 1735 1736 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */ 1737 void ldv_check_final_state(void); 1738 1739 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */ 1740 void ldv_check_return_value(int res); 1741 1742 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */ 1743 void ldv_check_return_value_probe(int res); 1744 1745 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */ 1746 void ldv_initialize(void); 1747 1748 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */ 1749 void ldv_handler_precall(void); 1750 1751 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */ 1752 int nondet_int(void); 1753 1754 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */ 1755 int LDV_IN_INTERRUPT; 1756 1757 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */ 1758 void ldv_main1_sequence_infinite_withcheck_stateful(void) { 1759 1760 1761 1762 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */ 1763 /*============================= VARIABLE DECLARATION PART =============================*/ 1764 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 1765 /* content: static int usbvision_v4l2_open(struct file *file)*/ 1766 /* LDV_COMMENT_BEGIN_PREP */ 1767 #define DRIVER_AUTHOR \ 1768 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1769 "Dwaine Garden <DwaineGarden@rogers.com>" 1770 #define DRIVER_NAME "usbvision" 1771 #define DRIVER_ALIAS "USBVision" 1772 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1773 #define DRIVER_LICENSE "GPL" 1774 #define USBVISION_VERSION_STRING "0.9.11" 1775 #define ENABLE_HEXDUMP 0 1776 #ifdef USBVISION_DEBUG 1777 #define PDEBUG(level, fmt, args...) { \ 1778 if (video_debug & (level)) \ 1779 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1780 __func__, __LINE__ , ## args); \ 1781 } 1782 #else 1783 #define PDEBUG(level, fmt, args...) do {} while (0) 1784 #endif 1785 #define DBG_IO (1 << 1) 1786 #define DBG_PROBE (1 << 2) 1787 #define DBG_MMAP (1 << 3) 1788 #define rmspace(str) while (*str == ' ') str++; 1789 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1790 #define YES_NO(x) ((x) ? "Yes" : "No") 1791 /* LDV_COMMENT_END_PREP */ 1792 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_open" */ 1793 struct file * var_group1; 1794 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_v4l2_open" */ 1795 static int res_usbvision_v4l2_open_12; 1796 /* LDV_COMMENT_BEGIN_PREP */ 1797 #ifdef CONFIG_VIDEO_ADV_DEBUG 1798 #endif 1799 #ifdef CONFIG_VIDEO_ADV_DEBUG 1800 #endif 1801 /* LDV_COMMENT_END_PREP */ 1802 /* content: static int usbvision_v4l2_close(struct file *file)*/ 1803 /* LDV_COMMENT_BEGIN_PREP */ 1804 #define DRIVER_AUTHOR \ 1805 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1806 "Dwaine Garden <DwaineGarden@rogers.com>" 1807 #define DRIVER_NAME "usbvision" 1808 #define DRIVER_ALIAS "USBVision" 1809 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1810 #define DRIVER_LICENSE "GPL" 1811 #define USBVISION_VERSION_STRING "0.9.11" 1812 #define ENABLE_HEXDUMP 0 1813 #ifdef USBVISION_DEBUG 1814 #define PDEBUG(level, fmt, args...) { \ 1815 if (video_debug & (level)) \ 1816 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1817 __func__, __LINE__ , ## args); \ 1818 } 1819 #else 1820 #define PDEBUG(level, fmt, args...) do {} while (0) 1821 #endif 1822 #define DBG_IO (1 << 1) 1823 #define DBG_PROBE (1 << 2) 1824 #define DBG_MMAP (1 << 3) 1825 #define rmspace(str) while (*str == ' ') str++; 1826 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1827 #define YES_NO(x) ((x) ? "Yes" : "No") 1828 /* LDV_COMMENT_END_PREP */ 1829 /* LDV_COMMENT_BEGIN_PREP */ 1830 #ifdef CONFIG_VIDEO_ADV_DEBUG 1831 #endif 1832 #ifdef CONFIG_VIDEO_ADV_DEBUG 1833 #endif 1834 /* LDV_COMMENT_END_PREP */ 1835 /* content: static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/ 1836 /* LDV_COMMENT_BEGIN_PREP */ 1837 #define DRIVER_AUTHOR \ 1838 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1839 "Dwaine Garden <DwaineGarden@rogers.com>" 1840 #define DRIVER_NAME "usbvision" 1841 #define DRIVER_ALIAS "USBVision" 1842 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1843 #define DRIVER_LICENSE "GPL" 1844 #define USBVISION_VERSION_STRING "0.9.11" 1845 #define ENABLE_HEXDUMP 0 1846 #ifdef USBVISION_DEBUG 1847 #define PDEBUG(level, fmt, args...) { \ 1848 if (video_debug & (level)) \ 1849 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1850 __func__, __LINE__ , ## args); \ 1851 } 1852 #else 1853 #define PDEBUG(level, fmt, args...) do {} while (0) 1854 #endif 1855 #define DBG_IO (1 << 1) 1856 #define DBG_PROBE (1 << 2) 1857 #define DBG_MMAP (1 << 3) 1858 #define rmspace(str) while (*str == ' ') str++; 1859 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1860 #define YES_NO(x) ((x) ? "Yes" : "No") 1861 #ifdef CONFIG_VIDEO_ADV_DEBUG 1862 #endif 1863 /* LDV_COMMENT_END_PREP */ 1864 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1865 char __user * var_usbvision_v4l2_read_42_p1; 1866 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1867 size_t var_usbvision_v4l2_read_42_p2; 1868 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1869 loff_t * var_usbvision_v4l2_read_42_p3; 1870 /* LDV_COMMENT_BEGIN_PREP */ 1871 #ifdef CONFIG_VIDEO_ADV_DEBUG 1872 #endif 1873 /* LDV_COMMENT_END_PREP */ 1874 /* content: static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma)*/ 1875 /* LDV_COMMENT_BEGIN_PREP */ 1876 #define DRIVER_AUTHOR \ 1877 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1878 "Dwaine Garden <DwaineGarden@rogers.com>" 1879 #define DRIVER_NAME "usbvision" 1880 #define DRIVER_ALIAS "USBVision" 1881 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1882 #define DRIVER_LICENSE "GPL" 1883 #define USBVISION_VERSION_STRING "0.9.11" 1884 #define ENABLE_HEXDUMP 0 1885 #ifdef USBVISION_DEBUG 1886 #define PDEBUG(level, fmt, args...) { \ 1887 if (video_debug & (level)) \ 1888 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1889 __func__, __LINE__ , ## args); \ 1890 } 1891 #else 1892 #define PDEBUG(level, fmt, args...) do {} while (0) 1893 #endif 1894 #define DBG_IO (1 << 1) 1895 #define DBG_PROBE (1 << 2) 1896 #define DBG_MMAP (1 << 3) 1897 #define rmspace(str) while (*str == ' ') str++; 1898 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1899 #define YES_NO(x) ((x) ? "Yes" : "No") 1900 #ifdef CONFIG_VIDEO_ADV_DEBUG 1901 #endif 1902 /* LDV_COMMENT_END_PREP */ 1903 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_mmap" */ 1904 struct vm_area_struct * var_group2; 1905 /* LDV_COMMENT_BEGIN_PREP */ 1906 #ifdef CONFIG_VIDEO_ADV_DEBUG 1907 #endif 1908 /* LDV_COMMENT_END_PREP */ 1909 1910 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 1911 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 1912 /* LDV_COMMENT_BEGIN_PREP */ 1913 #define DRIVER_AUTHOR \ 1914 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1915 "Dwaine Garden <DwaineGarden@rogers.com>" 1916 #define DRIVER_NAME "usbvision" 1917 #define DRIVER_ALIAS "USBVision" 1918 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1919 #define DRIVER_LICENSE "GPL" 1920 #define USBVISION_VERSION_STRING "0.9.11" 1921 #define ENABLE_HEXDUMP 0 1922 #ifdef USBVISION_DEBUG 1923 #define PDEBUG(level, fmt, args...) { \ 1924 if (video_debug & (level)) \ 1925 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1926 __func__, __LINE__ , ## args); \ 1927 } 1928 #else 1929 #define PDEBUG(level, fmt, args...) do {} while (0) 1930 #endif 1931 #define DBG_IO (1 << 1) 1932 #define DBG_PROBE (1 << 2) 1933 #define DBG_MMAP (1 << 3) 1934 #define rmspace(str) while (*str == ' ') str++; 1935 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1936 #define YES_NO(x) ((x) ? "Yes" : "No") 1937 #ifdef CONFIG_VIDEO_ADV_DEBUG 1938 #endif 1939 /* LDV_COMMENT_END_PREP */ 1940 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querycap" */ 1941 void * var_vidioc_querycap_16_p1; 1942 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querycap" */ 1943 struct v4l2_capability * var_vidioc_querycap_16_p2; 1944 /* LDV_COMMENT_BEGIN_PREP */ 1945 #ifdef CONFIG_VIDEO_ADV_DEBUG 1946 #endif 1947 /* LDV_COMMENT_END_PREP */ 1948 /* content: static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *vfd)*/ 1949 /* LDV_COMMENT_BEGIN_PREP */ 1950 #define DRIVER_AUTHOR \ 1951 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1952 "Dwaine Garden <DwaineGarden@rogers.com>" 1953 #define DRIVER_NAME "usbvision" 1954 #define DRIVER_ALIAS "USBVision" 1955 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1956 #define DRIVER_LICENSE "GPL" 1957 #define USBVISION_VERSION_STRING "0.9.11" 1958 #define ENABLE_HEXDUMP 0 1959 #ifdef USBVISION_DEBUG 1960 #define PDEBUG(level, fmt, args...) { \ 1961 if (video_debug & (level)) \ 1962 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1963 __func__, __LINE__ , ## args); \ 1964 } 1965 #else 1966 #define PDEBUG(level, fmt, args...) do {} while (0) 1967 #endif 1968 #define DBG_IO (1 << 1) 1969 #define DBG_PROBE (1 << 2) 1970 #define DBG_MMAP (1 << 3) 1971 #define rmspace(str) while (*str == ' ') str++; 1972 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1973 #define YES_NO(x) ((x) ? "Yes" : "No") 1974 #ifdef CONFIG_VIDEO_ADV_DEBUG 1975 #endif 1976 /* LDV_COMMENT_END_PREP */ 1977 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_fmt_vid_cap" */ 1978 void * var_vidioc_enum_fmt_vid_cap_37_p1; 1979 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_fmt_vid_cap" */ 1980 struct v4l2_fmtdesc * var_vidioc_enum_fmt_vid_cap_37_p2; 1981 /* LDV_COMMENT_BEGIN_PREP */ 1982 #ifdef CONFIG_VIDEO_ADV_DEBUG 1983 #endif 1984 /* LDV_COMMENT_END_PREP */ 1985 /* content: static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 1986 /* LDV_COMMENT_BEGIN_PREP */ 1987 #define DRIVER_AUTHOR \ 1988 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1989 "Dwaine Garden <DwaineGarden@rogers.com>" 1990 #define DRIVER_NAME "usbvision" 1991 #define DRIVER_ALIAS "USBVision" 1992 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1993 #define DRIVER_LICENSE "GPL" 1994 #define USBVISION_VERSION_STRING "0.9.11" 1995 #define ENABLE_HEXDUMP 0 1996 #ifdef USBVISION_DEBUG 1997 #define PDEBUG(level, fmt, args...) { \ 1998 if (video_debug & (level)) \ 1999 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2000 __func__, __LINE__ , ## args); \ 2001 } 2002 #else 2003 #define PDEBUG(level, fmt, args...) do {} while (0) 2004 #endif 2005 #define DBG_IO (1 << 1) 2006 #define DBG_PROBE (1 << 2) 2007 #define DBG_MMAP (1 << 3) 2008 #define rmspace(str) while (*str == ' ') str++; 2009 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2010 #define YES_NO(x) ((x) ? "Yes" : "No") 2011 #ifdef CONFIG_VIDEO_ADV_DEBUG 2012 #endif 2013 /* LDV_COMMENT_END_PREP */ 2014 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_fmt_vid_cap" */ 2015 void * var_vidioc_g_fmt_vid_cap_38_p1; 2016 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_fmt_vid_cap" */ 2017 struct v4l2_format * var_vidioc_g_fmt_vid_cap_38_p2; 2018 /* LDV_COMMENT_BEGIN_PREP */ 2019 #ifdef CONFIG_VIDEO_ADV_DEBUG 2020 #endif 2021 /* LDV_COMMENT_END_PREP */ 2022 /* content: static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 2023 /* LDV_COMMENT_BEGIN_PREP */ 2024 #define DRIVER_AUTHOR \ 2025 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2026 "Dwaine Garden <DwaineGarden@rogers.com>" 2027 #define DRIVER_NAME "usbvision" 2028 #define DRIVER_ALIAS "USBVision" 2029 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2030 #define DRIVER_LICENSE "GPL" 2031 #define USBVISION_VERSION_STRING "0.9.11" 2032 #define ENABLE_HEXDUMP 0 2033 #ifdef USBVISION_DEBUG 2034 #define PDEBUG(level, fmt, args...) { \ 2035 if (video_debug & (level)) \ 2036 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2037 __func__, __LINE__ , ## args); \ 2038 } 2039 #else 2040 #define PDEBUG(level, fmt, args...) do {} while (0) 2041 #endif 2042 #define DBG_IO (1 << 1) 2043 #define DBG_PROBE (1 << 2) 2044 #define DBG_MMAP (1 << 3) 2045 #define rmspace(str) while (*str == ' ') str++; 2046 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2047 #define YES_NO(x) ((x) ? "Yes" : "No") 2048 #ifdef CONFIG_VIDEO_ADV_DEBUG 2049 #endif 2050 /* LDV_COMMENT_END_PREP */ 2051 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_try_fmt_vid_cap" */ 2052 void * var_vidioc_try_fmt_vid_cap_39_p1; 2053 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_try_fmt_vid_cap" */ 2054 struct v4l2_format * var_vidioc_try_fmt_vid_cap_39_p2; 2055 /* LDV_COMMENT_BEGIN_PREP */ 2056 #ifdef CONFIG_VIDEO_ADV_DEBUG 2057 #endif 2058 /* LDV_COMMENT_END_PREP */ 2059 /* content: static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 2060 /* LDV_COMMENT_BEGIN_PREP */ 2061 #define DRIVER_AUTHOR \ 2062 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2063 "Dwaine Garden <DwaineGarden@rogers.com>" 2064 #define DRIVER_NAME "usbvision" 2065 #define DRIVER_ALIAS "USBVision" 2066 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2067 #define DRIVER_LICENSE "GPL" 2068 #define USBVISION_VERSION_STRING "0.9.11" 2069 #define ENABLE_HEXDUMP 0 2070 #ifdef USBVISION_DEBUG 2071 #define PDEBUG(level, fmt, args...) { \ 2072 if (video_debug & (level)) \ 2073 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2074 __func__, __LINE__ , ## args); \ 2075 } 2076 #else 2077 #define PDEBUG(level, fmt, args...) do {} while (0) 2078 #endif 2079 #define DBG_IO (1 << 1) 2080 #define DBG_PROBE (1 << 2) 2081 #define DBG_MMAP (1 << 3) 2082 #define rmspace(str) while (*str == ' ') str++; 2083 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2084 #define YES_NO(x) ((x) ? "Yes" : "No") 2085 #ifdef CONFIG_VIDEO_ADV_DEBUG 2086 #endif 2087 /* LDV_COMMENT_END_PREP */ 2088 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_fmt_vid_cap" */ 2089 void * var_vidioc_s_fmt_vid_cap_40_p1; 2090 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_fmt_vid_cap" */ 2091 struct v4l2_format * var_vidioc_s_fmt_vid_cap_40_p2; 2092 /* LDV_COMMENT_BEGIN_PREP */ 2093 #ifdef CONFIG_VIDEO_ADV_DEBUG 2094 #endif 2095 /* LDV_COMMENT_END_PREP */ 2096 /* content: static int vidioc_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *vr)*/ 2097 /* LDV_COMMENT_BEGIN_PREP */ 2098 #define DRIVER_AUTHOR \ 2099 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2100 "Dwaine Garden <DwaineGarden@rogers.com>" 2101 #define DRIVER_NAME "usbvision" 2102 #define DRIVER_ALIAS "USBVision" 2103 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2104 #define DRIVER_LICENSE "GPL" 2105 #define USBVISION_VERSION_STRING "0.9.11" 2106 #define ENABLE_HEXDUMP 0 2107 #ifdef USBVISION_DEBUG 2108 #define PDEBUG(level, fmt, args...) { \ 2109 if (video_debug & (level)) \ 2110 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2111 __func__, __LINE__ , ## args); \ 2112 } 2113 #else 2114 #define PDEBUG(level, fmt, args...) do {} while (0) 2115 #endif 2116 #define DBG_IO (1 << 1) 2117 #define DBG_PROBE (1 << 2) 2118 #define DBG_MMAP (1 << 3) 2119 #define rmspace(str) while (*str == ' ') str++; 2120 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2121 #define YES_NO(x) ((x) ? "Yes" : "No") 2122 #ifdef CONFIG_VIDEO_ADV_DEBUG 2123 #endif 2124 /* LDV_COMMENT_END_PREP */ 2125 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_reqbufs" */ 2126 void * var_vidioc_reqbufs_31_p1; 2127 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_reqbufs" */ 2128 struct v4l2_requestbuffers * var_vidioc_reqbufs_31_p2; 2129 /* LDV_COMMENT_BEGIN_PREP */ 2130 #ifdef CONFIG_VIDEO_ADV_DEBUG 2131 #endif 2132 /* LDV_COMMENT_END_PREP */ 2133 /* content: static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2134 /* LDV_COMMENT_BEGIN_PREP */ 2135 #define DRIVER_AUTHOR \ 2136 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2137 "Dwaine Garden <DwaineGarden@rogers.com>" 2138 #define DRIVER_NAME "usbvision" 2139 #define DRIVER_ALIAS "USBVision" 2140 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2141 #define DRIVER_LICENSE "GPL" 2142 #define USBVISION_VERSION_STRING "0.9.11" 2143 #define ENABLE_HEXDUMP 0 2144 #ifdef USBVISION_DEBUG 2145 #define PDEBUG(level, fmt, args...) { \ 2146 if (video_debug & (level)) \ 2147 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2148 __func__, __LINE__ , ## args); \ 2149 } 2150 #else 2151 #define PDEBUG(level, fmt, args...) do {} while (0) 2152 #endif 2153 #define DBG_IO (1 << 1) 2154 #define DBG_PROBE (1 << 2) 2155 #define DBG_MMAP (1 << 3) 2156 #define rmspace(str) while (*str == ' ') str++; 2157 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2158 #define YES_NO(x) ((x) ? "Yes" : "No") 2159 #ifdef CONFIG_VIDEO_ADV_DEBUG 2160 #endif 2161 /* LDV_COMMENT_END_PREP */ 2162 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querybuf" */ 2163 void * var_vidioc_querybuf_32_p1; 2164 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querybuf" */ 2165 struct v4l2_buffer * var_vidioc_querybuf_32_p2; 2166 /* LDV_COMMENT_BEGIN_PREP */ 2167 #ifdef CONFIG_VIDEO_ADV_DEBUG 2168 #endif 2169 /* LDV_COMMENT_END_PREP */ 2170 /* content: static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2171 /* LDV_COMMENT_BEGIN_PREP */ 2172 #define DRIVER_AUTHOR \ 2173 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2174 "Dwaine Garden <DwaineGarden@rogers.com>" 2175 #define DRIVER_NAME "usbvision" 2176 #define DRIVER_ALIAS "USBVision" 2177 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2178 #define DRIVER_LICENSE "GPL" 2179 #define USBVISION_VERSION_STRING "0.9.11" 2180 #define ENABLE_HEXDUMP 0 2181 #ifdef USBVISION_DEBUG 2182 #define PDEBUG(level, fmt, args...) { \ 2183 if (video_debug & (level)) \ 2184 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2185 __func__, __LINE__ , ## args); \ 2186 } 2187 #else 2188 #define PDEBUG(level, fmt, args...) do {} while (0) 2189 #endif 2190 #define DBG_IO (1 << 1) 2191 #define DBG_PROBE (1 << 2) 2192 #define DBG_MMAP (1 << 3) 2193 #define rmspace(str) while (*str == ' ') str++; 2194 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2195 #define YES_NO(x) ((x) ? "Yes" : "No") 2196 #ifdef CONFIG_VIDEO_ADV_DEBUG 2197 #endif 2198 /* LDV_COMMENT_END_PREP */ 2199 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_qbuf" */ 2200 void * var_vidioc_qbuf_33_p1; 2201 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_qbuf" */ 2202 struct v4l2_buffer * var_vidioc_qbuf_33_p2; 2203 /* LDV_COMMENT_BEGIN_PREP */ 2204 #ifdef CONFIG_VIDEO_ADV_DEBUG 2205 #endif 2206 /* LDV_COMMENT_END_PREP */ 2207 /* content: static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2208 /* LDV_COMMENT_BEGIN_PREP */ 2209 #define DRIVER_AUTHOR \ 2210 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2211 "Dwaine Garden <DwaineGarden@rogers.com>" 2212 #define DRIVER_NAME "usbvision" 2213 #define DRIVER_ALIAS "USBVision" 2214 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2215 #define DRIVER_LICENSE "GPL" 2216 #define USBVISION_VERSION_STRING "0.9.11" 2217 #define ENABLE_HEXDUMP 0 2218 #ifdef USBVISION_DEBUG 2219 #define PDEBUG(level, fmt, args...) { \ 2220 if (video_debug & (level)) \ 2221 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2222 __func__, __LINE__ , ## args); \ 2223 } 2224 #else 2225 #define PDEBUG(level, fmt, args...) do {} while (0) 2226 #endif 2227 #define DBG_IO (1 << 1) 2228 #define DBG_PROBE (1 << 2) 2229 #define DBG_MMAP (1 << 3) 2230 #define rmspace(str) while (*str == ' ') str++; 2231 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2232 #define YES_NO(x) ((x) ? "Yes" : "No") 2233 #ifdef CONFIG_VIDEO_ADV_DEBUG 2234 #endif 2235 /* LDV_COMMENT_END_PREP */ 2236 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_dqbuf" */ 2237 void * var_vidioc_dqbuf_34_p1; 2238 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_dqbuf" */ 2239 struct v4l2_buffer * var_vidioc_dqbuf_34_p2; 2240 /* LDV_COMMENT_BEGIN_PREP */ 2241 #ifdef CONFIG_VIDEO_ADV_DEBUG 2242 #endif 2243 /* LDV_COMMENT_END_PREP */ 2244 /* content: static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)*/ 2245 /* LDV_COMMENT_BEGIN_PREP */ 2246 #define DRIVER_AUTHOR \ 2247 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2248 "Dwaine Garden <DwaineGarden@rogers.com>" 2249 #define DRIVER_NAME "usbvision" 2250 #define DRIVER_ALIAS "USBVision" 2251 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2252 #define DRIVER_LICENSE "GPL" 2253 #define USBVISION_VERSION_STRING "0.9.11" 2254 #define ENABLE_HEXDUMP 0 2255 #ifdef USBVISION_DEBUG 2256 #define PDEBUG(level, fmt, args...) { \ 2257 if (video_debug & (level)) \ 2258 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2259 __func__, __LINE__ , ## args); \ 2260 } 2261 #else 2262 #define PDEBUG(level, fmt, args...) do {} while (0) 2263 #endif 2264 #define DBG_IO (1 << 1) 2265 #define DBG_PROBE (1 << 2) 2266 #define DBG_MMAP (1 << 3) 2267 #define rmspace(str) while (*str == ' ') str++; 2268 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2269 #define YES_NO(x) ((x) ? "Yes" : "No") 2270 #ifdef CONFIG_VIDEO_ADV_DEBUG 2271 #endif 2272 /* LDV_COMMENT_END_PREP */ 2273 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_std" */ 2274 void * var_vidioc_s_std_20_p1; 2275 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_std" */ 2276 v4l2_std_id var_vidioc_s_std_20_p2; 2277 /* LDV_COMMENT_BEGIN_PREP */ 2278 #ifdef CONFIG_VIDEO_ADV_DEBUG 2279 #endif 2280 /* LDV_COMMENT_END_PREP */ 2281 /* content: static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)*/ 2282 /* LDV_COMMENT_BEGIN_PREP */ 2283 #define DRIVER_AUTHOR \ 2284 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2285 "Dwaine Garden <DwaineGarden@rogers.com>" 2286 #define DRIVER_NAME "usbvision" 2287 #define DRIVER_ALIAS "USBVision" 2288 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2289 #define DRIVER_LICENSE "GPL" 2290 #define USBVISION_VERSION_STRING "0.9.11" 2291 #define ENABLE_HEXDUMP 0 2292 #ifdef USBVISION_DEBUG 2293 #define PDEBUG(level, fmt, args...) { \ 2294 if (video_debug & (level)) \ 2295 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2296 __func__, __LINE__ , ## args); \ 2297 } 2298 #else 2299 #define PDEBUG(level, fmt, args...) do {} while (0) 2300 #endif 2301 #define DBG_IO (1 << 1) 2302 #define DBG_PROBE (1 << 2) 2303 #define DBG_MMAP (1 << 3) 2304 #define rmspace(str) while (*str == ' ') str++; 2305 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2306 #define YES_NO(x) ((x) ? "Yes" : "No") 2307 #ifdef CONFIG_VIDEO_ADV_DEBUG 2308 #endif 2309 /* LDV_COMMENT_END_PREP */ 2310 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_std" */ 2311 void * var_vidioc_g_std_21_p1; 2312 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_std" */ 2313 v4l2_std_id * var_vidioc_g_std_21_p2; 2314 /* LDV_COMMENT_BEGIN_PREP */ 2315 #ifdef CONFIG_VIDEO_ADV_DEBUG 2316 #endif 2317 /* LDV_COMMENT_END_PREP */ 2318 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 2319 /* LDV_COMMENT_BEGIN_PREP */ 2320 #define DRIVER_AUTHOR \ 2321 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2322 "Dwaine Garden <DwaineGarden@rogers.com>" 2323 #define DRIVER_NAME "usbvision" 2324 #define DRIVER_ALIAS "USBVision" 2325 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2326 #define DRIVER_LICENSE "GPL" 2327 #define USBVISION_VERSION_STRING "0.9.11" 2328 #define ENABLE_HEXDUMP 0 2329 #ifdef USBVISION_DEBUG 2330 #define PDEBUG(level, fmt, args...) { \ 2331 if (video_debug & (level)) \ 2332 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2333 __func__, __LINE__ , ## args); \ 2334 } 2335 #else 2336 #define PDEBUG(level, fmt, args...) do {} while (0) 2337 #endif 2338 #define DBG_IO (1 << 1) 2339 #define DBG_PROBE (1 << 2) 2340 #define DBG_MMAP (1 << 3) 2341 #define rmspace(str) while (*str == ' ') str++; 2342 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2343 #define YES_NO(x) ((x) ? "Yes" : "No") 2344 #ifdef CONFIG_VIDEO_ADV_DEBUG 2345 #endif 2346 /* LDV_COMMENT_END_PREP */ 2347 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_input" */ 2348 void * var_vidioc_enum_input_17_p1; 2349 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_input" */ 2350 struct v4l2_input * var_vidioc_enum_input_17_p2; 2351 /* LDV_COMMENT_BEGIN_PREP */ 2352 #ifdef CONFIG_VIDEO_ADV_DEBUG 2353 #endif 2354 /* LDV_COMMENT_END_PREP */ 2355 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 2356 /* LDV_COMMENT_BEGIN_PREP */ 2357 #define DRIVER_AUTHOR \ 2358 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2359 "Dwaine Garden <DwaineGarden@rogers.com>" 2360 #define DRIVER_NAME "usbvision" 2361 #define DRIVER_ALIAS "USBVision" 2362 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2363 #define DRIVER_LICENSE "GPL" 2364 #define USBVISION_VERSION_STRING "0.9.11" 2365 #define ENABLE_HEXDUMP 0 2366 #ifdef USBVISION_DEBUG 2367 #define PDEBUG(level, fmt, args...) { \ 2368 if (video_debug & (level)) \ 2369 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2370 __func__, __LINE__ , ## args); \ 2371 } 2372 #else 2373 #define PDEBUG(level, fmt, args...) do {} while (0) 2374 #endif 2375 #define DBG_IO (1 << 1) 2376 #define DBG_PROBE (1 << 2) 2377 #define DBG_MMAP (1 << 3) 2378 #define rmspace(str) while (*str == ' ') str++; 2379 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2380 #define YES_NO(x) ((x) ? "Yes" : "No") 2381 #ifdef CONFIG_VIDEO_ADV_DEBUG 2382 #endif 2383 /* LDV_COMMENT_END_PREP */ 2384 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_input" */ 2385 void * var_vidioc_g_input_18_p1; 2386 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_input" */ 2387 unsigned int * var_vidioc_g_input_18_p2; 2388 /* LDV_COMMENT_BEGIN_PREP */ 2389 #ifdef CONFIG_VIDEO_ADV_DEBUG 2390 #endif 2391 /* LDV_COMMENT_END_PREP */ 2392 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 2393 /* LDV_COMMENT_BEGIN_PREP */ 2394 #define DRIVER_AUTHOR \ 2395 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2396 "Dwaine Garden <DwaineGarden@rogers.com>" 2397 #define DRIVER_NAME "usbvision" 2398 #define DRIVER_ALIAS "USBVision" 2399 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2400 #define DRIVER_LICENSE "GPL" 2401 #define USBVISION_VERSION_STRING "0.9.11" 2402 #define ENABLE_HEXDUMP 0 2403 #ifdef USBVISION_DEBUG 2404 #define PDEBUG(level, fmt, args...) { \ 2405 if (video_debug & (level)) \ 2406 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2407 __func__, __LINE__ , ## args); \ 2408 } 2409 #else 2410 #define PDEBUG(level, fmt, args...) do {} while (0) 2411 #endif 2412 #define DBG_IO (1 << 1) 2413 #define DBG_PROBE (1 << 2) 2414 #define DBG_MMAP (1 << 3) 2415 #define rmspace(str) while (*str == ' ') str++; 2416 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2417 #define YES_NO(x) ((x) ? "Yes" : "No") 2418 #ifdef CONFIG_VIDEO_ADV_DEBUG 2419 #endif 2420 /* LDV_COMMENT_END_PREP */ 2421 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_input" */ 2422 void * var_vidioc_s_input_19_p1; 2423 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_input" */ 2424 unsigned int var_vidioc_s_input_19_p2; 2425 /* LDV_COMMENT_BEGIN_PREP */ 2426 #ifdef CONFIG_VIDEO_ADV_DEBUG 2427 #endif 2428 /* LDV_COMMENT_END_PREP */ 2429 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 2430 /* LDV_COMMENT_BEGIN_PREP */ 2431 #define DRIVER_AUTHOR \ 2432 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2433 "Dwaine Garden <DwaineGarden@rogers.com>" 2434 #define DRIVER_NAME "usbvision" 2435 #define DRIVER_ALIAS "USBVision" 2436 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2437 #define DRIVER_LICENSE "GPL" 2438 #define USBVISION_VERSION_STRING "0.9.11" 2439 #define ENABLE_HEXDUMP 0 2440 #ifdef USBVISION_DEBUG 2441 #define PDEBUG(level, fmt, args...) { \ 2442 if (video_debug & (level)) \ 2443 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2444 __func__, __LINE__ , ## args); \ 2445 } 2446 #else 2447 #define PDEBUG(level, fmt, args...) do {} while (0) 2448 #endif 2449 #define DBG_IO (1 << 1) 2450 #define DBG_PROBE (1 << 2) 2451 #define DBG_MMAP (1 << 3) 2452 #define rmspace(str) while (*str == ' ') str++; 2453 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2454 #define YES_NO(x) ((x) ? "Yes" : "No") 2455 #ifdef CONFIG_VIDEO_ADV_DEBUG 2456 #endif 2457 /* LDV_COMMENT_END_PREP */ 2458 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_queryctrl" */ 2459 void * var_vidioc_queryctrl_28_p1; 2460 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_queryctrl" */ 2461 struct v4l2_queryctrl * var_vidioc_queryctrl_28_p2; 2462 /* LDV_COMMENT_BEGIN_PREP */ 2463 #ifdef CONFIG_VIDEO_ADV_DEBUG 2464 #endif 2465 /* LDV_COMMENT_END_PREP */ 2466 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 2467 /* LDV_COMMENT_BEGIN_PREP */ 2468 #define DRIVER_AUTHOR \ 2469 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2470 "Dwaine Garden <DwaineGarden@rogers.com>" 2471 #define DRIVER_NAME "usbvision" 2472 #define DRIVER_ALIAS "USBVision" 2473 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2474 #define DRIVER_LICENSE "GPL" 2475 #define USBVISION_VERSION_STRING "0.9.11" 2476 #define ENABLE_HEXDUMP 0 2477 #ifdef USBVISION_DEBUG 2478 #define PDEBUG(level, fmt, args...) { \ 2479 if (video_debug & (level)) \ 2480 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2481 __func__, __LINE__ , ## args); \ 2482 } 2483 #else 2484 #define PDEBUG(level, fmt, args...) do {} while (0) 2485 #endif 2486 #define DBG_IO (1 << 1) 2487 #define DBG_PROBE (1 << 2) 2488 #define DBG_MMAP (1 << 3) 2489 #define rmspace(str) while (*str == ' ') str++; 2490 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2491 #define YES_NO(x) ((x) ? "Yes" : "No") 2492 #ifdef CONFIG_VIDEO_ADV_DEBUG 2493 #endif 2494 /* LDV_COMMENT_END_PREP */ 2495 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_audio" */ 2496 void * var_vidioc_g_audio_26_p1; 2497 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_audio" */ 2498 struct v4l2_audio * var_vidioc_g_audio_26_p2; 2499 /* LDV_COMMENT_BEGIN_PREP */ 2500 #ifdef CONFIG_VIDEO_ADV_DEBUG 2501 #endif 2502 /* LDV_COMMENT_END_PREP */ 2503 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 2504 /* LDV_COMMENT_BEGIN_PREP */ 2505 #define DRIVER_AUTHOR \ 2506 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2507 "Dwaine Garden <DwaineGarden@rogers.com>" 2508 #define DRIVER_NAME "usbvision" 2509 #define DRIVER_ALIAS "USBVision" 2510 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2511 #define DRIVER_LICENSE "GPL" 2512 #define USBVISION_VERSION_STRING "0.9.11" 2513 #define ENABLE_HEXDUMP 0 2514 #ifdef USBVISION_DEBUG 2515 #define PDEBUG(level, fmt, args...) { \ 2516 if (video_debug & (level)) \ 2517 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2518 __func__, __LINE__ , ## args); \ 2519 } 2520 #else 2521 #define PDEBUG(level, fmt, args...) do {} while (0) 2522 #endif 2523 #define DBG_IO (1 << 1) 2524 #define DBG_PROBE (1 << 2) 2525 #define DBG_MMAP (1 << 3) 2526 #define rmspace(str) while (*str == ' ') str++; 2527 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2528 #define YES_NO(x) ((x) ? "Yes" : "No") 2529 #ifdef CONFIG_VIDEO_ADV_DEBUG 2530 #endif 2531 /* LDV_COMMENT_END_PREP */ 2532 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_audio" */ 2533 void * var_vidioc_s_audio_27_p1; 2534 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_audio" */ 2535 const struct v4l2_audio * var_vidioc_s_audio_27_p2; 2536 /* LDV_COMMENT_BEGIN_PREP */ 2537 #ifdef CONFIG_VIDEO_ADV_DEBUG 2538 #endif 2539 /* LDV_COMMENT_END_PREP */ 2540 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 2541 /* LDV_COMMENT_BEGIN_PREP */ 2542 #define DRIVER_AUTHOR \ 2543 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2544 "Dwaine Garden <DwaineGarden@rogers.com>" 2545 #define DRIVER_NAME "usbvision" 2546 #define DRIVER_ALIAS "USBVision" 2547 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2548 #define DRIVER_LICENSE "GPL" 2549 #define USBVISION_VERSION_STRING "0.9.11" 2550 #define ENABLE_HEXDUMP 0 2551 #ifdef USBVISION_DEBUG 2552 #define PDEBUG(level, fmt, args...) { \ 2553 if (video_debug & (level)) \ 2554 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2555 __func__, __LINE__ , ## args); \ 2556 } 2557 #else 2558 #define PDEBUG(level, fmt, args...) do {} while (0) 2559 #endif 2560 #define DBG_IO (1 << 1) 2561 #define DBG_PROBE (1 << 2) 2562 #define DBG_MMAP (1 << 3) 2563 #define rmspace(str) while (*str == ' ') str++; 2564 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2565 #define YES_NO(x) ((x) ? "Yes" : "No") 2566 #ifdef CONFIG_VIDEO_ADV_DEBUG 2567 #endif 2568 /* LDV_COMMENT_END_PREP */ 2569 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_ctrl" */ 2570 void * var_vidioc_g_ctrl_29_p1; 2571 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_ctrl" */ 2572 struct v4l2_control * var_vidioc_g_ctrl_29_p2; 2573 /* LDV_COMMENT_BEGIN_PREP */ 2574 #ifdef CONFIG_VIDEO_ADV_DEBUG 2575 #endif 2576 /* LDV_COMMENT_END_PREP */ 2577 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 2578 /* LDV_COMMENT_BEGIN_PREP */ 2579 #define DRIVER_AUTHOR \ 2580 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2581 "Dwaine Garden <DwaineGarden@rogers.com>" 2582 #define DRIVER_NAME "usbvision" 2583 #define DRIVER_ALIAS "USBVision" 2584 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2585 #define DRIVER_LICENSE "GPL" 2586 #define USBVISION_VERSION_STRING "0.9.11" 2587 #define ENABLE_HEXDUMP 0 2588 #ifdef USBVISION_DEBUG 2589 #define PDEBUG(level, fmt, args...) { \ 2590 if (video_debug & (level)) \ 2591 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2592 __func__, __LINE__ , ## args); \ 2593 } 2594 #else 2595 #define PDEBUG(level, fmt, args...) do {} while (0) 2596 #endif 2597 #define DBG_IO (1 << 1) 2598 #define DBG_PROBE (1 << 2) 2599 #define DBG_MMAP (1 << 3) 2600 #define rmspace(str) while (*str == ' ') str++; 2601 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2602 #define YES_NO(x) ((x) ? "Yes" : "No") 2603 #ifdef CONFIG_VIDEO_ADV_DEBUG 2604 #endif 2605 /* LDV_COMMENT_END_PREP */ 2606 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_ctrl" */ 2607 void * var_vidioc_s_ctrl_30_p1; 2608 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_ctrl" */ 2609 struct v4l2_control * var_vidioc_s_ctrl_30_p2; 2610 /* LDV_COMMENT_BEGIN_PREP */ 2611 #ifdef CONFIG_VIDEO_ADV_DEBUG 2612 #endif 2613 /* LDV_COMMENT_END_PREP */ 2614 /* content: static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)*/ 2615 /* LDV_COMMENT_BEGIN_PREP */ 2616 #define DRIVER_AUTHOR \ 2617 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2618 "Dwaine Garden <DwaineGarden@rogers.com>" 2619 #define DRIVER_NAME "usbvision" 2620 #define DRIVER_ALIAS "USBVision" 2621 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2622 #define DRIVER_LICENSE "GPL" 2623 #define USBVISION_VERSION_STRING "0.9.11" 2624 #define ENABLE_HEXDUMP 0 2625 #ifdef USBVISION_DEBUG 2626 #define PDEBUG(level, fmt, args...) { \ 2627 if (video_debug & (level)) \ 2628 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2629 __func__, __LINE__ , ## args); \ 2630 } 2631 #else 2632 #define PDEBUG(level, fmt, args...) do {} while (0) 2633 #endif 2634 #define DBG_IO (1 << 1) 2635 #define DBG_PROBE (1 << 2) 2636 #define DBG_MMAP (1 << 3) 2637 #define rmspace(str) while (*str == ' ') str++; 2638 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2639 #define YES_NO(x) ((x) ? "Yes" : "No") 2640 #ifdef CONFIG_VIDEO_ADV_DEBUG 2641 #endif 2642 /* LDV_COMMENT_END_PREP */ 2643 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamon" */ 2644 void * var_vidioc_streamon_35_p1; 2645 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamon" */ 2646 enum v4l2_buf_type var_vidioc_streamon_35_p2; 2647 /* LDV_COMMENT_BEGIN_PREP */ 2648 #ifdef CONFIG_VIDEO_ADV_DEBUG 2649 #endif 2650 /* LDV_COMMENT_END_PREP */ 2651 /* content: static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type type)*/ 2652 /* LDV_COMMENT_BEGIN_PREP */ 2653 #define DRIVER_AUTHOR \ 2654 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2655 "Dwaine Garden <DwaineGarden@rogers.com>" 2656 #define DRIVER_NAME "usbvision" 2657 #define DRIVER_ALIAS "USBVision" 2658 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2659 #define DRIVER_LICENSE "GPL" 2660 #define USBVISION_VERSION_STRING "0.9.11" 2661 #define ENABLE_HEXDUMP 0 2662 #ifdef USBVISION_DEBUG 2663 #define PDEBUG(level, fmt, args...) { \ 2664 if (video_debug & (level)) \ 2665 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2666 __func__, __LINE__ , ## args); \ 2667 } 2668 #else 2669 #define PDEBUG(level, fmt, args...) do {} while (0) 2670 #endif 2671 #define DBG_IO (1 << 1) 2672 #define DBG_PROBE (1 << 2) 2673 #define DBG_MMAP (1 << 3) 2674 #define rmspace(str) while (*str == ' ') str++; 2675 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2676 #define YES_NO(x) ((x) ? "Yes" : "No") 2677 #ifdef CONFIG_VIDEO_ADV_DEBUG 2678 #endif 2679 /* LDV_COMMENT_END_PREP */ 2680 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamoff" */ 2681 void * var_vidioc_streamoff_36_p1; 2682 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamoff" */ 2683 enum v4l2_buf_type var_vidioc_streamoff_36_p2; 2684 /* LDV_COMMENT_BEGIN_PREP */ 2685 #ifdef CONFIG_VIDEO_ADV_DEBUG 2686 #endif 2687 /* LDV_COMMENT_END_PREP */ 2688 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 2689 /* LDV_COMMENT_BEGIN_PREP */ 2690 #define DRIVER_AUTHOR \ 2691 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2692 "Dwaine Garden <DwaineGarden@rogers.com>" 2693 #define DRIVER_NAME "usbvision" 2694 #define DRIVER_ALIAS "USBVision" 2695 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2696 #define DRIVER_LICENSE "GPL" 2697 #define USBVISION_VERSION_STRING "0.9.11" 2698 #define ENABLE_HEXDUMP 0 2699 #ifdef USBVISION_DEBUG 2700 #define PDEBUG(level, fmt, args...) { \ 2701 if (video_debug & (level)) \ 2702 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2703 __func__, __LINE__ , ## args); \ 2704 } 2705 #else 2706 #define PDEBUG(level, fmt, args...) do {} while (0) 2707 #endif 2708 #define DBG_IO (1 << 1) 2709 #define DBG_PROBE (1 << 2) 2710 #define DBG_MMAP (1 << 3) 2711 #define rmspace(str) while (*str == ' ') str++; 2712 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2713 #define YES_NO(x) ((x) ? "Yes" : "No") 2714 #ifdef CONFIG_VIDEO_ADV_DEBUG 2715 #endif 2716 /* LDV_COMMENT_END_PREP */ 2717 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_tuner" */ 2718 void * var_vidioc_g_tuner_22_p1; 2719 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_tuner" */ 2720 struct v4l2_tuner * var_vidioc_g_tuner_22_p2; 2721 /* LDV_COMMENT_BEGIN_PREP */ 2722 #ifdef CONFIG_VIDEO_ADV_DEBUG 2723 #endif 2724 /* LDV_COMMENT_END_PREP */ 2725 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 2726 /* LDV_COMMENT_BEGIN_PREP */ 2727 #define DRIVER_AUTHOR \ 2728 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2729 "Dwaine Garden <DwaineGarden@rogers.com>" 2730 #define DRIVER_NAME "usbvision" 2731 #define DRIVER_ALIAS "USBVision" 2732 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2733 #define DRIVER_LICENSE "GPL" 2734 #define USBVISION_VERSION_STRING "0.9.11" 2735 #define ENABLE_HEXDUMP 0 2736 #ifdef USBVISION_DEBUG 2737 #define PDEBUG(level, fmt, args...) { \ 2738 if (video_debug & (level)) \ 2739 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2740 __func__, __LINE__ , ## args); \ 2741 } 2742 #else 2743 #define PDEBUG(level, fmt, args...) do {} while (0) 2744 #endif 2745 #define DBG_IO (1 << 1) 2746 #define DBG_PROBE (1 << 2) 2747 #define DBG_MMAP (1 << 3) 2748 #define rmspace(str) while (*str == ' ') str++; 2749 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2750 #define YES_NO(x) ((x) ? "Yes" : "No") 2751 #ifdef CONFIG_VIDEO_ADV_DEBUG 2752 #endif 2753 /* LDV_COMMENT_END_PREP */ 2754 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_tuner" */ 2755 void * var_vidioc_s_tuner_23_p1; 2756 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_tuner" */ 2757 const struct v4l2_tuner * var_vidioc_s_tuner_23_p2; 2758 /* LDV_COMMENT_BEGIN_PREP */ 2759 #ifdef CONFIG_VIDEO_ADV_DEBUG 2760 #endif 2761 /* LDV_COMMENT_END_PREP */ 2762 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 2763 /* LDV_COMMENT_BEGIN_PREP */ 2764 #define DRIVER_AUTHOR \ 2765 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2766 "Dwaine Garden <DwaineGarden@rogers.com>" 2767 #define DRIVER_NAME "usbvision" 2768 #define DRIVER_ALIAS "USBVision" 2769 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2770 #define DRIVER_LICENSE "GPL" 2771 #define USBVISION_VERSION_STRING "0.9.11" 2772 #define ENABLE_HEXDUMP 0 2773 #ifdef USBVISION_DEBUG 2774 #define PDEBUG(level, fmt, args...) { \ 2775 if (video_debug & (level)) \ 2776 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2777 __func__, __LINE__ , ## args); \ 2778 } 2779 #else 2780 #define PDEBUG(level, fmt, args...) do {} while (0) 2781 #endif 2782 #define DBG_IO (1 << 1) 2783 #define DBG_PROBE (1 << 2) 2784 #define DBG_MMAP (1 << 3) 2785 #define rmspace(str) while (*str == ' ') str++; 2786 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2787 #define YES_NO(x) ((x) ? "Yes" : "No") 2788 #ifdef CONFIG_VIDEO_ADV_DEBUG 2789 #endif 2790 /* LDV_COMMENT_END_PREP */ 2791 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_frequency" */ 2792 void * var_vidioc_g_frequency_24_p1; 2793 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_frequency" */ 2794 struct v4l2_frequency * var_vidioc_g_frequency_24_p2; 2795 /* LDV_COMMENT_BEGIN_PREP */ 2796 #ifdef CONFIG_VIDEO_ADV_DEBUG 2797 #endif 2798 /* LDV_COMMENT_END_PREP */ 2799 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 2800 /* LDV_COMMENT_BEGIN_PREP */ 2801 #define DRIVER_AUTHOR \ 2802 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2803 "Dwaine Garden <DwaineGarden@rogers.com>" 2804 #define DRIVER_NAME "usbvision" 2805 #define DRIVER_ALIAS "USBVision" 2806 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2807 #define DRIVER_LICENSE "GPL" 2808 #define USBVISION_VERSION_STRING "0.9.11" 2809 #define ENABLE_HEXDUMP 0 2810 #ifdef USBVISION_DEBUG 2811 #define PDEBUG(level, fmt, args...) { \ 2812 if (video_debug & (level)) \ 2813 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2814 __func__, __LINE__ , ## args); \ 2815 } 2816 #else 2817 #define PDEBUG(level, fmt, args...) do {} while (0) 2818 #endif 2819 #define DBG_IO (1 << 1) 2820 #define DBG_PROBE (1 << 2) 2821 #define DBG_MMAP (1 << 3) 2822 #define rmspace(str) while (*str == ' ') str++; 2823 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2824 #define YES_NO(x) ((x) ? "Yes" : "No") 2825 #ifdef CONFIG_VIDEO_ADV_DEBUG 2826 #endif 2827 /* LDV_COMMENT_END_PREP */ 2828 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_frequency" */ 2829 void * var_vidioc_s_frequency_25_p1; 2830 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_frequency" */ 2831 const struct v4l2_frequency * var_vidioc_s_frequency_25_p2; 2832 /* LDV_COMMENT_BEGIN_PREP */ 2833 #ifdef CONFIG_VIDEO_ADV_DEBUG 2834 #endif 2835 /* LDV_COMMENT_END_PREP */ 2836 /* content: static int vidioc_g_register(struct file *file, void *priv, struct v4l2_dbg_register *reg)*/ 2837 /* LDV_COMMENT_BEGIN_PREP */ 2838 #define DRIVER_AUTHOR \ 2839 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2840 "Dwaine Garden <DwaineGarden@rogers.com>" 2841 #define DRIVER_NAME "usbvision" 2842 #define DRIVER_ALIAS "USBVision" 2843 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2844 #define DRIVER_LICENSE "GPL" 2845 #define USBVISION_VERSION_STRING "0.9.11" 2846 #define ENABLE_HEXDUMP 0 2847 #ifdef USBVISION_DEBUG 2848 #define PDEBUG(level, fmt, args...) { \ 2849 if (video_debug & (level)) \ 2850 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2851 __func__, __LINE__ , ## args); \ 2852 } 2853 #else 2854 #define PDEBUG(level, fmt, args...) do {} while (0) 2855 #endif 2856 #define DBG_IO (1 << 1) 2857 #define DBG_PROBE (1 << 2) 2858 #define DBG_MMAP (1 << 3) 2859 #define rmspace(str) while (*str == ' ') str++; 2860 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2861 #define YES_NO(x) ((x) ? "Yes" : "No") 2862 #ifdef CONFIG_VIDEO_ADV_DEBUG 2863 /* LDV_COMMENT_END_PREP */ 2864 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_register" */ 2865 void * var_vidioc_g_register_14_p1; 2866 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_register" */ 2867 struct v4l2_dbg_register * var_vidioc_g_register_14_p2; 2868 /* LDV_COMMENT_BEGIN_PREP */ 2869 #endif 2870 #ifdef CONFIG_VIDEO_ADV_DEBUG 2871 #endif 2872 /* LDV_COMMENT_END_PREP */ 2873 /* content: static int vidioc_s_register(struct file *file, void *priv, const struct v4l2_dbg_register *reg)*/ 2874 /* LDV_COMMENT_BEGIN_PREP */ 2875 #define DRIVER_AUTHOR \ 2876 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2877 "Dwaine Garden <DwaineGarden@rogers.com>" 2878 #define DRIVER_NAME "usbvision" 2879 #define DRIVER_ALIAS "USBVision" 2880 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2881 #define DRIVER_LICENSE "GPL" 2882 #define USBVISION_VERSION_STRING "0.9.11" 2883 #define ENABLE_HEXDUMP 0 2884 #ifdef USBVISION_DEBUG 2885 #define PDEBUG(level, fmt, args...) { \ 2886 if (video_debug & (level)) \ 2887 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2888 __func__, __LINE__ , ## args); \ 2889 } 2890 #else 2891 #define PDEBUG(level, fmt, args...) do {} while (0) 2892 #endif 2893 #define DBG_IO (1 << 1) 2894 #define DBG_PROBE (1 << 2) 2895 #define DBG_MMAP (1 << 3) 2896 #define rmspace(str) while (*str == ' ') str++; 2897 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2898 #define YES_NO(x) ((x) ? "Yes" : "No") 2899 #ifdef CONFIG_VIDEO_ADV_DEBUG 2900 /* LDV_COMMENT_END_PREP */ 2901 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_register" */ 2902 void * var_vidioc_s_register_15_p1; 2903 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_register" */ 2904 const struct v4l2_dbg_register * var_vidioc_s_register_15_p2; 2905 /* LDV_COMMENT_BEGIN_PREP */ 2906 #endif 2907 #ifdef CONFIG_VIDEO_ADV_DEBUG 2908 #endif 2909 /* LDV_COMMENT_END_PREP */ 2910 2911 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 2912 /* content: static int usbvision_radio_open(struct file *file)*/ 2913 /* LDV_COMMENT_BEGIN_PREP */ 2914 #define DRIVER_AUTHOR \ 2915 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2916 "Dwaine Garden <DwaineGarden@rogers.com>" 2917 #define DRIVER_NAME "usbvision" 2918 #define DRIVER_ALIAS "USBVision" 2919 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2920 #define DRIVER_LICENSE "GPL" 2921 #define USBVISION_VERSION_STRING "0.9.11" 2922 #define ENABLE_HEXDUMP 0 2923 #ifdef USBVISION_DEBUG 2924 #define PDEBUG(level, fmt, args...) { \ 2925 if (video_debug & (level)) \ 2926 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2927 __func__, __LINE__ , ## args); \ 2928 } 2929 #else 2930 #define PDEBUG(level, fmt, args...) do {} while (0) 2931 #endif 2932 #define DBG_IO (1 << 1) 2933 #define DBG_PROBE (1 << 2) 2934 #define DBG_MMAP (1 << 3) 2935 #define rmspace(str) while (*str == ' ') str++; 2936 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2937 #define YES_NO(x) ((x) ? "Yes" : "No") 2938 #ifdef CONFIG_VIDEO_ADV_DEBUG 2939 #endif 2940 /* LDV_COMMENT_END_PREP */ 2941 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_radio_open" */ 2942 static int res_usbvision_radio_open_45; 2943 /* LDV_COMMENT_BEGIN_PREP */ 2944 #ifdef CONFIG_VIDEO_ADV_DEBUG 2945 #endif 2946 /* LDV_COMMENT_END_PREP */ 2947 /* content: static int usbvision_radio_close(struct file *file)*/ 2948 /* LDV_COMMENT_BEGIN_PREP */ 2949 #define DRIVER_AUTHOR \ 2950 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2951 "Dwaine Garden <DwaineGarden@rogers.com>" 2952 #define DRIVER_NAME "usbvision" 2953 #define DRIVER_ALIAS "USBVision" 2954 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2955 #define DRIVER_LICENSE "GPL" 2956 #define USBVISION_VERSION_STRING "0.9.11" 2957 #define ENABLE_HEXDUMP 0 2958 #ifdef USBVISION_DEBUG 2959 #define PDEBUG(level, fmt, args...) { \ 2960 if (video_debug & (level)) \ 2961 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2962 __func__, __LINE__ , ## args); \ 2963 } 2964 #else 2965 #define PDEBUG(level, fmt, args...) do {} while (0) 2966 #endif 2967 #define DBG_IO (1 << 1) 2968 #define DBG_PROBE (1 << 2) 2969 #define DBG_MMAP (1 << 3) 2970 #define rmspace(str) while (*str == ' ') str++; 2971 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2972 #define YES_NO(x) ((x) ? "Yes" : "No") 2973 #ifdef CONFIG_VIDEO_ADV_DEBUG 2974 #endif 2975 /* LDV_COMMENT_END_PREP */ 2976 /* LDV_COMMENT_BEGIN_PREP */ 2977 #ifdef CONFIG_VIDEO_ADV_DEBUG 2978 #endif 2979 /* LDV_COMMENT_END_PREP */ 2980 2981 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 2982 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 2983 /* LDV_COMMENT_BEGIN_PREP */ 2984 #define DRIVER_AUTHOR \ 2985 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2986 "Dwaine Garden <DwaineGarden@rogers.com>" 2987 #define DRIVER_NAME "usbvision" 2988 #define DRIVER_ALIAS "USBVision" 2989 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2990 #define DRIVER_LICENSE "GPL" 2991 #define USBVISION_VERSION_STRING "0.9.11" 2992 #define ENABLE_HEXDUMP 0 2993 #ifdef USBVISION_DEBUG 2994 #define PDEBUG(level, fmt, args...) { \ 2995 if (video_debug & (level)) \ 2996 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2997 __func__, __LINE__ , ## args); \ 2998 } 2999 #else 3000 #define PDEBUG(level, fmt, args...) do {} while (0) 3001 #endif 3002 #define DBG_IO (1 << 1) 3003 #define DBG_PROBE (1 << 2) 3004 #define DBG_MMAP (1 << 3) 3005 #define rmspace(str) while (*str == ' ') str++; 3006 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3007 #define YES_NO(x) ((x) ? "Yes" : "No") 3008 #ifdef CONFIG_VIDEO_ADV_DEBUG 3009 #endif 3010 /* LDV_COMMENT_END_PREP */ 3011 /* LDV_COMMENT_BEGIN_PREP */ 3012 #ifdef CONFIG_VIDEO_ADV_DEBUG 3013 #endif 3014 /* LDV_COMMENT_END_PREP */ 3015 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 3016 /* LDV_COMMENT_BEGIN_PREP */ 3017 #define DRIVER_AUTHOR \ 3018 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3019 "Dwaine Garden <DwaineGarden@rogers.com>" 3020 #define DRIVER_NAME "usbvision" 3021 #define DRIVER_ALIAS "USBVision" 3022 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3023 #define DRIVER_LICENSE "GPL" 3024 #define USBVISION_VERSION_STRING "0.9.11" 3025 #define ENABLE_HEXDUMP 0 3026 #ifdef USBVISION_DEBUG 3027 #define PDEBUG(level, fmt, args...) { \ 3028 if (video_debug & (level)) \ 3029 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3030 __func__, __LINE__ , ## args); \ 3031 } 3032 #else 3033 #define PDEBUG(level, fmt, args...) do {} while (0) 3034 #endif 3035 #define DBG_IO (1 << 1) 3036 #define DBG_PROBE (1 << 2) 3037 #define DBG_MMAP (1 << 3) 3038 #define rmspace(str) while (*str == ' ') str++; 3039 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3040 #define YES_NO(x) ((x) ? "Yes" : "No") 3041 #ifdef CONFIG_VIDEO_ADV_DEBUG 3042 #endif 3043 /* LDV_COMMENT_END_PREP */ 3044 /* LDV_COMMENT_BEGIN_PREP */ 3045 #ifdef CONFIG_VIDEO_ADV_DEBUG 3046 #endif 3047 /* LDV_COMMENT_END_PREP */ 3048 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 3049 /* LDV_COMMENT_BEGIN_PREP */ 3050 #define DRIVER_AUTHOR \ 3051 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3052 "Dwaine Garden <DwaineGarden@rogers.com>" 3053 #define DRIVER_NAME "usbvision" 3054 #define DRIVER_ALIAS "USBVision" 3055 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3056 #define DRIVER_LICENSE "GPL" 3057 #define USBVISION_VERSION_STRING "0.9.11" 3058 #define ENABLE_HEXDUMP 0 3059 #ifdef USBVISION_DEBUG 3060 #define PDEBUG(level, fmt, args...) { \ 3061 if (video_debug & (level)) \ 3062 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3063 __func__, __LINE__ , ## args); \ 3064 } 3065 #else 3066 #define PDEBUG(level, fmt, args...) do {} while (0) 3067 #endif 3068 #define DBG_IO (1 << 1) 3069 #define DBG_PROBE (1 << 2) 3070 #define DBG_MMAP (1 << 3) 3071 #define rmspace(str) while (*str == ' ') str++; 3072 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3073 #define YES_NO(x) ((x) ? "Yes" : "No") 3074 #ifdef CONFIG_VIDEO_ADV_DEBUG 3075 #endif 3076 /* LDV_COMMENT_END_PREP */ 3077 /* LDV_COMMENT_BEGIN_PREP */ 3078 #ifdef CONFIG_VIDEO_ADV_DEBUG 3079 #endif 3080 /* LDV_COMMENT_END_PREP */ 3081 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 3082 /* LDV_COMMENT_BEGIN_PREP */ 3083 #define DRIVER_AUTHOR \ 3084 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3085 "Dwaine Garden <DwaineGarden@rogers.com>" 3086 #define DRIVER_NAME "usbvision" 3087 #define DRIVER_ALIAS "USBVision" 3088 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3089 #define DRIVER_LICENSE "GPL" 3090 #define USBVISION_VERSION_STRING "0.9.11" 3091 #define ENABLE_HEXDUMP 0 3092 #ifdef USBVISION_DEBUG 3093 #define PDEBUG(level, fmt, args...) { \ 3094 if (video_debug & (level)) \ 3095 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3096 __func__, __LINE__ , ## args); \ 3097 } 3098 #else 3099 #define PDEBUG(level, fmt, args...) do {} while (0) 3100 #endif 3101 #define DBG_IO (1 << 1) 3102 #define DBG_PROBE (1 << 2) 3103 #define DBG_MMAP (1 << 3) 3104 #define rmspace(str) while (*str == ' ') str++; 3105 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3106 #define YES_NO(x) ((x) ? "Yes" : "No") 3107 #ifdef CONFIG_VIDEO_ADV_DEBUG 3108 #endif 3109 /* LDV_COMMENT_END_PREP */ 3110 /* LDV_COMMENT_BEGIN_PREP */ 3111 #ifdef CONFIG_VIDEO_ADV_DEBUG 3112 #endif 3113 /* LDV_COMMENT_END_PREP */ 3114 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 3115 /* LDV_COMMENT_BEGIN_PREP */ 3116 #define DRIVER_AUTHOR \ 3117 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3118 "Dwaine Garden <DwaineGarden@rogers.com>" 3119 #define DRIVER_NAME "usbvision" 3120 #define DRIVER_ALIAS "USBVision" 3121 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3122 #define DRIVER_LICENSE "GPL" 3123 #define USBVISION_VERSION_STRING "0.9.11" 3124 #define ENABLE_HEXDUMP 0 3125 #ifdef USBVISION_DEBUG 3126 #define PDEBUG(level, fmt, args...) { \ 3127 if (video_debug & (level)) \ 3128 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3129 __func__, __LINE__ , ## args); \ 3130 } 3131 #else 3132 #define PDEBUG(level, fmt, args...) do {} while (0) 3133 #endif 3134 #define DBG_IO (1 << 1) 3135 #define DBG_PROBE (1 << 2) 3136 #define DBG_MMAP (1 << 3) 3137 #define rmspace(str) while (*str == ' ') str++; 3138 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3139 #define YES_NO(x) ((x) ? "Yes" : "No") 3140 #ifdef CONFIG_VIDEO_ADV_DEBUG 3141 #endif 3142 /* LDV_COMMENT_END_PREP */ 3143 /* LDV_COMMENT_BEGIN_PREP */ 3144 #ifdef CONFIG_VIDEO_ADV_DEBUG 3145 #endif 3146 /* LDV_COMMENT_END_PREP */ 3147 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 3148 /* LDV_COMMENT_BEGIN_PREP */ 3149 #define DRIVER_AUTHOR \ 3150 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3151 "Dwaine Garden <DwaineGarden@rogers.com>" 3152 #define DRIVER_NAME "usbvision" 3153 #define DRIVER_ALIAS "USBVision" 3154 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3155 #define DRIVER_LICENSE "GPL" 3156 #define USBVISION_VERSION_STRING "0.9.11" 3157 #define ENABLE_HEXDUMP 0 3158 #ifdef USBVISION_DEBUG 3159 #define PDEBUG(level, fmt, args...) { \ 3160 if (video_debug & (level)) \ 3161 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3162 __func__, __LINE__ , ## args); \ 3163 } 3164 #else 3165 #define PDEBUG(level, fmt, args...) do {} while (0) 3166 #endif 3167 #define DBG_IO (1 << 1) 3168 #define DBG_PROBE (1 << 2) 3169 #define DBG_MMAP (1 << 3) 3170 #define rmspace(str) while (*str == ' ') str++; 3171 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3172 #define YES_NO(x) ((x) ? "Yes" : "No") 3173 #ifdef CONFIG_VIDEO_ADV_DEBUG 3174 #endif 3175 /* LDV_COMMENT_END_PREP */ 3176 /* LDV_COMMENT_BEGIN_PREP */ 3177 #ifdef CONFIG_VIDEO_ADV_DEBUG 3178 #endif 3179 /* LDV_COMMENT_END_PREP */ 3180 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 3181 /* LDV_COMMENT_BEGIN_PREP */ 3182 #define DRIVER_AUTHOR \ 3183 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3184 "Dwaine Garden <DwaineGarden@rogers.com>" 3185 #define DRIVER_NAME "usbvision" 3186 #define DRIVER_ALIAS "USBVision" 3187 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3188 #define DRIVER_LICENSE "GPL" 3189 #define USBVISION_VERSION_STRING "0.9.11" 3190 #define ENABLE_HEXDUMP 0 3191 #ifdef USBVISION_DEBUG 3192 #define PDEBUG(level, fmt, args...) { \ 3193 if (video_debug & (level)) \ 3194 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3195 __func__, __LINE__ , ## args); \ 3196 } 3197 #else 3198 #define PDEBUG(level, fmt, args...) do {} while (0) 3199 #endif 3200 #define DBG_IO (1 << 1) 3201 #define DBG_PROBE (1 << 2) 3202 #define DBG_MMAP (1 << 3) 3203 #define rmspace(str) while (*str == ' ') str++; 3204 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3205 #define YES_NO(x) ((x) ? "Yes" : "No") 3206 #ifdef CONFIG_VIDEO_ADV_DEBUG 3207 #endif 3208 /* LDV_COMMENT_END_PREP */ 3209 /* LDV_COMMENT_BEGIN_PREP */ 3210 #ifdef CONFIG_VIDEO_ADV_DEBUG 3211 #endif 3212 /* LDV_COMMENT_END_PREP */ 3213 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 3214 /* LDV_COMMENT_BEGIN_PREP */ 3215 #define DRIVER_AUTHOR \ 3216 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3217 "Dwaine Garden <DwaineGarden@rogers.com>" 3218 #define DRIVER_NAME "usbvision" 3219 #define DRIVER_ALIAS "USBVision" 3220 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3221 #define DRIVER_LICENSE "GPL" 3222 #define USBVISION_VERSION_STRING "0.9.11" 3223 #define ENABLE_HEXDUMP 0 3224 #ifdef USBVISION_DEBUG 3225 #define PDEBUG(level, fmt, args...) { \ 3226 if (video_debug & (level)) \ 3227 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3228 __func__, __LINE__ , ## args); \ 3229 } 3230 #else 3231 #define PDEBUG(level, fmt, args...) do {} while (0) 3232 #endif 3233 #define DBG_IO (1 << 1) 3234 #define DBG_PROBE (1 << 2) 3235 #define DBG_MMAP (1 << 3) 3236 #define rmspace(str) while (*str == ' ') str++; 3237 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3238 #define YES_NO(x) ((x) ? "Yes" : "No") 3239 #ifdef CONFIG_VIDEO_ADV_DEBUG 3240 #endif 3241 /* LDV_COMMENT_END_PREP */ 3242 /* LDV_COMMENT_BEGIN_PREP */ 3243 #ifdef CONFIG_VIDEO_ADV_DEBUG 3244 #endif 3245 /* LDV_COMMENT_END_PREP */ 3246 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 3247 /* LDV_COMMENT_BEGIN_PREP */ 3248 #define DRIVER_AUTHOR \ 3249 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3250 "Dwaine Garden <DwaineGarden@rogers.com>" 3251 #define DRIVER_NAME "usbvision" 3252 #define DRIVER_ALIAS "USBVision" 3253 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3254 #define DRIVER_LICENSE "GPL" 3255 #define USBVISION_VERSION_STRING "0.9.11" 3256 #define ENABLE_HEXDUMP 0 3257 #ifdef USBVISION_DEBUG 3258 #define PDEBUG(level, fmt, args...) { \ 3259 if (video_debug & (level)) \ 3260 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3261 __func__, __LINE__ , ## args); \ 3262 } 3263 #else 3264 #define PDEBUG(level, fmt, args...) do {} while (0) 3265 #endif 3266 #define DBG_IO (1 << 1) 3267 #define DBG_PROBE (1 << 2) 3268 #define DBG_MMAP (1 << 3) 3269 #define rmspace(str) while (*str == ' ') str++; 3270 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3271 #define YES_NO(x) ((x) ? "Yes" : "No") 3272 #ifdef CONFIG_VIDEO_ADV_DEBUG 3273 #endif 3274 /* LDV_COMMENT_END_PREP */ 3275 /* LDV_COMMENT_BEGIN_PREP */ 3276 #ifdef CONFIG_VIDEO_ADV_DEBUG 3277 #endif 3278 /* LDV_COMMENT_END_PREP */ 3279 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 3280 /* LDV_COMMENT_BEGIN_PREP */ 3281 #define DRIVER_AUTHOR \ 3282 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3283 "Dwaine Garden <DwaineGarden@rogers.com>" 3284 #define DRIVER_NAME "usbvision" 3285 #define DRIVER_ALIAS "USBVision" 3286 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3287 #define DRIVER_LICENSE "GPL" 3288 #define USBVISION_VERSION_STRING "0.9.11" 3289 #define ENABLE_HEXDUMP 0 3290 #ifdef USBVISION_DEBUG 3291 #define PDEBUG(level, fmt, args...) { \ 3292 if (video_debug & (level)) \ 3293 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3294 __func__, __LINE__ , ## args); \ 3295 } 3296 #else 3297 #define PDEBUG(level, fmt, args...) do {} while (0) 3298 #endif 3299 #define DBG_IO (1 << 1) 3300 #define DBG_PROBE (1 << 2) 3301 #define DBG_MMAP (1 << 3) 3302 #define rmspace(str) while (*str == ' ') str++; 3303 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3304 #define YES_NO(x) ((x) ? "Yes" : "No") 3305 #ifdef CONFIG_VIDEO_ADV_DEBUG 3306 #endif 3307 /* LDV_COMMENT_END_PREP */ 3308 /* LDV_COMMENT_BEGIN_PREP */ 3309 #ifdef CONFIG_VIDEO_ADV_DEBUG 3310 #endif 3311 /* LDV_COMMENT_END_PREP */ 3312 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 3313 /* LDV_COMMENT_BEGIN_PREP */ 3314 #define DRIVER_AUTHOR \ 3315 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3316 "Dwaine Garden <DwaineGarden@rogers.com>" 3317 #define DRIVER_NAME "usbvision" 3318 #define DRIVER_ALIAS "USBVision" 3319 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3320 #define DRIVER_LICENSE "GPL" 3321 #define USBVISION_VERSION_STRING "0.9.11" 3322 #define ENABLE_HEXDUMP 0 3323 #ifdef USBVISION_DEBUG 3324 #define PDEBUG(level, fmt, args...) { \ 3325 if (video_debug & (level)) \ 3326 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3327 __func__, __LINE__ , ## args); \ 3328 } 3329 #else 3330 #define PDEBUG(level, fmt, args...) do {} while (0) 3331 #endif 3332 #define DBG_IO (1 << 1) 3333 #define DBG_PROBE (1 << 2) 3334 #define DBG_MMAP (1 << 3) 3335 #define rmspace(str) while (*str == ' ') str++; 3336 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3337 #define YES_NO(x) ((x) ? "Yes" : "No") 3338 #ifdef CONFIG_VIDEO_ADV_DEBUG 3339 #endif 3340 /* LDV_COMMENT_END_PREP */ 3341 /* LDV_COMMENT_BEGIN_PREP */ 3342 #ifdef CONFIG_VIDEO_ADV_DEBUG 3343 #endif 3344 /* LDV_COMMENT_END_PREP */ 3345 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 3346 /* LDV_COMMENT_BEGIN_PREP */ 3347 #define DRIVER_AUTHOR \ 3348 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3349 "Dwaine Garden <DwaineGarden@rogers.com>" 3350 #define DRIVER_NAME "usbvision" 3351 #define DRIVER_ALIAS "USBVision" 3352 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3353 #define DRIVER_LICENSE "GPL" 3354 #define USBVISION_VERSION_STRING "0.9.11" 3355 #define ENABLE_HEXDUMP 0 3356 #ifdef USBVISION_DEBUG 3357 #define PDEBUG(level, fmt, args...) { \ 3358 if (video_debug & (level)) \ 3359 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3360 __func__, __LINE__ , ## args); \ 3361 } 3362 #else 3363 #define PDEBUG(level, fmt, args...) do {} while (0) 3364 #endif 3365 #define DBG_IO (1 << 1) 3366 #define DBG_PROBE (1 << 2) 3367 #define DBG_MMAP (1 << 3) 3368 #define rmspace(str) while (*str == ' ') str++; 3369 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3370 #define YES_NO(x) ((x) ? "Yes" : "No") 3371 #ifdef CONFIG_VIDEO_ADV_DEBUG 3372 #endif 3373 /* LDV_COMMENT_END_PREP */ 3374 /* LDV_COMMENT_BEGIN_PREP */ 3375 #ifdef CONFIG_VIDEO_ADV_DEBUG 3376 #endif 3377 /* LDV_COMMENT_END_PREP */ 3378 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 3379 /* LDV_COMMENT_BEGIN_PREP */ 3380 #define DRIVER_AUTHOR \ 3381 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3382 "Dwaine Garden <DwaineGarden@rogers.com>" 3383 #define DRIVER_NAME "usbvision" 3384 #define DRIVER_ALIAS "USBVision" 3385 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3386 #define DRIVER_LICENSE "GPL" 3387 #define USBVISION_VERSION_STRING "0.9.11" 3388 #define ENABLE_HEXDUMP 0 3389 #ifdef USBVISION_DEBUG 3390 #define PDEBUG(level, fmt, args...) { \ 3391 if (video_debug & (level)) \ 3392 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3393 __func__, __LINE__ , ## args); \ 3394 } 3395 #else 3396 #define PDEBUG(level, fmt, args...) do {} while (0) 3397 #endif 3398 #define DBG_IO (1 << 1) 3399 #define DBG_PROBE (1 << 2) 3400 #define DBG_MMAP (1 << 3) 3401 #define rmspace(str) while (*str == ' ') str++; 3402 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3403 #define YES_NO(x) ((x) ? "Yes" : "No") 3404 #ifdef CONFIG_VIDEO_ADV_DEBUG 3405 #endif 3406 /* LDV_COMMENT_END_PREP */ 3407 /* LDV_COMMENT_BEGIN_PREP */ 3408 #ifdef CONFIG_VIDEO_ADV_DEBUG 3409 #endif 3410 /* LDV_COMMENT_END_PREP */ 3411 3412 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 3413 /* content: static int usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid)*/ 3414 /* LDV_COMMENT_BEGIN_PREP */ 3415 #define DRIVER_AUTHOR \ 3416 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3417 "Dwaine Garden <DwaineGarden@rogers.com>" 3418 #define DRIVER_NAME "usbvision" 3419 #define DRIVER_ALIAS "USBVision" 3420 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3421 #define DRIVER_LICENSE "GPL" 3422 #define USBVISION_VERSION_STRING "0.9.11" 3423 #define ENABLE_HEXDUMP 0 3424 #ifdef USBVISION_DEBUG 3425 #define PDEBUG(level, fmt, args...) { \ 3426 if (video_debug & (level)) \ 3427 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3428 __func__, __LINE__ , ## args); \ 3429 } 3430 #else 3431 #define PDEBUG(level, fmt, args...) do {} while (0) 3432 #endif 3433 #define DBG_IO (1 << 1) 3434 #define DBG_PROBE (1 << 2) 3435 #define DBG_MMAP (1 << 3) 3436 #define rmspace(str) while (*str == ' ') str++; 3437 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3438 #define YES_NO(x) ((x) ? "Yes" : "No") 3439 #ifdef CONFIG_VIDEO_ADV_DEBUG 3440 #endif 3441 #ifdef CONFIG_VIDEO_ADV_DEBUG 3442 #endif 3443 /* LDV_COMMENT_END_PREP */ 3444 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_probe" */ 3445 struct usb_interface * var_group3; 3446 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_probe" */ 3447 const struct usb_device_id * var_usbvision_probe_53_p1; 3448 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_probe" */ 3449 static int res_usbvision_probe_53; 3450 /* content: static void usbvision_disconnect(struct usb_interface *intf)*/ 3451 /* LDV_COMMENT_BEGIN_PREP */ 3452 #define DRIVER_AUTHOR \ 3453 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3454 "Dwaine Garden <DwaineGarden@rogers.com>" 3455 #define DRIVER_NAME "usbvision" 3456 #define DRIVER_ALIAS "USBVision" 3457 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3458 #define DRIVER_LICENSE "GPL" 3459 #define USBVISION_VERSION_STRING "0.9.11" 3460 #define ENABLE_HEXDUMP 0 3461 #ifdef USBVISION_DEBUG 3462 #define PDEBUG(level, fmt, args...) { \ 3463 if (video_debug & (level)) \ 3464 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3465 __func__, __LINE__ , ## args); \ 3466 } 3467 #else 3468 #define PDEBUG(level, fmt, args...) do {} while (0) 3469 #endif 3470 #define DBG_IO (1 << 1) 3471 #define DBG_PROBE (1 << 2) 3472 #define DBG_MMAP (1 << 3) 3473 #define rmspace(str) while (*str == ' ') str++; 3474 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3475 #define YES_NO(x) ((x) ? "Yes" : "No") 3476 #ifdef CONFIG_VIDEO_ADV_DEBUG 3477 #endif 3478 #ifdef CONFIG_VIDEO_ADV_DEBUG 3479 #endif 3480 /* LDV_COMMENT_END_PREP */ 3481 3482 3483 3484 3485 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */ 3486 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */ 3487 /*============================= VARIABLE INITIALIZING PART =============================*/ 3488 LDV_IN_INTERRUPT=1; 3489 3490 3491 3492 3493 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */ 3494 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */ 3495 /*============================= FUNCTION CALL SECTION =============================*/ 3496 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */ 3497 ldv_initialize(); 3498 3499 /** INIT: init_type: ST_MODULE_INIT **/ 3500 /* content: static int __init usbvision_init(void)*/ 3501 /* LDV_COMMENT_BEGIN_PREP */ 3502 #define DRIVER_AUTHOR \ 3503 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3504 "Dwaine Garden <DwaineGarden@rogers.com>" 3505 #define DRIVER_NAME "usbvision" 3506 #define DRIVER_ALIAS "USBVision" 3507 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3508 #define DRIVER_LICENSE "GPL" 3509 #define USBVISION_VERSION_STRING "0.9.11" 3510 #define ENABLE_HEXDUMP 0 3511 #ifdef USBVISION_DEBUG 3512 #define PDEBUG(level, fmt, args...) { \ 3513 if (video_debug & (level)) \ 3514 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3515 __func__, __LINE__ , ## args); \ 3516 } 3517 #else 3518 #define PDEBUG(level, fmt, args...) do {} while (0) 3519 #endif 3520 #define DBG_IO (1 << 1) 3521 #define DBG_PROBE (1 << 2) 3522 #define DBG_MMAP (1 << 3) 3523 #define rmspace(str) while (*str == ' ') str++; 3524 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3525 #define YES_NO(x) ((x) ? "Yes" : "No") 3526 #ifdef CONFIG_VIDEO_ADV_DEBUG 3527 #endif 3528 #ifdef CONFIG_VIDEO_ADV_DEBUG 3529 #endif 3530 /* LDV_COMMENT_END_PREP */ 3531 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */ 3532 ldv_handler_precall(); 3533 if(usbvision_init()) 3534 goto ldv_final; 3535 int ldv_s_usbvision_fops_v4l2_file_operations = 0; 3536 3537 3538 3539 3540 int ldv_s_usbvision_radio_fops_v4l2_file_operations = 0; 3541 3542 3543 3544 int ldv_s_usbvision_driver_usb_driver = 0; 3545 3546 3547 while( nondet_int() 3548 || !(ldv_s_usbvision_fops_v4l2_file_operations == 0) 3549 || !(ldv_s_usbvision_radio_fops_v4l2_file_operations == 0) 3550 || !(ldv_s_usbvision_driver_usb_driver == 0) 3551 ) { 3552 3553 switch(nondet_int()) { 3554 3555 case 0: { 3556 3557 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3558 if(ldv_s_usbvision_fops_v4l2_file_operations==0) { 3559 3560 /* content: static int usbvision_v4l2_open(struct file *file)*/ 3561 /* LDV_COMMENT_BEGIN_PREP */ 3562 #define DRIVER_AUTHOR \ 3563 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3564 "Dwaine Garden <DwaineGarden@rogers.com>" 3565 #define DRIVER_NAME "usbvision" 3566 #define DRIVER_ALIAS "USBVision" 3567 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3568 #define DRIVER_LICENSE "GPL" 3569 #define USBVISION_VERSION_STRING "0.9.11" 3570 #define ENABLE_HEXDUMP 0 3571 #ifdef USBVISION_DEBUG 3572 #define PDEBUG(level, fmt, args...) { \ 3573 if (video_debug & (level)) \ 3574 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3575 __func__, __LINE__ , ## args); \ 3576 } 3577 #else 3578 #define PDEBUG(level, fmt, args...) do {} while (0) 3579 #endif 3580 #define DBG_IO (1 << 1) 3581 #define DBG_PROBE (1 << 2) 3582 #define DBG_MMAP (1 << 3) 3583 #define rmspace(str) while (*str == ' ') str++; 3584 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3585 #define YES_NO(x) ((x) ? "Yes" : "No") 3586 /* LDV_COMMENT_END_PREP */ 3587 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "usbvision_fops". Standart function test for correct return result. */ 3588 ldv_handler_precall(); 3589 res_usbvision_v4l2_open_12 = usbvision_v4l2_open( var_group1); 3590 ldv_check_return_value(res_usbvision_v4l2_open_12); 3591 if(res_usbvision_v4l2_open_12) 3592 goto ldv_module_exit; 3593 /* LDV_COMMENT_BEGIN_PREP */ 3594 #ifdef CONFIG_VIDEO_ADV_DEBUG 3595 #endif 3596 #ifdef CONFIG_VIDEO_ADV_DEBUG 3597 #endif 3598 /* LDV_COMMENT_END_PREP */ 3599 ldv_s_usbvision_fops_v4l2_file_operations++; 3600 3601 } 3602 3603 } 3604 3605 break; 3606 case 1: { 3607 3608 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3609 if(ldv_s_usbvision_fops_v4l2_file_operations==1) { 3610 3611 /* content: static int usbvision_v4l2_close(struct file *file)*/ 3612 /* LDV_COMMENT_BEGIN_PREP */ 3613 #define DRIVER_AUTHOR \ 3614 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3615 "Dwaine Garden <DwaineGarden@rogers.com>" 3616 #define DRIVER_NAME "usbvision" 3617 #define DRIVER_ALIAS "USBVision" 3618 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3619 #define DRIVER_LICENSE "GPL" 3620 #define USBVISION_VERSION_STRING "0.9.11" 3621 #define ENABLE_HEXDUMP 0 3622 #ifdef USBVISION_DEBUG 3623 #define PDEBUG(level, fmt, args...) { \ 3624 if (video_debug & (level)) \ 3625 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3626 __func__, __LINE__ , ## args); \ 3627 } 3628 #else 3629 #define PDEBUG(level, fmt, args...) do {} while (0) 3630 #endif 3631 #define DBG_IO (1 << 1) 3632 #define DBG_PROBE (1 << 2) 3633 #define DBG_MMAP (1 << 3) 3634 #define rmspace(str) while (*str == ' ') str++; 3635 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3636 #define YES_NO(x) ((x) ? "Yes" : "No") 3637 /* LDV_COMMENT_END_PREP */ 3638 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "usbvision_fops" */ 3639 ldv_handler_precall(); 3640 usbvision_v4l2_close( var_group1); 3641 /* LDV_COMMENT_BEGIN_PREP */ 3642 #ifdef CONFIG_VIDEO_ADV_DEBUG 3643 #endif 3644 #ifdef CONFIG_VIDEO_ADV_DEBUG 3645 #endif 3646 /* LDV_COMMENT_END_PREP */ 3647 ldv_s_usbvision_fops_v4l2_file_operations=0; 3648 3649 } 3650 3651 } 3652 3653 break; 3654 case 2: { 3655 3656 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3657 3658 3659 /* content: static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/ 3660 /* LDV_COMMENT_BEGIN_PREP */ 3661 #define DRIVER_AUTHOR \ 3662 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3663 "Dwaine Garden <DwaineGarden@rogers.com>" 3664 #define DRIVER_NAME "usbvision" 3665 #define DRIVER_ALIAS "USBVision" 3666 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3667 #define DRIVER_LICENSE "GPL" 3668 #define USBVISION_VERSION_STRING "0.9.11" 3669 #define ENABLE_HEXDUMP 0 3670 #ifdef USBVISION_DEBUG 3671 #define PDEBUG(level, fmt, args...) { \ 3672 if (video_debug & (level)) \ 3673 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3674 __func__, __LINE__ , ## args); \ 3675 } 3676 #else 3677 #define PDEBUG(level, fmt, args...) do {} while (0) 3678 #endif 3679 #define DBG_IO (1 << 1) 3680 #define DBG_PROBE (1 << 2) 3681 #define DBG_MMAP (1 << 3) 3682 #define rmspace(str) while (*str == ' ') str++; 3683 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3684 #define YES_NO(x) ((x) ? "Yes" : "No") 3685 #ifdef CONFIG_VIDEO_ADV_DEBUG 3686 #endif 3687 /* LDV_COMMENT_END_PREP */ 3688 /* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "usbvision_fops" */ 3689 ldv_handler_precall(); 3690 usbvision_v4l2_read( var_group1, var_usbvision_v4l2_read_42_p1, var_usbvision_v4l2_read_42_p2, var_usbvision_v4l2_read_42_p3); 3691 /* LDV_COMMENT_BEGIN_PREP */ 3692 #ifdef CONFIG_VIDEO_ADV_DEBUG 3693 #endif 3694 /* LDV_COMMENT_END_PREP */ 3695 3696 3697 3698 3699 } 3700 3701 break; 3702 case 3: { 3703 3704 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3705 3706 3707 /* content: static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma)*/ 3708 /* LDV_COMMENT_BEGIN_PREP */ 3709 #define DRIVER_AUTHOR \ 3710 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3711 "Dwaine Garden <DwaineGarden@rogers.com>" 3712 #define DRIVER_NAME "usbvision" 3713 #define DRIVER_ALIAS "USBVision" 3714 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3715 #define DRIVER_LICENSE "GPL" 3716 #define USBVISION_VERSION_STRING "0.9.11" 3717 #define ENABLE_HEXDUMP 0 3718 #ifdef USBVISION_DEBUG 3719 #define PDEBUG(level, fmt, args...) { \ 3720 if (video_debug & (level)) \ 3721 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3722 __func__, __LINE__ , ## args); \ 3723 } 3724 #else 3725 #define PDEBUG(level, fmt, args...) do {} while (0) 3726 #endif 3727 #define DBG_IO (1 << 1) 3728 #define DBG_PROBE (1 << 2) 3729 #define DBG_MMAP (1 << 3) 3730 #define rmspace(str) while (*str == ' ') str++; 3731 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3732 #define YES_NO(x) ((x) ? "Yes" : "No") 3733 #ifdef CONFIG_VIDEO_ADV_DEBUG 3734 #endif 3735 /* LDV_COMMENT_END_PREP */ 3736 /* LDV_COMMENT_FUNCTION_CALL Function from field "mmap" from driver structure with callbacks "usbvision_fops" */ 3737 ldv_handler_precall(); 3738 usbvision_v4l2_mmap( var_group1, var_group2); 3739 /* LDV_COMMENT_BEGIN_PREP */ 3740 #ifdef CONFIG_VIDEO_ADV_DEBUG 3741 #endif 3742 /* LDV_COMMENT_END_PREP */ 3743 3744 3745 3746 3747 } 3748 3749 break; 3750 case 4: { 3751 3752 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3753 3754 3755 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 3756 /* LDV_COMMENT_BEGIN_PREP */ 3757 #define DRIVER_AUTHOR \ 3758 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3759 "Dwaine Garden <DwaineGarden@rogers.com>" 3760 #define DRIVER_NAME "usbvision" 3761 #define DRIVER_ALIAS "USBVision" 3762 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3763 #define DRIVER_LICENSE "GPL" 3764 #define USBVISION_VERSION_STRING "0.9.11" 3765 #define ENABLE_HEXDUMP 0 3766 #ifdef USBVISION_DEBUG 3767 #define PDEBUG(level, fmt, args...) { \ 3768 if (video_debug & (level)) \ 3769 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3770 __func__, __LINE__ , ## args); \ 3771 } 3772 #else 3773 #define PDEBUG(level, fmt, args...) do {} while (0) 3774 #endif 3775 #define DBG_IO (1 << 1) 3776 #define DBG_PROBE (1 << 2) 3777 #define DBG_MMAP (1 << 3) 3778 #define rmspace(str) while (*str == ' ') str++; 3779 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3780 #define YES_NO(x) ((x) ? "Yes" : "No") 3781 #ifdef CONFIG_VIDEO_ADV_DEBUG 3782 #endif 3783 /* LDV_COMMENT_END_PREP */ 3784 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querycap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3785 ldv_handler_precall(); 3786 vidioc_querycap( var_group1, var_vidioc_querycap_16_p1, var_vidioc_querycap_16_p2); 3787 /* LDV_COMMENT_BEGIN_PREP */ 3788 #ifdef CONFIG_VIDEO_ADV_DEBUG 3789 #endif 3790 /* LDV_COMMENT_END_PREP */ 3791 3792 3793 3794 3795 } 3796 3797 break; 3798 case 5: { 3799 3800 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3801 3802 3803 /* content: static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *vfd)*/ 3804 /* LDV_COMMENT_BEGIN_PREP */ 3805 #define DRIVER_AUTHOR \ 3806 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3807 "Dwaine Garden <DwaineGarden@rogers.com>" 3808 #define DRIVER_NAME "usbvision" 3809 #define DRIVER_ALIAS "USBVision" 3810 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3811 #define DRIVER_LICENSE "GPL" 3812 #define USBVISION_VERSION_STRING "0.9.11" 3813 #define ENABLE_HEXDUMP 0 3814 #ifdef USBVISION_DEBUG 3815 #define PDEBUG(level, fmt, args...) { \ 3816 if (video_debug & (level)) \ 3817 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3818 __func__, __LINE__ , ## args); \ 3819 } 3820 #else 3821 #define PDEBUG(level, fmt, args...) do {} while (0) 3822 #endif 3823 #define DBG_IO (1 << 1) 3824 #define DBG_PROBE (1 << 2) 3825 #define DBG_MMAP (1 << 3) 3826 #define rmspace(str) while (*str == ' ') str++; 3827 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3828 #define YES_NO(x) ((x) ? "Yes" : "No") 3829 #ifdef CONFIG_VIDEO_ADV_DEBUG 3830 #endif 3831 /* LDV_COMMENT_END_PREP */ 3832 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3833 ldv_handler_precall(); 3834 vidioc_enum_fmt_vid_cap( var_group1, var_vidioc_enum_fmt_vid_cap_37_p1, var_vidioc_enum_fmt_vid_cap_37_p2); 3835 /* LDV_COMMENT_BEGIN_PREP */ 3836 #ifdef CONFIG_VIDEO_ADV_DEBUG 3837 #endif 3838 /* LDV_COMMENT_END_PREP */ 3839 3840 3841 3842 3843 } 3844 3845 break; 3846 case 6: { 3847 3848 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3849 3850 3851 /* content: static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3852 /* LDV_COMMENT_BEGIN_PREP */ 3853 #define DRIVER_AUTHOR \ 3854 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3855 "Dwaine Garden <DwaineGarden@rogers.com>" 3856 #define DRIVER_NAME "usbvision" 3857 #define DRIVER_ALIAS "USBVision" 3858 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3859 #define DRIVER_LICENSE "GPL" 3860 #define USBVISION_VERSION_STRING "0.9.11" 3861 #define ENABLE_HEXDUMP 0 3862 #ifdef USBVISION_DEBUG 3863 #define PDEBUG(level, fmt, args...) { \ 3864 if (video_debug & (level)) \ 3865 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3866 __func__, __LINE__ , ## args); \ 3867 } 3868 #else 3869 #define PDEBUG(level, fmt, args...) do {} while (0) 3870 #endif 3871 #define DBG_IO (1 << 1) 3872 #define DBG_PROBE (1 << 2) 3873 #define DBG_MMAP (1 << 3) 3874 #define rmspace(str) while (*str == ' ') str++; 3875 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3876 #define YES_NO(x) ((x) ? "Yes" : "No") 3877 #ifdef CONFIG_VIDEO_ADV_DEBUG 3878 #endif 3879 /* LDV_COMMENT_END_PREP */ 3880 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3881 ldv_handler_precall(); 3882 vidioc_g_fmt_vid_cap( var_group1, var_vidioc_g_fmt_vid_cap_38_p1, var_vidioc_g_fmt_vid_cap_38_p2); 3883 /* LDV_COMMENT_BEGIN_PREP */ 3884 #ifdef CONFIG_VIDEO_ADV_DEBUG 3885 #endif 3886 /* LDV_COMMENT_END_PREP */ 3887 3888 3889 3890 3891 } 3892 3893 break; 3894 case 7: { 3895 3896 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3897 3898 3899 /* content: static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3900 /* LDV_COMMENT_BEGIN_PREP */ 3901 #define DRIVER_AUTHOR \ 3902 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3903 "Dwaine Garden <DwaineGarden@rogers.com>" 3904 #define DRIVER_NAME "usbvision" 3905 #define DRIVER_ALIAS "USBVision" 3906 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3907 #define DRIVER_LICENSE "GPL" 3908 #define USBVISION_VERSION_STRING "0.9.11" 3909 #define ENABLE_HEXDUMP 0 3910 #ifdef USBVISION_DEBUG 3911 #define PDEBUG(level, fmt, args...) { \ 3912 if (video_debug & (level)) \ 3913 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3914 __func__, __LINE__ , ## args); \ 3915 } 3916 #else 3917 #define PDEBUG(level, fmt, args...) do {} while (0) 3918 #endif 3919 #define DBG_IO (1 << 1) 3920 #define DBG_PROBE (1 << 2) 3921 #define DBG_MMAP (1 << 3) 3922 #define rmspace(str) while (*str == ' ') str++; 3923 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3924 #define YES_NO(x) ((x) ? "Yes" : "No") 3925 #ifdef CONFIG_VIDEO_ADV_DEBUG 3926 #endif 3927 /* LDV_COMMENT_END_PREP */ 3928 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_try_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3929 ldv_handler_precall(); 3930 vidioc_try_fmt_vid_cap( var_group1, var_vidioc_try_fmt_vid_cap_39_p1, var_vidioc_try_fmt_vid_cap_39_p2); 3931 /* LDV_COMMENT_BEGIN_PREP */ 3932 #ifdef CONFIG_VIDEO_ADV_DEBUG 3933 #endif 3934 /* LDV_COMMENT_END_PREP */ 3935 3936 3937 3938 3939 } 3940 3941 break; 3942 case 8: { 3943 3944 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3945 3946 3947 /* content: static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3948 /* LDV_COMMENT_BEGIN_PREP */ 3949 #define DRIVER_AUTHOR \ 3950 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3951 "Dwaine Garden <DwaineGarden@rogers.com>" 3952 #define DRIVER_NAME "usbvision" 3953 #define DRIVER_ALIAS "USBVision" 3954 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3955 #define DRIVER_LICENSE "GPL" 3956 #define USBVISION_VERSION_STRING "0.9.11" 3957 #define ENABLE_HEXDUMP 0 3958 #ifdef USBVISION_DEBUG 3959 #define PDEBUG(level, fmt, args...) { \ 3960 if (video_debug & (level)) \ 3961 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3962 __func__, __LINE__ , ## args); \ 3963 } 3964 #else 3965 #define PDEBUG(level, fmt, args...) do {} while (0) 3966 #endif 3967 #define DBG_IO (1 << 1) 3968 #define DBG_PROBE (1 << 2) 3969 #define DBG_MMAP (1 << 3) 3970 #define rmspace(str) while (*str == ' ') str++; 3971 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3972 #define YES_NO(x) ((x) ? "Yes" : "No") 3973 #ifdef CONFIG_VIDEO_ADV_DEBUG 3974 #endif 3975 /* LDV_COMMENT_END_PREP */ 3976 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3977 ldv_handler_precall(); 3978 vidioc_s_fmt_vid_cap( var_group1, var_vidioc_s_fmt_vid_cap_40_p1, var_vidioc_s_fmt_vid_cap_40_p2); 3979 /* LDV_COMMENT_BEGIN_PREP */ 3980 #ifdef CONFIG_VIDEO_ADV_DEBUG 3981 #endif 3982 /* LDV_COMMENT_END_PREP */ 3983 3984 3985 3986 3987 } 3988 3989 break; 3990 case 9: { 3991 3992 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3993 3994 3995 /* content: static int vidioc_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *vr)*/ 3996 /* LDV_COMMENT_BEGIN_PREP */ 3997 #define DRIVER_AUTHOR \ 3998 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3999 "Dwaine Garden <DwaineGarden@rogers.com>" 4000 #define DRIVER_NAME "usbvision" 4001 #define DRIVER_ALIAS "USBVision" 4002 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4003 #define DRIVER_LICENSE "GPL" 4004 #define USBVISION_VERSION_STRING "0.9.11" 4005 #define ENABLE_HEXDUMP 0 4006 #ifdef USBVISION_DEBUG 4007 #define PDEBUG(level, fmt, args...) { \ 4008 if (video_debug & (level)) \ 4009 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4010 __func__, __LINE__ , ## args); \ 4011 } 4012 #else 4013 #define PDEBUG(level, fmt, args...) do {} while (0) 4014 #endif 4015 #define DBG_IO (1 << 1) 4016 #define DBG_PROBE (1 << 2) 4017 #define DBG_MMAP (1 << 3) 4018 #define rmspace(str) while (*str == ' ') str++; 4019 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4020 #define YES_NO(x) ((x) ? "Yes" : "No") 4021 #ifdef CONFIG_VIDEO_ADV_DEBUG 4022 #endif 4023 /* LDV_COMMENT_END_PREP */ 4024 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_reqbufs" from driver structure with callbacks "usbvision_ioctl_ops" */ 4025 ldv_handler_precall(); 4026 vidioc_reqbufs( var_group1, var_vidioc_reqbufs_31_p1, var_vidioc_reqbufs_31_p2); 4027 /* LDV_COMMENT_BEGIN_PREP */ 4028 #ifdef CONFIG_VIDEO_ADV_DEBUG 4029 #endif 4030 /* LDV_COMMENT_END_PREP */ 4031 4032 4033 4034 4035 } 4036 4037 break; 4038 case 10: { 4039 4040 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4041 4042 4043 /* content: static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4044 /* LDV_COMMENT_BEGIN_PREP */ 4045 #define DRIVER_AUTHOR \ 4046 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4047 "Dwaine Garden <DwaineGarden@rogers.com>" 4048 #define DRIVER_NAME "usbvision" 4049 #define DRIVER_ALIAS "USBVision" 4050 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4051 #define DRIVER_LICENSE "GPL" 4052 #define USBVISION_VERSION_STRING "0.9.11" 4053 #define ENABLE_HEXDUMP 0 4054 #ifdef USBVISION_DEBUG 4055 #define PDEBUG(level, fmt, args...) { \ 4056 if (video_debug & (level)) \ 4057 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4058 __func__, __LINE__ , ## args); \ 4059 } 4060 #else 4061 #define PDEBUG(level, fmt, args...) do {} while (0) 4062 #endif 4063 #define DBG_IO (1 << 1) 4064 #define DBG_PROBE (1 << 2) 4065 #define DBG_MMAP (1 << 3) 4066 #define rmspace(str) while (*str == ' ') str++; 4067 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4068 #define YES_NO(x) ((x) ? "Yes" : "No") 4069 #ifdef CONFIG_VIDEO_ADV_DEBUG 4070 #endif 4071 /* LDV_COMMENT_END_PREP */ 4072 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querybuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4073 ldv_handler_precall(); 4074 vidioc_querybuf( var_group1, var_vidioc_querybuf_32_p1, var_vidioc_querybuf_32_p2); 4075 /* LDV_COMMENT_BEGIN_PREP */ 4076 #ifdef CONFIG_VIDEO_ADV_DEBUG 4077 #endif 4078 /* LDV_COMMENT_END_PREP */ 4079 4080 4081 4082 4083 } 4084 4085 break; 4086 case 11: { 4087 4088 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4089 4090 4091 /* content: static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4092 /* LDV_COMMENT_BEGIN_PREP */ 4093 #define DRIVER_AUTHOR \ 4094 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4095 "Dwaine Garden <DwaineGarden@rogers.com>" 4096 #define DRIVER_NAME "usbvision" 4097 #define DRIVER_ALIAS "USBVision" 4098 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4099 #define DRIVER_LICENSE "GPL" 4100 #define USBVISION_VERSION_STRING "0.9.11" 4101 #define ENABLE_HEXDUMP 0 4102 #ifdef USBVISION_DEBUG 4103 #define PDEBUG(level, fmt, args...) { \ 4104 if (video_debug & (level)) \ 4105 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4106 __func__, __LINE__ , ## args); \ 4107 } 4108 #else 4109 #define PDEBUG(level, fmt, args...) do {} while (0) 4110 #endif 4111 #define DBG_IO (1 << 1) 4112 #define DBG_PROBE (1 << 2) 4113 #define DBG_MMAP (1 << 3) 4114 #define rmspace(str) while (*str == ' ') str++; 4115 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4116 #define YES_NO(x) ((x) ? "Yes" : "No") 4117 #ifdef CONFIG_VIDEO_ADV_DEBUG 4118 #endif 4119 /* LDV_COMMENT_END_PREP */ 4120 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_qbuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4121 ldv_handler_precall(); 4122 vidioc_qbuf( var_group1, var_vidioc_qbuf_33_p1, var_vidioc_qbuf_33_p2); 4123 /* LDV_COMMENT_BEGIN_PREP */ 4124 #ifdef CONFIG_VIDEO_ADV_DEBUG 4125 #endif 4126 /* LDV_COMMENT_END_PREP */ 4127 4128 4129 4130 4131 } 4132 4133 break; 4134 case 12: { 4135 4136 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4137 4138 4139 /* content: static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4140 /* LDV_COMMENT_BEGIN_PREP */ 4141 #define DRIVER_AUTHOR \ 4142 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4143 "Dwaine Garden <DwaineGarden@rogers.com>" 4144 #define DRIVER_NAME "usbvision" 4145 #define DRIVER_ALIAS "USBVision" 4146 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4147 #define DRIVER_LICENSE "GPL" 4148 #define USBVISION_VERSION_STRING "0.9.11" 4149 #define ENABLE_HEXDUMP 0 4150 #ifdef USBVISION_DEBUG 4151 #define PDEBUG(level, fmt, args...) { \ 4152 if (video_debug & (level)) \ 4153 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4154 __func__, __LINE__ , ## args); \ 4155 } 4156 #else 4157 #define PDEBUG(level, fmt, args...) do {} while (0) 4158 #endif 4159 #define DBG_IO (1 << 1) 4160 #define DBG_PROBE (1 << 2) 4161 #define DBG_MMAP (1 << 3) 4162 #define rmspace(str) while (*str == ' ') str++; 4163 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4164 #define YES_NO(x) ((x) ? "Yes" : "No") 4165 #ifdef CONFIG_VIDEO_ADV_DEBUG 4166 #endif 4167 /* LDV_COMMENT_END_PREP */ 4168 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_dqbuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4169 ldv_handler_precall(); 4170 vidioc_dqbuf( var_group1, var_vidioc_dqbuf_34_p1, var_vidioc_dqbuf_34_p2); 4171 /* LDV_COMMENT_BEGIN_PREP */ 4172 #ifdef CONFIG_VIDEO_ADV_DEBUG 4173 #endif 4174 /* LDV_COMMENT_END_PREP */ 4175 4176 4177 4178 4179 } 4180 4181 break; 4182 case 13: { 4183 4184 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4185 4186 4187 /* content: static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)*/ 4188 /* LDV_COMMENT_BEGIN_PREP */ 4189 #define DRIVER_AUTHOR \ 4190 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4191 "Dwaine Garden <DwaineGarden@rogers.com>" 4192 #define DRIVER_NAME "usbvision" 4193 #define DRIVER_ALIAS "USBVision" 4194 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4195 #define DRIVER_LICENSE "GPL" 4196 #define USBVISION_VERSION_STRING "0.9.11" 4197 #define ENABLE_HEXDUMP 0 4198 #ifdef USBVISION_DEBUG 4199 #define PDEBUG(level, fmt, args...) { \ 4200 if (video_debug & (level)) \ 4201 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4202 __func__, __LINE__ , ## args); \ 4203 } 4204 #else 4205 #define PDEBUG(level, fmt, args...) do {} while (0) 4206 #endif 4207 #define DBG_IO (1 << 1) 4208 #define DBG_PROBE (1 << 2) 4209 #define DBG_MMAP (1 << 3) 4210 #define rmspace(str) while (*str == ' ') str++; 4211 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4212 #define YES_NO(x) ((x) ? "Yes" : "No") 4213 #ifdef CONFIG_VIDEO_ADV_DEBUG 4214 #endif 4215 /* LDV_COMMENT_END_PREP */ 4216 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_std" from driver structure with callbacks "usbvision_ioctl_ops" */ 4217 ldv_handler_precall(); 4218 vidioc_s_std( var_group1, var_vidioc_s_std_20_p1, var_vidioc_s_std_20_p2); 4219 /* LDV_COMMENT_BEGIN_PREP */ 4220 #ifdef CONFIG_VIDEO_ADV_DEBUG 4221 #endif 4222 /* LDV_COMMENT_END_PREP */ 4223 4224 4225 4226 4227 } 4228 4229 break; 4230 case 14: { 4231 4232 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4233 4234 4235 /* content: static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)*/ 4236 /* LDV_COMMENT_BEGIN_PREP */ 4237 #define DRIVER_AUTHOR \ 4238 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4239 "Dwaine Garden <DwaineGarden@rogers.com>" 4240 #define DRIVER_NAME "usbvision" 4241 #define DRIVER_ALIAS "USBVision" 4242 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4243 #define DRIVER_LICENSE "GPL" 4244 #define USBVISION_VERSION_STRING "0.9.11" 4245 #define ENABLE_HEXDUMP 0 4246 #ifdef USBVISION_DEBUG 4247 #define PDEBUG(level, fmt, args...) { \ 4248 if (video_debug & (level)) \ 4249 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4250 __func__, __LINE__ , ## args); \ 4251 } 4252 #else 4253 #define PDEBUG(level, fmt, args...) do {} while (0) 4254 #endif 4255 #define DBG_IO (1 << 1) 4256 #define DBG_PROBE (1 << 2) 4257 #define DBG_MMAP (1 << 3) 4258 #define rmspace(str) while (*str == ' ') str++; 4259 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4260 #define YES_NO(x) ((x) ? "Yes" : "No") 4261 #ifdef CONFIG_VIDEO_ADV_DEBUG 4262 #endif 4263 /* LDV_COMMENT_END_PREP */ 4264 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_std" from driver structure with callbacks "usbvision_ioctl_ops" */ 4265 ldv_handler_precall(); 4266 vidioc_g_std( var_group1, var_vidioc_g_std_21_p1, var_vidioc_g_std_21_p2); 4267 /* LDV_COMMENT_BEGIN_PREP */ 4268 #ifdef CONFIG_VIDEO_ADV_DEBUG 4269 #endif 4270 /* LDV_COMMENT_END_PREP */ 4271 4272 4273 4274 4275 } 4276 4277 break; 4278 case 15: { 4279 4280 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4281 4282 4283 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 4284 /* LDV_COMMENT_BEGIN_PREP */ 4285 #define DRIVER_AUTHOR \ 4286 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4287 "Dwaine Garden <DwaineGarden@rogers.com>" 4288 #define DRIVER_NAME "usbvision" 4289 #define DRIVER_ALIAS "USBVision" 4290 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4291 #define DRIVER_LICENSE "GPL" 4292 #define USBVISION_VERSION_STRING "0.9.11" 4293 #define ENABLE_HEXDUMP 0 4294 #ifdef USBVISION_DEBUG 4295 #define PDEBUG(level, fmt, args...) { \ 4296 if (video_debug & (level)) \ 4297 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4298 __func__, __LINE__ , ## args); \ 4299 } 4300 #else 4301 #define PDEBUG(level, fmt, args...) do {} while (0) 4302 #endif 4303 #define DBG_IO (1 << 1) 4304 #define DBG_PROBE (1 << 2) 4305 #define DBG_MMAP (1 << 3) 4306 #define rmspace(str) while (*str == ' ') str++; 4307 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4308 #define YES_NO(x) ((x) ? "Yes" : "No") 4309 #ifdef CONFIG_VIDEO_ADV_DEBUG 4310 #endif 4311 /* LDV_COMMENT_END_PREP */ 4312 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4313 ldv_handler_precall(); 4314 vidioc_enum_input( var_group1, var_vidioc_enum_input_17_p1, var_vidioc_enum_input_17_p2); 4315 /* LDV_COMMENT_BEGIN_PREP */ 4316 #ifdef CONFIG_VIDEO_ADV_DEBUG 4317 #endif 4318 /* LDV_COMMENT_END_PREP */ 4319 4320 4321 4322 4323 } 4324 4325 break; 4326 case 16: { 4327 4328 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4329 4330 4331 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 4332 /* LDV_COMMENT_BEGIN_PREP */ 4333 #define DRIVER_AUTHOR \ 4334 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4335 "Dwaine Garden <DwaineGarden@rogers.com>" 4336 #define DRIVER_NAME "usbvision" 4337 #define DRIVER_ALIAS "USBVision" 4338 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4339 #define DRIVER_LICENSE "GPL" 4340 #define USBVISION_VERSION_STRING "0.9.11" 4341 #define ENABLE_HEXDUMP 0 4342 #ifdef USBVISION_DEBUG 4343 #define PDEBUG(level, fmt, args...) { \ 4344 if (video_debug & (level)) \ 4345 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4346 __func__, __LINE__ , ## args); \ 4347 } 4348 #else 4349 #define PDEBUG(level, fmt, args...) do {} while (0) 4350 #endif 4351 #define DBG_IO (1 << 1) 4352 #define DBG_PROBE (1 << 2) 4353 #define DBG_MMAP (1 << 3) 4354 #define rmspace(str) while (*str == ' ') str++; 4355 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4356 #define YES_NO(x) ((x) ? "Yes" : "No") 4357 #ifdef CONFIG_VIDEO_ADV_DEBUG 4358 #endif 4359 /* LDV_COMMENT_END_PREP */ 4360 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4361 ldv_handler_precall(); 4362 vidioc_g_input( var_group1, var_vidioc_g_input_18_p1, var_vidioc_g_input_18_p2); 4363 /* LDV_COMMENT_BEGIN_PREP */ 4364 #ifdef CONFIG_VIDEO_ADV_DEBUG 4365 #endif 4366 /* LDV_COMMENT_END_PREP */ 4367 4368 4369 4370 4371 } 4372 4373 break; 4374 case 17: { 4375 4376 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4377 4378 4379 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 4380 /* LDV_COMMENT_BEGIN_PREP */ 4381 #define DRIVER_AUTHOR \ 4382 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4383 "Dwaine Garden <DwaineGarden@rogers.com>" 4384 #define DRIVER_NAME "usbvision" 4385 #define DRIVER_ALIAS "USBVision" 4386 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4387 #define DRIVER_LICENSE "GPL" 4388 #define USBVISION_VERSION_STRING "0.9.11" 4389 #define ENABLE_HEXDUMP 0 4390 #ifdef USBVISION_DEBUG 4391 #define PDEBUG(level, fmt, args...) { \ 4392 if (video_debug & (level)) \ 4393 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4394 __func__, __LINE__ , ## args); \ 4395 } 4396 #else 4397 #define PDEBUG(level, fmt, args...) do {} while (0) 4398 #endif 4399 #define DBG_IO (1 << 1) 4400 #define DBG_PROBE (1 << 2) 4401 #define DBG_MMAP (1 << 3) 4402 #define rmspace(str) while (*str == ' ') str++; 4403 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4404 #define YES_NO(x) ((x) ? "Yes" : "No") 4405 #ifdef CONFIG_VIDEO_ADV_DEBUG 4406 #endif 4407 /* LDV_COMMENT_END_PREP */ 4408 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4409 ldv_handler_precall(); 4410 vidioc_s_input( var_group1, var_vidioc_s_input_19_p1, var_vidioc_s_input_19_p2); 4411 /* LDV_COMMENT_BEGIN_PREP */ 4412 #ifdef CONFIG_VIDEO_ADV_DEBUG 4413 #endif 4414 /* LDV_COMMENT_END_PREP */ 4415 4416 4417 4418 4419 } 4420 4421 break; 4422 case 18: { 4423 4424 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4425 4426 4427 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 4428 /* LDV_COMMENT_BEGIN_PREP */ 4429 #define DRIVER_AUTHOR \ 4430 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4431 "Dwaine Garden <DwaineGarden@rogers.com>" 4432 #define DRIVER_NAME "usbvision" 4433 #define DRIVER_ALIAS "USBVision" 4434 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4435 #define DRIVER_LICENSE "GPL" 4436 #define USBVISION_VERSION_STRING "0.9.11" 4437 #define ENABLE_HEXDUMP 0 4438 #ifdef USBVISION_DEBUG 4439 #define PDEBUG(level, fmt, args...) { \ 4440 if (video_debug & (level)) \ 4441 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4442 __func__, __LINE__ , ## args); \ 4443 } 4444 #else 4445 #define PDEBUG(level, fmt, args...) do {} while (0) 4446 #endif 4447 #define DBG_IO (1 << 1) 4448 #define DBG_PROBE (1 << 2) 4449 #define DBG_MMAP (1 << 3) 4450 #define rmspace(str) while (*str == ' ') str++; 4451 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4452 #define YES_NO(x) ((x) ? "Yes" : "No") 4453 #ifdef CONFIG_VIDEO_ADV_DEBUG 4454 #endif 4455 /* LDV_COMMENT_END_PREP */ 4456 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_queryctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4457 ldv_handler_precall(); 4458 vidioc_queryctrl( var_group1, var_vidioc_queryctrl_28_p1, var_vidioc_queryctrl_28_p2); 4459 /* LDV_COMMENT_BEGIN_PREP */ 4460 #ifdef CONFIG_VIDEO_ADV_DEBUG 4461 #endif 4462 /* LDV_COMMENT_END_PREP */ 4463 4464 4465 4466 4467 } 4468 4469 break; 4470 case 19: { 4471 4472 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4473 4474 4475 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 4476 /* LDV_COMMENT_BEGIN_PREP */ 4477 #define DRIVER_AUTHOR \ 4478 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4479 "Dwaine Garden <DwaineGarden@rogers.com>" 4480 #define DRIVER_NAME "usbvision" 4481 #define DRIVER_ALIAS "USBVision" 4482 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4483 #define DRIVER_LICENSE "GPL" 4484 #define USBVISION_VERSION_STRING "0.9.11" 4485 #define ENABLE_HEXDUMP 0 4486 #ifdef USBVISION_DEBUG 4487 #define PDEBUG(level, fmt, args...) { \ 4488 if (video_debug & (level)) \ 4489 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4490 __func__, __LINE__ , ## args); \ 4491 } 4492 #else 4493 #define PDEBUG(level, fmt, args...) do {} while (0) 4494 #endif 4495 #define DBG_IO (1 << 1) 4496 #define DBG_PROBE (1 << 2) 4497 #define DBG_MMAP (1 << 3) 4498 #define rmspace(str) while (*str == ' ') str++; 4499 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4500 #define YES_NO(x) ((x) ? "Yes" : "No") 4501 #ifdef CONFIG_VIDEO_ADV_DEBUG 4502 #endif 4503 /* LDV_COMMENT_END_PREP */ 4504 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_audio" from driver structure with callbacks "usbvision_ioctl_ops" */ 4505 ldv_handler_precall(); 4506 vidioc_g_audio( var_group1, var_vidioc_g_audio_26_p1, var_vidioc_g_audio_26_p2); 4507 /* LDV_COMMENT_BEGIN_PREP */ 4508 #ifdef CONFIG_VIDEO_ADV_DEBUG 4509 #endif 4510 /* LDV_COMMENT_END_PREP */ 4511 4512 4513 4514 4515 } 4516 4517 break; 4518 case 20: { 4519 4520 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4521 4522 4523 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 4524 /* LDV_COMMENT_BEGIN_PREP */ 4525 #define DRIVER_AUTHOR \ 4526 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4527 "Dwaine Garden <DwaineGarden@rogers.com>" 4528 #define DRIVER_NAME "usbvision" 4529 #define DRIVER_ALIAS "USBVision" 4530 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4531 #define DRIVER_LICENSE "GPL" 4532 #define USBVISION_VERSION_STRING "0.9.11" 4533 #define ENABLE_HEXDUMP 0 4534 #ifdef USBVISION_DEBUG 4535 #define PDEBUG(level, fmt, args...) { \ 4536 if (video_debug & (level)) \ 4537 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4538 __func__, __LINE__ , ## args); \ 4539 } 4540 #else 4541 #define PDEBUG(level, fmt, args...) do {} while (0) 4542 #endif 4543 #define DBG_IO (1 << 1) 4544 #define DBG_PROBE (1 << 2) 4545 #define DBG_MMAP (1 << 3) 4546 #define rmspace(str) while (*str == ' ') str++; 4547 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4548 #define YES_NO(x) ((x) ? "Yes" : "No") 4549 #ifdef CONFIG_VIDEO_ADV_DEBUG 4550 #endif 4551 /* LDV_COMMENT_END_PREP */ 4552 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_audio" from driver structure with callbacks "usbvision_ioctl_ops" */ 4553 ldv_handler_precall(); 4554 vidioc_s_audio( var_group1, var_vidioc_s_audio_27_p1, var_vidioc_s_audio_27_p2); 4555 /* LDV_COMMENT_BEGIN_PREP */ 4556 #ifdef CONFIG_VIDEO_ADV_DEBUG 4557 #endif 4558 /* LDV_COMMENT_END_PREP */ 4559 4560 4561 4562 4563 } 4564 4565 break; 4566 case 21: { 4567 4568 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4569 4570 4571 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 4572 /* LDV_COMMENT_BEGIN_PREP */ 4573 #define DRIVER_AUTHOR \ 4574 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4575 "Dwaine Garden <DwaineGarden@rogers.com>" 4576 #define DRIVER_NAME "usbvision" 4577 #define DRIVER_ALIAS "USBVision" 4578 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4579 #define DRIVER_LICENSE "GPL" 4580 #define USBVISION_VERSION_STRING "0.9.11" 4581 #define ENABLE_HEXDUMP 0 4582 #ifdef USBVISION_DEBUG 4583 #define PDEBUG(level, fmt, args...) { \ 4584 if (video_debug & (level)) \ 4585 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4586 __func__, __LINE__ , ## args); \ 4587 } 4588 #else 4589 #define PDEBUG(level, fmt, args...) do {} while (0) 4590 #endif 4591 #define DBG_IO (1 << 1) 4592 #define DBG_PROBE (1 << 2) 4593 #define DBG_MMAP (1 << 3) 4594 #define rmspace(str) while (*str == ' ') str++; 4595 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4596 #define YES_NO(x) ((x) ? "Yes" : "No") 4597 #ifdef CONFIG_VIDEO_ADV_DEBUG 4598 #endif 4599 /* LDV_COMMENT_END_PREP */ 4600 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_ctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4601 ldv_handler_precall(); 4602 vidioc_g_ctrl( var_group1, var_vidioc_g_ctrl_29_p1, var_vidioc_g_ctrl_29_p2); 4603 /* LDV_COMMENT_BEGIN_PREP */ 4604 #ifdef CONFIG_VIDEO_ADV_DEBUG 4605 #endif 4606 /* LDV_COMMENT_END_PREP */ 4607 4608 4609 4610 4611 } 4612 4613 break; 4614 case 22: { 4615 4616 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4617 4618 4619 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 4620 /* LDV_COMMENT_BEGIN_PREP */ 4621 #define DRIVER_AUTHOR \ 4622 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4623 "Dwaine Garden <DwaineGarden@rogers.com>" 4624 #define DRIVER_NAME "usbvision" 4625 #define DRIVER_ALIAS "USBVision" 4626 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4627 #define DRIVER_LICENSE "GPL" 4628 #define USBVISION_VERSION_STRING "0.9.11" 4629 #define ENABLE_HEXDUMP 0 4630 #ifdef USBVISION_DEBUG 4631 #define PDEBUG(level, fmt, args...) { \ 4632 if (video_debug & (level)) \ 4633 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4634 __func__, __LINE__ , ## args); \ 4635 } 4636 #else 4637 #define PDEBUG(level, fmt, args...) do {} while (0) 4638 #endif 4639 #define DBG_IO (1 << 1) 4640 #define DBG_PROBE (1 << 2) 4641 #define DBG_MMAP (1 << 3) 4642 #define rmspace(str) while (*str == ' ') str++; 4643 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4644 #define YES_NO(x) ((x) ? "Yes" : "No") 4645 #ifdef CONFIG_VIDEO_ADV_DEBUG 4646 #endif 4647 /* LDV_COMMENT_END_PREP */ 4648 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_ctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4649 ldv_handler_precall(); 4650 vidioc_s_ctrl( var_group1, var_vidioc_s_ctrl_30_p1, var_vidioc_s_ctrl_30_p2); 4651 /* LDV_COMMENT_BEGIN_PREP */ 4652 #ifdef CONFIG_VIDEO_ADV_DEBUG 4653 #endif 4654 /* LDV_COMMENT_END_PREP */ 4655 4656 4657 4658 4659 } 4660 4661 break; 4662 case 23: { 4663 4664 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4665 4666 4667 /* content: static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)*/ 4668 /* LDV_COMMENT_BEGIN_PREP */ 4669 #define DRIVER_AUTHOR \ 4670 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4671 "Dwaine Garden <DwaineGarden@rogers.com>" 4672 #define DRIVER_NAME "usbvision" 4673 #define DRIVER_ALIAS "USBVision" 4674 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4675 #define DRIVER_LICENSE "GPL" 4676 #define USBVISION_VERSION_STRING "0.9.11" 4677 #define ENABLE_HEXDUMP 0 4678 #ifdef USBVISION_DEBUG 4679 #define PDEBUG(level, fmt, args...) { \ 4680 if (video_debug & (level)) \ 4681 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4682 __func__, __LINE__ , ## args); \ 4683 } 4684 #else 4685 #define PDEBUG(level, fmt, args...) do {} while (0) 4686 #endif 4687 #define DBG_IO (1 << 1) 4688 #define DBG_PROBE (1 << 2) 4689 #define DBG_MMAP (1 << 3) 4690 #define rmspace(str) while (*str == ' ') str++; 4691 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4692 #define YES_NO(x) ((x) ? "Yes" : "No") 4693 #ifdef CONFIG_VIDEO_ADV_DEBUG 4694 #endif 4695 /* LDV_COMMENT_END_PREP */ 4696 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_streamon" from driver structure with callbacks "usbvision_ioctl_ops" */ 4697 ldv_handler_precall(); 4698 vidioc_streamon( var_group1, var_vidioc_streamon_35_p1, var_vidioc_streamon_35_p2); 4699 /* LDV_COMMENT_BEGIN_PREP */ 4700 #ifdef CONFIG_VIDEO_ADV_DEBUG 4701 #endif 4702 /* LDV_COMMENT_END_PREP */ 4703 4704 4705 4706 4707 } 4708 4709 break; 4710 case 24: { 4711 4712 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4713 4714 4715 /* content: static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type type)*/ 4716 /* LDV_COMMENT_BEGIN_PREP */ 4717 #define DRIVER_AUTHOR \ 4718 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4719 "Dwaine Garden <DwaineGarden@rogers.com>" 4720 #define DRIVER_NAME "usbvision" 4721 #define DRIVER_ALIAS "USBVision" 4722 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4723 #define DRIVER_LICENSE "GPL" 4724 #define USBVISION_VERSION_STRING "0.9.11" 4725 #define ENABLE_HEXDUMP 0 4726 #ifdef USBVISION_DEBUG 4727 #define PDEBUG(level, fmt, args...) { \ 4728 if (video_debug & (level)) \ 4729 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4730 __func__, __LINE__ , ## args); \ 4731 } 4732 #else 4733 #define PDEBUG(level, fmt, args...) do {} while (0) 4734 #endif 4735 #define DBG_IO (1 << 1) 4736 #define DBG_PROBE (1 << 2) 4737 #define DBG_MMAP (1 << 3) 4738 #define rmspace(str) while (*str == ' ') str++; 4739 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4740 #define YES_NO(x) ((x) ? "Yes" : "No") 4741 #ifdef CONFIG_VIDEO_ADV_DEBUG 4742 #endif 4743 /* LDV_COMMENT_END_PREP */ 4744 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_streamoff" from driver structure with callbacks "usbvision_ioctl_ops" */ 4745 ldv_handler_precall(); 4746 vidioc_streamoff( var_group1, var_vidioc_streamoff_36_p1, var_vidioc_streamoff_36_p2); 4747 /* LDV_COMMENT_BEGIN_PREP */ 4748 #ifdef CONFIG_VIDEO_ADV_DEBUG 4749 #endif 4750 /* LDV_COMMENT_END_PREP */ 4751 4752 4753 4754 4755 } 4756 4757 break; 4758 case 25: { 4759 4760 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4761 4762 4763 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 4764 /* LDV_COMMENT_BEGIN_PREP */ 4765 #define DRIVER_AUTHOR \ 4766 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4767 "Dwaine Garden <DwaineGarden@rogers.com>" 4768 #define DRIVER_NAME "usbvision" 4769 #define DRIVER_ALIAS "USBVision" 4770 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4771 #define DRIVER_LICENSE "GPL" 4772 #define USBVISION_VERSION_STRING "0.9.11" 4773 #define ENABLE_HEXDUMP 0 4774 #ifdef USBVISION_DEBUG 4775 #define PDEBUG(level, fmt, args...) { \ 4776 if (video_debug & (level)) \ 4777 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4778 __func__, __LINE__ , ## args); \ 4779 } 4780 #else 4781 #define PDEBUG(level, fmt, args...) do {} while (0) 4782 #endif 4783 #define DBG_IO (1 << 1) 4784 #define DBG_PROBE (1 << 2) 4785 #define DBG_MMAP (1 << 3) 4786 #define rmspace(str) while (*str == ' ') str++; 4787 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4788 #define YES_NO(x) ((x) ? "Yes" : "No") 4789 #ifdef CONFIG_VIDEO_ADV_DEBUG 4790 #endif 4791 /* LDV_COMMENT_END_PREP */ 4792 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_tuner" from driver structure with callbacks "usbvision_ioctl_ops" */ 4793 ldv_handler_precall(); 4794 vidioc_g_tuner( var_group1, var_vidioc_g_tuner_22_p1, var_vidioc_g_tuner_22_p2); 4795 /* LDV_COMMENT_BEGIN_PREP */ 4796 #ifdef CONFIG_VIDEO_ADV_DEBUG 4797 #endif 4798 /* LDV_COMMENT_END_PREP */ 4799 4800 4801 4802 4803 } 4804 4805 break; 4806 case 26: { 4807 4808 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4809 4810 4811 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 4812 /* LDV_COMMENT_BEGIN_PREP */ 4813 #define DRIVER_AUTHOR \ 4814 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4815 "Dwaine Garden <DwaineGarden@rogers.com>" 4816 #define DRIVER_NAME "usbvision" 4817 #define DRIVER_ALIAS "USBVision" 4818 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4819 #define DRIVER_LICENSE "GPL" 4820 #define USBVISION_VERSION_STRING "0.9.11" 4821 #define ENABLE_HEXDUMP 0 4822 #ifdef USBVISION_DEBUG 4823 #define PDEBUG(level, fmt, args...) { \ 4824 if (video_debug & (level)) \ 4825 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4826 __func__, __LINE__ , ## args); \ 4827 } 4828 #else 4829 #define PDEBUG(level, fmt, args...) do {} while (0) 4830 #endif 4831 #define DBG_IO (1 << 1) 4832 #define DBG_PROBE (1 << 2) 4833 #define DBG_MMAP (1 << 3) 4834 #define rmspace(str) while (*str == ' ') str++; 4835 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4836 #define YES_NO(x) ((x) ? "Yes" : "No") 4837 #ifdef CONFIG_VIDEO_ADV_DEBUG 4838 #endif 4839 /* LDV_COMMENT_END_PREP */ 4840 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_tuner" from driver structure with callbacks "usbvision_ioctl_ops" */ 4841 ldv_handler_precall(); 4842 vidioc_s_tuner( var_group1, var_vidioc_s_tuner_23_p1, var_vidioc_s_tuner_23_p2); 4843 /* LDV_COMMENT_BEGIN_PREP */ 4844 #ifdef CONFIG_VIDEO_ADV_DEBUG 4845 #endif 4846 /* LDV_COMMENT_END_PREP */ 4847 4848 4849 4850 4851 } 4852 4853 break; 4854 case 27: { 4855 4856 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4857 4858 4859 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 4860 /* LDV_COMMENT_BEGIN_PREP */ 4861 #define DRIVER_AUTHOR \ 4862 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4863 "Dwaine Garden <DwaineGarden@rogers.com>" 4864 #define DRIVER_NAME "usbvision" 4865 #define DRIVER_ALIAS "USBVision" 4866 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4867 #define DRIVER_LICENSE "GPL" 4868 #define USBVISION_VERSION_STRING "0.9.11" 4869 #define ENABLE_HEXDUMP 0 4870 #ifdef USBVISION_DEBUG 4871 #define PDEBUG(level, fmt, args...) { \ 4872 if (video_debug & (level)) \ 4873 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4874 __func__, __LINE__ , ## args); \ 4875 } 4876 #else 4877 #define PDEBUG(level, fmt, args...) do {} while (0) 4878 #endif 4879 #define DBG_IO (1 << 1) 4880 #define DBG_PROBE (1 << 2) 4881 #define DBG_MMAP (1 << 3) 4882 #define rmspace(str) while (*str == ' ') str++; 4883 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4884 #define YES_NO(x) ((x) ? "Yes" : "No") 4885 #ifdef CONFIG_VIDEO_ADV_DEBUG 4886 #endif 4887 /* LDV_COMMENT_END_PREP */ 4888 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_frequency" from driver structure with callbacks "usbvision_ioctl_ops" */ 4889 ldv_handler_precall(); 4890 vidioc_g_frequency( var_group1, var_vidioc_g_frequency_24_p1, var_vidioc_g_frequency_24_p2); 4891 /* LDV_COMMENT_BEGIN_PREP */ 4892 #ifdef CONFIG_VIDEO_ADV_DEBUG 4893 #endif 4894 /* LDV_COMMENT_END_PREP */ 4895 4896 4897 4898 4899 } 4900 4901 break; 4902 case 28: { 4903 4904 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4905 4906 4907 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 4908 /* LDV_COMMENT_BEGIN_PREP */ 4909 #define DRIVER_AUTHOR \ 4910 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4911 "Dwaine Garden <DwaineGarden@rogers.com>" 4912 #define DRIVER_NAME "usbvision" 4913 #define DRIVER_ALIAS "USBVision" 4914 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4915 #define DRIVER_LICENSE "GPL" 4916 #define USBVISION_VERSION_STRING "0.9.11" 4917 #define ENABLE_HEXDUMP 0 4918 #ifdef USBVISION_DEBUG 4919 #define PDEBUG(level, fmt, args...) { \ 4920 if (video_debug & (level)) \ 4921 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4922 __func__, __LINE__ , ## args); \ 4923 } 4924 #else 4925 #define PDEBUG(level, fmt, args...) do {} while (0) 4926 #endif 4927 #define DBG_IO (1 << 1) 4928 #define DBG_PROBE (1 << 2) 4929 #define DBG_MMAP (1 << 3) 4930 #define rmspace(str) while (*str == ' ') str++; 4931 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4932 #define YES_NO(x) ((x) ? "Yes" : "No") 4933 #ifdef CONFIG_VIDEO_ADV_DEBUG 4934 #endif 4935 /* LDV_COMMENT_END_PREP */ 4936 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_frequency" from driver structure with callbacks "usbvision_ioctl_ops" */ 4937 ldv_handler_precall(); 4938 vidioc_s_frequency( var_group1, var_vidioc_s_frequency_25_p1, var_vidioc_s_frequency_25_p2); 4939 /* LDV_COMMENT_BEGIN_PREP */ 4940 #ifdef CONFIG_VIDEO_ADV_DEBUG 4941 #endif 4942 /* LDV_COMMENT_END_PREP */ 4943 4944 4945 4946 4947 } 4948 4949 break; 4950 case 29: { 4951 4952 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4953 4954 4955 /* content: static int vidioc_g_register(struct file *file, void *priv, struct v4l2_dbg_register *reg)*/ 4956 /* LDV_COMMENT_BEGIN_PREP */ 4957 #define DRIVER_AUTHOR \ 4958 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4959 "Dwaine Garden <DwaineGarden@rogers.com>" 4960 #define DRIVER_NAME "usbvision" 4961 #define DRIVER_ALIAS "USBVision" 4962 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4963 #define DRIVER_LICENSE "GPL" 4964 #define USBVISION_VERSION_STRING "0.9.11" 4965 #define ENABLE_HEXDUMP 0 4966 #ifdef USBVISION_DEBUG 4967 #define PDEBUG(level, fmt, args...) { \ 4968 if (video_debug & (level)) \ 4969 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4970 __func__, __LINE__ , ## args); \ 4971 } 4972 #else 4973 #define PDEBUG(level, fmt, args...) do {} while (0) 4974 #endif 4975 #define DBG_IO (1 << 1) 4976 #define DBG_PROBE (1 << 2) 4977 #define DBG_MMAP (1 << 3) 4978 #define rmspace(str) while (*str == ' ') str++; 4979 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4980 #define YES_NO(x) ((x) ? "Yes" : "No") 4981 #ifdef CONFIG_VIDEO_ADV_DEBUG 4982 /* LDV_COMMENT_END_PREP */ 4983 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_register" from driver structure with callbacks "usbvision_ioctl_ops" */ 4984 ldv_handler_precall(); 4985 vidioc_g_register( var_group1, var_vidioc_g_register_14_p1, var_vidioc_g_register_14_p2); 4986 /* LDV_COMMENT_BEGIN_PREP */ 4987 #endif 4988 #ifdef CONFIG_VIDEO_ADV_DEBUG 4989 #endif 4990 /* LDV_COMMENT_END_PREP */ 4991 4992 4993 4994 4995 } 4996 4997 break; 4998 case 30: { 4999 5000 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 5001 5002 5003 /* content: static int vidioc_s_register(struct file *file, void *priv, const struct v4l2_dbg_register *reg)*/ 5004 /* LDV_COMMENT_BEGIN_PREP */ 5005 #define DRIVER_AUTHOR \ 5006 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5007 "Dwaine Garden <DwaineGarden@rogers.com>" 5008 #define DRIVER_NAME "usbvision" 5009 #define DRIVER_ALIAS "USBVision" 5010 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5011 #define DRIVER_LICENSE "GPL" 5012 #define USBVISION_VERSION_STRING "0.9.11" 5013 #define ENABLE_HEXDUMP 0 5014 #ifdef USBVISION_DEBUG 5015 #define PDEBUG(level, fmt, args...) { \ 5016 if (video_debug & (level)) \ 5017 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5018 __func__, __LINE__ , ## args); \ 5019 } 5020 #else 5021 #define PDEBUG(level, fmt, args...) do {} while (0) 5022 #endif 5023 #define DBG_IO (1 << 1) 5024 #define DBG_PROBE (1 << 2) 5025 #define DBG_MMAP (1 << 3) 5026 #define rmspace(str) while (*str == ' ') str++; 5027 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5028 #define YES_NO(x) ((x) ? "Yes" : "No") 5029 #ifdef CONFIG_VIDEO_ADV_DEBUG 5030 /* LDV_COMMENT_END_PREP */ 5031 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_register" from driver structure with callbacks "usbvision_ioctl_ops" */ 5032 ldv_handler_precall(); 5033 vidioc_s_register( var_group1, var_vidioc_s_register_15_p1, var_vidioc_s_register_15_p2); 5034 /* LDV_COMMENT_BEGIN_PREP */ 5035 #endif 5036 #ifdef CONFIG_VIDEO_ADV_DEBUG 5037 #endif 5038 /* LDV_COMMENT_END_PREP */ 5039 5040 5041 5042 5043 } 5044 5045 break; 5046 case 31: { 5047 5048 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 5049 if(ldv_s_usbvision_radio_fops_v4l2_file_operations==0) { 5050 5051 /* content: static int usbvision_radio_open(struct file *file)*/ 5052 /* LDV_COMMENT_BEGIN_PREP */ 5053 #define DRIVER_AUTHOR \ 5054 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5055 "Dwaine Garden <DwaineGarden@rogers.com>" 5056 #define DRIVER_NAME "usbvision" 5057 #define DRIVER_ALIAS "USBVision" 5058 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5059 #define DRIVER_LICENSE "GPL" 5060 #define USBVISION_VERSION_STRING "0.9.11" 5061 #define ENABLE_HEXDUMP 0 5062 #ifdef USBVISION_DEBUG 5063 #define PDEBUG(level, fmt, args...) { \ 5064 if (video_debug & (level)) \ 5065 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5066 __func__, __LINE__ , ## args); \ 5067 } 5068 #else 5069 #define PDEBUG(level, fmt, args...) do {} while (0) 5070 #endif 5071 #define DBG_IO (1 << 1) 5072 #define DBG_PROBE (1 << 2) 5073 #define DBG_MMAP (1 << 3) 5074 #define rmspace(str) while (*str == ' ') str++; 5075 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5076 #define YES_NO(x) ((x) ? "Yes" : "No") 5077 #ifdef CONFIG_VIDEO_ADV_DEBUG 5078 #endif 5079 /* LDV_COMMENT_END_PREP */ 5080 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "usbvision_radio_fops". Standart function test for correct return result. */ 5081 ldv_handler_precall(); 5082 res_usbvision_radio_open_45 = usbvision_radio_open( var_group1); 5083 ldv_check_return_value(res_usbvision_radio_open_45); 5084 if(res_usbvision_radio_open_45) 5085 goto ldv_module_exit; 5086 /* LDV_COMMENT_BEGIN_PREP */ 5087 #ifdef CONFIG_VIDEO_ADV_DEBUG 5088 #endif 5089 /* LDV_COMMENT_END_PREP */ 5090 ldv_s_usbvision_radio_fops_v4l2_file_operations++; 5091 5092 } 5093 5094 } 5095 5096 break; 5097 case 32: { 5098 5099 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 5100 if(ldv_s_usbvision_radio_fops_v4l2_file_operations==1) { 5101 5102 /* content: static int usbvision_radio_close(struct file *file)*/ 5103 /* LDV_COMMENT_BEGIN_PREP */ 5104 #define DRIVER_AUTHOR \ 5105 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5106 "Dwaine Garden <DwaineGarden@rogers.com>" 5107 #define DRIVER_NAME "usbvision" 5108 #define DRIVER_ALIAS "USBVision" 5109 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5110 #define DRIVER_LICENSE "GPL" 5111 #define USBVISION_VERSION_STRING "0.9.11" 5112 #define ENABLE_HEXDUMP 0 5113 #ifdef USBVISION_DEBUG 5114 #define PDEBUG(level, fmt, args...) { \ 5115 if (video_debug & (level)) \ 5116 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5117 __func__, __LINE__ , ## args); \ 5118 } 5119 #else 5120 #define PDEBUG(level, fmt, args...) do {} while (0) 5121 #endif 5122 #define DBG_IO (1 << 1) 5123 #define DBG_PROBE (1 << 2) 5124 #define DBG_MMAP (1 << 3) 5125 #define rmspace(str) while (*str == ' ') str++; 5126 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5127 #define YES_NO(x) ((x) ? "Yes" : "No") 5128 #ifdef CONFIG_VIDEO_ADV_DEBUG 5129 #endif 5130 /* LDV_COMMENT_END_PREP */ 5131 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "usbvision_radio_fops" */ 5132 ldv_handler_precall(); 5133 usbvision_radio_close( var_group1); 5134 /* LDV_COMMENT_BEGIN_PREP */ 5135 #ifdef CONFIG_VIDEO_ADV_DEBUG 5136 #endif 5137 /* LDV_COMMENT_END_PREP */ 5138 ldv_s_usbvision_radio_fops_v4l2_file_operations=0; 5139 5140 } 5141 5142 } 5143 5144 break; 5145 case 33: { 5146 5147 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5148 5149 5150 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 5151 /* LDV_COMMENT_BEGIN_PREP */ 5152 #define DRIVER_AUTHOR \ 5153 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5154 "Dwaine Garden <DwaineGarden@rogers.com>" 5155 #define DRIVER_NAME "usbvision" 5156 #define DRIVER_ALIAS "USBVision" 5157 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5158 #define DRIVER_LICENSE "GPL" 5159 #define USBVISION_VERSION_STRING "0.9.11" 5160 #define ENABLE_HEXDUMP 0 5161 #ifdef USBVISION_DEBUG 5162 #define PDEBUG(level, fmt, args...) { \ 5163 if (video_debug & (level)) \ 5164 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5165 __func__, __LINE__ , ## args); \ 5166 } 5167 #else 5168 #define PDEBUG(level, fmt, args...) do {} while (0) 5169 #endif 5170 #define DBG_IO (1 << 1) 5171 #define DBG_PROBE (1 << 2) 5172 #define DBG_MMAP (1 << 3) 5173 #define rmspace(str) while (*str == ' ') str++; 5174 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5175 #define YES_NO(x) ((x) ? "Yes" : "No") 5176 #ifdef CONFIG_VIDEO_ADV_DEBUG 5177 #endif 5178 /* LDV_COMMENT_END_PREP */ 5179 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querycap" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5180 ldv_handler_precall(); 5181 vidioc_querycap( var_group1, var_vidioc_querycap_16_p1, var_vidioc_querycap_16_p2); 5182 /* LDV_COMMENT_BEGIN_PREP */ 5183 #ifdef CONFIG_VIDEO_ADV_DEBUG 5184 #endif 5185 /* LDV_COMMENT_END_PREP */ 5186 5187 5188 5189 5190 } 5191 5192 break; 5193 case 34: { 5194 5195 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5196 5197 5198 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 5199 /* LDV_COMMENT_BEGIN_PREP */ 5200 #define DRIVER_AUTHOR \ 5201 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5202 "Dwaine Garden <DwaineGarden@rogers.com>" 5203 #define DRIVER_NAME "usbvision" 5204 #define DRIVER_ALIAS "USBVision" 5205 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5206 #define DRIVER_LICENSE "GPL" 5207 #define USBVISION_VERSION_STRING "0.9.11" 5208 #define ENABLE_HEXDUMP 0 5209 #ifdef USBVISION_DEBUG 5210 #define PDEBUG(level, fmt, args...) { \ 5211 if (video_debug & (level)) \ 5212 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5213 __func__, __LINE__ , ## args); \ 5214 } 5215 #else 5216 #define PDEBUG(level, fmt, args...) do {} while (0) 5217 #endif 5218 #define DBG_IO (1 << 1) 5219 #define DBG_PROBE (1 << 2) 5220 #define DBG_MMAP (1 << 3) 5221 #define rmspace(str) while (*str == ' ') str++; 5222 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5223 #define YES_NO(x) ((x) ? "Yes" : "No") 5224 #ifdef CONFIG_VIDEO_ADV_DEBUG 5225 #endif 5226 /* LDV_COMMENT_END_PREP */ 5227 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5228 ldv_handler_precall(); 5229 vidioc_enum_input( var_group1, var_vidioc_enum_input_17_p1, var_vidioc_enum_input_17_p2); 5230 /* LDV_COMMENT_BEGIN_PREP */ 5231 #ifdef CONFIG_VIDEO_ADV_DEBUG 5232 #endif 5233 /* LDV_COMMENT_END_PREP */ 5234 5235 5236 5237 5238 } 5239 5240 break; 5241 case 35: { 5242 5243 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5244 5245 5246 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 5247 /* LDV_COMMENT_BEGIN_PREP */ 5248 #define DRIVER_AUTHOR \ 5249 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5250 "Dwaine Garden <DwaineGarden@rogers.com>" 5251 #define DRIVER_NAME "usbvision" 5252 #define DRIVER_ALIAS "USBVision" 5253 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5254 #define DRIVER_LICENSE "GPL" 5255 #define USBVISION_VERSION_STRING "0.9.11" 5256 #define ENABLE_HEXDUMP 0 5257 #ifdef USBVISION_DEBUG 5258 #define PDEBUG(level, fmt, args...) { \ 5259 if (video_debug & (level)) \ 5260 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5261 __func__, __LINE__ , ## args); \ 5262 } 5263 #else 5264 #define PDEBUG(level, fmt, args...) do {} while (0) 5265 #endif 5266 #define DBG_IO (1 << 1) 5267 #define DBG_PROBE (1 << 2) 5268 #define DBG_MMAP (1 << 3) 5269 #define rmspace(str) while (*str == ' ') str++; 5270 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5271 #define YES_NO(x) ((x) ? "Yes" : "No") 5272 #ifdef CONFIG_VIDEO_ADV_DEBUG 5273 #endif 5274 /* LDV_COMMENT_END_PREP */ 5275 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5276 ldv_handler_precall(); 5277 vidioc_g_input( var_group1, var_vidioc_g_input_18_p1, var_vidioc_g_input_18_p2); 5278 /* LDV_COMMENT_BEGIN_PREP */ 5279 #ifdef CONFIG_VIDEO_ADV_DEBUG 5280 #endif 5281 /* LDV_COMMENT_END_PREP */ 5282 5283 5284 5285 5286 } 5287 5288 break; 5289 case 36: { 5290 5291 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5292 5293 5294 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 5295 /* LDV_COMMENT_BEGIN_PREP */ 5296 #define DRIVER_AUTHOR \ 5297 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5298 "Dwaine Garden <DwaineGarden@rogers.com>" 5299 #define DRIVER_NAME "usbvision" 5300 #define DRIVER_ALIAS "USBVision" 5301 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5302 #define DRIVER_LICENSE "GPL" 5303 #define USBVISION_VERSION_STRING "0.9.11" 5304 #define ENABLE_HEXDUMP 0 5305 #ifdef USBVISION_DEBUG 5306 #define PDEBUG(level, fmt, args...) { \ 5307 if (video_debug & (level)) \ 5308 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5309 __func__, __LINE__ , ## args); \ 5310 } 5311 #else 5312 #define PDEBUG(level, fmt, args...) do {} while (0) 5313 #endif 5314 #define DBG_IO (1 << 1) 5315 #define DBG_PROBE (1 << 2) 5316 #define DBG_MMAP (1 << 3) 5317 #define rmspace(str) while (*str == ' ') str++; 5318 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5319 #define YES_NO(x) ((x) ? "Yes" : "No") 5320 #ifdef CONFIG_VIDEO_ADV_DEBUG 5321 #endif 5322 /* LDV_COMMENT_END_PREP */ 5323 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5324 ldv_handler_precall(); 5325 vidioc_s_input( var_group1, var_vidioc_s_input_19_p1, var_vidioc_s_input_19_p2); 5326 /* LDV_COMMENT_BEGIN_PREP */ 5327 #ifdef CONFIG_VIDEO_ADV_DEBUG 5328 #endif 5329 /* LDV_COMMENT_END_PREP */ 5330 5331 5332 5333 5334 } 5335 5336 break; 5337 case 37: { 5338 5339 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5340 5341 5342 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 5343 /* LDV_COMMENT_BEGIN_PREP */ 5344 #define DRIVER_AUTHOR \ 5345 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5346 "Dwaine Garden <DwaineGarden@rogers.com>" 5347 #define DRIVER_NAME "usbvision" 5348 #define DRIVER_ALIAS "USBVision" 5349 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5350 #define DRIVER_LICENSE "GPL" 5351 #define USBVISION_VERSION_STRING "0.9.11" 5352 #define ENABLE_HEXDUMP 0 5353 #ifdef USBVISION_DEBUG 5354 #define PDEBUG(level, fmt, args...) { \ 5355 if (video_debug & (level)) \ 5356 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5357 __func__, __LINE__ , ## args); \ 5358 } 5359 #else 5360 #define PDEBUG(level, fmt, args...) do {} while (0) 5361 #endif 5362 #define DBG_IO (1 << 1) 5363 #define DBG_PROBE (1 << 2) 5364 #define DBG_MMAP (1 << 3) 5365 #define rmspace(str) while (*str == ' ') str++; 5366 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5367 #define YES_NO(x) ((x) ? "Yes" : "No") 5368 #ifdef CONFIG_VIDEO_ADV_DEBUG 5369 #endif 5370 /* LDV_COMMENT_END_PREP */ 5371 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_queryctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5372 ldv_handler_precall(); 5373 vidioc_queryctrl( var_group1, var_vidioc_queryctrl_28_p1, var_vidioc_queryctrl_28_p2); 5374 /* LDV_COMMENT_BEGIN_PREP */ 5375 #ifdef CONFIG_VIDEO_ADV_DEBUG 5376 #endif 5377 /* LDV_COMMENT_END_PREP */ 5378 5379 5380 5381 5382 } 5383 5384 break; 5385 case 38: { 5386 5387 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5388 5389 5390 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 5391 /* LDV_COMMENT_BEGIN_PREP */ 5392 #define DRIVER_AUTHOR \ 5393 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5394 "Dwaine Garden <DwaineGarden@rogers.com>" 5395 #define DRIVER_NAME "usbvision" 5396 #define DRIVER_ALIAS "USBVision" 5397 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5398 #define DRIVER_LICENSE "GPL" 5399 #define USBVISION_VERSION_STRING "0.9.11" 5400 #define ENABLE_HEXDUMP 0 5401 #ifdef USBVISION_DEBUG 5402 #define PDEBUG(level, fmt, args...) { \ 5403 if (video_debug & (level)) \ 5404 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5405 __func__, __LINE__ , ## args); \ 5406 } 5407 #else 5408 #define PDEBUG(level, fmt, args...) do {} while (0) 5409 #endif 5410 #define DBG_IO (1 << 1) 5411 #define DBG_PROBE (1 << 2) 5412 #define DBG_MMAP (1 << 3) 5413 #define rmspace(str) while (*str == ' ') str++; 5414 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5415 #define YES_NO(x) ((x) ? "Yes" : "No") 5416 #ifdef CONFIG_VIDEO_ADV_DEBUG 5417 #endif 5418 /* LDV_COMMENT_END_PREP */ 5419 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_audio" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5420 ldv_handler_precall(); 5421 vidioc_g_audio( var_group1, var_vidioc_g_audio_26_p1, var_vidioc_g_audio_26_p2); 5422 /* LDV_COMMENT_BEGIN_PREP */ 5423 #ifdef CONFIG_VIDEO_ADV_DEBUG 5424 #endif 5425 /* LDV_COMMENT_END_PREP */ 5426 5427 5428 5429 5430 } 5431 5432 break; 5433 case 39: { 5434 5435 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5436 5437 5438 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 5439 /* LDV_COMMENT_BEGIN_PREP */ 5440 #define DRIVER_AUTHOR \ 5441 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5442 "Dwaine Garden <DwaineGarden@rogers.com>" 5443 #define DRIVER_NAME "usbvision" 5444 #define DRIVER_ALIAS "USBVision" 5445 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5446 #define DRIVER_LICENSE "GPL" 5447 #define USBVISION_VERSION_STRING "0.9.11" 5448 #define ENABLE_HEXDUMP 0 5449 #ifdef USBVISION_DEBUG 5450 #define PDEBUG(level, fmt, args...) { \ 5451 if (video_debug & (level)) \ 5452 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5453 __func__, __LINE__ , ## args); \ 5454 } 5455 #else 5456 #define PDEBUG(level, fmt, args...) do {} while (0) 5457 #endif 5458 #define DBG_IO (1 << 1) 5459 #define DBG_PROBE (1 << 2) 5460 #define DBG_MMAP (1 << 3) 5461 #define rmspace(str) while (*str == ' ') str++; 5462 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5463 #define YES_NO(x) ((x) ? "Yes" : "No") 5464 #ifdef CONFIG_VIDEO_ADV_DEBUG 5465 #endif 5466 /* LDV_COMMENT_END_PREP */ 5467 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_audio" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5468 ldv_handler_precall(); 5469 vidioc_s_audio( var_group1, var_vidioc_s_audio_27_p1, var_vidioc_s_audio_27_p2); 5470 /* LDV_COMMENT_BEGIN_PREP */ 5471 #ifdef CONFIG_VIDEO_ADV_DEBUG 5472 #endif 5473 /* LDV_COMMENT_END_PREP */ 5474 5475 5476 5477 5478 } 5479 5480 break; 5481 case 40: { 5482 5483 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5484 5485 5486 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 5487 /* LDV_COMMENT_BEGIN_PREP */ 5488 #define DRIVER_AUTHOR \ 5489 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5490 "Dwaine Garden <DwaineGarden@rogers.com>" 5491 #define DRIVER_NAME "usbvision" 5492 #define DRIVER_ALIAS "USBVision" 5493 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5494 #define DRIVER_LICENSE "GPL" 5495 #define USBVISION_VERSION_STRING "0.9.11" 5496 #define ENABLE_HEXDUMP 0 5497 #ifdef USBVISION_DEBUG 5498 #define PDEBUG(level, fmt, args...) { \ 5499 if (video_debug & (level)) \ 5500 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5501 __func__, __LINE__ , ## args); \ 5502 } 5503 #else 5504 #define PDEBUG(level, fmt, args...) do {} while (0) 5505 #endif 5506 #define DBG_IO (1 << 1) 5507 #define DBG_PROBE (1 << 2) 5508 #define DBG_MMAP (1 << 3) 5509 #define rmspace(str) while (*str == ' ') str++; 5510 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5511 #define YES_NO(x) ((x) ? "Yes" : "No") 5512 #ifdef CONFIG_VIDEO_ADV_DEBUG 5513 #endif 5514 /* LDV_COMMENT_END_PREP */ 5515 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_ctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5516 ldv_handler_precall(); 5517 vidioc_g_ctrl( var_group1, var_vidioc_g_ctrl_29_p1, var_vidioc_g_ctrl_29_p2); 5518 /* LDV_COMMENT_BEGIN_PREP */ 5519 #ifdef CONFIG_VIDEO_ADV_DEBUG 5520 #endif 5521 /* LDV_COMMENT_END_PREP */ 5522 5523 5524 5525 5526 } 5527 5528 break; 5529 case 41: { 5530 5531 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5532 5533 5534 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 5535 /* LDV_COMMENT_BEGIN_PREP */ 5536 #define DRIVER_AUTHOR \ 5537 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5538 "Dwaine Garden <DwaineGarden@rogers.com>" 5539 #define DRIVER_NAME "usbvision" 5540 #define DRIVER_ALIAS "USBVision" 5541 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5542 #define DRIVER_LICENSE "GPL" 5543 #define USBVISION_VERSION_STRING "0.9.11" 5544 #define ENABLE_HEXDUMP 0 5545 #ifdef USBVISION_DEBUG 5546 #define PDEBUG(level, fmt, args...) { \ 5547 if (video_debug & (level)) \ 5548 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5549 __func__, __LINE__ , ## args); \ 5550 } 5551 #else 5552 #define PDEBUG(level, fmt, args...) do {} while (0) 5553 #endif 5554 #define DBG_IO (1 << 1) 5555 #define DBG_PROBE (1 << 2) 5556 #define DBG_MMAP (1 << 3) 5557 #define rmspace(str) while (*str == ' ') str++; 5558 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5559 #define YES_NO(x) ((x) ? "Yes" : "No") 5560 #ifdef CONFIG_VIDEO_ADV_DEBUG 5561 #endif 5562 /* LDV_COMMENT_END_PREP */ 5563 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_ctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5564 ldv_handler_precall(); 5565 vidioc_s_ctrl( var_group1, var_vidioc_s_ctrl_30_p1, var_vidioc_s_ctrl_30_p2); 5566 /* LDV_COMMENT_BEGIN_PREP */ 5567 #ifdef CONFIG_VIDEO_ADV_DEBUG 5568 #endif 5569 /* LDV_COMMENT_END_PREP */ 5570 5571 5572 5573 5574 } 5575 5576 break; 5577 case 42: { 5578 5579 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5580 5581 5582 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 5583 /* LDV_COMMENT_BEGIN_PREP */ 5584 #define DRIVER_AUTHOR \ 5585 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5586 "Dwaine Garden <DwaineGarden@rogers.com>" 5587 #define DRIVER_NAME "usbvision" 5588 #define DRIVER_ALIAS "USBVision" 5589 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5590 #define DRIVER_LICENSE "GPL" 5591 #define USBVISION_VERSION_STRING "0.9.11" 5592 #define ENABLE_HEXDUMP 0 5593 #ifdef USBVISION_DEBUG 5594 #define PDEBUG(level, fmt, args...) { \ 5595 if (video_debug & (level)) \ 5596 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5597 __func__, __LINE__ , ## args); \ 5598 } 5599 #else 5600 #define PDEBUG(level, fmt, args...) do {} while (0) 5601 #endif 5602 #define DBG_IO (1 << 1) 5603 #define DBG_PROBE (1 << 2) 5604 #define DBG_MMAP (1 << 3) 5605 #define rmspace(str) while (*str == ' ') str++; 5606 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5607 #define YES_NO(x) ((x) ? "Yes" : "No") 5608 #ifdef CONFIG_VIDEO_ADV_DEBUG 5609 #endif 5610 /* LDV_COMMENT_END_PREP */ 5611 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_tuner" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5612 ldv_handler_precall(); 5613 vidioc_g_tuner( var_group1, var_vidioc_g_tuner_22_p1, var_vidioc_g_tuner_22_p2); 5614 /* LDV_COMMENT_BEGIN_PREP */ 5615 #ifdef CONFIG_VIDEO_ADV_DEBUG 5616 #endif 5617 /* LDV_COMMENT_END_PREP */ 5618 5619 5620 5621 5622 } 5623 5624 break; 5625 case 43: { 5626 5627 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5628 5629 5630 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 5631 /* LDV_COMMENT_BEGIN_PREP */ 5632 #define DRIVER_AUTHOR \ 5633 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5634 "Dwaine Garden <DwaineGarden@rogers.com>" 5635 #define DRIVER_NAME "usbvision" 5636 #define DRIVER_ALIAS "USBVision" 5637 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5638 #define DRIVER_LICENSE "GPL" 5639 #define USBVISION_VERSION_STRING "0.9.11" 5640 #define ENABLE_HEXDUMP 0 5641 #ifdef USBVISION_DEBUG 5642 #define PDEBUG(level, fmt, args...) { \ 5643 if (video_debug & (level)) \ 5644 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5645 __func__, __LINE__ , ## args); \ 5646 } 5647 #else 5648 #define PDEBUG(level, fmt, args...) do {} while (0) 5649 #endif 5650 #define DBG_IO (1 << 1) 5651 #define DBG_PROBE (1 << 2) 5652 #define DBG_MMAP (1 << 3) 5653 #define rmspace(str) while (*str == ' ') str++; 5654 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5655 #define YES_NO(x) ((x) ? "Yes" : "No") 5656 #ifdef CONFIG_VIDEO_ADV_DEBUG 5657 #endif 5658 /* LDV_COMMENT_END_PREP */ 5659 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_tuner" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5660 ldv_handler_precall(); 5661 vidioc_s_tuner( var_group1, var_vidioc_s_tuner_23_p1, var_vidioc_s_tuner_23_p2); 5662 /* LDV_COMMENT_BEGIN_PREP */ 5663 #ifdef CONFIG_VIDEO_ADV_DEBUG 5664 #endif 5665 /* LDV_COMMENT_END_PREP */ 5666 5667 5668 5669 5670 } 5671 5672 break; 5673 case 44: { 5674 5675 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5676 5677 5678 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 5679 /* LDV_COMMENT_BEGIN_PREP */ 5680 #define DRIVER_AUTHOR \ 5681 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5682 "Dwaine Garden <DwaineGarden@rogers.com>" 5683 #define DRIVER_NAME "usbvision" 5684 #define DRIVER_ALIAS "USBVision" 5685 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5686 #define DRIVER_LICENSE "GPL" 5687 #define USBVISION_VERSION_STRING "0.9.11" 5688 #define ENABLE_HEXDUMP 0 5689 #ifdef USBVISION_DEBUG 5690 #define PDEBUG(level, fmt, args...) { \ 5691 if (video_debug & (level)) \ 5692 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5693 __func__, __LINE__ , ## args); \ 5694 } 5695 #else 5696 #define PDEBUG(level, fmt, args...) do {} while (0) 5697 #endif 5698 #define DBG_IO (1 << 1) 5699 #define DBG_PROBE (1 << 2) 5700 #define DBG_MMAP (1 << 3) 5701 #define rmspace(str) while (*str == ' ') str++; 5702 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5703 #define YES_NO(x) ((x) ? "Yes" : "No") 5704 #ifdef CONFIG_VIDEO_ADV_DEBUG 5705 #endif 5706 /* LDV_COMMENT_END_PREP */ 5707 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_frequency" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5708 ldv_handler_precall(); 5709 vidioc_g_frequency( var_group1, var_vidioc_g_frequency_24_p1, var_vidioc_g_frequency_24_p2); 5710 /* LDV_COMMENT_BEGIN_PREP */ 5711 #ifdef CONFIG_VIDEO_ADV_DEBUG 5712 #endif 5713 /* LDV_COMMENT_END_PREP */ 5714 5715 5716 5717 5718 } 5719 5720 break; 5721 case 45: { 5722 5723 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5724 5725 5726 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 5727 /* LDV_COMMENT_BEGIN_PREP */ 5728 #define DRIVER_AUTHOR \ 5729 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5730 "Dwaine Garden <DwaineGarden@rogers.com>" 5731 #define DRIVER_NAME "usbvision" 5732 #define DRIVER_ALIAS "USBVision" 5733 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5734 #define DRIVER_LICENSE "GPL" 5735 #define USBVISION_VERSION_STRING "0.9.11" 5736 #define ENABLE_HEXDUMP 0 5737 #ifdef USBVISION_DEBUG 5738 #define PDEBUG(level, fmt, args...) { \ 5739 if (video_debug & (level)) \ 5740 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5741 __func__, __LINE__ , ## args); \ 5742 } 5743 #else 5744 #define PDEBUG(level, fmt, args...) do {} while (0) 5745 #endif 5746 #define DBG_IO (1 << 1) 5747 #define DBG_PROBE (1 << 2) 5748 #define DBG_MMAP (1 << 3) 5749 #define rmspace(str) while (*str == ' ') str++; 5750 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5751 #define YES_NO(x) ((x) ? "Yes" : "No") 5752 #ifdef CONFIG_VIDEO_ADV_DEBUG 5753 #endif 5754 /* LDV_COMMENT_END_PREP */ 5755 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_frequency" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5756 ldv_handler_precall(); 5757 vidioc_s_frequency( var_group1, var_vidioc_s_frequency_25_p1, var_vidioc_s_frequency_25_p2); 5758 /* LDV_COMMENT_BEGIN_PREP */ 5759 #ifdef CONFIG_VIDEO_ADV_DEBUG 5760 #endif 5761 /* LDV_COMMENT_END_PREP */ 5762 5763 5764 5765 5766 } 5767 5768 break; 5769 case 46: { 5770 5771 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 5772 if(ldv_s_usbvision_driver_usb_driver==0) { 5773 5774 /* content: static int usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid)*/ 5775 /* LDV_COMMENT_BEGIN_PREP */ 5776 #define DRIVER_AUTHOR \ 5777 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5778 "Dwaine Garden <DwaineGarden@rogers.com>" 5779 #define DRIVER_NAME "usbvision" 5780 #define DRIVER_ALIAS "USBVision" 5781 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5782 #define DRIVER_LICENSE "GPL" 5783 #define USBVISION_VERSION_STRING "0.9.11" 5784 #define ENABLE_HEXDUMP 0 5785 #ifdef USBVISION_DEBUG 5786 #define PDEBUG(level, fmt, args...) { \ 5787 if (video_debug & (level)) \ 5788 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5789 __func__, __LINE__ , ## args); \ 5790 } 5791 #else 5792 #define PDEBUG(level, fmt, args...) do {} while (0) 5793 #endif 5794 #define DBG_IO (1 << 1) 5795 #define DBG_PROBE (1 << 2) 5796 #define DBG_MMAP (1 << 3) 5797 #define rmspace(str) while (*str == ' ') str++; 5798 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5799 #define YES_NO(x) ((x) ? "Yes" : "No") 5800 #ifdef CONFIG_VIDEO_ADV_DEBUG 5801 #endif 5802 #ifdef CONFIG_VIDEO_ADV_DEBUG 5803 #endif 5804 /* LDV_COMMENT_END_PREP */ 5805 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "usbvision_driver". Standart function test for correct return result. */ 5806 res_usbvision_probe_53 = usbvision_probe( var_group3, var_usbvision_probe_53_p1); 5807 ldv_check_return_value(res_usbvision_probe_53); 5808 ldv_check_return_value_probe(res_usbvision_probe_53); 5809 if(res_usbvision_probe_53) 5810 goto ldv_module_exit; 5811 ldv_s_usbvision_driver_usb_driver++; 5812 5813 } 5814 5815 } 5816 5817 break; 5818 case 47: { 5819 5820 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 5821 if(ldv_s_usbvision_driver_usb_driver==1) { 5822 5823 /* content: static void usbvision_disconnect(struct usb_interface *intf)*/ 5824 /* LDV_COMMENT_BEGIN_PREP */ 5825 #define DRIVER_AUTHOR \ 5826 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5827 "Dwaine Garden <DwaineGarden@rogers.com>" 5828 #define DRIVER_NAME "usbvision" 5829 #define DRIVER_ALIAS "USBVision" 5830 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5831 #define DRIVER_LICENSE "GPL" 5832 #define USBVISION_VERSION_STRING "0.9.11" 5833 #define ENABLE_HEXDUMP 0 5834 #ifdef USBVISION_DEBUG 5835 #define PDEBUG(level, fmt, args...) { \ 5836 if (video_debug & (level)) \ 5837 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5838 __func__, __LINE__ , ## args); \ 5839 } 5840 #else 5841 #define PDEBUG(level, fmt, args...) do {} while (0) 5842 #endif 5843 #define DBG_IO (1 << 1) 5844 #define DBG_PROBE (1 << 2) 5845 #define DBG_MMAP (1 << 3) 5846 #define rmspace(str) while (*str == ' ') str++; 5847 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5848 #define YES_NO(x) ((x) ? "Yes" : "No") 5849 #ifdef CONFIG_VIDEO_ADV_DEBUG 5850 #endif 5851 #ifdef CONFIG_VIDEO_ADV_DEBUG 5852 #endif 5853 /* LDV_COMMENT_END_PREP */ 5854 /* LDV_COMMENT_FUNCTION_CALL Function from field "disconnect" from driver structure with callbacks "usbvision_driver" */ 5855 ldv_handler_precall(); 5856 usbvision_disconnect( var_group3); 5857 ldv_s_usbvision_driver_usb_driver=0; 5858 5859 } 5860 5861 } 5862 5863 break; 5864 default: break; 5865 5866 } 5867 5868 } 5869 5870 ldv_module_exit: 5871 5872 /** INIT: init_type: ST_MODULE_EXIT **/ 5873 /* content: static void __exit usbvision_exit(void)*/ 5874 /* LDV_COMMENT_BEGIN_PREP */ 5875 #define DRIVER_AUTHOR \ 5876 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5877 "Dwaine Garden <DwaineGarden@rogers.com>" 5878 #define DRIVER_NAME "usbvision" 5879 #define DRIVER_ALIAS "USBVision" 5880 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5881 #define DRIVER_LICENSE "GPL" 5882 #define USBVISION_VERSION_STRING "0.9.11" 5883 #define ENABLE_HEXDUMP 0 5884 #ifdef USBVISION_DEBUG 5885 #define PDEBUG(level, fmt, args...) { \ 5886 if (video_debug & (level)) \ 5887 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5888 __func__, __LINE__ , ## args); \ 5889 } 5890 #else 5891 #define PDEBUG(level, fmt, args...) do {} while (0) 5892 #endif 5893 #define DBG_IO (1 << 1) 5894 #define DBG_PROBE (1 << 2) 5895 #define DBG_MMAP (1 << 3) 5896 #define rmspace(str) while (*str == ' ') str++; 5897 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5898 #define YES_NO(x) ((x) ? "Yes" : "No") 5899 #ifdef CONFIG_VIDEO_ADV_DEBUG 5900 #endif 5901 #ifdef CONFIG_VIDEO_ADV_DEBUG 5902 #endif 5903 /* LDV_COMMENT_END_PREP */ 5904 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */ 5905 ldv_handler_precall(); 5906 usbvision_exit(); 5907 5908 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */ 5909 ldv_final: ldv_check_final_state(); 5910 5911 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */ 5912 return; 5913 5914 } 5915 #endif 5916 5917 /* LDV_COMMENT_END_MAIN */
1 2 #include <linux/kernel.h> 3 bool ldv_is_err(const void *ptr); 4 bool ldv_is_err_or_null(const void *ptr); 5 void* ldv_err_ptr(long error); 6 long ldv_ptr_err(const void *ptr); 7 8 #include <linux/module.h> 9 #include <linux/usb.h> 10 11 // Provide model function prototypes before their usage. 12 void ldv_usb_get_dev(void); 13 void ldv_usb_put_dev(void); 14 #line 1 "/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/ri/132_1a/drivers/media/usb/usbvision/usbvision-video.c" 15 16 /* 17 * USB USBVISION Video device driver 0.9.10 18 * 19 * 20 * 21 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de> 22 * 23 * This module is part of usbvision driver project. 24 * 25 * This program is free software; you can redistribute it and/or modify 26 * it under the terms of the GNU General Public License as published by 27 * the Free Software Foundation; either version 2 of the License, or 28 * (at your option) any later version. 29 * 30 * This program is distributed in the hope that it will be useful, 31 * but WITHOUT ANY WARRANTY; without even the implied warranty of 32 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 33 * GNU General Public License for more details. 34 * 35 * You should have received a copy of the GNU General Public License 36 * along with this program; if not, write to the Free Software 37 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 38 * 39 * Let's call the version 0.... until compression decoding is completely 40 * implemented. 41 * 42 * This driver is written by Jose Ignacio Gijon and Joerg Heckenbach. 43 * It was based on USB CPiA driver written by Peter Pregler, 44 * Scott J. Bertin and Johannes Erdfelt 45 * Ideas are taken from bttv driver by Ralph Metzler, Marcus Metzler & 46 * Gerd Knorr and zoran 36120/36125 driver by Pauline Middelink 47 * Updates to driver completed by Dwaine P. Garden 48 * 49 * 50 * TODO: 51 * - use submit_urb for all setup packets 52 * - Fix memory settings for nt1004. It is 4 times as big as the 53 * nt1003 memory. 54 * - Add audio on endpoint 3 for nt1004 chip. 55 * Seems impossible, needs a codec interface. Which one? 56 * - Clean up the driver. 57 * - optimization for performance. 58 * - Add Videotext capability (VBI). Working on it..... 59 * - Check audio for other devices 60 * 61 */ 62 63 #include <linux/kernel.h> 64 #include <linux/list.h> 65 #include <linux/timer.h> 66 #include <linux/slab.h> 67 #include <linux/mm.h> 68 #include <linux/highmem.h> 69 #include <linux/vmalloc.h> 70 #include <linux/module.h> 71 #include <linux/init.h> 72 #include <linux/spinlock.h> 73 #include <linux/io.h> 74 #include <linux/videodev2.h> 75 #include <linux/i2c.h> 76 77 #include <media/saa7115.h> 78 #include <media/v4l2-common.h> 79 #include <media/v4l2-ioctl.h> 80 #include <media/tuner.h> 81 82 #include <linux/workqueue.h> 83 84 #include "usbvision.h" 85 #include "usbvision-cards.h" 86 87 #define DRIVER_AUTHOR \ 88 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 89 "Dwaine Garden <DwaineGarden@rogers.com>" 90 #define DRIVER_NAME "usbvision" 91 #define DRIVER_ALIAS "USBVision" 92 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 93 #define DRIVER_LICENSE "GPL" 94 #define USBVISION_VERSION_STRING "0.9.11" 95 96 #define ENABLE_HEXDUMP 0 /* Enable if you need it */ 97 98 99 #ifdef USBVISION_DEBUG 100 #define PDEBUG(level, fmt, args...) { \ 101 if (video_debug & (level)) \ 102 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 103 __func__, __LINE__ , ## args); \ 104 } 105 #else 106 #define PDEBUG(level, fmt, args...) do {} while (0) 107 #endif 108 109 #define DBG_IO (1 << 1) 110 #define DBG_PROBE (1 << 2) 111 #define DBG_MMAP (1 << 3) 112 113 /* String operations */ 114 #define rmspace(str) while (*str == ' ') str++; 115 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 116 117 118 /* sequential number of usbvision device */ 119 static int usbvision_nr; 120 121 static struct usbvision_v4l2_format_st usbvision_v4l2_format[] = { 122 { 1, 1, 8, V4L2_PIX_FMT_GREY , "GREY" }, 123 { 1, 2, 16, V4L2_PIX_FMT_RGB565 , "RGB565" }, 124 { 1, 3, 24, V4L2_PIX_FMT_RGB24 , "RGB24" }, 125 { 1, 4, 32, V4L2_PIX_FMT_RGB32 , "RGB32" }, 126 { 1, 2, 16, V4L2_PIX_FMT_RGB555 , "RGB555" }, 127 { 1, 2, 16, V4L2_PIX_FMT_YUYV , "YUV422" }, 128 { 1, 2, 12, V4L2_PIX_FMT_YVU420 , "YUV420P" }, /* 1.5 ! */ 129 { 1, 2, 16, V4L2_PIX_FMT_YUV422P , "YUV422P" } 130 }; 131 132 /* Function prototypes */ 133 static void usbvision_release(struct usb_usbvision *usbvision); 134 135 /* Default initialization of device driver parameters */ 136 /* Set the default format for ISOC endpoint */ 137 static int isoc_mode = ISOC_MODE_COMPRESS; 138 /* Set the default Debug Mode of the device driver */ 139 static int video_debug; 140 /* Set the default device to power on at startup */ 141 static int power_on_at_open = 1; 142 /* Sequential Number of Video Device */ 143 static int video_nr = -1; 144 /* Sequential Number of Radio Device */ 145 static int radio_nr = -1; 146 147 /* Grab parameters for the device driver */ 148 149 /* Showing parameters under SYSFS */ 150 module_param(isoc_mode, int, 0444); 151 module_param(video_debug, int, 0444); 152 module_param(power_on_at_open, int, 0444); 153 module_param(video_nr, int, 0444); 154 module_param(radio_nr, int, 0444); 155 156 MODULE_PARM_DESC(isoc_mode, " Set the default format for ISOC endpoint. Default: 0x60 (Compression On)"); 157 MODULE_PARM_DESC(video_debug, " Set the default Debug Mode of the device driver. Default: 0 (Off)"); 158 MODULE_PARM_DESC(power_on_at_open, " Set the default device to power on when device is opened. Default: 1 (On)"); 159 MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)"); 160 MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)"); 161 162 163 /* Misc stuff */ 164 MODULE_AUTHOR(DRIVER_AUTHOR); 165 MODULE_DESCRIPTION(DRIVER_DESC); 166 MODULE_LICENSE(DRIVER_LICENSE); 167 MODULE_VERSION(USBVISION_VERSION_STRING); 168 MODULE_ALIAS(DRIVER_ALIAS); 169 170 171 /*****************************************************************************/ 172 /* SYSFS Code - Copied from the stv680.c usb module. */ 173 /* Device information is located at /sys/class/video4linux/video0 */ 174 /* Device parameters information is located at /sys/module/usbvision */ 175 /* Device USB Information is located at */ 176 /* /sys/bus/usb/drivers/USBVision Video Grabber */ 177 /*****************************************************************************/ 178 179 #define YES_NO(x) ((x) ? "Yes" : "No") 180 181 static inline struct usb_usbvision *cd_to_usbvision(struct device *cd) 182 { 183 struct video_device *vdev = 184 container_of(cd, struct video_device, dev); 185 return video_get_drvdata(vdev); 186 } 187 188 static ssize_t show_version(struct device *cd, 189 struct device_attribute *attr, char *buf) 190 { 191 return sprintf(buf, "%s\n", USBVISION_VERSION_STRING); 192 } 193 static DEVICE_ATTR(version, S_IRUGO, show_version, NULL); 194 195 static ssize_t show_model(struct device *cd, 196 struct device_attribute *attr, char *buf) 197 { 198 struct video_device *vdev = 199 container_of(cd, struct video_device, dev); 200 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 201 return sprintf(buf, "%s\n", 202 usbvision_device_data[usbvision->dev_model].model_string); 203 } 204 static DEVICE_ATTR(model, S_IRUGO, show_model, NULL); 205 206 static ssize_t show_hue(struct device *cd, 207 struct device_attribute *attr, char *buf) 208 { 209 struct video_device *vdev = 210 container_of(cd, struct video_device, dev); 211 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 212 struct v4l2_control ctrl; 213 ctrl.id = V4L2_CID_HUE; 214 ctrl.value = 0; 215 if (usbvision->user) 216 call_all(usbvision, core, g_ctrl, &ctrl); 217 return sprintf(buf, "%d\n", ctrl.value); 218 } 219 static DEVICE_ATTR(hue, S_IRUGO, show_hue, NULL); 220 221 static ssize_t show_contrast(struct device *cd, 222 struct device_attribute *attr, char *buf) 223 { 224 struct video_device *vdev = 225 container_of(cd, struct video_device, dev); 226 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 227 struct v4l2_control ctrl; 228 ctrl.id = V4L2_CID_CONTRAST; 229 ctrl.value = 0; 230 if (usbvision->user) 231 call_all(usbvision, core, g_ctrl, &ctrl); 232 return sprintf(buf, "%d\n", ctrl.value); 233 } 234 static DEVICE_ATTR(contrast, S_IRUGO, show_contrast, NULL); 235 236 static ssize_t show_brightness(struct device *cd, 237 struct device_attribute *attr, char *buf) 238 { 239 struct video_device *vdev = 240 container_of(cd, struct video_device, dev); 241 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 242 struct v4l2_control ctrl; 243 ctrl.id = V4L2_CID_BRIGHTNESS; 244 ctrl.value = 0; 245 if (usbvision->user) 246 call_all(usbvision, core, g_ctrl, &ctrl); 247 return sprintf(buf, "%d\n", ctrl.value); 248 } 249 static DEVICE_ATTR(brightness, S_IRUGO, show_brightness, NULL); 250 251 static ssize_t show_saturation(struct device *cd, 252 struct device_attribute *attr, char *buf) 253 { 254 struct video_device *vdev = 255 container_of(cd, struct video_device, dev); 256 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 257 struct v4l2_control ctrl; 258 ctrl.id = V4L2_CID_SATURATION; 259 ctrl.value = 0; 260 if (usbvision->user) 261 call_all(usbvision, core, g_ctrl, &ctrl); 262 return sprintf(buf, "%d\n", ctrl.value); 263 } 264 static DEVICE_ATTR(saturation, S_IRUGO, show_saturation, NULL); 265 266 static ssize_t show_streaming(struct device *cd, 267 struct device_attribute *attr, char *buf) 268 { 269 struct video_device *vdev = 270 container_of(cd, struct video_device, dev); 271 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 272 return sprintf(buf, "%s\n", 273 YES_NO(usbvision->streaming == stream_on ? 1 : 0)); 274 } 275 static DEVICE_ATTR(streaming, S_IRUGO, show_streaming, NULL); 276 277 static ssize_t show_compression(struct device *cd, 278 struct device_attribute *attr, char *buf) 279 { 280 struct video_device *vdev = 281 container_of(cd, struct video_device, dev); 282 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 283 return sprintf(buf, "%s\n", 284 YES_NO(usbvision->isoc_mode == ISOC_MODE_COMPRESS)); 285 } 286 static DEVICE_ATTR(compression, S_IRUGO, show_compression, NULL); 287 288 static ssize_t show_device_bridge(struct device *cd, 289 struct device_attribute *attr, char *buf) 290 { 291 struct video_device *vdev = 292 container_of(cd, struct video_device, dev); 293 struct usb_usbvision *usbvision = video_get_drvdata(vdev); 294 return sprintf(buf, "%d\n", usbvision->bridge_type); 295 } 296 static DEVICE_ATTR(bridge, S_IRUGO, show_device_bridge, NULL); 297 298 static void usbvision_create_sysfs(struct video_device *vdev) 299 { 300 int res; 301 302 if (!vdev) 303 return; 304 do { 305 res = device_create_file(&vdev->dev, &dev_attr_version); 306 if (res < 0) 307 break; 308 res = device_create_file(&vdev->dev, &dev_attr_model); 309 if (res < 0) 310 break; 311 res = device_create_file(&vdev->dev, &dev_attr_hue); 312 if (res < 0) 313 break; 314 res = device_create_file(&vdev->dev, &dev_attr_contrast); 315 if (res < 0) 316 break; 317 res = device_create_file(&vdev->dev, &dev_attr_brightness); 318 if (res < 0) 319 break; 320 res = device_create_file(&vdev->dev, &dev_attr_saturation); 321 if (res < 0) 322 break; 323 res = device_create_file(&vdev->dev, &dev_attr_streaming); 324 if (res < 0) 325 break; 326 res = device_create_file(&vdev->dev, &dev_attr_compression); 327 if (res < 0) 328 break; 329 res = device_create_file(&vdev->dev, &dev_attr_bridge); 330 if (res >= 0) 331 return; 332 } while (0); 333 334 dev_err(&vdev->dev, "%s error: %d\n", __func__, res); 335 } 336 337 static void usbvision_remove_sysfs(struct video_device *vdev) 338 { 339 if (vdev) { 340 device_remove_file(&vdev->dev, &dev_attr_version); 341 device_remove_file(&vdev->dev, &dev_attr_model); 342 device_remove_file(&vdev->dev, &dev_attr_hue); 343 device_remove_file(&vdev->dev, &dev_attr_contrast); 344 device_remove_file(&vdev->dev, &dev_attr_brightness); 345 device_remove_file(&vdev->dev, &dev_attr_saturation); 346 device_remove_file(&vdev->dev, &dev_attr_streaming); 347 device_remove_file(&vdev->dev, &dev_attr_compression); 348 device_remove_file(&vdev->dev, &dev_attr_bridge); 349 } 350 } 351 352 /* 353 * usbvision_open() 354 * 355 * This is part of Video 4 Linux API. The driver can be opened by one 356 * client only (checks internal counter 'usbvision->user'). The procedure 357 * then allocates buffers needed for video processing. 358 * 359 */ 360 static int usbvision_v4l2_open(struct file *file) 361 { 362 struct usb_usbvision *usbvision = video_drvdata(file); 363 int err_code = 0; 364 365 PDEBUG(DBG_IO, "open"); 366 367 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 368 return -ERESTARTSYS; 369 usbvision_reset_power_off_timer(usbvision); 370 371 if (usbvision->user) 372 err_code = -EBUSY; 373 else { 374 /* Allocate memory for the scratch ring buffer */ 375 err_code = usbvision_scratch_alloc(usbvision); 376 if (isoc_mode == ISOC_MODE_COMPRESS) { 377 /* Allocate intermediate decompression buffers 378 only if needed */ 379 err_code = usbvision_decompress_alloc(usbvision); 380 } 381 if (err_code) { 382 /* Deallocate all buffers if trouble */ 383 usbvision_scratch_free(usbvision); 384 usbvision_decompress_free(usbvision); 385 } 386 } 387 388 /* If so far no errors then we shall start the camera */ 389 if (!err_code) { 390 if (usbvision->power == 0) { 391 usbvision_power_on(usbvision); 392 usbvision_i2c_register(usbvision); 393 } 394 395 /* Send init sequence only once, it's large! */ 396 if (!usbvision->initialized) { 397 int setup_ok = 0; 398 setup_ok = usbvision_setup(usbvision, isoc_mode); 399 if (setup_ok) 400 usbvision->initialized = 1; 401 else 402 err_code = -EBUSY; 403 } 404 405 if (!err_code) { 406 usbvision_begin_streaming(usbvision); 407 err_code = usbvision_init_isoc(usbvision); 408 /* device must be initialized before isoc transfer */ 409 usbvision_muxsel(usbvision, 0); 410 usbvision->user++; 411 } else { 412 if (power_on_at_open) { 413 usbvision_i2c_unregister(usbvision); 414 usbvision_power_off(usbvision); 415 usbvision->initialized = 0; 416 } 417 } 418 } 419 420 /* prepare queues */ 421 usbvision_empty_framequeues(usbvision); 422 mutex_unlock(&usbvision->v4l2_lock); 423 424 PDEBUG(DBG_IO, "success"); 425 return err_code; 426 } 427 428 /* 429 * usbvision_v4l2_close() 430 * 431 * This is part of Video 4 Linux API. The procedure 432 * stops streaming and deallocates all buffers that were earlier 433 * allocated in usbvision_v4l2_open(). 434 * 435 */ 436 static int usbvision_v4l2_close(struct file *file) 437 { 438 struct usb_usbvision *usbvision = video_drvdata(file); 439 440 PDEBUG(DBG_IO, "close"); 441 442 mutex_lock(&usbvision->v4l2_lock); 443 usbvision_audio_off(usbvision); 444 usbvision_restart_isoc(usbvision); 445 usbvision_stop_isoc(usbvision); 446 447 usbvision_decompress_free(usbvision); 448 usbvision_frames_free(usbvision); 449 usbvision_empty_framequeues(usbvision); 450 usbvision_scratch_free(usbvision); 451 452 usbvision->user--; 453 454 if (power_on_at_open) { 455 /* power off in a little while 456 to avoid off/on every close/open short sequences */ 457 usbvision_set_power_off_timer(usbvision); 458 usbvision->initialized = 0; 459 } 460 461 if (usbvision->remove_pending) { 462 printk(KERN_INFO "%s: Final disconnect\n", __func__); 463 usbvision_release(usbvision); 464 return 0; 465 } 466 mutex_unlock(&usbvision->v4l2_lock); 467 468 PDEBUG(DBG_IO, "success"); 469 return 0; 470 } 471 472 473 /* 474 * usbvision_ioctl() 475 * 476 * This is part of Video 4 Linux API. The procedure handles ioctl() calls. 477 * 478 */ 479 #ifdef CONFIG_VIDEO_ADV_DEBUG 480 static int vidioc_g_register(struct file *file, void *priv, 481 struct v4l2_dbg_register *reg) 482 { 483 struct usb_usbvision *usbvision = video_drvdata(file); 484 int err_code; 485 486 /* NT100x has a 8-bit register space */ 487 err_code = usbvision_read_reg(usbvision, reg->reg&0xff); 488 if (err_code < 0) { 489 dev_err(&usbvision->vdev->dev, 490 "%s: VIDIOC_DBG_G_REGISTER failed: error %d\n", 491 __func__, err_code); 492 return err_code; 493 } 494 reg->val = err_code; 495 reg->size = 1; 496 return 0; 497 } 498 499 static int vidioc_s_register(struct file *file, void *priv, 500 const struct v4l2_dbg_register *reg) 501 { 502 struct usb_usbvision *usbvision = video_drvdata(file); 503 int err_code; 504 505 /* NT100x has a 8-bit register space */ 506 err_code = usbvision_write_reg(usbvision, reg->reg & 0xff, reg->val); 507 if (err_code < 0) { 508 dev_err(&usbvision->vdev->dev, 509 "%s: VIDIOC_DBG_S_REGISTER failed: error %d\n", 510 __func__, err_code); 511 return err_code; 512 } 513 return 0; 514 } 515 #endif 516 517 static int vidioc_querycap(struct file *file, void *priv, 518 struct v4l2_capability *vc) 519 { 520 struct usb_usbvision *usbvision = video_drvdata(file); 521 522 strlcpy(vc->driver, "USBVision", sizeof(vc->driver)); 523 strlcpy(vc->card, 524 usbvision_device_data[usbvision->dev_model].model_string, 525 sizeof(vc->card)); 526 usb_make_path(usbvision->dev, vc->bus_info, sizeof(vc->bus_info)); 527 vc->device_caps = V4L2_CAP_VIDEO_CAPTURE | 528 V4L2_CAP_AUDIO | 529 V4L2_CAP_READWRITE | 530 V4L2_CAP_STREAMING | 531 (usbvision->have_tuner ? V4L2_CAP_TUNER : 0); 532 vc->capabilities = vc->device_caps | V4L2_CAP_DEVICE_CAPS; 533 return 0; 534 } 535 536 static int vidioc_enum_input(struct file *file, void *priv, 537 struct v4l2_input *vi) 538 { 539 struct usb_usbvision *usbvision = video_drvdata(file); 540 int chan; 541 542 if (vi->index >= usbvision->video_inputs) 543 return -EINVAL; 544 if (usbvision->have_tuner) 545 chan = vi->index; 546 else 547 chan = vi->index + 1; /* skip Television string*/ 548 549 /* Determine the requested input characteristics 550 specific for each usbvision card model */ 551 switch (chan) { 552 case 0: 553 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) { 554 strcpy(vi->name, "White Video Input"); 555 } else { 556 strcpy(vi->name, "Television"); 557 vi->type = V4L2_INPUT_TYPE_TUNER; 558 vi->audioset = 1; 559 vi->tuner = chan; 560 vi->std = USBVISION_NORMS; 561 } 562 break; 563 case 1: 564 vi->type = V4L2_INPUT_TYPE_CAMERA; 565 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) 566 strcpy(vi->name, "Green Video Input"); 567 else 568 strcpy(vi->name, "Composite Video Input"); 569 vi->std = V4L2_STD_PAL; 570 break; 571 case 2: 572 vi->type = V4L2_INPUT_TYPE_CAMERA; 573 if (usbvision_device_data[usbvision->dev_model].video_channels == 4) 574 strcpy(vi->name, "Yellow Video Input"); 575 else 576 strcpy(vi->name, "S-Video Input"); 577 vi->std = V4L2_STD_PAL; 578 break; 579 case 3: 580 vi->type = V4L2_INPUT_TYPE_CAMERA; 581 strcpy(vi->name, "Red Video Input"); 582 vi->std = V4L2_STD_PAL; 583 break; 584 } 585 return 0; 586 } 587 588 static int vidioc_g_input(struct file *file, void *priv, unsigned int *input) 589 { 590 struct usb_usbvision *usbvision = video_drvdata(file); 591 592 *input = usbvision->ctl_input; 593 return 0; 594 } 595 596 static int vidioc_s_input(struct file *file, void *priv, unsigned int input) 597 { 598 struct usb_usbvision *usbvision = video_drvdata(file); 599 600 if (input >= usbvision->video_inputs) 601 return -EINVAL; 602 603 usbvision_muxsel(usbvision, input); 604 usbvision_set_input(usbvision); 605 usbvision_set_output(usbvision, 606 usbvision->curwidth, 607 usbvision->curheight); 608 return 0; 609 } 610 611 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id) 612 { 613 struct usb_usbvision *usbvision = video_drvdata(file); 614 615 usbvision->tvnorm_id = id; 616 617 call_all(usbvision, video, s_std, usbvision->tvnorm_id); 618 /* propagate the change to the decoder */ 619 usbvision_muxsel(usbvision, usbvision->ctl_input); 620 621 return 0; 622 } 623 624 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id) 625 { 626 struct usb_usbvision *usbvision = video_drvdata(file); 627 628 *id = usbvision->tvnorm_id; 629 return 0; 630 } 631 632 static int vidioc_g_tuner(struct file *file, void *priv, 633 struct v4l2_tuner *vt) 634 { 635 struct usb_usbvision *usbvision = video_drvdata(file); 636 637 if (!usbvision->have_tuner || vt->index) /* Only tuner 0 */ 638 return -EINVAL; 639 if (usbvision->radio) { 640 strcpy(vt->name, "Radio"); 641 vt->type = V4L2_TUNER_RADIO; 642 } else { 643 strcpy(vt->name, "Television"); 644 } 645 /* Let clients fill in the remainder of this struct */ 646 call_all(usbvision, tuner, g_tuner, vt); 647 648 return 0; 649 } 650 651 static int vidioc_s_tuner(struct file *file, void *priv, 652 const struct v4l2_tuner *vt) 653 { 654 struct usb_usbvision *usbvision = video_drvdata(file); 655 656 /* Only no or one tuner for now */ 657 if (!usbvision->have_tuner || vt->index) 658 return -EINVAL; 659 /* let clients handle this */ 660 call_all(usbvision, tuner, s_tuner, vt); 661 662 return 0; 663 } 664 665 static int vidioc_g_frequency(struct file *file, void *priv, 666 struct v4l2_frequency *freq) 667 { 668 struct usb_usbvision *usbvision = video_drvdata(file); 669 670 freq->tuner = 0; /* Only one tuner */ 671 if (usbvision->radio) 672 freq->type = V4L2_TUNER_RADIO; 673 else 674 freq->type = V4L2_TUNER_ANALOG_TV; 675 freq->frequency = usbvision->freq; 676 677 return 0; 678 } 679 680 static int vidioc_s_frequency(struct file *file, void *priv, 681 const struct v4l2_frequency *freq) 682 { 683 struct usb_usbvision *usbvision = video_drvdata(file); 684 685 /* Only no or one tuner for now */ 686 if (!usbvision->have_tuner || freq->tuner) 687 return -EINVAL; 688 689 usbvision->freq = freq->frequency; 690 call_all(usbvision, tuner, s_frequency, freq); 691 692 return 0; 693 } 694 695 static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a) 696 { 697 struct usb_usbvision *usbvision = video_drvdata(file); 698 699 if (usbvision->radio) 700 strcpy(a->name, "Radio"); 701 else 702 strcpy(a->name, "TV"); 703 704 return 0; 705 } 706 707 static int vidioc_s_audio(struct file *file, void *fh, 708 const struct v4l2_audio *a) 709 { 710 if (a->index) 711 return -EINVAL; 712 return 0; 713 } 714 715 static int vidioc_queryctrl(struct file *file, void *priv, 716 struct v4l2_queryctrl *ctrl) 717 { 718 struct usb_usbvision *usbvision = video_drvdata(file); 719 720 call_all(usbvision, core, queryctrl, ctrl); 721 722 if (!ctrl->type) 723 return -EINVAL; 724 725 return 0; 726 } 727 728 static int vidioc_g_ctrl(struct file *file, void *priv, 729 struct v4l2_control *ctrl) 730 { 731 struct usb_usbvision *usbvision = video_drvdata(file); 732 733 call_all(usbvision, core, g_ctrl, ctrl); 734 return 0; 735 } 736 737 static int vidioc_s_ctrl(struct file *file, void *priv, 738 struct v4l2_control *ctrl) 739 { 740 struct usb_usbvision *usbvision = video_drvdata(file); 741 742 call_all(usbvision, core, s_ctrl, ctrl); 743 return 0; 744 } 745 746 static int vidioc_reqbufs(struct file *file, 747 void *priv, struct v4l2_requestbuffers *vr) 748 { 749 struct usb_usbvision *usbvision = video_drvdata(file); 750 int ret; 751 752 RESTRICT_TO_RANGE(vr->count, 1, USBVISION_NUMFRAMES); 753 754 /* Check input validity: 755 the user must do a VIDEO CAPTURE and MMAP method. */ 756 if (vr->memory != V4L2_MEMORY_MMAP) 757 return -EINVAL; 758 759 if (usbvision->streaming == stream_on) { 760 ret = usbvision_stream_interrupt(usbvision); 761 if (ret) 762 return ret; 763 } 764 765 usbvision_frames_free(usbvision); 766 usbvision_empty_framequeues(usbvision); 767 vr->count = usbvision_frames_alloc(usbvision, vr->count); 768 769 usbvision->cur_frame = NULL; 770 771 return 0; 772 } 773 774 static int vidioc_querybuf(struct file *file, 775 void *priv, struct v4l2_buffer *vb) 776 { 777 struct usb_usbvision *usbvision = video_drvdata(file); 778 struct usbvision_frame *frame; 779 780 /* FIXME : must control 781 that buffers are mapped (VIDIOC_REQBUFS has been called) */ 782 if (vb->index >= usbvision->num_frames) 783 return -EINVAL; 784 /* Updating the corresponding frame state */ 785 vb->flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 786 frame = &usbvision->frame[vb->index]; 787 if (frame->grabstate >= frame_state_ready) 788 vb->flags |= V4L2_BUF_FLAG_QUEUED; 789 if (frame->grabstate >= frame_state_done) 790 vb->flags |= V4L2_BUF_FLAG_DONE; 791 if (frame->grabstate == frame_state_unused) 792 vb->flags |= V4L2_BUF_FLAG_MAPPED; 793 vb->memory = V4L2_MEMORY_MMAP; 794 795 vb->m.offset = vb->index * PAGE_ALIGN(usbvision->max_frame_size); 796 797 vb->memory = V4L2_MEMORY_MMAP; 798 vb->field = V4L2_FIELD_NONE; 799 vb->length = usbvision->curwidth * 800 usbvision->curheight * 801 usbvision->palette.bytes_per_pixel; 802 vb->timestamp = usbvision->frame[vb->index].timestamp; 803 vb->sequence = usbvision->frame[vb->index].sequence; 804 return 0; 805 } 806 807 static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb) 808 { 809 struct usb_usbvision *usbvision = video_drvdata(file); 810 struct usbvision_frame *frame; 811 unsigned long lock_flags; 812 813 /* FIXME : works only on VIDEO_CAPTURE MODE, MMAP. */ 814 if (vb->index >= usbvision->num_frames) 815 return -EINVAL; 816 817 frame = &usbvision->frame[vb->index]; 818 819 if (frame->grabstate != frame_state_unused) 820 return -EAGAIN; 821 822 /* Mark it as ready and enqueue frame */ 823 frame->grabstate = frame_state_ready; 824 frame->scanstate = scan_state_scanning; 825 frame->scanlength = 0; /* Accumulated in usbvision_parse_data() */ 826 827 vb->flags &= ~V4L2_BUF_FLAG_DONE; 828 829 /* set v4l2_format index */ 830 frame->v4l2_format = usbvision->palette; 831 832 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 833 list_add_tail(&usbvision->frame[vb->index].frame, &usbvision->inqueue); 834 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 835 836 return 0; 837 } 838 839 static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb) 840 { 841 struct usb_usbvision *usbvision = video_drvdata(file); 842 int ret; 843 struct usbvision_frame *f; 844 unsigned long lock_flags; 845 846 if (list_empty(&(usbvision->outqueue))) { 847 if (usbvision->streaming == stream_idle) 848 return -EINVAL; 849 ret = wait_event_interruptible 850 (usbvision->wait_frame, 851 !list_empty(&(usbvision->outqueue))); 852 if (ret) 853 return ret; 854 } 855 856 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 857 f = list_entry(usbvision->outqueue.next, 858 struct usbvision_frame, frame); 859 list_del(usbvision->outqueue.next); 860 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 861 862 f->grabstate = frame_state_unused; 863 864 vb->memory = V4L2_MEMORY_MMAP; 865 vb->flags = V4L2_BUF_FLAG_MAPPED | 866 V4L2_BUF_FLAG_QUEUED | 867 V4L2_BUF_FLAG_DONE | 868 V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 869 vb->index = f->index; 870 vb->sequence = f->sequence; 871 vb->timestamp = f->timestamp; 872 vb->field = V4L2_FIELD_NONE; 873 vb->bytesused = f->scanlength; 874 875 return 0; 876 } 877 878 static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i) 879 { 880 struct usb_usbvision *usbvision = video_drvdata(file); 881 882 usbvision->streaming = stream_on; 883 call_all(usbvision, video, s_stream, 1); 884 885 return 0; 886 } 887 888 static int vidioc_streamoff(struct file *file, 889 void *priv, enum v4l2_buf_type type) 890 { 891 struct usb_usbvision *usbvision = video_drvdata(file); 892 893 if (type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 894 return -EINVAL; 895 896 if (usbvision->streaming == stream_on) { 897 usbvision_stream_interrupt(usbvision); 898 /* Stop all video streamings */ 899 call_all(usbvision, video, s_stream, 0); 900 } 901 usbvision_empty_framequeues(usbvision); 902 903 return 0; 904 } 905 906 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, 907 struct v4l2_fmtdesc *vfd) 908 { 909 if (vfd->index >= USBVISION_SUPPORTED_PALETTES - 1) 910 return -EINVAL; 911 strcpy(vfd->description, usbvision_v4l2_format[vfd->index].desc); 912 vfd->pixelformat = usbvision_v4l2_format[vfd->index].format; 913 return 0; 914 } 915 916 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, 917 struct v4l2_format *vf) 918 { 919 struct usb_usbvision *usbvision = video_drvdata(file); 920 vf->fmt.pix.width = usbvision->curwidth; 921 vf->fmt.pix.height = usbvision->curheight; 922 vf->fmt.pix.pixelformat = usbvision->palette.format; 923 vf->fmt.pix.bytesperline = 924 usbvision->curwidth * usbvision->palette.bytes_per_pixel; 925 vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline * usbvision->curheight; 926 vf->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 927 vf->fmt.pix.field = V4L2_FIELD_NONE; /* Always progressive image */ 928 929 return 0; 930 } 931 932 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, 933 struct v4l2_format *vf) 934 { 935 struct usb_usbvision *usbvision = video_drvdata(file); 936 int format_idx; 937 938 /* Find requested format in available ones */ 939 for (format_idx = 0; format_idx < USBVISION_SUPPORTED_PALETTES; format_idx++) { 940 if (vf->fmt.pix.pixelformat == 941 usbvision_v4l2_format[format_idx].format) { 942 usbvision->palette = usbvision_v4l2_format[format_idx]; 943 break; 944 } 945 } 946 /* robustness */ 947 if (format_idx == USBVISION_SUPPORTED_PALETTES) 948 return -EINVAL; 949 RESTRICT_TO_RANGE(vf->fmt.pix.width, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH); 950 RESTRICT_TO_RANGE(vf->fmt.pix.height, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT); 951 952 vf->fmt.pix.bytesperline = vf->fmt.pix.width* 953 usbvision->palette.bytes_per_pixel; 954 vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline*vf->fmt.pix.height; 955 956 return 0; 957 } 958 959 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, 960 struct v4l2_format *vf) 961 { 962 struct usb_usbvision *usbvision = video_drvdata(file); 963 int ret; 964 965 ret = vidioc_try_fmt_vid_cap(file, priv, vf); 966 if (ret) 967 return ret; 968 969 /* stop io in case it is already in progress */ 970 if (usbvision->streaming == stream_on) { 971 ret = usbvision_stream_interrupt(usbvision); 972 if (ret) 973 return ret; 974 } 975 usbvision_frames_free(usbvision); 976 usbvision_empty_framequeues(usbvision); 977 978 usbvision->cur_frame = NULL; 979 980 /* by now we are committed to the new data... */ 981 usbvision_set_output(usbvision, vf->fmt.pix.width, vf->fmt.pix.height); 982 983 return 0; 984 } 985 986 static ssize_t usbvision_read(struct file *file, char __user *buf, 987 size_t count, loff_t *ppos) 988 { 989 struct usb_usbvision *usbvision = video_drvdata(file); 990 int noblock = file->f_flags & O_NONBLOCK; 991 unsigned long lock_flags; 992 int ret, i; 993 struct usbvision_frame *frame; 994 995 PDEBUG(DBG_IO, "%s: %ld bytes, noblock=%d", __func__, 996 (unsigned long)count, noblock); 997 998 if (!USBVISION_IS_OPERATIONAL(usbvision) || (buf == NULL)) 999 return -EFAULT; 1000 1001 /* This entry point is compatible with the mmap routines 1002 so that a user can do either VIDIOC_QBUF/VIDIOC_DQBUF 1003 to get frames or call read on the device. */ 1004 if (!usbvision->num_frames) { 1005 /* First, allocate some frames to work with 1006 if this has not been done with VIDIOC_REQBUF */ 1007 usbvision_frames_free(usbvision); 1008 usbvision_empty_framequeues(usbvision); 1009 usbvision_frames_alloc(usbvision, USBVISION_NUMFRAMES); 1010 } 1011 1012 if (usbvision->streaming != stream_on) { 1013 /* no stream is running, make it running ! */ 1014 usbvision->streaming = stream_on; 1015 call_all(usbvision, video, s_stream, 1); 1016 } 1017 1018 /* Then, enqueue as many frames as possible 1019 (like a user of VIDIOC_QBUF would do) */ 1020 for (i = 0; i < usbvision->num_frames; i++) { 1021 frame = &usbvision->frame[i]; 1022 if (frame->grabstate == frame_state_unused) { 1023 /* Mark it as ready and enqueue frame */ 1024 frame->grabstate = frame_state_ready; 1025 frame->scanstate = scan_state_scanning; 1026 /* Accumulated in usbvision_parse_data() */ 1027 frame->scanlength = 0; 1028 1029 /* set v4l2_format index */ 1030 frame->v4l2_format = usbvision->palette; 1031 1032 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 1033 list_add_tail(&frame->frame, &usbvision->inqueue); 1034 spin_unlock_irqrestore(&usbvision->queue_lock, 1035 lock_flags); 1036 } 1037 } 1038 1039 /* Then try to steal a frame (like a VIDIOC_DQBUF would do) */ 1040 if (list_empty(&(usbvision->outqueue))) { 1041 if (noblock) 1042 return -EAGAIN; 1043 1044 ret = wait_event_interruptible 1045 (usbvision->wait_frame, 1046 !list_empty(&(usbvision->outqueue))); 1047 if (ret) 1048 return ret; 1049 } 1050 1051 spin_lock_irqsave(&usbvision->queue_lock, lock_flags); 1052 frame = list_entry(usbvision->outqueue.next, 1053 struct usbvision_frame, frame); 1054 list_del(usbvision->outqueue.next); 1055 spin_unlock_irqrestore(&usbvision->queue_lock, lock_flags); 1056 1057 /* An error returns an empty frame */ 1058 if (frame->grabstate == frame_state_error) { 1059 frame->bytes_read = 0; 1060 return 0; 1061 } 1062 1063 PDEBUG(DBG_IO, "%s: frmx=%d, bytes_read=%ld, scanlength=%ld", 1064 __func__, 1065 frame->index, frame->bytes_read, frame->scanlength); 1066 1067 /* copy bytes to user space; we allow for partials reads */ 1068 if ((count + frame->bytes_read) > (unsigned long)frame->scanlength) 1069 count = frame->scanlength - frame->bytes_read; 1070 1071 if (copy_to_user(buf, frame->data + frame->bytes_read, count)) 1072 return -EFAULT; 1073 1074 frame->bytes_read += count; 1075 PDEBUG(DBG_IO, "%s: {copy} count used=%ld, new bytes_read=%ld", 1076 __func__, 1077 (unsigned long)count, frame->bytes_read); 1078 1079 /* For now, forget the frame if it has not been read in one shot. */ 1080 /* if (frame->bytes_read >= frame->scanlength) {*/ /* All data has been read */ 1081 frame->bytes_read = 0; 1082 1083 /* Mark it as available to be used again. */ 1084 frame->grabstate = frame_state_unused; 1085 /* } */ 1086 1087 return count; 1088 } 1089 1090 static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, 1091 size_t count, loff_t *ppos) 1092 { 1093 struct usb_usbvision *usbvision = video_drvdata(file); 1094 int res; 1095 1096 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1097 return -ERESTARTSYS; 1098 res = usbvision_read(file, buf, count, ppos); 1099 mutex_unlock(&usbvision->v4l2_lock); 1100 return res; 1101 } 1102 1103 static int usbvision_mmap(struct file *file, struct vm_area_struct *vma) 1104 { 1105 unsigned long size = vma->vm_end - vma->vm_start, 1106 start = vma->vm_start; 1107 void *pos; 1108 u32 i; 1109 struct usb_usbvision *usbvision = video_drvdata(file); 1110 1111 PDEBUG(DBG_MMAP, "mmap"); 1112 1113 if (!USBVISION_IS_OPERATIONAL(usbvision)) 1114 return -EFAULT; 1115 1116 if (!(vma->vm_flags & VM_WRITE) || 1117 size != PAGE_ALIGN(usbvision->max_frame_size)) { 1118 return -EINVAL; 1119 } 1120 1121 for (i = 0; i < usbvision->num_frames; i++) { 1122 if (((PAGE_ALIGN(usbvision->max_frame_size)*i) >> PAGE_SHIFT) == 1123 vma->vm_pgoff) 1124 break; 1125 } 1126 if (i == usbvision->num_frames) { 1127 PDEBUG(DBG_MMAP, 1128 "mmap: user supplied mapping address is out of range"); 1129 return -EINVAL; 1130 } 1131 1132 /* VM_IO is eventually going to replace PageReserved altogether */ 1133 vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP; 1134 1135 pos = usbvision->frame[i].data; 1136 while (size > 0) { 1137 if (vm_insert_page(vma, start, vmalloc_to_page(pos))) { 1138 PDEBUG(DBG_MMAP, "mmap: vm_insert_page failed"); 1139 return -EAGAIN; 1140 } 1141 start += PAGE_SIZE; 1142 pos += PAGE_SIZE; 1143 size -= PAGE_SIZE; 1144 } 1145 1146 return 0; 1147 } 1148 1149 static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma) 1150 { 1151 struct usb_usbvision *usbvision = video_drvdata(file); 1152 int res; 1153 1154 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1155 return -ERESTARTSYS; 1156 res = usbvision_mmap(file, vma); 1157 mutex_unlock(&usbvision->v4l2_lock); 1158 return res; 1159 } 1160 1161 /* 1162 * Here comes the stuff for radio on usbvision based devices 1163 * 1164 */ 1165 static int usbvision_radio_open(struct file *file) 1166 { 1167 struct usb_usbvision *usbvision = video_drvdata(file); 1168 int err_code = 0; 1169 1170 PDEBUG(DBG_IO, "%s:", __func__); 1171 1172 if (mutex_lock_interruptible(&usbvision->v4l2_lock)) 1173 return -ERESTARTSYS; 1174 if (usbvision->user) { 1175 dev_err(&usbvision->rdev->dev, 1176 "%s: Someone tried to open an already opened USBVision Radio!\n", 1177 __func__); 1178 err_code = -EBUSY; 1179 } else { 1180 if (power_on_at_open) { 1181 usbvision_reset_power_off_timer(usbvision); 1182 if (usbvision->power == 0) { 1183 usbvision_power_on(usbvision); 1184 usbvision_i2c_register(usbvision); 1185 } 1186 } 1187 1188 /* Alternate interface 1 is is the biggest frame size */ 1189 err_code = usbvision_set_alternate(usbvision); 1190 if (err_code < 0) { 1191 usbvision->last_error = err_code; 1192 err_code = -EBUSY; 1193 goto out; 1194 } 1195 1196 /* If so far no errors then we shall start the radio */ 1197 usbvision->radio = 1; 1198 call_all(usbvision, tuner, s_radio); 1199 usbvision_set_audio(usbvision, USBVISION_AUDIO_RADIO); 1200 usbvision->user++; 1201 } 1202 1203 if (err_code) { 1204 if (power_on_at_open) { 1205 usbvision_i2c_unregister(usbvision); 1206 usbvision_power_off(usbvision); 1207 usbvision->initialized = 0; 1208 } 1209 } 1210 out: 1211 mutex_unlock(&usbvision->v4l2_lock); 1212 return err_code; 1213 } 1214 1215 1216 static int usbvision_radio_close(struct file *file) 1217 { 1218 struct usb_usbvision *usbvision = video_drvdata(file); 1219 int err_code = 0; 1220 1221 PDEBUG(DBG_IO, ""); 1222 1223 mutex_lock(&usbvision->v4l2_lock); 1224 /* Set packet size to 0 */ 1225 usbvision->iface_alt = 0; 1226 err_code = usb_set_interface(usbvision->dev, usbvision->iface, 1227 usbvision->iface_alt); 1228 1229 usbvision_audio_off(usbvision); 1230 usbvision->radio = 0; 1231 usbvision->user--; 1232 1233 if (power_on_at_open) { 1234 usbvision_set_power_off_timer(usbvision); 1235 usbvision->initialized = 0; 1236 } 1237 1238 if (usbvision->remove_pending) { 1239 printk(KERN_INFO "%s: Final disconnect\n", __func__); 1240 usbvision_release(usbvision); 1241 return err_code; 1242 } 1243 1244 mutex_unlock(&usbvision->v4l2_lock); 1245 PDEBUG(DBG_IO, "success"); 1246 return err_code; 1247 } 1248 1249 /* Video registration stuff */ 1250 1251 /* Video template */ 1252 static const struct v4l2_file_operations usbvision_fops = { 1253 .owner = THIS_MODULE, 1254 .open = usbvision_v4l2_open, 1255 .release = usbvision_v4l2_close, 1256 .read = usbvision_v4l2_read, 1257 .mmap = usbvision_v4l2_mmap, 1258 .unlocked_ioctl = video_ioctl2, 1259 /* .poll = video_poll, */ 1260 }; 1261 1262 static const struct v4l2_ioctl_ops usbvision_ioctl_ops = { 1263 .vidioc_querycap = vidioc_querycap, 1264 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, 1265 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, 1266 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap, 1267 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap, 1268 .vidioc_reqbufs = vidioc_reqbufs, 1269 .vidioc_querybuf = vidioc_querybuf, 1270 .vidioc_qbuf = vidioc_qbuf, 1271 .vidioc_dqbuf = vidioc_dqbuf, 1272 .vidioc_s_std = vidioc_s_std, 1273 .vidioc_g_std = vidioc_g_std, 1274 .vidioc_enum_input = vidioc_enum_input, 1275 .vidioc_g_input = vidioc_g_input, 1276 .vidioc_s_input = vidioc_s_input, 1277 .vidioc_queryctrl = vidioc_queryctrl, 1278 .vidioc_g_audio = vidioc_g_audio, 1279 .vidioc_s_audio = vidioc_s_audio, 1280 .vidioc_g_ctrl = vidioc_g_ctrl, 1281 .vidioc_s_ctrl = vidioc_s_ctrl, 1282 .vidioc_streamon = vidioc_streamon, 1283 .vidioc_streamoff = vidioc_streamoff, 1284 .vidioc_g_tuner = vidioc_g_tuner, 1285 .vidioc_s_tuner = vidioc_s_tuner, 1286 .vidioc_g_frequency = vidioc_g_frequency, 1287 .vidioc_s_frequency = vidioc_s_frequency, 1288 #ifdef CONFIG_VIDEO_ADV_DEBUG 1289 .vidioc_g_register = vidioc_g_register, 1290 .vidioc_s_register = vidioc_s_register, 1291 #endif 1292 }; 1293 1294 static struct video_device usbvision_video_template = { 1295 .fops = &usbvision_fops, 1296 .ioctl_ops = &usbvision_ioctl_ops, 1297 .name = "usbvision-video", 1298 .release = video_device_release, 1299 .tvnorms = USBVISION_NORMS, 1300 }; 1301 1302 1303 /* Radio template */ 1304 static const struct v4l2_file_operations usbvision_radio_fops = { 1305 .owner = THIS_MODULE, 1306 .open = usbvision_radio_open, 1307 .release = usbvision_radio_close, 1308 .unlocked_ioctl = video_ioctl2, 1309 }; 1310 1311 static const struct v4l2_ioctl_ops usbvision_radio_ioctl_ops = { 1312 .vidioc_querycap = vidioc_querycap, 1313 .vidioc_enum_input = vidioc_enum_input, 1314 .vidioc_g_input = vidioc_g_input, 1315 .vidioc_s_input = vidioc_s_input, 1316 .vidioc_queryctrl = vidioc_queryctrl, 1317 .vidioc_g_audio = vidioc_g_audio, 1318 .vidioc_s_audio = vidioc_s_audio, 1319 .vidioc_g_ctrl = vidioc_g_ctrl, 1320 .vidioc_s_ctrl = vidioc_s_ctrl, 1321 .vidioc_g_tuner = vidioc_g_tuner, 1322 .vidioc_s_tuner = vidioc_s_tuner, 1323 .vidioc_g_frequency = vidioc_g_frequency, 1324 .vidioc_s_frequency = vidioc_s_frequency, 1325 }; 1326 1327 static struct video_device usbvision_radio_template = { 1328 .fops = &usbvision_radio_fops, 1329 .name = "usbvision-radio", 1330 .release = video_device_release, 1331 .ioctl_ops = &usbvision_radio_ioctl_ops, 1332 }; 1333 1334 1335 static struct video_device *usbvision_vdev_init(struct usb_usbvision *usbvision, 1336 struct video_device *vdev_template, 1337 char *name) 1338 { 1339 struct usb_device *usb_dev = usbvision->dev; 1340 struct video_device *vdev; 1341 1342 if (usb_dev == NULL) { 1343 dev_err(&usbvision->dev->dev, 1344 "%s: usbvision->dev is not set\n", __func__); 1345 return NULL; 1346 } 1347 1348 vdev = video_device_alloc(); 1349 if (NULL == vdev) 1350 return NULL; 1351 *vdev = *vdev_template; 1352 vdev->lock = &usbvision->v4l2_lock; 1353 vdev->v4l2_dev = &usbvision->v4l2_dev; 1354 snprintf(vdev->name, sizeof(vdev->name), "%s", name); 1355 video_set_drvdata(vdev, usbvision); 1356 return vdev; 1357 } 1358 1359 /* unregister video4linux devices */ 1360 static void usbvision_unregister_video(struct usb_usbvision *usbvision) 1361 { 1362 /* Radio Device: */ 1363 if (usbvision->rdev) { 1364 PDEBUG(DBG_PROBE, "unregister %s [v4l2]", 1365 video_device_node_name(usbvision->rdev)); 1366 if (video_is_registered(usbvision->rdev)) 1367 video_unregister_device(usbvision->rdev); 1368 else 1369 video_device_release(usbvision->rdev); 1370 usbvision->rdev = NULL; 1371 } 1372 1373 /* Video Device: */ 1374 if (usbvision->vdev) { 1375 PDEBUG(DBG_PROBE, "unregister %s [v4l2]", 1376 video_device_node_name(usbvision->vdev)); 1377 if (video_is_registered(usbvision->vdev)) 1378 video_unregister_device(usbvision->vdev); 1379 else 1380 video_device_release(usbvision->vdev); 1381 usbvision->vdev = NULL; 1382 } 1383 } 1384 1385 /* register video4linux devices */ 1386 static int usbvision_register_video(struct usb_usbvision *usbvision) 1387 { 1388 /* Video Device: */ 1389 usbvision->vdev = usbvision_vdev_init(usbvision, 1390 &usbvision_video_template, 1391 "USBVision Video"); 1392 if (usbvision->vdev == NULL) 1393 goto err_exit; 1394 if (video_register_device(usbvision->vdev, VFL_TYPE_GRABBER, video_nr) < 0) 1395 goto err_exit; 1396 printk(KERN_INFO "USBVision[%d]: registered USBVision Video device %s [v4l2]\n", 1397 usbvision->nr, video_device_node_name(usbvision->vdev)); 1398 1399 /* Radio Device: */ 1400 if (usbvision_device_data[usbvision->dev_model].radio) { 1401 /* usbvision has radio */ 1402 usbvision->rdev = usbvision_vdev_init(usbvision, 1403 &usbvision_radio_template, 1404 "USBVision Radio"); 1405 if (usbvision->rdev == NULL) 1406 goto err_exit; 1407 if (video_register_device(usbvision->rdev, VFL_TYPE_RADIO, radio_nr) < 0) 1408 goto err_exit; 1409 printk(KERN_INFO "USBVision[%d]: registered USBVision Radio device %s [v4l2]\n", 1410 usbvision->nr, video_device_node_name(usbvision->rdev)); 1411 } 1412 /* all done */ 1413 return 0; 1414 1415 err_exit: 1416 dev_err(&usbvision->dev->dev, 1417 "USBVision[%d]: video_register_device() failed\n", 1418 usbvision->nr); 1419 usbvision_unregister_video(usbvision); 1420 return -1; 1421 } 1422 1423 /* 1424 * usbvision_alloc() 1425 * 1426 * This code allocates the struct usb_usbvision. 1427 * It is filled with default values. 1428 * 1429 * Returns NULL on error, a pointer to usb_usbvision else. 1430 * 1431 */ 1432 static struct usb_usbvision *usbvision_alloc(struct usb_device *dev, 1433 struct usb_interface *intf) 1434 { 1435 struct usb_usbvision *usbvision; 1436 1437 usbvision = kzalloc(sizeof(struct usb_usbvision), GFP_KERNEL); 1438 if (usbvision == NULL) 1439 return NULL; 1440 1441 usbvision->dev = dev; 1442 if (v4l2_device_register(&intf->dev, &usbvision->v4l2_dev)) 1443 goto err_free; 1444 1445 mutex_init(&usbvision->v4l2_lock); 1446 1447 /* prepare control urb for control messages during interrupts */ 1448 usbvision->ctrl_urb = usb_alloc_urb(USBVISION_URB_FRAMES, GFP_KERNEL); 1449 if (usbvision->ctrl_urb == NULL) 1450 goto err_unreg; 1451 init_waitqueue_head(&usbvision->ctrl_urb_wq); 1452 1453 usbvision_init_power_off_timer(usbvision); 1454 1455 return usbvision; 1456 1457 err_unreg: 1458 v4l2_device_unregister(&usbvision->v4l2_dev); 1459 err_free: 1460 kfree(usbvision); 1461 return NULL; 1462 } 1463 1464 /* 1465 * usbvision_release() 1466 * 1467 * This code does final release of struct usb_usbvision. This happens 1468 * after the device is disconnected -and- all clients closed their files. 1469 * 1470 */ 1471 static void usbvision_release(struct usb_usbvision *usbvision) 1472 { 1473 PDEBUG(DBG_PROBE, ""); 1474 1475 usbvision_reset_power_off_timer(usbvision); 1476 1477 usbvision->initialized = 0; 1478 1479 usbvision_remove_sysfs(usbvision->vdev); 1480 usbvision_unregister_video(usbvision); 1481 kfree(usbvision->alt_max_pkt_size); 1482 1483 usb_free_urb(usbvision->ctrl_urb); 1484 1485 v4l2_device_unregister(&usbvision->v4l2_dev); 1486 kfree(usbvision); 1487 1488 PDEBUG(DBG_PROBE, "success"); 1489 } 1490 1491 1492 /*********************** usb interface **********************************/ 1493 1494 static void usbvision_configure_video(struct usb_usbvision *usbvision) 1495 { 1496 int model; 1497 1498 if (usbvision == NULL) 1499 return; 1500 1501 model = usbvision->dev_model; 1502 usbvision->palette = usbvision_v4l2_format[2]; /* V4L2_PIX_FMT_RGB24; */ 1503 1504 if (usbvision_device_data[usbvision->dev_model].vin_reg2_override) { 1505 usbvision->vin_reg2_preset = 1506 usbvision_device_data[usbvision->dev_model].vin_reg2; 1507 } else { 1508 usbvision->vin_reg2_preset = 0; 1509 } 1510 1511 usbvision->tvnorm_id = usbvision_device_data[model].video_norm; 1512 1513 usbvision->video_inputs = usbvision_device_data[model].video_channels; 1514 usbvision->ctl_input = 0; 1515 1516 /* This should be here to make i2c clients to be able to register */ 1517 /* first switch off audio */ 1518 if (usbvision_device_data[model].audio_channels > 0) 1519 usbvision_audio_off(usbvision); 1520 if (!power_on_at_open) { 1521 /* and then power up the noisy tuner */ 1522 usbvision_power_on(usbvision); 1523 usbvision_i2c_register(usbvision); 1524 } 1525 } 1526 1527 /* 1528 * usbvision_probe() 1529 * 1530 * This procedure queries device descriptor and accepts the interface 1531 * if it looks like USBVISION video device 1532 * 1533 */ 1534 static int usbvision_probe(struct usb_interface *intf, 1535 const struct usb_device_id *devid) 1536 { 1537 struct usb_device *dev = usb_get_dev(interface_to_usbdev(intf)); 1538 struct usb_interface *uif; 1539 __u8 ifnum = intf->altsetting->desc.bInterfaceNumber; 1540 const struct usb_host_interface *interface; 1541 struct usb_usbvision *usbvision = NULL; 1542 const struct usb_endpoint_descriptor *endpoint; 1543 int model, i; 1544 1545 PDEBUG(DBG_PROBE, "VID=%#04x, PID=%#04x, ifnum=%u", 1546 dev->descriptor.idVendor, 1547 dev->descriptor.idProduct, ifnum); 1548 1549 model = devid->driver_info; 1550 if (model < 0 || model >= usbvision_device_data_size) { 1551 PDEBUG(DBG_PROBE, "model out of bounds %d", model); 1552 return -ENODEV; 1553 } 1554 printk(KERN_INFO "%s: %s found\n", __func__, 1555 usbvision_device_data[model].model_string); 1556 1557 if (usbvision_device_data[model].interface >= 0) 1558 interface = &dev->actconfig->interface[usbvision_device_data[model].interface]->altsetting[0]; 1559 else 1560 interface = &dev->actconfig->interface[ifnum]->altsetting[0]; 1561 endpoint = &interface->endpoint[1].desc; 1562 if (!usb_endpoint_xfer_isoc(endpoint)) { 1563 dev_err(&intf->dev, "%s: interface %d. has non-ISO endpoint!\n", 1564 __func__, ifnum); 1565 dev_err(&intf->dev, "%s: Endpoint attributes %d", 1566 __func__, endpoint->bmAttributes); 1567 return -ENODEV; 1568 } 1569 if (usb_endpoint_dir_out(endpoint)) { 1570 dev_err(&intf->dev, "%s: interface %d. has ISO OUT endpoint!\n", 1571 __func__, ifnum); 1572 return -ENODEV; 1573 } 1574 1575 usbvision = usbvision_alloc(dev, intf); 1576 if (usbvision == NULL) { 1577 dev_err(&intf->dev, "%s: couldn't allocate USBVision struct\n", __func__); 1578 return -ENOMEM; 1579 } 1580 1581 if (dev->descriptor.bNumConfigurations > 1) 1582 usbvision->bridge_type = BRIDGE_NT1004; 1583 else if (model == DAZZLE_DVC_90_REV_1_SECAM) 1584 usbvision->bridge_type = BRIDGE_NT1005; 1585 else 1586 usbvision->bridge_type = BRIDGE_NT1003; 1587 PDEBUG(DBG_PROBE, "bridge_type %d", usbvision->bridge_type); 1588 1589 /* compute alternate max packet sizes */ 1590 uif = dev->actconfig->interface[0]; 1591 1592 usbvision->num_alt = uif->num_altsetting; 1593 PDEBUG(DBG_PROBE, "Alternate settings: %i", usbvision->num_alt); 1594 usbvision->alt_max_pkt_size = kmalloc(32 * usbvision->num_alt, GFP_KERNEL); 1595 if (usbvision->alt_max_pkt_size == NULL) { 1596 dev_err(&intf->dev, "usbvision: out of memory!\n"); 1597 usbvision_release(usbvision); 1598 return -ENOMEM; 1599 } 1600 1601 for (i = 0; i < usbvision->num_alt; i++) { 1602 u16 tmp = le16_to_cpu(uif->altsetting[i].endpoint[1].desc. 1603 wMaxPacketSize); 1604 usbvision->alt_max_pkt_size[i] = 1605 (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1); 1606 PDEBUG(DBG_PROBE, "Alternate setting %i, max size= %i", i, 1607 usbvision->alt_max_pkt_size[i]); 1608 } 1609 1610 1611 usbvision->nr = usbvision_nr++; 1612 1613 usbvision->have_tuner = usbvision_device_data[model].tuner; 1614 if (usbvision->have_tuner) 1615 usbvision->tuner_type = usbvision_device_data[model].tuner_type; 1616 1617 usbvision->dev_model = model; 1618 usbvision->remove_pending = 0; 1619 usbvision->iface = ifnum; 1620 usbvision->iface_alt = 0; 1621 usbvision->video_endp = endpoint->bEndpointAddress; 1622 usbvision->isoc_packet_size = 0; 1623 usbvision->usb_bandwidth = 0; 1624 usbvision->user = 0; 1625 usbvision->streaming = stream_off; 1626 usbvision_configure_video(usbvision); 1627 usbvision_register_video(usbvision); 1628 1629 usbvision_create_sysfs(usbvision->vdev); 1630 1631 PDEBUG(DBG_PROBE, "success"); 1632 return 0; 1633 } 1634 1635 1636 /* 1637 * usbvision_disconnect() 1638 * 1639 * This procedure stops all driver activity, deallocates interface-private 1640 * structure (pointed by 'ptr') and after that driver should be removable 1641 * with no ill consequences. 1642 * 1643 */ 1644 static void usbvision_disconnect(struct usb_interface *intf) 1645 { 1646 struct usb_usbvision *usbvision = to_usbvision(usb_get_intfdata(intf)); 1647 1648 PDEBUG(DBG_PROBE, ""); 1649 1650 if (usbvision == NULL) { 1651 pr_err("%s: usb_get_intfdata() failed\n", __func__); 1652 return; 1653 } 1654 1655 mutex_lock(&usbvision->v4l2_lock); 1656 1657 /* At this time we ask to cancel outstanding URBs */ 1658 usbvision_stop_isoc(usbvision); 1659 1660 v4l2_device_disconnect(&usbvision->v4l2_dev); 1661 1662 if (usbvision->power) { 1663 usbvision_i2c_unregister(usbvision); 1664 usbvision_power_off(usbvision); 1665 } 1666 usbvision->remove_pending = 1; /* Now all ISO data will be ignored */ 1667 1668 usb_put_dev(usbvision->dev); 1669 usbvision->dev = NULL; /* USB device is no more */ 1670 1671 mutex_unlock(&usbvision->v4l2_lock); 1672 1673 if (usbvision->user) { 1674 printk(KERN_INFO "%s: In use, disconnect pending\n", 1675 __func__); 1676 wake_up_interruptible(&usbvision->wait_frame); 1677 wake_up_interruptible(&usbvision->wait_stream); 1678 } else { 1679 usbvision_release(usbvision); 1680 } 1681 1682 PDEBUG(DBG_PROBE, "success"); 1683 } 1684 1685 static struct usb_driver usbvision_driver = { 1686 .name = "usbvision", 1687 .id_table = usbvision_table, 1688 .probe = usbvision_probe, 1689 .disconnect = usbvision_disconnect, 1690 }; 1691 1692 /* 1693 * usbvision_init() 1694 * 1695 * This code is run to initialize the driver. 1696 * 1697 */ 1698 static int __init usbvision_init(void) 1699 { 1700 int err_code; 1701 1702 PDEBUG(DBG_PROBE, ""); 1703 1704 PDEBUG(DBG_IO, "IO debugging is enabled [video]"); 1705 PDEBUG(DBG_PROBE, "PROBE debugging is enabled [video]"); 1706 PDEBUG(DBG_MMAP, "MMAP debugging is enabled [video]"); 1707 1708 /* disable planar mode support unless compression enabled */ 1709 if (isoc_mode != ISOC_MODE_COMPRESS) { 1710 /* FIXME : not the right way to set supported flag */ 1711 usbvision_v4l2_format[6].supported = 0; /* V4L2_PIX_FMT_YVU420 */ 1712 usbvision_v4l2_format[7].supported = 0; /* V4L2_PIX_FMT_YUV422P */ 1713 } 1714 1715 err_code = usb_register(&usbvision_driver); 1716 1717 if (err_code == 0) { 1718 printk(KERN_INFO DRIVER_DESC " : " USBVISION_VERSION_STRING "\n"); 1719 PDEBUG(DBG_PROBE, "success"); 1720 } 1721 return err_code; 1722 } 1723 1724 static void __exit usbvision_exit(void) 1725 { 1726 PDEBUG(DBG_PROBE, ""); 1727 1728 usb_deregister(&usbvision_driver); 1729 PDEBUG(DBG_PROBE, "success"); 1730 } 1731 1732 module_init(usbvision_init); 1733 module_exit(usbvision_exit); 1734 1735 1736 1737 1738 1739 /* LDV_COMMENT_BEGIN_MAIN */ 1740 #ifdef LDV_MAIN1_sequence_infinite_withcheck_stateful 1741 1742 /*###########################################################################*/ 1743 1744 /*############## Driver Environment Generator 0.2 output ####################*/ 1745 1746 /*###########################################################################*/ 1747 1748 1749 1750 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */ 1751 void ldv_check_final_state(void); 1752 1753 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */ 1754 void ldv_check_return_value(int res); 1755 1756 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */ 1757 void ldv_check_return_value_probe(int res); 1758 1759 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */ 1760 void ldv_initialize(void); 1761 1762 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */ 1763 void ldv_handler_precall(void); 1764 1765 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */ 1766 int nondet_int(void); 1767 1768 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */ 1769 int LDV_IN_INTERRUPT; 1770 1771 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */ 1772 void ldv_main1_sequence_infinite_withcheck_stateful(void) { 1773 1774 1775 1776 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */ 1777 /*============================= VARIABLE DECLARATION PART =============================*/ 1778 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 1779 /* content: static int usbvision_v4l2_open(struct file *file)*/ 1780 /* LDV_COMMENT_BEGIN_PREP */ 1781 #define DRIVER_AUTHOR \ 1782 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1783 "Dwaine Garden <DwaineGarden@rogers.com>" 1784 #define DRIVER_NAME "usbvision" 1785 #define DRIVER_ALIAS "USBVision" 1786 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1787 #define DRIVER_LICENSE "GPL" 1788 #define USBVISION_VERSION_STRING "0.9.11" 1789 #define ENABLE_HEXDUMP 0 1790 #ifdef USBVISION_DEBUG 1791 #define PDEBUG(level, fmt, args...) { \ 1792 if (video_debug & (level)) \ 1793 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1794 __func__, __LINE__ , ## args); \ 1795 } 1796 #else 1797 #define PDEBUG(level, fmt, args...) do {} while (0) 1798 #endif 1799 #define DBG_IO (1 << 1) 1800 #define DBG_PROBE (1 << 2) 1801 #define DBG_MMAP (1 << 3) 1802 #define rmspace(str) while (*str == ' ') str++; 1803 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1804 #define YES_NO(x) ((x) ? "Yes" : "No") 1805 /* LDV_COMMENT_END_PREP */ 1806 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_open" */ 1807 struct file * var_group1; 1808 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_v4l2_open" */ 1809 static int res_usbvision_v4l2_open_12; 1810 /* LDV_COMMENT_BEGIN_PREP */ 1811 #ifdef CONFIG_VIDEO_ADV_DEBUG 1812 #endif 1813 #ifdef CONFIG_VIDEO_ADV_DEBUG 1814 #endif 1815 /* LDV_COMMENT_END_PREP */ 1816 /* content: static int usbvision_v4l2_close(struct file *file)*/ 1817 /* LDV_COMMENT_BEGIN_PREP */ 1818 #define DRIVER_AUTHOR \ 1819 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1820 "Dwaine Garden <DwaineGarden@rogers.com>" 1821 #define DRIVER_NAME "usbvision" 1822 #define DRIVER_ALIAS "USBVision" 1823 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1824 #define DRIVER_LICENSE "GPL" 1825 #define USBVISION_VERSION_STRING "0.9.11" 1826 #define ENABLE_HEXDUMP 0 1827 #ifdef USBVISION_DEBUG 1828 #define PDEBUG(level, fmt, args...) { \ 1829 if (video_debug & (level)) \ 1830 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1831 __func__, __LINE__ , ## args); \ 1832 } 1833 #else 1834 #define PDEBUG(level, fmt, args...) do {} while (0) 1835 #endif 1836 #define DBG_IO (1 << 1) 1837 #define DBG_PROBE (1 << 2) 1838 #define DBG_MMAP (1 << 3) 1839 #define rmspace(str) while (*str == ' ') str++; 1840 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1841 #define YES_NO(x) ((x) ? "Yes" : "No") 1842 /* LDV_COMMENT_END_PREP */ 1843 /* LDV_COMMENT_BEGIN_PREP */ 1844 #ifdef CONFIG_VIDEO_ADV_DEBUG 1845 #endif 1846 #ifdef CONFIG_VIDEO_ADV_DEBUG 1847 #endif 1848 /* LDV_COMMENT_END_PREP */ 1849 /* content: static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/ 1850 /* LDV_COMMENT_BEGIN_PREP */ 1851 #define DRIVER_AUTHOR \ 1852 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1853 "Dwaine Garden <DwaineGarden@rogers.com>" 1854 #define DRIVER_NAME "usbvision" 1855 #define DRIVER_ALIAS "USBVision" 1856 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1857 #define DRIVER_LICENSE "GPL" 1858 #define USBVISION_VERSION_STRING "0.9.11" 1859 #define ENABLE_HEXDUMP 0 1860 #ifdef USBVISION_DEBUG 1861 #define PDEBUG(level, fmt, args...) { \ 1862 if (video_debug & (level)) \ 1863 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1864 __func__, __LINE__ , ## args); \ 1865 } 1866 #else 1867 #define PDEBUG(level, fmt, args...) do {} while (0) 1868 #endif 1869 #define DBG_IO (1 << 1) 1870 #define DBG_PROBE (1 << 2) 1871 #define DBG_MMAP (1 << 3) 1872 #define rmspace(str) while (*str == ' ') str++; 1873 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1874 #define YES_NO(x) ((x) ? "Yes" : "No") 1875 #ifdef CONFIG_VIDEO_ADV_DEBUG 1876 #endif 1877 /* LDV_COMMENT_END_PREP */ 1878 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1879 char __user * var_usbvision_v4l2_read_42_p1; 1880 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1881 size_t var_usbvision_v4l2_read_42_p2; 1882 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_read" */ 1883 loff_t * var_usbvision_v4l2_read_42_p3; 1884 /* LDV_COMMENT_BEGIN_PREP */ 1885 #ifdef CONFIG_VIDEO_ADV_DEBUG 1886 #endif 1887 /* LDV_COMMENT_END_PREP */ 1888 /* content: static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma)*/ 1889 /* LDV_COMMENT_BEGIN_PREP */ 1890 #define DRIVER_AUTHOR \ 1891 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1892 "Dwaine Garden <DwaineGarden@rogers.com>" 1893 #define DRIVER_NAME "usbvision" 1894 #define DRIVER_ALIAS "USBVision" 1895 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1896 #define DRIVER_LICENSE "GPL" 1897 #define USBVISION_VERSION_STRING "0.9.11" 1898 #define ENABLE_HEXDUMP 0 1899 #ifdef USBVISION_DEBUG 1900 #define PDEBUG(level, fmt, args...) { \ 1901 if (video_debug & (level)) \ 1902 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1903 __func__, __LINE__ , ## args); \ 1904 } 1905 #else 1906 #define PDEBUG(level, fmt, args...) do {} while (0) 1907 #endif 1908 #define DBG_IO (1 << 1) 1909 #define DBG_PROBE (1 << 2) 1910 #define DBG_MMAP (1 << 3) 1911 #define rmspace(str) while (*str == ' ') str++; 1912 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1913 #define YES_NO(x) ((x) ? "Yes" : "No") 1914 #ifdef CONFIG_VIDEO_ADV_DEBUG 1915 #endif 1916 /* LDV_COMMENT_END_PREP */ 1917 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_v4l2_mmap" */ 1918 struct vm_area_struct * var_group2; 1919 /* LDV_COMMENT_BEGIN_PREP */ 1920 #ifdef CONFIG_VIDEO_ADV_DEBUG 1921 #endif 1922 /* LDV_COMMENT_END_PREP */ 1923 1924 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 1925 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 1926 /* LDV_COMMENT_BEGIN_PREP */ 1927 #define DRIVER_AUTHOR \ 1928 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1929 "Dwaine Garden <DwaineGarden@rogers.com>" 1930 #define DRIVER_NAME "usbvision" 1931 #define DRIVER_ALIAS "USBVision" 1932 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1933 #define DRIVER_LICENSE "GPL" 1934 #define USBVISION_VERSION_STRING "0.9.11" 1935 #define ENABLE_HEXDUMP 0 1936 #ifdef USBVISION_DEBUG 1937 #define PDEBUG(level, fmt, args...) { \ 1938 if (video_debug & (level)) \ 1939 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1940 __func__, __LINE__ , ## args); \ 1941 } 1942 #else 1943 #define PDEBUG(level, fmt, args...) do {} while (0) 1944 #endif 1945 #define DBG_IO (1 << 1) 1946 #define DBG_PROBE (1 << 2) 1947 #define DBG_MMAP (1 << 3) 1948 #define rmspace(str) while (*str == ' ') str++; 1949 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1950 #define YES_NO(x) ((x) ? "Yes" : "No") 1951 #ifdef CONFIG_VIDEO_ADV_DEBUG 1952 #endif 1953 /* LDV_COMMENT_END_PREP */ 1954 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querycap" */ 1955 void * var_vidioc_querycap_16_p1; 1956 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querycap" */ 1957 struct v4l2_capability * var_vidioc_querycap_16_p2; 1958 /* LDV_COMMENT_BEGIN_PREP */ 1959 #ifdef CONFIG_VIDEO_ADV_DEBUG 1960 #endif 1961 /* LDV_COMMENT_END_PREP */ 1962 /* content: static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *vfd)*/ 1963 /* LDV_COMMENT_BEGIN_PREP */ 1964 #define DRIVER_AUTHOR \ 1965 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 1966 "Dwaine Garden <DwaineGarden@rogers.com>" 1967 #define DRIVER_NAME "usbvision" 1968 #define DRIVER_ALIAS "USBVision" 1969 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 1970 #define DRIVER_LICENSE "GPL" 1971 #define USBVISION_VERSION_STRING "0.9.11" 1972 #define ENABLE_HEXDUMP 0 1973 #ifdef USBVISION_DEBUG 1974 #define PDEBUG(level, fmt, args...) { \ 1975 if (video_debug & (level)) \ 1976 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 1977 __func__, __LINE__ , ## args); \ 1978 } 1979 #else 1980 #define PDEBUG(level, fmt, args...) do {} while (0) 1981 #endif 1982 #define DBG_IO (1 << 1) 1983 #define DBG_PROBE (1 << 2) 1984 #define DBG_MMAP (1 << 3) 1985 #define rmspace(str) while (*str == ' ') str++; 1986 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 1987 #define YES_NO(x) ((x) ? "Yes" : "No") 1988 #ifdef CONFIG_VIDEO_ADV_DEBUG 1989 #endif 1990 /* LDV_COMMENT_END_PREP */ 1991 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_fmt_vid_cap" */ 1992 void * var_vidioc_enum_fmt_vid_cap_37_p1; 1993 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_fmt_vid_cap" */ 1994 struct v4l2_fmtdesc * var_vidioc_enum_fmt_vid_cap_37_p2; 1995 /* LDV_COMMENT_BEGIN_PREP */ 1996 #ifdef CONFIG_VIDEO_ADV_DEBUG 1997 #endif 1998 /* LDV_COMMENT_END_PREP */ 1999 /* content: static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 2000 /* LDV_COMMENT_BEGIN_PREP */ 2001 #define DRIVER_AUTHOR \ 2002 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2003 "Dwaine Garden <DwaineGarden@rogers.com>" 2004 #define DRIVER_NAME "usbvision" 2005 #define DRIVER_ALIAS "USBVision" 2006 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2007 #define DRIVER_LICENSE "GPL" 2008 #define USBVISION_VERSION_STRING "0.9.11" 2009 #define ENABLE_HEXDUMP 0 2010 #ifdef USBVISION_DEBUG 2011 #define PDEBUG(level, fmt, args...) { \ 2012 if (video_debug & (level)) \ 2013 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2014 __func__, __LINE__ , ## args); \ 2015 } 2016 #else 2017 #define PDEBUG(level, fmt, args...) do {} while (0) 2018 #endif 2019 #define DBG_IO (1 << 1) 2020 #define DBG_PROBE (1 << 2) 2021 #define DBG_MMAP (1 << 3) 2022 #define rmspace(str) while (*str == ' ') str++; 2023 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2024 #define YES_NO(x) ((x) ? "Yes" : "No") 2025 #ifdef CONFIG_VIDEO_ADV_DEBUG 2026 #endif 2027 /* LDV_COMMENT_END_PREP */ 2028 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_fmt_vid_cap" */ 2029 void * var_vidioc_g_fmt_vid_cap_38_p1; 2030 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_fmt_vid_cap" */ 2031 struct v4l2_format * var_vidioc_g_fmt_vid_cap_38_p2; 2032 /* LDV_COMMENT_BEGIN_PREP */ 2033 #ifdef CONFIG_VIDEO_ADV_DEBUG 2034 #endif 2035 /* LDV_COMMENT_END_PREP */ 2036 /* content: static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 2037 /* LDV_COMMENT_BEGIN_PREP */ 2038 #define DRIVER_AUTHOR \ 2039 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2040 "Dwaine Garden <DwaineGarden@rogers.com>" 2041 #define DRIVER_NAME "usbvision" 2042 #define DRIVER_ALIAS "USBVision" 2043 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2044 #define DRIVER_LICENSE "GPL" 2045 #define USBVISION_VERSION_STRING "0.9.11" 2046 #define ENABLE_HEXDUMP 0 2047 #ifdef USBVISION_DEBUG 2048 #define PDEBUG(level, fmt, args...) { \ 2049 if (video_debug & (level)) \ 2050 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2051 __func__, __LINE__ , ## args); \ 2052 } 2053 #else 2054 #define PDEBUG(level, fmt, args...) do {} while (0) 2055 #endif 2056 #define DBG_IO (1 << 1) 2057 #define DBG_PROBE (1 << 2) 2058 #define DBG_MMAP (1 << 3) 2059 #define rmspace(str) while (*str == ' ') str++; 2060 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2061 #define YES_NO(x) ((x) ? "Yes" : "No") 2062 #ifdef CONFIG_VIDEO_ADV_DEBUG 2063 #endif 2064 /* LDV_COMMENT_END_PREP */ 2065 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_try_fmt_vid_cap" */ 2066 void * var_vidioc_try_fmt_vid_cap_39_p1; 2067 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_try_fmt_vid_cap" */ 2068 struct v4l2_format * var_vidioc_try_fmt_vid_cap_39_p2; 2069 /* LDV_COMMENT_BEGIN_PREP */ 2070 #ifdef CONFIG_VIDEO_ADV_DEBUG 2071 #endif 2072 /* LDV_COMMENT_END_PREP */ 2073 /* content: static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 2074 /* LDV_COMMENT_BEGIN_PREP */ 2075 #define DRIVER_AUTHOR \ 2076 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2077 "Dwaine Garden <DwaineGarden@rogers.com>" 2078 #define DRIVER_NAME "usbvision" 2079 #define DRIVER_ALIAS "USBVision" 2080 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2081 #define DRIVER_LICENSE "GPL" 2082 #define USBVISION_VERSION_STRING "0.9.11" 2083 #define ENABLE_HEXDUMP 0 2084 #ifdef USBVISION_DEBUG 2085 #define PDEBUG(level, fmt, args...) { \ 2086 if (video_debug & (level)) \ 2087 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2088 __func__, __LINE__ , ## args); \ 2089 } 2090 #else 2091 #define PDEBUG(level, fmt, args...) do {} while (0) 2092 #endif 2093 #define DBG_IO (1 << 1) 2094 #define DBG_PROBE (1 << 2) 2095 #define DBG_MMAP (1 << 3) 2096 #define rmspace(str) while (*str == ' ') str++; 2097 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2098 #define YES_NO(x) ((x) ? "Yes" : "No") 2099 #ifdef CONFIG_VIDEO_ADV_DEBUG 2100 #endif 2101 /* LDV_COMMENT_END_PREP */ 2102 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_fmt_vid_cap" */ 2103 void * var_vidioc_s_fmt_vid_cap_40_p1; 2104 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_fmt_vid_cap" */ 2105 struct v4l2_format * var_vidioc_s_fmt_vid_cap_40_p2; 2106 /* LDV_COMMENT_BEGIN_PREP */ 2107 #ifdef CONFIG_VIDEO_ADV_DEBUG 2108 #endif 2109 /* LDV_COMMENT_END_PREP */ 2110 /* content: static int vidioc_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *vr)*/ 2111 /* LDV_COMMENT_BEGIN_PREP */ 2112 #define DRIVER_AUTHOR \ 2113 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2114 "Dwaine Garden <DwaineGarden@rogers.com>" 2115 #define DRIVER_NAME "usbvision" 2116 #define DRIVER_ALIAS "USBVision" 2117 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2118 #define DRIVER_LICENSE "GPL" 2119 #define USBVISION_VERSION_STRING "0.9.11" 2120 #define ENABLE_HEXDUMP 0 2121 #ifdef USBVISION_DEBUG 2122 #define PDEBUG(level, fmt, args...) { \ 2123 if (video_debug & (level)) \ 2124 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2125 __func__, __LINE__ , ## args); \ 2126 } 2127 #else 2128 #define PDEBUG(level, fmt, args...) do {} while (0) 2129 #endif 2130 #define DBG_IO (1 << 1) 2131 #define DBG_PROBE (1 << 2) 2132 #define DBG_MMAP (1 << 3) 2133 #define rmspace(str) while (*str == ' ') str++; 2134 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2135 #define YES_NO(x) ((x) ? "Yes" : "No") 2136 #ifdef CONFIG_VIDEO_ADV_DEBUG 2137 #endif 2138 /* LDV_COMMENT_END_PREP */ 2139 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_reqbufs" */ 2140 void * var_vidioc_reqbufs_31_p1; 2141 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_reqbufs" */ 2142 struct v4l2_requestbuffers * var_vidioc_reqbufs_31_p2; 2143 /* LDV_COMMENT_BEGIN_PREP */ 2144 #ifdef CONFIG_VIDEO_ADV_DEBUG 2145 #endif 2146 /* LDV_COMMENT_END_PREP */ 2147 /* content: static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2148 /* LDV_COMMENT_BEGIN_PREP */ 2149 #define DRIVER_AUTHOR \ 2150 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2151 "Dwaine Garden <DwaineGarden@rogers.com>" 2152 #define DRIVER_NAME "usbvision" 2153 #define DRIVER_ALIAS "USBVision" 2154 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2155 #define DRIVER_LICENSE "GPL" 2156 #define USBVISION_VERSION_STRING "0.9.11" 2157 #define ENABLE_HEXDUMP 0 2158 #ifdef USBVISION_DEBUG 2159 #define PDEBUG(level, fmt, args...) { \ 2160 if (video_debug & (level)) \ 2161 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2162 __func__, __LINE__ , ## args); \ 2163 } 2164 #else 2165 #define PDEBUG(level, fmt, args...) do {} while (0) 2166 #endif 2167 #define DBG_IO (1 << 1) 2168 #define DBG_PROBE (1 << 2) 2169 #define DBG_MMAP (1 << 3) 2170 #define rmspace(str) while (*str == ' ') str++; 2171 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2172 #define YES_NO(x) ((x) ? "Yes" : "No") 2173 #ifdef CONFIG_VIDEO_ADV_DEBUG 2174 #endif 2175 /* LDV_COMMENT_END_PREP */ 2176 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querybuf" */ 2177 void * var_vidioc_querybuf_32_p1; 2178 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_querybuf" */ 2179 struct v4l2_buffer * var_vidioc_querybuf_32_p2; 2180 /* LDV_COMMENT_BEGIN_PREP */ 2181 #ifdef CONFIG_VIDEO_ADV_DEBUG 2182 #endif 2183 /* LDV_COMMENT_END_PREP */ 2184 /* content: static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2185 /* LDV_COMMENT_BEGIN_PREP */ 2186 #define DRIVER_AUTHOR \ 2187 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2188 "Dwaine Garden <DwaineGarden@rogers.com>" 2189 #define DRIVER_NAME "usbvision" 2190 #define DRIVER_ALIAS "USBVision" 2191 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2192 #define DRIVER_LICENSE "GPL" 2193 #define USBVISION_VERSION_STRING "0.9.11" 2194 #define ENABLE_HEXDUMP 0 2195 #ifdef USBVISION_DEBUG 2196 #define PDEBUG(level, fmt, args...) { \ 2197 if (video_debug & (level)) \ 2198 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2199 __func__, __LINE__ , ## args); \ 2200 } 2201 #else 2202 #define PDEBUG(level, fmt, args...) do {} while (0) 2203 #endif 2204 #define DBG_IO (1 << 1) 2205 #define DBG_PROBE (1 << 2) 2206 #define DBG_MMAP (1 << 3) 2207 #define rmspace(str) while (*str == ' ') str++; 2208 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2209 #define YES_NO(x) ((x) ? "Yes" : "No") 2210 #ifdef CONFIG_VIDEO_ADV_DEBUG 2211 #endif 2212 /* LDV_COMMENT_END_PREP */ 2213 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_qbuf" */ 2214 void * var_vidioc_qbuf_33_p1; 2215 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_qbuf" */ 2216 struct v4l2_buffer * var_vidioc_qbuf_33_p2; 2217 /* LDV_COMMENT_BEGIN_PREP */ 2218 #ifdef CONFIG_VIDEO_ADV_DEBUG 2219 #endif 2220 /* LDV_COMMENT_END_PREP */ 2221 /* content: static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 2222 /* LDV_COMMENT_BEGIN_PREP */ 2223 #define DRIVER_AUTHOR \ 2224 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2225 "Dwaine Garden <DwaineGarden@rogers.com>" 2226 #define DRIVER_NAME "usbvision" 2227 #define DRIVER_ALIAS "USBVision" 2228 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2229 #define DRIVER_LICENSE "GPL" 2230 #define USBVISION_VERSION_STRING "0.9.11" 2231 #define ENABLE_HEXDUMP 0 2232 #ifdef USBVISION_DEBUG 2233 #define PDEBUG(level, fmt, args...) { \ 2234 if (video_debug & (level)) \ 2235 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2236 __func__, __LINE__ , ## args); \ 2237 } 2238 #else 2239 #define PDEBUG(level, fmt, args...) do {} while (0) 2240 #endif 2241 #define DBG_IO (1 << 1) 2242 #define DBG_PROBE (1 << 2) 2243 #define DBG_MMAP (1 << 3) 2244 #define rmspace(str) while (*str == ' ') str++; 2245 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2246 #define YES_NO(x) ((x) ? "Yes" : "No") 2247 #ifdef CONFIG_VIDEO_ADV_DEBUG 2248 #endif 2249 /* LDV_COMMENT_END_PREP */ 2250 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_dqbuf" */ 2251 void * var_vidioc_dqbuf_34_p1; 2252 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_dqbuf" */ 2253 struct v4l2_buffer * var_vidioc_dqbuf_34_p2; 2254 /* LDV_COMMENT_BEGIN_PREP */ 2255 #ifdef CONFIG_VIDEO_ADV_DEBUG 2256 #endif 2257 /* LDV_COMMENT_END_PREP */ 2258 /* content: static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)*/ 2259 /* LDV_COMMENT_BEGIN_PREP */ 2260 #define DRIVER_AUTHOR \ 2261 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2262 "Dwaine Garden <DwaineGarden@rogers.com>" 2263 #define DRIVER_NAME "usbvision" 2264 #define DRIVER_ALIAS "USBVision" 2265 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2266 #define DRIVER_LICENSE "GPL" 2267 #define USBVISION_VERSION_STRING "0.9.11" 2268 #define ENABLE_HEXDUMP 0 2269 #ifdef USBVISION_DEBUG 2270 #define PDEBUG(level, fmt, args...) { \ 2271 if (video_debug & (level)) \ 2272 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2273 __func__, __LINE__ , ## args); \ 2274 } 2275 #else 2276 #define PDEBUG(level, fmt, args...) do {} while (0) 2277 #endif 2278 #define DBG_IO (1 << 1) 2279 #define DBG_PROBE (1 << 2) 2280 #define DBG_MMAP (1 << 3) 2281 #define rmspace(str) while (*str == ' ') str++; 2282 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2283 #define YES_NO(x) ((x) ? "Yes" : "No") 2284 #ifdef CONFIG_VIDEO_ADV_DEBUG 2285 #endif 2286 /* LDV_COMMENT_END_PREP */ 2287 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_std" */ 2288 void * var_vidioc_s_std_20_p1; 2289 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_std" */ 2290 v4l2_std_id var_vidioc_s_std_20_p2; 2291 /* LDV_COMMENT_BEGIN_PREP */ 2292 #ifdef CONFIG_VIDEO_ADV_DEBUG 2293 #endif 2294 /* LDV_COMMENT_END_PREP */ 2295 /* content: static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)*/ 2296 /* LDV_COMMENT_BEGIN_PREP */ 2297 #define DRIVER_AUTHOR \ 2298 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2299 "Dwaine Garden <DwaineGarden@rogers.com>" 2300 #define DRIVER_NAME "usbvision" 2301 #define DRIVER_ALIAS "USBVision" 2302 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2303 #define DRIVER_LICENSE "GPL" 2304 #define USBVISION_VERSION_STRING "0.9.11" 2305 #define ENABLE_HEXDUMP 0 2306 #ifdef USBVISION_DEBUG 2307 #define PDEBUG(level, fmt, args...) { \ 2308 if (video_debug & (level)) \ 2309 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2310 __func__, __LINE__ , ## args); \ 2311 } 2312 #else 2313 #define PDEBUG(level, fmt, args...) do {} while (0) 2314 #endif 2315 #define DBG_IO (1 << 1) 2316 #define DBG_PROBE (1 << 2) 2317 #define DBG_MMAP (1 << 3) 2318 #define rmspace(str) while (*str == ' ') str++; 2319 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2320 #define YES_NO(x) ((x) ? "Yes" : "No") 2321 #ifdef CONFIG_VIDEO_ADV_DEBUG 2322 #endif 2323 /* LDV_COMMENT_END_PREP */ 2324 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_std" */ 2325 void * var_vidioc_g_std_21_p1; 2326 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_std" */ 2327 v4l2_std_id * var_vidioc_g_std_21_p2; 2328 /* LDV_COMMENT_BEGIN_PREP */ 2329 #ifdef CONFIG_VIDEO_ADV_DEBUG 2330 #endif 2331 /* LDV_COMMENT_END_PREP */ 2332 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 2333 /* LDV_COMMENT_BEGIN_PREP */ 2334 #define DRIVER_AUTHOR \ 2335 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2336 "Dwaine Garden <DwaineGarden@rogers.com>" 2337 #define DRIVER_NAME "usbvision" 2338 #define DRIVER_ALIAS "USBVision" 2339 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2340 #define DRIVER_LICENSE "GPL" 2341 #define USBVISION_VERSION_STRING "0.9.11" 2342 #define ENABLE_HEXDUMP 0 2343 #ifdef USBVISION_DEBUG 2344 #define PDEBUG(level, fmt, args...) { \ 2345 if (video_debug & (level)) \ 2346 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2347 __func__, __LINE__ , ## args); \ 2348 } 2349 #else 2350 #define PDEBUG(level, fmt, args...) do {} while (0) 2351 #endif 2352 #define DBG_IO (1 << 1) 2353 #define DBG_PROBE (1 << 2) 2354 #define DBG_MMAP (1 << 3) 2355 #define rmspace(str) while (*str == ' ') str++; 2356 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2357 #define YES_NO(x) ((x) ? "Yes" : "No") 2358 #ifdef CONFIG_VIDEO_ADV_DEBUG 2359 #endif 2360 /* LDV_COMMENT_END_PREP */ 2361 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_input" */ 2362 void * var_vidioc_enum_input_17_p1; 2363 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_enum_input" */ 2364 struct v4l2_input * var_vidioc_enum_input_17_p2; 2365 /* LDV_COMMENT_BEGIN_PREP */ 2366 #ifdef CONFIG_VIDEO_ADV_DEBUG 2367 #endif 2368 /* LDV_COMMENT_END_PREP */ 2369 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 2370 /* LDV_COMMENT_BEGIN_PREP */ 2371 #define DRIVER_AUTHOR \ 2372 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2373 "Dwaine Garden <DwaineGarden@rogers.com>" 2374 #define DRIVER_NAME "usbvision" 2375 #define DRIVER_ALIAS "USBVision" 2376 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2377 #define DRIVER_LICENSE "GPL" 2378 #define USBVISION_VERSION_STRING "0.9.11" 2379 #define ENABLE_HEXDUMP 0 2380 #ifdef USBVISION_DEBUG 2381 #define PDEBUG(level, fmt, args...) { \ 2382 if (video_debug & (level)) \ 2383 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2384 __func__, __LINE__ , ## args); \ 2385 } 2386 #else 2387 #define PDEBUG(level, fmt, args...) do {} while (0) 2388 #endif 2389 #define DBG_IO (1 << 1) 2390 #define DBG_PROBE (1 << 2) 2391 #define DBG_MMAP (1 << 3) 2392 #define rmspace(str) while (*str == ' ') str++; 2393 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2394 #define YES_NO(x) ((x) ? "Yes" : "No") 2395 #ifdef CONFIG_VIDEO_ADV_DEBUG 2396 #endif 2397 /* LDV_COMMENT_END_PREP */ 2398 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_input" */ 2399 void * var_vidioc_g_input_18_p1; 2400 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_input" */ 2401 unsigned int * var_vidioc_g_input_18_p2; 2402 /* LDV_COMMENT_BEGIN_PREP */ 2403 #ifdef CONFIG_VIDEO_ADV_DEBUG 2404 #endif 2405 /* LDV_COMMENT_END_PREP */ 2406 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 2407 /* LDV_COMMENT_BEGIN_PREP */ 2408 #define DRIVER_AUTHOR \ 2409 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2410 "Dwaine Garden <DwaineGarden@rogers.com>" 2411 #define DRIVER_NAME "usbvision" 2412 #define DRIVER_ALIAS "USBVision" 2413 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2414 #define DRIVER_LICENSE "GPL" 2415 #define USBVISION_VERSION_STRING "0.9.11" 2416 #define ENABLE_HEXDUMP 0 2417 #ifdef USBVISION_DEBUG 2418 #define PDEBUG(level, fmt, args...) { \ 2419 if (video_debug & (level)) \ 2420 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2421 __func__, __LINE__ , ## args); \ 2422 } 2423 #else 2424 #define PDEBUG(level, fmt, args...) do {} while (0) 2425 #endif 2426 #define DBG_IO (1 << 1) 2427 #define DBG_PROBE (1 << 2) 2428 #define DBG_MMAP (1 << 3) 2429 #define rmspace(str) while (*str == ' ') str++; 2430 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2431 #define YES_NO(x) ((x) ? "Yes" : "No") 2432 #ifdef CONFIG_VIDEO_ADV_DEBUG 2433 #endif 2434 /* LDV_COMMENT_END_PREP */ 2435 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_input" */ 2436 void * var_vidioc_s_input_19_p1; 2437 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_input" */ 2438 unsigned int var_vidioc_s_input_19_p2; 2439 /* LDV_COMMENT_BEGIN_PREP */ 2440 #ifdef CONFIG_VIDEO_ADV_DEBUG 2441 #endif 2442 /* LDV_COMMENT_END_PREP */ 2443 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 2444 /* LDV_COMMENT_BEGIN_PREP */ 2445 #define DRIVER_AUTHOR \ 2446 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2447 "Dwaine Garden <DwaineGarden@rogers.com>" 2448 #define DRIVER_NAME "usbvision" 2449 #define DRIVER_ALIAS "USBVision" 2450 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2451 #define DRIVER_LICENSE "GPL" 2452 #define USBVISION_VERSION_STRING "0.9.11" 2453 #define ENABLE_HEXDUMP 0 2454 #ifdef USBVISION_DEBUG 2455 #define PDEBUG(level, fmt, args...) { \ 2456 if (video_debug & (level)) \ 2457 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2458 __func__, __LINE__ , ## args); \ 2459 } 2460 #else 2461 #define PDEBUG(level, fmt, args...) do {} while (0) 2462 #endif 2463 #define DBG_IO (1 << 1) 2464 #define DBG_PROBE (1 << 2) 2465 #define DBG_MMAP (1 << 3) 2466 #define rmspace(str) while (*str == ' ') str++; 2467 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2468 #define YES_NO(x) ((x) ? "Yes" : "No") 2469 #ifdef CONFIG_VIDEO_ADV_DEBUG 2470 #endif 2471 /* LDV_COMMENT_END_PREP */ 2472 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_queryctrl" */ 2473 void * var_vidioc_queryctrl_28_p1; 2474 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_queryctrl" */ 2475 struct v4l2_queryctrl * var_vidioc_queryctrl_28_p2; 2476 /* LDV_COMMENT_BEGIN_PREP */ 2477 #ifdef CONFIG_VIDEO_ADV_DEBUG 2478 #endif 2479 /* LDV_COMMENT_END_PREP */ 2480 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 2481 /* LDV_COMMENT_BEGIN_PREP */ 2482 #define DRIVER_AUTHOR \ 2483 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2484 "Dwaine Garden <DwaineGarden@rogers.com>" 2485 #define DRIVER_NAME "usbvision" 2486 #define DRIVER_ALIAS "USBVision" 2487 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2488 #define DRIVER_LICENSE "GPL" 2489 #define USBVISION_VERSION_STRING "0.9.11" 2490 #define ENABLE_HEXDUMP 0 2491 #ifdef USBVISION_DEBUG 2492 #define PDEBUG(level, fmt, args...) { \ 2493 if (video_debug & (level)) \ 2494 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2495 __func__, __LINE__ , ## args); \ 2496 } 2497 #else 2498 #define PDEBUG(level, fmt, args...) do {} while (0) 2499 #endif 2500 #define DBG_IO (1 << 1) 2501 #define DBG_PROBE (1 << 2) 2502 #define DBG_MMAP (1 << 3) 2503 #define rmspace(str) while (*str == ' ') str++; 2504 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2505 #define YES_NO(x) ((x) ? "Yes" : "No") 2506 #ifdef CONFIG_VIDEO_ADV_DEBUG 2507 #endif 2508 /* LDV_COMMENT_END_PREP */ 2509 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_audio" */ 2510 void * var_vidioc_g_audio_26_p1; 2511 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_audio" */ 2512 struct v4l2_audio * var_vidioc_g_audio_26_p2; 2513 /* LDV_COMMENT_BEGIN_PREP */ 2514 #ifdef CONFIG_VIDEO_ADV_DEBUG 2515 #endif 2516 /* LDV_COMMENT_END_PREP */ 2517 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 2518 /* LDV_COMMENT_BEGIN_PREP */ 2519 #define DRIVER_AUTHOR \ 2520 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2521 "Dwaine Garden <DwaineGarden@rogers.com>" 2522 #define DRIVER_NAME "usbvision" 2523 #define DRIVER_ALIAS "USBVision" 2524 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2525 #define DRIVER_LICENSE "GPL" 2526 #define USBVISION_VERSION_STRING "0.9.11" 2527 #define ENABLE_HEXDUMP 0 2528 #ifdef USBVISION_DEBUG 2529 #define PDEBUG(level, fmt, args...) { \ 2530 if (video_debug & (level)) \ 2531 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2532 __func__, __LINE__ , ## args); \ 2533 } 2534 #else 2535 #define PDEBUG(level, fmt, args...) do {} while (0) 2536 #endif 2537 #define DBG_IO (1 << 1) 2538 #define DBG_PROBE (1 << 2) 2539 #define DBG_MMAP (1 << 3) 2540 #define rmspace(str) while (*str == ' ') str++; 2541 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2542 #define YES_NO(x) ((x) ? "Yes" : "No") 2543 #ifdef CONFIG_VIDEO_ADV_DEBUG 2544 #endif 2545 /* LDV_COMMENT_END_PREP */ 2546 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_audio" */ 2547 void * var_vidioc_s_audio_27_p1; 2548 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_audio" */ 2549 const struct v4l2_audio * var_vidioc_s_audio_27_p2; 2550 /* LDV_COMMENT_BEGIN_PREP */ 2551 #ifdef CONFIG_VIDEO_ADV_DEBUG 2552 #endif 2553 /* LDV_COMMENT_END_PREP */ 2554 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 2555 /* LDV_COMMENT_BEGIN_PREP */ 2556 #define DRIVER_AUTHOR \ 2557 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2558 "Dwaine Garden <DwaineGarden@rogers.com>" 2559 #define DRIVER_NAME "usbvision" 2560 #define DRIVER_ALIAS "USBVision" 2561 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2562 #define DRIVER_LICENSE "GPL" 2563 #define USBVISION_VERSION_STRING "0.9.11" 2564 #define ENABLE_HEXDUMP 0 2565 #ifdef USBVISION_DEBUG 2566 #define PDEBUG(level, fmt, args...) { \ 2567 if (video_debug & (level)) \ 2568 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2569 __func__, __LINE__ , ## args); \ 2570 } 2571 #else 2572 #define PDEBUG(level, fmt, args...) do {} while (0) 2573 #endif 2574 #define DBG_IO (1 << 1) 2575 #define DBG_PROBE (1 << 2) 2576 #define DBG_MMAP (1 << 3) 2577 #define rmspace(str) while (*str == ' ') str++; 2578 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2579 #define YES_NO(x) ((x) ? "Yes" : "No") 2580 #ifdef CONFIG_VIDEO_ADV_DEBUG 2581 #endif 2582 /* LDV_COMMENT_END_PREP */ 2583 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_ctrl" */ 2584 void * var_vidioc_g_ctrl_29_p1; 2585 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_ctrl" */ 2586 struct v4l2_control * var_vidioc_g_ctrl_29_p2; 2587 /* LDV_COMMENT_BEGIN_PREP */ 2588 #ifdef CONFIG_VIDEO_ADV_DEBUG 2589 #endif 2590 /* LDV_COMMENT_END_PREP */ 2591 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 2592 /* LDV_COMMENT_BEGIN_PREP */ 2593 #define DRIVER_AUTHOR \ 2594 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2595 "Dwaine Garden <DwaineGarden@rogers.com>" 2596 #define DRIVER_NAME "usbvision" 2597 #define DRIVER_ALIAS "USBVision" 2598 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2599 #define DRIVER_LICENSE "GPL" 2600 #define USBVISION_VERSION_STRING "0.9.11" 2601 #define ENABLE_HEXDUMP 0 2602 #ifdef USBVISION_DEBUG 2603 #define PDEBUG(level, fmt, args...) { \ 2604 if (video_debug & (level)) \ 2605 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2606 __func__, __LINE__ , ## args); \ 2607 } 2608 #else 2609 #define PDEBUG(level, fmt, args...) do {} while (0) 2610 #endif 2611 #define DBG_IO (1 << 1) 2612 #define DBG_PROBE (1 << 2) 2613 #define DBG_MMAP (1 << 3) 2614 #define rmspace(str) while (*str == ' ') str++; 2615 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2616 #define YES_NO(x) ((x) ? "Yes" : "No") 2617 #ifdef CONFIG_VIDEO_ADV_DEBUG 2618 #endif 2619 /* LDV_COMMENT_END_PREP */ 2620 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_ctrl" */ 2621 void * var_vidioc_s_ctrl_30_p1; 2622 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_ctrl" */ 2623 struct v4l2_control * var_vidioc_s_ctrl_30_p2; 2624 /* LDV_COMMENT_BEGIN_PREP */ 2625 #ifdef CONFIG_VIDEO_ADV_DEBUG 2626 #endif 2627 /* LDV_COMMENT_END_PREP */ 2628 /* content: static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)*/ 2629 /* LDV_COMMENT_BEGIN_PREP */ 2630 #define DRIVER_AUTHOR \ 2631 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2632 "Dwaine Garden <DwaineGarden@rogers.com>" 2633 #define DRIVER_NAME "usbvision" 2634 #define DRIVER_ALIAS "USBVision" 2635 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2636 #define DRIVER_LICENSE "GPL" 2637 #define USBVISION_VERSION_STRING "0.9.11" 2638 #define ENABLE_HEXDUMP 0 2639 #ifdef USBVISION_DEBUG 2640 #define PDEBUG(level, fmt, args...) { \ 2641 if (video_debug & (level)) \ 2642 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2643 __func__, __LINE__ , ## args); \ 2644 } 2645 #else 2646 #define PDEBUG(level, fmt, args...) do {} while (0) 2647 #endif 2648 #define DBG_IO (1 << 1) 2649 #define DBG_PROBE (1 << 2) 2650 #define DBG_MMAP (1 << 3) 2651 #define rmspace(str) while (*str == ' ') str++; 2652 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2653 #define YES_NO(x) ((x) ? "Yes" : "No") 2654 #ifdef CONFIG_VIDEO_ADV_DEBUG 2655 #endif 2656 /* LDV_COMMENT_END_PREP */ 2657 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamon" */ 2658 void * var_vidioc_streamon_35_p1; 2659 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamon" */ 2660 enum v4l2_buf_type var_vidioc_streamon_35_p2; 2661 /* LDV_COMMENT_BEGIN_PREP */ 2662 #ifdef CONFIG_VIDEO_ADV_DEBUG 2663 #endif 2664 /* LDV_COMMENT_END_PREP */ 2665 /* content: static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type type)*/ 2666 /* LDV_COMMENT_BEGIN_PREP */ 2667 #define DRIVER_AUTHOR \ 2668 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2669 "Dwaine Garden <DwaineGarden@rogers.com>" 2670 #define DRIVER_NAME "usbvision" 2671 #define DRIVER_ALIAS "USBVision" 2672 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2673 #define DRIVER_LICENSE "GPL" 2674 #define USBVISION_VERSION_STRING "0.9.11" 2675 #define ENABLE_HEXDUMP 0 2676 #ifdef USBVISION_DEBUG 2677 #define PDEBUG(level, fmt, args...) { \ 2678 if (video_debug & (level)) \ 2679 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2680 __func__, __LINE__ , ## args); \ 2681 } 2682 #else 2683 #define PDEBUG(level, fmt, args...) do {} while (0) 2684 #endif 2685 #define DBG_IO (1 << 1) 2686 #define DBG_PROBE (1 << 2) 2687 #define DBG_MMAP (1 << 3) 2688 #define rmspace(str) while (*str == ' ') str++; 2689 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2690 #define YES_NO(x) ((x) ? "Yes" : "No") 2691 #ifdef CONFIG_VIDEO_ADV_DEBUG 2692 #endif 2693 /* LDV_COMMENT_END_PREP */ 2694 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamoff" */ 2695 void * var_vidioc_streamoff_36_p1; 2696 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_streamoff" */ 2697 enum v4l2_buf_type var_vidioc_streamoff_36_p2; 2698 /* LDV_COMMENT_BEGIN_PREP */ 2699 #ifdef CONFIG_VIDEO_ADV_DEBUG 2700 #endif 2701 /* LDV_COMMENT_END_PREP */ 2702 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 2703 /* LDV_COMMENT_BEGIN_PREP */ 2704 #define DRIVER_AUTHOR \ 2705 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2706 "Dwaine Garden <DwaineGarden@rogers.com>" 2707 #define DRIVER_NAME "usbvision" 2708 #define DRIVER_ALIAS "USBVision" 2709 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2710 #define DRIVER_LICENSE "GPL" 2711 #define USBVISION_VERSION_STRING "0.9.11" 2712 #define ENABLE_HEXDUMP 0 2713 #ifdef USBVISION_DEBUG 2714 #define PDEBUG(level, fmt, args...) { \ 2715 if (video_debug & (level)) \ 2716 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2717 __func__, __LINE__ , ## args); \ 2718 } 2719 #else 2720 #define PDEBUG(level, fmt, args...) do {} while (0) 2721 #endif 2722 #define DBG_IO (1 << 1) 2723 #define DBG_PROBE (1 << 2) 2724 #define DBG_MMAP (1 << 3) 2725 #define rmspace(str) while (*str == ' ') str++; 2726 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2727 #define YES_NO(x) ((x) ? "Yes" : "No") 2728 #ifdef CONFIG_VIDEO_ADV_DEBUG 2729 #endif 2730 /* LDV_COMMENT_END_PREP */ 2731 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_tuner" */ 2732 void * var_vidioc_g_tuner_22_p1; 2733 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_tuner" */ 2734 struct v4l2_tuner * var_vidioc_g_tuner_22_p2; 2735 /* LDV_COMMENT_BEGIN_PREP */ 2736 #ifdef CONFIG_VIDEO_ADV_DEBUG 2737 #endif 2738 /* LDV_COMMENT_END_PREP */ 2739 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 2740 /* LDV_COMMENT_BEGIN_PREP */ 2741 #define DRIVER_AUTHOR \ 2742 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2743 "Dwaine Garden <DwaineGarden@rogers.com>" 2744 #define DRIVER_NAME "usbvision" 2745 #define DRIVER_ALIAS "USBVision" 2746 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2747 #define DRIVER_LICENSE "GPL" 2748 #define USBVISION_VERSION_STRING "0.9.11" 2749 #define ENABLE_HEXDUMP 0 2750 #ifdef USBVISION_DEBUG 2751 #define PDEBUG(level, fmt, args...) { \ 2752 if (video_debug & (level)) \ 2753 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2754 __func__, __LINE__ , ## args); \ 2755 } 2756 #else 2757 #define PDEBUG(level, fmt, args...) do {} while (0) 2758 #endif 2759 #define DBG_IO (1 << 1) 2760 #define DBG_PROBE (1 << 2) 2761 #define DBG_MMAP (1 << 3) 2762 #define rmspace(str) while (*str == ' ') str++; 2763 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2764 #define YES_NO(x) ((x) ? "Yes" : "No") 2765 #ifdef CONFIG_VIDEO_ADV_DEBUG 2766 #endif 2767 /* LDV_COMMENT_END_PREP */ 2768 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_tuner" */ 2769 void * var_vidioc_s_tuner_23_p1; 2770 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_tuner" */ 2771 const struct v4l2_tuner * var_vidioc_s_tuner_23_p2; 2772 /* LDV_COMMENT_BEGIN_PREP */ 2773 #ifdef CONFIG_VIDEO_ADV_DEBUG 2774 #endif 2775 /* LDV_COMMENT_END_PREP */ 2776 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 2777 /* LDV_COMMENT_BEGIN_PREP */ 2778 #define DRIVER_AUTHOR \ 2779 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2780 "Dwaine Garden <DwaineGarden@rogers.com>" 2781 #define DRIVER_NAME "usbvision" 2782 #define DRIVER_ALIAS "USBVision" 2783 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2784 #define DRIVER_LICENSE "GPL" 2785 #define USBVISION_VERSION_STRING "0.9.11" 2786 #define ENABLE_HEXDUMP 0 2787 #ifdef USBVISION_DEBUG 2788 #define PDEBUG(level, fmt, args...) { \ 2789 if (video_debug & (level)) \ 2790 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2791 __func__, __LINE__ , ## args); \ 2792 } 2793 #else 2794 #define PDEBUG(level, fmt, args...) do {} while (0) 2795 #endif 2796 #define DBG_IO (1 << 1) 2797 #define DBG_PROBE (1 << 2) 2798 #define DBG_MMAP (1 << 3) 2799 #define rmspace(str) while (*str == ' ') str++; 2800 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2801 #define YES_NO(x) ((x) ? "Yes" : "No") 2802 #ifdef CONFIG_VIDEO_ADV_DEBUG 2803 #endif 2804 /* LDV_COMMENT_END_PREP */ 2805 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_frequency" */ 2806 void * var_vidioc_g_frequency_24_p1; 2807 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_frequency" */ 2808 struct v4l2_frequency * var_vidioc_g_frequency_24_p2; 2809 /* LDV_COMMENT_BEGIN_PREP */ 2810 #ifdef CONFIG_VIDEO_ADV_DEBUG 2811 #endif 2812 /* LDV_COMMENT_END_PREP */ 2813 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 2814 /* LDV_COMMENT_BEGIN_PREP */ 2815 #define DRIVER_AUTHOR \ 2816 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2817 "Dwaine Garden <DwaineGarden@rogers.com>" 2818 #define DRIVER_NAME "usbvision" 2819 #define DRIVER_ALIAS "USBVision" 2820 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2821 #define DRIVER_LICENSE "GPL" 2822 #define USBVISION_VERSION_STRING "0.9.11" 2823 #define ENABLE_HEXDUMP 0 2824 #ifdef USBVISION_DEBUG 2825 #define PDEBUG(level, fmt, args...) { \ 2826 if (video_debug & (level)) \ 2827 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2828 __func__, __LINE__ , ## args); \ 2829 } 2830 #else 2831 #define PDEBUG(level, fmt, args...) do {} while (0) 2832 #endif 2833 #define DBG_IO (1 << 1) 2834 #define DBG_PROBE (1 << 2) 2835 #define DBG_MMAP (1 << 3) 2836 #define rmspace(str) while (*str == ' ') str++; 2837 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2838 #define YES_NO(x) ((x) ? "Yes" : "No") 2839 #ifdef CONFIG_VIDEO_ADV_DEBUG 2840 #endif 2841 /* LDV_COMMENT_END_PREP */ 2842 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_frequency" */ 2843 void * var_vidioc_s_frequency_25_p1; 2844 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_frequency" */ 2845 const struct v4l2_frequency * var_vidioc_s_frequency_25_p2; 2846 /* LDV_COMMENT_BEGIN_PREP */ 2847 #ifdef CONFIG_VIDEO_ADV_DEBUG 2848 #endif 2849 /* LDV_COMMENT_END_PREP */ 2850 /* content: static int vidioc_g_register(struct file *file, void *priv, struct v4l2_dbg_register *reg)*/ 2851 /* LDV_COMMENT_BEGIN_PREP */ 2852 #define DRIVER_AUTHOR \ 2853 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2854 "Dwaine Garden <DwaineGarden@rogers.com>" 2855 #define DRIVER_NAME "usbvision" 2856 #define DRIVER_ALIAS "USBVision" 2857 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2858 #define DRIVER_LICENSE "GPL" 2859 #define USBVISION_VERSION_STRING "0.9.11" 2860 #define ENABLE_HEXDUMP 0 2861 #ifdef USBVISION_DEBUG 2862 #define PDEBUG(level, fmt, args...) { \ 2863 if (video_debug & (level)) \ 2864 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2865 __func__, __LINE__ , ## args); \ 2866 } 2867 #else 2868 #define PDEBUG(level, fmt, args...) do {} while (0) 2869 #endif 2870 #define DBG_IO (1 << 1) 2871 #define DBG_PROBE (1 << 2) 2872 #define DBG_MMAP (1 << 3) 2873 #define rmspace(str) while (*str == ' ') str++; 2874 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2875 #define YES_NO(x) ((x) ? "Yes" : "No") 2876 #ifdef CONFIG_VIDEO_ADV_DEBUG 2877 /* LDV_COMMENT_END_PREP */ 2878 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_register" */ 2879 void * var_vidioc_g_register_14_p1; 2880 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_g_register" */ 2881 struct v4l2_dbg_register * var_vidioc_g_register_14_p2; 2882 /* LDV_COMMENT_BEGIN_PREP */ 2883 #endif 2884 #ifdef CONFIG_VIDEO_ADV_DEBUG 2885 #endif 2886 /* LDV_COMMENT_END_PREP */ 2887 /* content: static int vidioc_s_register(struct file *file, void *priv, const struct v4l2_dbg_register *reg)*/ 2888 /* LDV_COMMENT_BEGIN_PREP */ 2889 #define DRIVER_AUTHOR \ 2890 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2891 "Dwaine Garden <DwaineGarden@rogers.com>" 2892 #define DRIVER_NAME "usbvision" 2893 #define DRIVER_ALIAS "USBVision" 2894 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2895 #define DRIVER_LICENSE "GPL" 2896 #define USBVISION_VERSION_STRING "0.9.11" 2897 #define ENABLE_HEXDUMP 0 2898 #ifdef USBVISION_DEBUG 2899 #define PDEBUG(level, fmt, args...) { \ 2900 if (video_debug & (level)) \ 2901 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2902 __func__, __LINE__ , ## args); \ 2903 } 2904 #else 2905 #define PDEBUG(level, fmt, args...) do {} while (0) 2906 #endif 2907 #define DBG_IO (1 << 1) 2908 #define DBG_PROBE (1 << 2) 2909 #define DBG_MMAP (1 << 3) 2910 #define rmspace(str) while (*str == ' ') str++; 2911 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2912 #define YES_NO(x) ((x) ? "Yes" : "No") 2913 #ifdef CONFIG_VIDEO_ADV_DEBUG 2914 /* LDV_COMMENT_END_PREP */ 2915 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_register" */ 2916 void * var_vidioc_s_register_15_p1; 2917 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "vidioc_s_register" */ 2918 const struct v4l2_dbg_register * var_vidioc_s_register_15_p2; 2919 /* LDV_COMMENT_BEGIN_PREP */ 2920 #endif 2921 #ifdef CONFIG_VIDEO_ADV_DEBUG 2922 #endif 2923 /* LDV_COMMENT_END_PREP */ 2924 2925 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 2926 /* content: static int usbvision_radio_open(struct file *file)*/ 2927 /* LDV_COMMENT_BEGIN_PREP */ 2928 #define DRIVER_AUTHOR \ 2929 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2930 "Dwaine Garden <DwaineGarden@rogers.com>" 2931 #define DRIVER_NAME "usbvision" 2932 #define DRIVER_ALIAS "USBVision" 2933 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2934 #define DRIVER_LICENSE "GPL" 2935 #define USBVISION_VERSION_STRING "0.9.11" 2936 #define ENABLE_HEXDUMP 0 2937 #ifdef USBVISION_DEBUG 2938 #define PDEBUG(level, fmt, args...) { \ 2939 if (video_debug & (level)) \ 2940 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2941 __func__, __LINE__ , ## args); \ 2942 } 2943 #else 2944 #define PDEBUG(level, fmt, args...) do {} while (0) 2945 #endif 2946 #define DBG_IO (1 << 1) 2947 #define DBG_PROBE (1 << 2) 2948 #define DBG_MMAP (1 << 3) 2949 #define rmspace(str) while (*str == ' ') str++; 2950 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2951 #define YES_NO(x) ((x) ? "Yes" : "No") 2952 #ifdef CONFIG_VIDEO_ADV_DEBUG 2953 #endif 2954 /* LDV_COMMENT_END_PREP */ 2955 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_radio_open" */ 2956 static int res_usbvision_radio_open_45; 2957 /* LDV_COMMENT_BEGIN_PREP */ 2958 #ifdef CONFIG_VIDEO_ADV_DEBUG 2959 #endif 2960 /* LDV_COMMENT_END_PREP */ 2961 /* content: static int usbvision_radio_close(struct file *file)*/ 2962 /* LDV_COMMENT_BEGIN_PREP */ 2963 #define DRIVER_AUTHOR \ 2964 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 2965 "Dwaine Garden <DwaineGarden@rogers.com>" 2966 #define DRIVER_NAME "usbvision" 2967 #define DRIVER_ALIAS "USBVision" 2968 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 2969 #define DRIVER_LICENSE "GPL" 2970 #define USBVISION_VERSION_STRING "0.9.11" 2971 #define ENABLE_HEXDUMP 0 2972 #ifdef USBVISION_DEBUG 2973 #define PDEBUG(level, fmt, args...) { \ 2974 if (video_debug & (level)) \ 2975 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 2976 __func__, __LINE__ , ## args); \ 2977 } 2978 #else 2979 #define PDEBUG(level, fmt, args...) do {} while (0) 2980 #endif 2981 #define DBG_IO (1 << 1) 2982 #define DBG_PROBE (1 << 2) 2983 #define DBG_MMAP (1 << 3) 2984 #define rmspace(str) while (*str == ' ') str++; 2985 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 2986 #define YES_NO(x) ((x) ? "Yes" : "No") 2987 #ifdef CONFIG_VIDEO_ADV_DEBUG 2988 #endif 2989 /* LDV_COMMENT_END_PREP */ 2990 /* LDV_COMMENT_BEGIN_PREP */ 2991 #ifdef CONFIG_VIDEO_ADV_DEBUG 2992 #endif 2993 /* LDV_COMMENT_END_PREP */ 2994 2995 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 2996 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 2997 /* LDV_COMMENT_BEGIN_PREP */ 2998 #define DRIVER_AUTHOR \ 2999 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3000 "Dwaine Garden <DwaineGarden@rogers.com>" 3001 #define DRIVER_NAME "usbvision" 3002 #define DRIVER_ALIAS "USBVision" 3003 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3004 #define DRIVER_LICENSE "GPL" 3005 #define USBVISION_VERSION_STRING "0.9.11" 3006 #define ENABLE_HEXDUMP 0 3007 #ifdef USBVISION_DEBUG 3008 #define PDEBUG(level, fmt, args...) { \ 3009 if (video_debug & (level)) \ 3010 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3011 __func__, __LINE__ , ## args); \ 3012 } 3013 #else 3014 #define PDEBUG(level, fmt, args...) do {} while (0) 3015 #endif 3016 #define DBG_IO (1 << 1) 3017 #define DBG_PROBE (1 << 2) 3018 #define DBG_MMAP (1 << 3) 3019 #define rmspace(str) while (*str == ' ') str++; 3020 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3021 #define YES_NO(x) ((x) ? "Yes" : "No") 3022 #ifdef CONFIG_VIDEO_ADV_DEBUG 3023 #endif 3024 /* LDV_COMMENT_END_PREP */ 3025 /* LDV_COMMENT_BEGIN_PREP */ 3026 #ifdef CONFIG_VIDEO_ADV_DEBUG 3027 #endif 3028 /* LDV_COMMENT_END_PREP */ 3029 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 3030 /* LDV_COMMENT_BEGIN_PREP */ 3031 #define DRIVER_AUTHOR \ 3032 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3033 "Dwaine Garden <DwaineGarden@rogers.com>" 3034 #define DRIVER_NAME "usbvision" 3035 #define DRIVER_ALIAS "USBVision" 3036 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3037 #define DRIVER_LICENSE "GPL" 3038 #define USBVISION_VERSION_STRING "0.9.11" 3039 #define ENABLE_HEXDUMP 0 3040 #ifdef USBVISION_DEBUG 3041 #define PDEBUG(level, fmt, args...) { \ 3042 if (video_debug & (level)) \ 3043 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3044 __func__, __LINE__ , ## args); \ 3045 } 3046 #else 3047 #define PDEBUG(level, fmt, args...) do {} while (0) 3048 #endif 3049 #define DBG_IO (1 << 1) 3050 #define DBG_PROBE (1 << 2) 3051 #define DBG_MMAP (1 << 3) 3052 #define rmspace(str) while (*str == ' ') str++; 3053 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3054 #define YES_NO(x) ((x) ? "Yes" : "No") 3055 #ifdef CONFIG_VIDEO_ADV_DEBUG 3056 #endif 3057 /* LDV_COMMENT_END_PREP */ 3058 /* LDV_COMMENT_BEGIN_PREP */ 3059 #ifdef CONFIG_VIDEO_ADV_DEBUG 3060 #endif 3061 /* LDV_COMMENT_END_PREP */ 3062 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 3063 /* LDV_COMMENT_BEGIN_PREP */ 3064 #define DRIVER_AUTHOR \ 3065 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3066 "Dwaine Garden <DwaineGarden@rogers.com>" 3067 #define DRIVER_NAME "usbvision" 3068 #define DRIVER_ALIAS "USBVision" 3069 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3070 #define DRIVER_LICENSE "GPL" 3071 #define USBVISION_VERSION_STRING "0.9.11" 3072 #define ENABLE_HEXDUMP 0 3073 #ifdef USBVISION_DEBUG 3074 #define PDEBUG(level, fmt, args...) { \ 3075 if (video_debug & (level)) \ 3076 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3077 __func__, __LINE__ , ## args); \ 3078 } 3079 #else 3080 #define PDEBUG(level, fmt, args...) do {} while (0) 3081 #endif 3082 #define DBG_IO (1 << 1) 3083 #define DBG_PROBE (1 << 2) 3084 #define DBG_MMAP (1 << 3) 3085 #define rmspace(str) while (*str == ' ') str++; 3086 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3087 #define YES_NO(x) ((x) ? "Yes" : "No") 3088 #ifdef CONFIG_VIDEO_ADV_DEBUG 3089 #endif 3090 /* LDV_COMMENT_END_PREP */ 3091 /* LDV_COMMENT_BEGIN_PREP */ 3092 #ifdef CONFIG_VIDEO_ADV_DEBUG 3093 #endif 3094 /* LDV_COMMENT_END_PREP */ 3095 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 3096 /* LDV_COMMENT_BEGIN_PREP */ 3097 #define DRIVER_AUTHOR \ 3098 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3099 "Dwaine Garden <DwaineGarden@rogers.com>" 3100 #define DRIVER_NAME "usbvision" 3101 #define DRIVER_ALIAS "USBVision" 3102 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3103 #define DRIVER_LICENSE "GPL" 3104 #define USBVISION_VERSION_STRING "0.9.11" 3105 #define ENABLE_HEXDUMP 0 3106 #ifdef USBVISION_DEBUG 3107 #define PDEBUG(level, fmt, args...) { \ 3108 if (video_debug & (level)) \ 3109 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3110 __func__, __LINE__ , ## args); \ 3111 } 3112 #else 3113 #define PDEBUG(level, fmt, args...) do {} while (0) 3114 #endif 3115 #define DBG_IO (1 << 1) 3116 #define DBG_PROBE (1 << 2) 3117 #define DBG_MMAP (1 << 3) 3118 #define rmspace(str) while (*str == ' ') str++; 3119 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3120 #define YES_NO(x) ((x) ? "Yes" : "No") 3121 #ifdef CONFIG_VIDEO_ADV_DEBUG 3122 #endif 3123 /* LDV_COMMENT_END_PREP */ 3124 /* LDV_COMMENT_BEGIN_PREP */ 3125 #ifdef CONFIG_VIDEO_ADV_DEBUG 3126 #endif 3127 /* LDV_COMMENT_END_PREP */ 3128 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 3129 /* LDV_COMMENT_BEGIN_PREP */ 3130 #define DRIVER_AUTHOR \ 3131 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3132 "Dwaine Garden <DwaineGarden@rogers.com>" 3133 #define DRIVER_NAME "usbvision" 3134 #define DRIVER_ALIAS "USBVision" 3135 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3136 #define DRIVER_LICENSE "GPL" 3137 #define USBVISION_VERSION_STRING "0.9.11" 3138 #define ENABLE_HEXDUMP 0 3139 #ifdef USBVISION_DEBUG 3140 #define PDEBUG(level, fmt, args...) { \ 3141 if (video_debug & (level)) \ 3142 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3143 __func__, __LINE__ , ## args); \ 3144 } 3145 #else 3146 #define PDEBUG(level, fmt, args...) do {} while (0) 3147 #endif 3148 #define DBG_IO (1 << 1) 3149 #define DBG_PROBE (1 << 2) 3150 #define DBG_MMAP (1 << 3) 3151 #define rmspace(str) while (*str == ' ') str++; 3152 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3153 #define YES_NO(x) ((x) ? "Yes" : "No") 3154 #ifdef CONFIG_VIDEO_ADV_DEBUG 3155 #endif 3156 /* LDV_COMMENT_END_PREP */ 3157 /* LDV_COMMENT_BEGIN_PREP */ 3158 #ifdef CONFIG_VIDEO_ADV_DEBUG 3159 #endif 3160 /* LDV_COMMENT_END_PREP */ 3161 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 3162 /* LDV_COMMENT_BEGIN_PREP */ 3163 #define DRIVER_AUTHOR \ 3164 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3165 "Dwaine Garden <DwaineGarden@rogers.com>" 3166 #define DRIVER_NAME "usbvision" 3167 #define DRIVER_ALIAS "USBVision" 3168 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3169 #define DRIVER_LICENSE "GPL" 3170 #define USBVISION_VERSION_STRING "0.9.11" 3171 #define ENABLE_HEXDUMP 0 3172 #ifdef USBVISION_DEBUG 3173 #define PDEBUG(level, fmt, args...) { \ 3174 if (video_debug & (level)) \ 3175 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3176 __func__, __LINE__ , ## args); \ 3177 } 3178 #else 3179 #define PDEBUG(level, fmt, args...) do {} while (0) 3180 #endif 3181 #define DBG_IO (1 << 1) 3182 #define DBG_PROBE (1 << 2) 3183 #define DBG_MMAP (1 << 3) 3184 #define rmspace(str) while (*str == ' ') str++; 3185 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3186 #define YES_NO(x) ((x) ? "Yes" : "No") 3187 #ifdef CONFIG_VIDEO_ADV_DEBUG 3188 #endif 3189 /* LDV_COMMENT_END_PREP */ 3190 /* LDV_COMMENT_BEGIN_PREP */ 3191 #ifdef CONFIG_VIDEO_ADV_DEBUG 3192 #endif 3193 /* LDV_COMMENT_END_PREP */ 3194 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 3195 /* LDV_COMMENT_BEGIN_PREP */ 3196 #define DRIVER_AUTHOR \ 3197 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3198 "Dwaine Garden <DwaineGarden@rogers.com>" 3199 #define DRIVER_NAME "usbvision" 3200 #define DRIVER_ALIAS "USBVision" 3201 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3202 #define DRIVER_LICENSE "GPL" 3203 #define USBVISION_VERSION_STRING "0.9.11" 3204 #define ENABLE_HEXDUMP 0 3205 #ifdef USBVISION_DEBUG 3206 #define PDEBUG(level, fmt, args...) { \ 3207 if (video_debug & (level)) \ 3208 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3209 __func__, __LINE__ , ## args); \ 3210 } 3211 #else 3212 #define PDEBUG(level, fmt, args...) do {} while (0) 3213 #endif 3214 #define DBG_IO (1 << 1) 3215 #define DBG_PROBE (1 << 2) 3216 #define DBG_MMAP (1 << 3) 3217 #define rmspace(str) while (*str == ' ') str++; 3218 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3219 #define YES_NO(x) ((x) ? "Yes" : "No") 3220 #ifdef CONFIG_VIDEO_ADV_DEBUG 3221 #endif 3222 /* LDV_COMMENT_END_PREP */ 3223 /* LDV_COMMENT_BEGIN_PREP */ 3224 #ifdef CONFIG_VIDEO_ADV_DEBUG 3225 #endif 3226 /* LDV_COMMENT_END_PREP */ 3227 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 3228 /* LDV_COMMENT_BEGIN_PREP */ 3229 #define DRIVER_AUTHOR \ 3230 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3231 "Dwaine Garden <DwaineGarden@rogers.com>" 3232 #define DRIVER_NAME "usbvision" 3233 #define DRIVER_ALIAS "USBVision" 3234 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3235 #define DRIVER_LICENSE "GPL" 3236 #define USBVISION_VERSION_STRING "0.9.11" 3237 #define ENABLE_HEXDUMP 0 3238 #ifdef USBVISION_DEBUG 3239 #define PDEBUG(level, fmt, args...) { \ 3240 if (video_debug & (level)) \ 3241 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3242 __func__, __LINE__ , ## args); \ 3243 } 3244 #else 3245 #define PDEBUG(level, fmt, args...) do {} while (0) 3246 #endif 3247 #define DBG_IO (1 << 1) 3248 #define DBG_PROBE (1 << 2) 3249 #define DBG_MMAP (1 << 3) 3250 #define rmspace(str) while (*str == ' ') str++; 3251 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3252 #define YES_NO(x) ((x) ? "Yes" : "No") 3253 #ifdef CONFIG_VIDEO_ADV_DEBUG 3254 #endif 3255 /* LDV_COMMENT_END_PREP */ 3256 /* LDV_COMMENT_BEGIN_PREP */ 3257 #ifdef CONFIG_VIDEO_ADV_DEBUG 3258 #endif 3259 /* LDV_COMMENT_END_PREP */ 3260 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 3261 /* LDV_COMMENT_BEGIN_PREP */ 3262 #define DRIVER_AUTHOR \ 3263 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3264 "Dwaine Garden <DwaineGarden@rogers.com>" 3265 #define DRIVER_NAME "usbvision" 3266 #define DRIVER_ALIAS "USBVision" 3267 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3268 #define DRIVER_LICENSE "GPL" 3269 #define USBVISION_VERSION_STRING "0.9.11" 3270 #define ENABLE_HEXDUMP 0 3271 #ifdef USBVISION_DEBUG 3272 #define PDEBUG(level, fmt, args...) { \ 3273 if (video_debug & (level)) \ 3274 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3275 __func__, __LINE__ , ## args); \ 3276 } 3277 #else 3278 #define PDEBUG(level, fmt, args...) do {} while (0) 3279 #endif 3280 #define DBG_IO (1 << 1) 3281 #define DBG_PROBE (1 << 2) 3282 #define DBG_MMAP (1 << 3) 3283 #define rmspace(str) while (*str == ' ') str++; 3284 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3285 #define YES_NO(x) ((x) ? "Yes" : "No") 3286 #ifdef CONFIG_VIDEO_ADV_DEBUG 3287 #endif 3288 /* LDV_COMMENT_END_PREP */ 3289 /* LDV_COMMENT_BEGIN_PREP */ 3290 #ifdef CONFIG_VIDEO_ADV_DEBUG 3291 #endif 3292 /* LDV_COMMENT_END_PREP */ 3293 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 3294 /* LDV_COMMENT_BEGIN_PREP */ 3295 #define DRIVER_AUTHOR \ 3296 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3297 "Dwaine Garden <DwaineGarden@rogers.com>" 3298 #define DRIVER_NAME "usbvision" 3299 #define DRIVER_ALIAS "USBVision" 3300 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3301 #define DRIVER_LICENSE "GPL" 3302 #define USBVISION_VERSION_STRING "0.9.11" 3303 #define ENABLE_HEXDUMP 0 3304 #ifdef USBVISION_DEBUG 3305 #define PDEBUG(level, fmt, args...) { \ 3306 if (video_debug & (level)) \ 3307 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3308 __func__, __LINE__ , ## args); \ 3309 } 3310 #else 3311 #define PDEBUG(level, fmt, args...) do {} while (0) 3312 #endif 3313 #define DBG_IO (1 << 1) 3314 #define DBG_PROBE (1 << 2) 3315 #define DBG_MMAP (1 << 3) 3316 #define rmspace(str) while (*str == ' ') str++; 3317 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3318 #define YES_NO(x) ((x) ? "Yes" : "No") 3319 #ifdef CONFIG_VIDEO_ADV_DEBUG 3320 #endif 3321 /* LDV_COMMENT_END_PREP */ 3322 /* LDV_COMMENT_BEGIN_PREP */ 3323 #ifdef CONFIG_VIDEO_ADV_DEBUG 3324 #endif 3325 /* LDV_COMMENT_END_PREP */ 3326 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 3327 /* LDV_COMMENT_BEGIN_PREP */ 3328 #define DRIVER_AUTHOR \ 3329 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3330 "Dwaine Garden <DwaineGarden@rogers.com>" 3331 #define DRIVER_NAME "usbvision" 3332 #define DRIVER_ALIAS "USBVision" 3333 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3334 #define DRIVER_LICENSE "GPL" 3335 #define USBVISION_VERSION_STRING "0.9.11" 3336 #define ENABLE_HEXDUMP 0 3337 #ifdef USBVISION_DEBUG 3338 #define PDEBUG(level, fmt, args...) { \ 3339 if (video_debug & (level)) \ 3340 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3341 __func__, __LINE__ , ## args); \ 3342 } 3343 #else 3344 #define PDEBUG(level, fmt, args...) do {} while (0) 3345 #endif 3346 #define DBG_IO (1 << 1) 3347 #define DBG_PROBE (1 << 2) 3348 #define DBG_MMAP (1 << 3) 3349 #define rmspace(str) while (*str == ' ') str++; 3350 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3351 #define YES_NO(x) ((x) ? "Yes" : "No") 3352 #ifdef CONFIG_VIDEO_ADV_DEBUG 3353 #endif 3354 /* LDV_COMMENT_END_PREP */ 3355 /* LDV_COMMENT_BEGIN_PREP */ 3356 #ifdef CONFIG_VIDEO_ADV_DEBUG 3357 #endif 3358 /* LDV_COMMENT_END_PREP */ 3359 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 3360 /* LDV_COMMENT_BEGIN_PREP */ 3361 #define DRIVER_AUTHOR \ 3362 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3363 "Dwaine Garden <DwaineGarden@rogers.com>" 3364 #define DRIVER_NAME "usbvision" 3365 #define DRIVER_ALIAS "USBVision" 3366 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3367 #define DRIVER_LICENSE "GPL" 3368 #define USBVISION_VERSION_STRING "0.9.11" 3369 #define ENABLE_HEXDUMP 0 3370 #ifdef USBVISION_DEBUG 3371 #define PDEBUG(level, fmt, args...) { \ 3372 if (video_debug & (level)) \ 3373 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3374 __func__, __LINE__ , ## args); \ 3375 } 3376 #else 3377 #define PDEBUG(level, fmt, args...) do {} while (0) 3378 #endif 3379 #define DBG_IO (1 << 1) 3380 #define DBG_PROBE (1 << 2) 3381 #define DBG_MMAP (1 << 3) 3382 #define rmspace(str) while (*str == ' ') str++; 3383 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3384 #define YES_NO(x) ((x) ? "Yes" : "No") 3385 #ifdef CONFIG_VIDEO_ADV_DEBUG 3386 #endif 3387 /* LDV_COMMENT_END_PREP */ 3388 /* LDV_COMMENT_BEGIN_PREP */ 3389 #ifdef CONFIG_VIDEO_ADV_DEBUG 3390 #endif 3391 /* LDV_COMMENT_END_PREP */ 3392 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 3393 /* LDV_COMMENT_BEGIN_PREP */ 3394 #define DRIVER_AUTHOR \ 3395 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3396 "Dwaine Garden <DwaineGarden@rogers.com>" 3397 #define DRIVER_NAME "usbvision" 3398 #define DRIVER_ALIAS "USBVision" 3399 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3400 #define DRIVER_LICENSE "GPL" 3401 #define USBVISION_VERSION_STRING "0.9.11" 3402 #define ENABLE_HEXDUMP 0 3403 #ifdef USBVISION_DEBUG 3404 #define PDEBUG(level, fmt, args...) { \ 3405 if (video_debug & (level)) \ 3406 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3407 __func__, __LINE__ , ## args); \ 3408 } 3409 #else 3410 #define PDEBUG(level, fmt, args...) do {} while (0) 3411 #endif 3412 #define DBG_IO (1 << 1) 3413 #define DBG_PROBE (1 << 2) 3414 #define DBG_MMAP (1 << 3) 3415 #define rmspace(str) while (*str == ' ') str++; 3416 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3417 #define YES_NO(x) ((x) ? "Yes" : "No") 3418 #ifdef CONFIG_VIDEO_ADV_DEBUG 3419 #endif 3420 /* LDV_COMMENT_END_PREP */ 3421 /* LDV_COMMENT_BEGIN_PREP */ 3422 #ifdef CONFIG_VIDEO_ADV_DEBUG 3423 #endif 3424 /* LDV_COMMENT_END_PREP */ 3425 3426 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 3427 /* content: static int usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid)*/ 3428 /* LDV_COMMENT_BEGIN_PREP */ 3429 #define DRIVER_AUTHOR \ 3430 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3431 "Dwaine Garden <DwaineGarden@rogers.com>" 3432 #define DRIVER_NAME "usbvision" 3433 #define DRIVER_ALIAS "USBVision" 3434 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3435 #define DRIVER_LICENSE "GPL" 3436 #define USBVISION_VERSION_STRING "0.9.11" 3437 #define ENABLE_HEXDUMP 0 3438 #ifdef USBVISION_DEBUG 3439 #define PDEBUG(level, fmt, args...) { \ 3440 if (video_debug & (level)) \ 3441 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3442 __func__, __LINE__ , ## args); \ 3443 } 3444 #else 3445 #define PDEBUG(level, fmt, args...) do {} while (0) 3446 #endif 3447 #define DBG_IO (1 << 1) 3448 #define DBG_PROBE (1 << 2) 3449 #define DBG_MMAP (1 << 3) 3450 #define rmspace(str) while (*str == ' ') str++; 3451 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3452 #define YES_NO(x) ((x) ? "Yes" : "No") 3453 #ifdef CONFIG_VIDEO_ADV_DEBUG 3454 #endif 3455 #ifdef CONFIG_VIDEO_ADV_DEBUG 3456 #endif 3457 /* LDV_COMMENT_END_PREP */ 3458 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_probe" */ 3459 struct usb_interface * var_group3; 3460 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "usbvision_probe" */ 3461 const struct usb_device_id * var_usbvision_probe_53_p1; 3462 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "usbvision_probe" */ 3463 static int res_usbvision_probe_53; 3464 /* content: static void usbvision_disconnect(struct usb_interface *intf)*/ 3465 /* LDV_COMMENT_BEGIN_PREP */ 3466 #define DRIVER_AUTHOR \ 3467 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3468 "Dwaine Garden <DwaineGarden@rogers.com>" 3469 #define DRIVER_NAME "usbvision" 3470 #define DRIVER_ALIAS "USBVision" 3471 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3472 #define DRIVER_LICENSE "GPL" 3473 #define USBVISION_VERSION_STRING "0.9.11" 3474 #define ENABLE_HEXDUMP 0 3475 #ifdef USBVISION_DEBUG 3476 #define PDEBUG(level, fmt, args...) { \ 3477 if (video_debug & (level)) \ 3478 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3479 __func__, __LINE__ , ## args); \ 3480 } 3481 #else 3482 #define PDEBUG(level, fmt, args...) do {} while (0) 3483 #endif 3484 #define DBG_IO (1 << 1) 3485 #define DBG_PROBE (1 << 2) 3486 #define DBG_MMAP (1 << 3) 3487 #define rmspace(str) while (*str == ' ') str++; 3488 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3489 #define YES_NO(x) ((x) ? "Yes" : "No") 3490 #ifdef CONFIG_VIDEO_ADV_DEBUG 3491 #endif 3492 #ifdef CONFIG_VIDEO_ADV_DEBUG 3493 #endif 3494 /* LDV_COMMENT_END_PREP */ 3495 3496 3497 3498 3499 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */ 3500 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */ 3501 /*============================= VARIABLE INITIALIZING PART =============================*/ 3502 LDV_IN_INTERRUPT=1; 3503 3504 3505 3506 3507 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */ 3508 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */ 3509 /*============================= FUNCTION CALL SECTION =============================*/ 3510 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */ 3511 ldv_initialize(); 3512 3513 /** INIT: init_type: ST_MODULE_INIT **/ 3514 /* content: static int __init usbvision_init(void)*/ 3515 /* LDV_COMMENT_BEGIN_PREP */ 3516 #define DRIVER_AUTHOR \ 3517 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3518 "Dwaine Garden <DwaineGarden@rogers.com>" 3519 #define DRIVER_NAME "usbvision" 3520 #define DRIVER_ALIAS "USBVision" 3521 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3522 #define DRIVER_LICENSE "GPL" 3523 #define USBVISION_VERSION_STRING "0.9.11" 3524 #define ENABLE_HEXDUMP 0 3525 #ifdef USBVISION_DEBUG 3526 #define PDEBUG(level, fmt, args...) { \ 3527 if (video_debug & (level)) \ 3528 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3529 __func__, __LINE__ , ## args); \ 3530 } 3531 #else 3532 #define PDEBUG(level, fmt, args...) do {} while (0) 3533 #endif 3534 #define DBG_IO (1 << 1) 3535 #define DBG_PROBE (1 << 2) 3536 #define DBG_MMAP (1 << 3) 3537 #define rmspace(str) while (*str == ' ') str++; 3538 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3539 #define YES_NO(x) ((x) ? "Yes" : "No") 3540 #ifdef CONFIG_VIDEO_ADV_DEBUG 3541 #endif 3542 #ifdef CONFIG_VIDEO_ADV_DEBUG 3543 #endif 3544 /* LDV_COMMENT_END_PREP */ 3545 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */ 3546 ldv_handler_precall(); 3547 if(usbvision_init()) 3548 goto ldv_final; 3549 int ldv_s_usbvision_fops_v4l2_file_operations = 0; 3550 3551 3552 3553 3554 int ldv_s_usbvision_radio_fops_v4l2_file_operations = 0; 3555 3556 3557 3558 int ldv_s_usbvision_driver_usb_driver = 0; 3559 3560 3561 while( nondet_int() 3562 || !(ldv_s_usbvision_fops_v4l2_file_operations == 0) 3563 || !(ldv_s_usbvision_radio_fops_v4l2_file_operations == 0) 3564 || !(ldv_s_usbvision_driver_usb_driver == 0) 3565 ) { 3566 3567 switch(nondet_int()) { 3568 3569 case 0: { 3570 3571 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3572 if(ldv_s_usbvision_fops_v4l2_file_operations==0) { 3573 3574 /* content: static int usbvision_v4l2_open(struct file *file)*/ 3575 /* LDV_COMMENT_BEGIN_PREP */ 3576 #define DRIVER_AUTHOR \ 3577 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3578 "Dwaine Garden <DwaineGarden@rogers.com>" 3579 #define DRIVER_NAME "usbvision" 3580 #define DRIVER_ALIAS "USBVision" 3581 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3582 #define DRIVER_LICENSE "GPL" 3583 #define USBVISION_VERSION_STRING "0.9.11" 3584 #define ENABLE_HEXDUMP 0 3585 #ifdef USBVISION_DEBUG 3586 #define PDEBUG(level, fmt, args...) { \ 3587 if (video_debug & (level)) \ 3588 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3589 __func__, __LINE__ , ## args); \ 3590 } 3591 #else 3592 #define PDEBUG(level, fmt, args...) do {} while (0) 3593 #endif 3594 #define DBG_IO (1 << 1) 3595 #define DBG_PROBE (1 << 2) 3596 #define DBG_MMAP (1 << 3) 3597 #define rmspace(str) while (*str == ' ') str++; 3598 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3599 #define YES_NO(x) ((x) ? "Yes" : "No") 3600 /* LDV_COMMENT_END_PREP */ 3601 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "usbvision_fops". Standart function test for correct return result. */ 3602 ldv_handler_precall(); 3603 res_usbvision_v4l2_open_12 = usbvision_v4l2_open( var_group1); 3604 ldv_check_return_value(res_usbvision_v4l2_open_12); 3605 if(res_usbvision_v4l2_open_12) 3606 goto ldv_module_exit; 3607 /* LDV_COMMENT_BEGIN_PREP */ 3608 #ifdef CONFIG_VIDEO_ADV_DEBUG 3609 #endif 3610 #ifdef CONFIG_VIDEO_ADV_DEBUG 3611 #endif 3612 /* LDV_COMMENT_END_PREP */ 3613 ldv_s_usbvision_fops_v4l2_file_operations++; 3614 3615 } 3616 3617 } 3618 3619 break; 3620 case 1: { 3621 3622 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3623 if(ldv_s_usbvision_fops_v4l2_file_operations==1) { 3624 3625 /* content: static int usbvision_v4l2_close(struct file *file)*/ 3626 /* LDV_COMMENT_BEGIN_PREP */ 3627 #define DRIVER_AUTHOR \ 3628 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3629 "Dwaine Garden <DwaineGarden@rogers.com>" 3630 #define DRIVER_NAME "usbvision" 3631 #define DRIVER_ALIAS "USBVision" 3632 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3633 #define DRIVER_LICENSE "GPL" 3634 #define USBVISION_VERSION_STRING "0.9.11" 3635 #define ENABLE_HEXDUMP 0 3636 #ifdef USBVISION_DEBUG 3637 #define PDEBUG(level, fmt, args...) { \ 3638 if (video_debug & (level)) \ 3639 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3640 __func__, __LINE__ , ## args); \ 3641 } 3642 #else 3643 #define PDEBUG(level, fmt, args...) do {} while (0) 3644 #endif 3645 #define DBG_IO (1 << 1) 3646 #define DBG_PROBE (1 << 2) 3647 #define DBG_MMAP (1 << 3) 3648 #define rmspace(str) while (*str == ' ') str++; 3649 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3650 #define YES_NO(x) ((x) ? "Yes" : "No") 3651 /* LDV_COMMENT_END_PREP */ 3652 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "usbvision_fops" */ 3653 ldv_handler_precall(); 3654 usbvision_v4l2_close( var_group1); 3655 /* LDV_COMMENT_BEGIN_PREP */ 3656 #ifdef CONFIG_VIDEO_ADV_DEBUG 3657 #endif 3658 #ifdef CONFIG_VIDEO_ADV_DEBUG 3659 #endif 3660 /* LDV_COMMENT_END_PREP */ 3661 ldv_s_usbvision_fops_v4l2_file_operations=0; 3662 3663 } 3664 3665 } 3666 3667 break; 3668 case 2: { 3669 3670 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3671 3672 3673 /* content: static ssize_t usbvision_v4l2_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/ 3674 /* LDV_COMMENT_BEGIN_PREP */ 3675 #define DRIVER_AUTHOR \ 3676 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3677 "Dwaine Garden <DwaineGarden@rogers.com>" 3678 #define DRIVER_NAME "usbvision" 3679 #define DRIVER_ALIAS "USBVision" 3680 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3681 #define DRIVER_LICENSE "GPL" 3682 #define USBVISION_VERSION_STRING "0.9.11" 3683 #define ENABLE_HEXDUMP 0 3684 #ifdef USBVISION_DEBUG 3685 #define PDEBUG(level, fmt, args...) { \ 3686 if (video_debug & (level)) \ 3687 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3688 __func__, __LINE__ , ## args); \ 3689 } 3690 #else 3691 #define PDEBUG(level, fmt, args...) do {} while (0) 3692 #endif 3693 #define DBG_IO (1 << 1) 3694 #define DBG_PROBE (1 << 2) 3695 #define DBG_MMAP (1 << 3) 3696 #define rmspace(str) while (*str == ' ') str++; 3697 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3698 #define YES_NO(x) ((x) ? "Yes" : "No") 3699 #ifdef CONFIG_VIDEO_ADV_DEBUG 3700 #endif 3701 /* LDV_COMMENT_END_PREP */ 3702 /* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "usbvision_fops" */ 3703 ldv_handler_precall(); 3704 usbvision_v4l2_read( var_group1, var_usbvision_v4l2_read_42_p1, var_usbvision_v4l2_read_42_p2, var_usbvision_v4l2_read_42_p3); 3705 /* LDV_COMMENT_BEGIN_PREP */ 3706 #ifdef CONFIG_VIDEO_ADV_DEBUG 3707 #endif 3708 /* LDV_COMMENT_END_PREP */ 3709 3710 3711 3712 3713 } 3714 3715 break; 3716 case 3: { 3717 3718 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_fops **/ 3719 3720 3721 /* content: static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma)*/ 3722 /* LDV_COMMENT_BEGIN_PREP */ 3723 #define DRIVER_AUTHOR \ 3724 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3725 "Dwaine Garden <DwaineGarden@rogers.com>" 3726 #define DRIVER_NAME "usbvision" 3727 #define DRIVER_ALIAS "USBVision" 3728 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3729 #define DRIVER_LICENSE "GPL" 3730 #define USBVISION_VERSION_STRING "0.9.11" 3731 #define ENABLE_HEXDUMP 0 3732 #ifdef USBVISION_DEBUG 3733 #define PDEBUG(level, fmt, args...) { \ 3734 if (video_debug & (level)) \ 3735 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3736 __func__, __LINE__ , ## args); \ 3737 } 3738 #else 3739 #define PDEBUG(level, fmt, args...) do {} while (0) 3740 #endif 3741 #define DBG_IO (1 << 1) 3742 #define DBG_PROBE (1 << 2) 3743 #define DBG_MMAP (1 << 3) 3744 #define rmspace(str) while (*str == ' ') str++; 3745 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3746 #define YES_NO(x) ((x) ? "Yes" : "No") 3747 #ifdef CONFIG_VIDEO_ADV_DEBUG 3748 #endif 3749 /* LDV_COMMENT_END_PREP */ 3750 /* LDV_COMMENT_FUNCTION_CALL Function from field "mmap" from driver structure with callbacks "usbvision_fops" */ 3751 ldv_handler_precall(); 3752 usbvision_v4l2_mmap( var_group1, var_group2); 3753 /* LDV_COMMENT_BEGIN_PREP */ 3754 #ifdef CONFIG_VIDEO_ADV_DEBUG 3755 #endif 3756 /* LDV_COMMENT_END_PREP */ 3757 3758 3759 3760 3761 } 3762 3763 break; 3764 case 4: { 3765 3766 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3767 3768 3769 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 3770 /* LDV_COMMENT_BEGIN_PREP */ 3771 #define DRIVER_AUTHOR \ 3772 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3773 "Dwaine Garden <DwaineGarden@rogers.com>" 3774 #define DRIVER_NAME "usbvision" 3775 #define DRIVER_ALIAS "USBVision" 3776 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3777 #define DRIVER_LICENSE "GPL" 3778 #define USBVISION_VERSION_STRING "0.9.11" 3779 #define ENABLE_HEXDUMP 0 3780 #ifdef USBVISION_DEBUG 3781 #define PDEBUG(level, fmt, args...) { \ 3782 if (video_debug & (level)) \ 3783 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3784 __func__, __LINE__ , ## args); \ 3785 } 3786 #else 3787 #define PDEBUG(level, fmt, args...) do {} while (0) 3788 #endif 3789 #define DBG_IO (1 << 1) 3790 #define DBG_PROBE (1 << 2) 3791 #define DBG_MMAP (1 << 3) 3792 #define rmspace(str) while (*str == ' ') str++; 3793 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3794 #define YES_NO(x) ((x) ? "Yes" : "No") 3795 #ifdef CONFIG_VIDEO_ADV_DEBUG 3796 #endif 3797 /* LDV_COMMENT_END_PREP */ 3798 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querycap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3799 ldv_handler_precall(); 3800 vidioc_querycap( var_group1, var_vidioc_querycap_16_p1, var_vidioc_querycap_16_p2); 3801 /* LDV_COMMENT_BEGIN_PREP */ 3802 #ifdef CONFIG_VIDEO_ADV_DEBUG 3803 #endif 3804 /* LDV_COMMENT_END_PREP */ 3805 3806 3807 3808 3809 } 3810 3811 break; 3812 case 5: { 3813 3814 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3815 3816 3817 /* content: static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *vfd)*/ 3818 /* LDV_COMMENT_BEGIN_PREP */ 3819 #define DRIVER_AUTHOR \ 3820 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3821 "Dwaine Garden <DwaineGarden@rogers.com>" 3822 #define DRIVER_NAME "usbvision" 3823 #define DRIVER_ALIAS "USBVision" 3824 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3825 #define DRIVER_LICENSE "GPL" 3826 #define USBVISION_VERSION_STRING "0.9.11" 3827 #define ENABLE_HEXDUMP 0 3828 #ifdef USBVISION_DEBUG 3829 #define PDEBUG(level, fmt, args...) { \ 3830 if (video_debug & (level)) \ 3831 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3832 __func__, __LINE__ , ## args); \ 3833 } 3834 #else 3835 #define PDEBUG(level, fmt, args...) do {} while (0) 3836 #endif 3837 #define DBG_IO (1 << 1) 3838 #define DBG_PROBE (1 << 2) 3839 #define DBG_MMAP (1 << 3) 3840 #define rmspace(str) while (*str == ' ') str++; 3841 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3842 #define YES_NO(x) ((x) ? "Yes" : "No") 3843 #ifdef CONFIG_VIDEO_ADV_DEBUG 3844 #endif 3845 /* LDV_COMMENT_END_PREP */ 3846 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3847 ldv_handler_precall(); 3848 vidioc_enum_fmt_vid_cap( var_group1, var_vidioc_enum_fmt_vid_cap_37_p1, var_vidioc_enum_fmt_vid_cap_37_p2); 3849 /* LDV_COMMENT_BEGIN_PREP */ 3850 #ifdef CONFIG_VIDEO_ADV_DEBUG 3851 #endif 3852 /* LDV_COMMENT_END_PREP */ 3853 3854 3855 3856 3857 } 3858 3859 break; 3860 case 6: { 3861 3862 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3863 3864 3865 /* content: static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3866 /* LDV_COMMENT_BEGIN_PREP */ 3867 #define DRIVER_AUTHOR \ 3868 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3869 "Dwaine Garden <DwaineGarden@rogers.com>" 3870 #define DRIVER_NAME "usbvision" 3871 #define DRIVER_ALIAS "USBVision" 3872 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3873 #define DRIVER_LICENSE "GPL" 3874 #define USBVISION_VERSION_STRING "0.9.11" 3875 #define ENABLE_HEXDUMP 0 3876 #ifdef USBVISION_DEBUG 3877 #define PDEBUG(level, fmt, args...) { \ 3878 if (video_debug & (level)) \ 3879 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3880 __func__, __LINE__ , ## args); \ 3881 } 3882 #else 3883 #define PDEBUG(level, fmt, args...) do {} while (0) 3884 #endif 3885 #define DBG_IO (1 << 1) 3886 #define DBG_PROBE (1 << 2) 3887 #define DBG_MMAP (1 << 3) 3888 #define rmspace(str) while (*str == ' ') str++; 3889 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3890 #define YES_NO(x) ((x) ? "Yes" : "No") 3891 #ifdef CONFIG_VIDEO_ADV_DEBUG 3892 #endif 3893 /* LDV_COMMENT_END_PREP */ 3894 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3895 ldv_handler_precall(); 3896 vidioc_g_fmt_vid_cap( var_group1, var_vidioc_g_fmt_vid_cap_38_p1, var_vidioc_g_fmt_vid_cap_38_p2); 3897 /* LDV_COMMENT_BEGIN_PREP */ 3898 #ifdef CONFIG_VIDEO_ADV_DEBUG 3899 #endif 3900 /* LDV_COMMENT_END_PREP */ 3901 3902 3903 3904 3905 } 3906 3907 break; 3908 case 7: { 3909 3910 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3911 3912 3913 /* content: static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3914 /* LDV_COMMENT_BEGIN_PREP */ 3915 #define DRIVER_AUTHOR \ 3916 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3917 "Dwaine Garden <DwaineGarden@rogers.com>" 3918 #define DRIVER_NAME "usbvision" 3919 #define DRIVER_ALIAS "USBVision" 3920 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3921 #define DRIVER_LICENSE "GPL" 3922 #define USBVISION_VERSION_STRING "0.9.11" 3923 #define ENABLE_HEXDUMP 0 3924 #ifdef USBVISION_DEBUG 3925 #define PDEBUG(level, fmt, args...) { \ 3926 if (video_debug & (level)) \ 3927 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3928 __func__, __LINE__ , ## args); \ 3929 } 3930 #else 3931 #define PDEBUG(level, fmt, args...) do {} while (0) 3932 #endif 3933 #define DBG_IO (1 << 1) 3934 #define DBG_PROBE (1 << 2) 3935 #define DBG_MMAP (1 << 3) 3936 #define rmspace(str) while (*str == ' ') str++; 3937 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3938 #define YES_NO(x) ((x) ? "Yes" : "No") 3939 #ifdef CONFIG_VIDEO_ADV_DEBUG 3940 #endif 3941 /* LDV_COMMENT_END_PREP */ 3942 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_try_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3943 ldv_handler_precall(); 3944 vidioc_try_fmt_vid_cap( var_group1, var_vidioc_try_fmt_vid_cap_39_p1, var_vidioc_try_fmt_vid_cap_39_p2); 3945 /* LDV_COMMENT_BEGIN_PREP */ 3946 #ifdef CONFIG_VIDEO_ADV_DEBUG 3947 #endif 3948 /* LDV_COMMENT_END_PREP */ 3949 3950 3951 3952 3953 } 3954 3955 break; 3956 case 8: { 3957 3958 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 3959 3960 3961 /* content: static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *vf)*/ 3962 /* LDV_COMMENT_BEGIN_PREP */ 3963 #define DRIVER_AUTHOR \ 3964 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 3965 "Dwaine Garden <DwaineGarden@rogers.com>" 3966 #define DRIVER_NAME "usbvision" 3967 #define DRIVER_ALIAS "USBVision" 3968 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 3969 #define DRIVER_LICENSE "GPL" 3970 #define USBVISION_VERSION_STRING "0.9.11" 3971 #define ENABLE_HEXDUMP 0 3972 #ifdef USBVISION_DEBUG 3973 #define PDEBUG(level, fmt, args...) { \ 3974 if (video_debug & (level)) \ 3975 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 3976 __func__, __LINE__ , ## args); \ 3977 } 3978 #else 3979 #define PDEBUG(level, fmt, args...) do {} while (0) 3980 #endif 3981 #define DBG_IO (1 << 1) 3982 #define DBG_PROBE (1 << 2) 3983 #define DBG_MMAP (1 << 3) 3984 #define rmspace(str) while (*str == ' ') str++; 3985 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 3986 #define YES_NO(x) ((x) ? "Yes" : "No") 3987 #ifdef CONFIG_VIDEO_ADV_DEBUG 3988 #endif 3989 /* LDV_COMMENT_END_PREP */ 3990 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_fmt_vid_cap" from driver structure with callbacks "usbvision_ioctl_ops" */ 3991 ldv_handler_precall(); 3992 vidioc_s_fmt_vid_cap( var_group1, var_vidioc_s_fmt_vid_cap_40_p1, var_vidioc_s_fmt_vid_cap_40_p2); 3993 /* LDV_COMMENT_BEGIN_PREP */ 3994 #ifdef CONFIG_VIDEO_ADV_DEBUG 3995 #endif 3996 /* LDV_COMMENT_END_PREP */ 3997 3998 3999 4000 4001 } 4002 4003 break; 4004 case 9: { 4005 4006 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4007 4008 4009 /* content: static int vidioc_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *vr)*/ 4010 /* LDV_COMMENT_BEGIN_PREP */ 4011 #define DRIVER_AUTHOR \ 4012 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4013 "Dwaine Garden <DwaineGarden@rogers.com>" 4014 #define DRIVER_NAME "usbvision" 4015 #define DRIVER_ALIAS "USBVision" 4016 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4017 #define DRIVER_LICENSE "GPL" 4018 #define USBVISION_VERSION_STRING "0.9.11" 4019 #define ENABLE_HEXDUMP 0 4020 #ifdef USBVISION_DEBUG 4021 #define PDEBUG(level, fmt, args...) { \ 4022 if (video_debug & (level)) \ 4023 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4024 __func__, __LINE__ , ## args); \ 4025 } 4026 #else 4027 #define PDEBUG(level, fmt, args...) do {} while (0) 4028 #endif 4029 #define DBG_IO (1 << 1) 4030 #define DBG_PROBE (1 << 2) 4031 #define DBG_MMAP (1 << 3) 4032 #define rmspace(str) while (*str == ' ') str++; 4033 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4034 #define YES_NO(x) ((x) ? "Yes" : "No") 4035 #ifdef CONFIG_VIDEO_ADV_DEBUG 4036 #endif 4037 /* LDV_COMMENT_END_PREP */ 4038 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_reqbufs" from driver structure with callbacks "usbvision_ioctl_ops" */ 4039 ldv_handler_precall(); 4040 vidioc_reqbufs( var_group1, var_vidioc_reqbufs_31_p1, var_vidioc_reqbufs_31_p2); 4041 /* LDV_COMMENT_BEGIN_PREP */ 4042 #ifdef CONFIG_VIDEO_ADV_DEBUG 4043 #endif 4044 /* LDV_COMMENT_END_PREP */ 4045 4046 4047 4048 4049 } 4050 4051 break; 4052 case 10: { 4053 4054 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4055 4056 4057 /* content: static int vidioc_querybuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4058 /* LDV_COMMENT_BEGIN_PREP */ 4059 #define DRIVER_AUTHOR \ 4060 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4061 "Dwaine Garden <DwaineGarden@rogers.com>" 4062 #define DRIVER_NAME "usbvision" 4063 #define DRIVER_ALIAS "USBVision" 4064 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4065 #define DRIVER_LICENSE "GPL" 4066 #define USBVISION_VERSION_STRING "0.9.11" 4067 #define ENABLE_HEXDUMP 0 4068 #ifdef USBVISION_DEBUG 4069 #define PDEBUG(level, fmt, args...) { \ 4070 if (video_debug & (level)) \ 4071 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4072 __func__, __LINE__ , ## args); \ 4073 } 4074 #else 4075 #define PDEBUG(level, fmt, args...) do {} while (0) 4076 #endif 4077 #define DBG_IO (1 << 1) 4078 #define DBG_PROBE (1 << 2) 4079 #define DBG_MMAP (1 << 3) 4080 #define rmspace(str) while (*str == ' ') str++; 4081 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4082 #define YES_NO(x) ((x) ? "Yes" : "No") 4083 #ifdef CONFIG_VIDEO_ADV_DEBUG 4084 #endif 4085 /* LDV_COMMENT_END_PREP */ 4086 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querybuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4087 ldv_handler_precall(); 4088 vidioc_querybuf( var_group1, var_vidioc_querybuf_32_p1, var_vidioc_querybuf_32_p2); 4089 /* LDV_COMMENT_BEGIN_PREP */ 4090 #ifdef CONFIG_VIDEO_ADV_DEBUG 4091 #endif 4092 /* LDV_COMMENT_END_PREP */ 4093 4094 4095 4096 4097 } 4098 4099 break; 4100 case 11: { 4101 4102 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4103 4104 4105 /* content: static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4106 /* LDV_COMMENT_BEGIN_PREP */ 4107 #define DRIVER_AUTHOR \ 4108 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4109 "Dwaine Garden <DwaineGarden@rogers.com>" 4110 #define DRIVER_NAME "usbvision" 4111 #define DRIVER_ALIAS "USBVision" 4112 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4113 #define DRIVER_LICENSE "GPL" 4114 #define USBVISION_VERSION_STRING "0.9.11" 4115 #define ENABLE_HEXDUMP 0 4116 #ifdef USBVISION_DEBUG 4117 #define PDEBUG(level, fmt, args...) { \ 4118 if (video_debug & (level)) \ 4119 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4120 __func__, __LINE__ , ## args); \ 4121 } 4122 #else 4123 #define PDEBUG(level, fmt, args...) do {} while (0) 4124 #endif 4125 #define DBG_IO (1 << 1) 4126 #define DBG_PROBE (1 << 2) 4127 #define DBG_MMAP (1 << 3) 4128 #define rmspace(str) while (*str == ' ') str++; 4129 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4130 #define YES_NO(x) ((x) ? "Yes" : "No") 4131 #ifdef CONFIG_VIDEO_ADV_DEBUG 4132 #endif 4133 /* LDV_COMMENT_END_PREP */ 4134 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_qbuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4135 ldv_handler_precall(); 4136 vidioc_qbuf( var_group1, var_vidioc_qbuf_33_p1, var_vidioc_qbuf_33_p2); 4137 /* LDV_COMMENT_BEGIN_PREP */ 4138 #ifdef CONFIG_VIDEO_ADV_DEBUG 4139 #endif 4140 /* LDV_COMMENT_END_PREP */ 4141 4142 4143 4144 4145 } 4146 4147 break; 4148 case 12: { 4149 4150 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4151 4152 4153 /* content: static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *vb)*/ 4154 /* LDV_COMMENT_BEGIN_PREP */ 4155 #define DRIVER_AUTHOR \ 4156 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4157 "Dwaine Garden <DwaineGarden@rogers.com>" 4158 #define DRIVER_NAME "usbvision" 4159 #define DRIVER_ALIAS "USBVision" 4160 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4161 #define DRIVER_LICENSE "GPL" 4162 #define USBVISION_VERSION_STRING "0.9.11" 4163 #define ENABLE_HEXDUMP 0 4164 #ifdef USBVISION_DEBUG 4165 #define PDEBUG(level, fmt, args...) { \ 4166 if (video_debug & (level)) \ 4167 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4168 __func__, __LINE__ , ## args); \ 4169 } 4170 #else 4171 #define PDEBUG(level, fmt, args...) do {} while (0) 4172 #endif 4173 #define DBG_IO (1 << 1) 4174 #define DBG_PROBE (1 << 2) 4175 #define DBG_MMAP (1 << 3) 4176 #define rmspace(str) while (*str == ' ') str++; 4177 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4178 #define YES_NO(x) ((x) ? "Yes" : "No") 4179 #ifdef CONFIG_VIDEO_ADV_DEBUG 4180 #endif 4181 /* LDV_COMMENT_END_PREP */ 4182 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_dqbuf" from driver structure with callbacks "usbvision_ioctl_ops" */ 4183 ldv_handler_precall(); 4184 vidioc_dqbuf( var_group1, var_vidioc_dqbuf_34_p1, var_vidioc_dqbuf_34_p2); 4185 /* LDV_COMMENT_BEGIN_PREP */ 4186 #ifdef CONFIG_VIDEO_ADV_DEBUG 4187 #endif 4188 /* LDV_COMMENT_END_PREP */ 4189 4190 4191 4192 4193 } 4194 4195 break; 4196 case 13: { 4197 4198 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4199 4200 4201 /* content: static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)*/ 4202 /* LDV_COMMENT_BEGIN_PREP */ 4203 #define DRIVER_AUTHOR \ 4204 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4205 "Dwaine Garden <DwaineGarden@rogers.com>" 4206 #define DRIVER_NAME "usbvision" 4207 #define DRIVER_ALIAS "USBVision" 4208 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4209 #define DRIVER_LICENSE "GPL" 4210 #define USBVISION_VERSION_STRING "0.9.11" 4211 #define ENABLE_HEXDUMP 0 4212 #ifdef USBVISION_DEBUG 4213 #define PDEBUG(level, fmt, args...) { \ 4214 if (video_debug & (level)) \ 4215 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4216 __func__, __LINE__ , ## args); \ 4217 } 4218 #else 4219 #define PDEBUG(level, fmt, args...) do {} while (0) 4220 #endif 4221 #define DBG_IO (1 << 1) 4222 #define DBG_PROBE (1 << 2) 4223 #define DBG_MMAP (1 << 3) 4224 #define rmspace(str) while (*str == ' ') str++; 4225 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4226 #define YES_NO(x) ((x) ? "Yes" : "No") 4227 #ifdef CONFIG_VIDEO_ADV_DEBUG 4228 #endif 4229 /* LDV_COMMENT_END_PREP */ 4230 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_std" from driver structure with callbacks "usbvision_ioctl_ops" */ 4231 ldv_handler_precall(); 4232 vidioc_s_std( var_group1, var_vidioc_s_std_20_p1, var_vidioc_s_std_20_p2); 4233 /* LDV_COMMENT_BEGIN_PREP */ 4234 #ifdef CONFIG_VIDEO_ADV_DEBUG 4235 #endif 4236 /* LDV_COMMENT_END_PREP */ 4237 4238 4239 4240 4241 } 4242 4243 break; 4244 case 14: { 4245 4246 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4247 4248 4249 /* content: static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *id)*/ 4250 /* LDV_COMMENT_BEGIN_PREP */ 4251 #define DRIVER_AUTHOR \ 4252 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4253 "Dwaine Garden <DwaineGarden@rogers.com>" 4254 #define DRIVER_NAME "usbvision" 4255 #define DRIVER_ALIAS "USBVision" 4256 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4257 #define DRIVER_LICENSE "GPL" 4258 #define USBVISION_VERSION_STRING "0.9.11" 4259 #define ENABLE_HEXDUMP 0 4260 #ifdef USBVISION_DEBUG 4261 #define PDEBUG(level, fmt, args...) { \ 4262 if (video_debug & (level)) \ 4263 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4264 __func__, __LINE__ , ## args); \ 4265 } 4266 #else 4267 #define PDEBUG(level, fmt, args...) do {} while (0) 4268 #endif 4269 #define DBG_IO (1 << 1) 4270 #define DBG_PROBE (1 << 2) 4271 #define DBG_MMAP (1 << 3) 4272 #define rmspace(str) while (*str == ' ') str++; 4273 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4274 #define YES_NO(x) ((x) ? "Yes" : "No") 4275 #ifdef CONFIG_VIDEO_ADV_DEBUG 4276 #endif 4277 /* LDV_COMMENT_END_PREP */ 4278 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_std" from driver structure with callbacks "usbvision_ioctl_ops" */ 4279 ldv_handler_precall(); 4280 vidioc_g_std( var_group1, var_vidioc_g_std_21_p1, var_vidioc_g_std_21_p2); 4281 /* LDV_COMMENT_BEGIN_PREP */ 4282 #ifdef CONFIG_VIDEO_ADV_DEBUG 4283 #endif 4284 /* LDV_COMMENT_END_PREP */ 4285 4286 4287 4288 4289 } 4290 4291 break; 4292 case 15: { 4293 4294 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4295 4296 4297 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 4298 /* LDV_COMMENT_BEGIN_PREP */ 4299 #define DRIVER_AUTHOR \ 4300 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4301 "Dwaine Garden <DwaineGarden@rogers.com>" 4302 #define DRIVER_NAME "usbvision" 4303 #define DRIVER_ALIAS "USBVision" 4304 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4305 #define DRIVER_LICENSE "GPL" 4306 #define USBVISION_VERSION_STRING "0.9.11" 4307 #define ENABLE_HEXDUMP 0 4308 #ifdef USBVISION_DEBUG 4309 #define PDEBUG(level, fmt, args...) { \ 4310 if (video_debug & (level)) \ 4311 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4312 __func__, __LINE__ , ## args); \ 4313 } 4314 #else 4315 #define PDEBUG(level, fmt, args...) do {} while (0) 4316 #endif 4317 #define DBG_IO (1 << 1) 4318 #define DBG_PROBE (1 << 2) 4319 #define DBG_MMAP (1 << 3) 4320 #define rmspace(str) while (*str == ' ') str++; 4321 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4322 #define YES_NO(x) ((x) ? "Yes" : "No") 4323 #ifdef CONFIG_VIDEO_ADV_DEBUG 4324 #endif 4325 /* LDV_COMMENT_END_PREP */ 4326 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4327 ldv_handler_precall(); 4328 vidioc_enum_input( var_group1, var_vidioc_enum_input_17_p1, var_vidioc_enum_input_17_p2); 4329 /* LDV_COMMENT_BEGIN_PREP */ 4330 #ifdef CONFIG_VIDEO_ADV_DEBUG 4331 #endif 4332 /* LDV_COMMENT_END_PREP */ 4333 4334 4335 4336 4337 } 4338 4339 break; 4340 case 16: { 4341 4342 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4343 4344 4345 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 4346 /* LDV_COMMENT_BEGIN_PREP */ 4347 #define DRIVER_AUTHOR \ 4348 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4349 "Dwaine Garden <DwaineGarden@rogers.com>" 4350 #define DRIVER_NAME "usbvision" 4351 #define DRIVER_ALIAS "USBVision" 4352 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4353 #define DRIVER_LICENSE "GPL" 4354 #define USBVISION_VERSION_STRING "0.9.11" 4355 #define ENABLE_HEXDUMP 0 4356 #ifdef USBVISION_DEBUG 4357 #define PDEBUG(level, fmt, args...) { \ 4358 if (video_debug & (level)) \ 4359 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4360 __func__, __LINE__ , ## args); \ 4361 } 4362 #else 4363 #define PDEBUG(level, fmt, args...) do {} while (0) 4364 #endif 4365 #define DBG_IO (1 << 1) 4366 #define DBG_PROBE (1 << 2) 4367 #define DBG_MMAP (1 << 3) 4368 #define rmspace(str) while (*str == ' ') str++; 4369 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4370 #define YES_NO(x) ((x) ? "Yes" : "No") 4371 #ifdef CONFIG_VIDEO_ADV_DEBUG 4372 #endif 4373 /* LDV_COMMENT_END_PREP */ 4374 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4375 ldv_handler_precall(); 4376 vidioc_g_input( var_group1, var_vidioc_g_input_18_p1, var_vidioc_g_input_18_p2); 4377 /* LDV_COMMENT_BEGIN_PREP */ 4378 #ifdef CONFIG_VIDEO_ADV_DEBUG 4379 #endif 4380 /* LDV_COMMENT_END_PREP */ 4381 4382 4383 4384 4385 } 4386 4387 break; 4388 case 17: { 4389 4390 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4391 4392 4393 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 4394 /* LDV_COMMENT_BEGIN_PREP */ 4395 #define DRIVER_AUTHOR \ 4396 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4397 "Dwaine Garden <DwaineGarden@rogers.com>" 4398 #define DRIVER_NAME "usbvision" 4399 #define DRIVER_ALIAS "USBVision" 4400 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4401 #define DRIVER_LICENSE "GPL" 4402 #define USBVISION_VERSION_STRING "0.9.11" 4403 #define ENABLE_HEXDUMP 0 4404 #ifdef USBVISION_DEBUG 4405 #define PDEBUG(level, fmt, args...) { \ 4406 if (video_debug & (level)) \ 4407 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4408 __func__, __LINE__ , ## args); \ 4409 } 4410 #else 4411 #define PDEBUG(level, fmt, args...) do {} while (0) 4412 #endif 4413 #define DBG_IO (1 << 1) 4414 #define DBG_PROBE (1 << 2) 4415 #define DBG_MMAP (1 << 3) 4416 #define rmspace(str) while (*str == ' ') str++; 4417 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4418 #define YES_NO(x) ((x) ? "Yes" : "No") 4419 #ifdef CONFIG_VIDEO_ADV_DEBUG 4420 #endif 4421 /* LDV_COMMENT_END_PREP */ 4422 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_input" from driver structure with callbacks "usbvision_ioctl_ops" */ 4423 ldv_handler_precall(); 4424 vidioc_s_input( var_group1, var_vidioc_s_input_19_p1, var_vidioc_s_input_19_p2); 4425 /* LDV_COMMENT_BEGIN_PREP */ 4426 #ifdef CONFIG_VIDEO_ADV_DEBUG 4427 #endif 4428 /* LDV_COMMENT_END_PREP */ 4429 4430 4431 4432 4433 } 4434 4435 break; 4436 case 18: { 4437 4438 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4439 4440 4441 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 4442 /* LDV_COMMENT_BEGIN_PREP */ 4443 #define DRIVER_AUTHOR \ 4444 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4445 "Dwaine Garden <DwaineGarden@rogers.com>" 4446 #define DRIVER_NAME "usbvision" 4447 #define DRIVER_ALIAS "USBVision" 4448 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4449 #define DRIVER_LICENSE "GPL" 4450 #define USBVISION_VERSION_STRING "0.9.11" 4451 #define ENABLE_HEXDUMP 0 4452 #ifdef USBVISION_DEBUG 4453 #define PDEBUG(level, fmt, args...) { \ 4454 if (video_debug & (level)) \ 4455 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4456 __func__, __LINE__ , ## args); \ 4457 } 4458 #else 4459 #define PDEBUG(level, fmt, args...) do {} while (0) 4460 #endif 4461 #define DBG_IO (1 << 1) 4462 #define DBG_PROBE (1 << 2) 4463 #define DBG_MMAP (1 << 3) 4464 #define rmspace(str) while (*str == ' ') str++; 4465 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4466 #define YES_NO(x) ((x) ? "Yes" : "No") 4467 #ifdef CONFIG_VIDEO_ADV_DEBUG 4468 #endif 4469 /* LDV_COMMENT_END_PREP */ 4470 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_queryctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4471 ldv_handler_precall(); 4472 vidioc_queryctrl( var_group1, var_vidioc_queryctrl_28_p1, var_vidioc_queryctrl_28_p2); 4473 /* LDV_COMMENT_BEGIN_PREP */ 4474 #ifdef CONFIG_VIDEO_ADV_DEBUG 4475 #endif 4476 /* LDV_COMMENT_END_PREP */ 4477 4478 4479 4480 4481 } 4482 4483 break; 4484 case 19: { 4485 4486 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4487 4488 4489 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 4490 /* LDV_COMMENT_BEGIN_PREP */ 4491 #define DRIVER_AUTHOR \ 4492 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4493 "Dwaine Garden <DwaineGarden@rogers.com>" 4494 #define DRIVER_NAME "usbvision" 4495 #define DRIVER_ALIAS "USBVision" 4496 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4497 #define DRIVER_LICENSE "GPL" 4498 #define USBVISION_VERSION_STRING "0.9.11" 4499 #define ENABLE_HEXDUMP 0 4500 #ifdef USBVISION_DEBUG 4501 #define PDEBUG(level, fmt, args...) { \ 4502 if (video_debug & (level)) \ 4503 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4504 __func__, __LINE__ , ## args); \ 4505 } 4506 #else 4507 #define PDEBUG(level, fmt, args...) do {} while (0) 4508 #endif 4509 #define DBG_IO (1 << 1) 4510 #define DBG_PROBE (1 << 2) 4511 #define DBG_MMAP (1 << 3) 4512 #define rmspace(str) while (*str == ' ') str++; 4513 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4514 #define YES_NO(x) ((x) ? "Yes" : "No") 4515 #ifdef CONFIG_VIDEO_ADV_DEBUG 4516 #endif 4517 /* LDV_COMMENT_END_PREP */ 4518 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_audio" from driver structure with callbacks "usbvision_ioctl_ops" */ 4519 ldv_handler_precall(); 4520 vidioc_g_audio( var_group1, var_vidioc_g_audio_26_p1, var_vidioc_g_audio_26_p2); 4521 /* LDV_COMMENT_BEGIN_PREP */ 4522 #ifdef CONFIG_VIDEO_ADV_DEBUG 4523 #endif 4524 /* LDV_COMMENT_END_PREP */ 4525 4526 4527 4528 4529 } 4530 4531 break; 4532 case 20: { 4533 4534 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4535 4536 4537 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 4538 /* LDV_COMMENT_BEGIN_PREP */ 4539 #define DRIVER_AUTHOR \ 4540 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4541 "Dwaine Garden <DwaineGarden@rogers.com>" 4542 #define DRIVER_NAME "usbvision" 4543 #define DRIVER_ALIAS "USBVision" 4544 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4545 #define DRIVER_LICENSE "GPL" 4546 #define USBVISION_VERSION_STRING "0.9.11" 4547 #define ENABLE_HEXDUMP 0 4548 #ifdef USBVISION_DEBUG 4549 #define PDEBUG(level, fmt, args...) { \ 4550 if (video_debug & (level)) \ 4551 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4552 __func__, __LINE__ , ## args); \ 4553 } 4554 #else 4555 #define PDEBUG(level, fmt, args...) do {} while (0) 4556 #endif 4557 #define DBG_IO (1 << 1) 4558 #define DBG_PROBE (1 << 2) 4559 #define DBG_MMAP (1 << 3) 4560 #define rmspace(str) while (*str == ' ') str++; 4561 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4562 #define YES_NO(x) ((x) ? "Yes" : "No") 4563 #ifdef CONFIG_VIDEO_ADV_DEBUG 4564 #endif 4565 /* LDV_COMMENT_END_PREP */ 4566 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_audio" from driver structure with callbacks "usbvision_ioctl_ops" */ 4567 ldv_handler_precall(); 4568 vidioc_s_audio( var_group1, var_vidioc_s_audio_27_p1, var_vidioc_s_audio_27_p2); 4569 /* LDV_COMMENT_BEGIN_PREP */ 4570 #ifdef CONFIG_VIDEO_ADV_DEBUG 4571 #endif 4572 /* LDV_COMMENT_END_PREP */ 4573 4574 4575 4576 4577 } 4578 4579 break; 4580 case 21: { 4581 4582 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4583 4584 4585 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 4586 /* LDV_COMMENT_BEGIN_PREP */ 4587 #define DRIVER_AUTHOR \ 4588 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4589 "Dwaine Garden <DwaineGarden@rogers.com>" 4590 #define DRIVER_NAME "usbvision" 4591 #define DRIVER_ALIAS "USBVision" 4592 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4593 #define DRIVER_LICENSE "GPL" 4594 #define USBVISION_VERSION_STRING "0.9.11" 4595 #define ENABLE_HEXDUMP 0 4596 #ifdef USBVISION_DEBUG 4597 #define PDEBUG(level, fmt, args...) { \ 4598 if (video_debug & (level)) \ 4599 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4600 __func__, __LINE__ , ## args); \ 4601 } 4602 #else 4603 #define PDEBUG(level, fmt, args...) do {} while (0) 4604 #endif 4605 #define DBG_IO (1 << 1) 4606 #define DBG_PROBE (1 << 2) 4607 #define DBG_MMAP (1 << 3) 4608 #define rmspace(str) while (*str == ' ') str++; 4609 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4610 #define YES_NO(x) ((x) ? "Yes" : "No") 4611 #ifdef CONFIG_VIDEO_ADV_DEBUG 4612 #endif 4613 /* LDV_COMMENT_END_PREP */ 4614 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_ctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4615 ldv_handler_precall(); 4616 vidioc_g_ctrl( var_group1, var_vidioc_g_ctrl_29_p1, var_vidioc_g_ctrl_29_p2); 4617 /* LDV_COMMENT_BEGIN_PREP */ 4618 #ifdef CONFIG_VIDEO_ADV_DEBUG 4619 #endif 4620 /* LDV_COMMENT_END_PREP */ 4621 4622 4623 4624 4625 } 4626 4627 break; 4628 case 22: { 4629 4630 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4631 4632 4633 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 4634 /* LDV_COMMENT_BEGIN_PREP */ 4635 #define DRIVER_AUTHOR \ 4636 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4637 "Dwaine Garden <DwaineGarden@rogers.com>" 4638 #define DRIVER_NAME "usbvision" 4639 #define DRIVER_ALIAS "USBVision" 4640 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4641 #define DRIVER_LICENSE "GPL" 4642 #define USBVISION_VERSION_STRING "0.9.11" 4643 #define ENABLE_HEXDUMP 0 4644 #ifdef USBVISION_DEBUG 4645 #define PDEBUG(level, fmt, args...) { \ 4646 if (video_debug & (level)) \ 4647 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4648 __func__, __LINE__ , ## args); \ 4649 } 4650 #else 4651 #define PDEBUG(level, fmt, args...) do {} while (0) 4652 #endif 4653 #define DBG_IO (1 << 1) 4654 #define DBG_PROBE (1 << 2) 4655 #define DBG_MMAP (1 << 3) 4656 #define rmspace(str) while (*str == ' ') str++; 4657 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4658 #define YES_NO(x) ((x) ? "Yes" : "No") 4659 #ifdef CONFIG_VIDEO_ADV_DEBUG 4660 #endif 4661 /* LDV_COMMENT_END_PREP */ 4662 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_ctrl" from driver structure with callbacks "usbvision_ioctl_ops" */ 4663 ldv_handler_precall(); 4664 vidioc_s_ctrl( var_group1, var_vidioc_s_ctrl_30_p1, var_vidioc_s_ctrl_30_p2); 4665 /* LDV_COMMENT_BEGIN_PREP */ 4666 #ifdef CONFIG_VIDEO_ADV_DEBUG 4667 #endif 4668 /* LDV_COMMENT_END_PREP */ 4669 4670 4671 4672 4673 } 4674 4675 break; 4676 case 23: { 4677 4678 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4679 4680 4681 /* content: static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)*/ 4682 /* LDV_COMMENT_BEGIN_PREP */ 4683 #define DRIVER_AUTHOR \ 4684 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4685 "Dwaine Garden <DwaineGarden@rogers.com>" 4686 #define DRIVER_NAME "usbvision" 4687 #define DRIVER_ALIAS "USBVision" 4688 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4689 #define DRIVER_LICENSE "GPL" 4690 #define USBVISION_VERSION_STRING "0.9.11" 4691 #define ENABLE_HEXDUMP 0 4692 #ifdef USBVISION_DEBUG 4693 #define PDEBUG(level, fmt, args...) { \ 4694 if (video_debug & (level)) \ 4695 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4696 __func__, __LINE__ , ## args); \ 4697 } 4698 #else 4699 #define PDEBUG(level, fmt, args...) do {} while (0) 4700 #endif 4701 #define DBG_IO (1 << 1) 4702 #define DBG_PROBE (1 << 2) 4703 #define DBG_MMAP (1 << 3) 4704 #define rmspace(str) while (*str == ' ') str++; 4705 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4706 #define YES_NO(x) ((x) ? "Yes" : "No") 4707 #ifdef CONFIG_VIDEO_ADV_DEBUG 4708 #endif 4709 /* LDV_COMMENT_END_PREP */ 4710 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_streamon" from driver structure with callbacks "usbvision_ioctl_ops" */ 4711 ldv_handler_precall(); 4712 vidioc_streamon( var_group1, var_vidioc_streamon_35_p1, var_vidioc_streamon_35_p2); 4713 /* LDV_COMMENT_BEGIN_PREP */ 4714 #ifdef CONFIG_VIDEO_ADV_DEBUG 4715 #endif 4716 /* LDV_COMMENT_END_PREP */ 4717 4718 4719 4720 4721 } 4722 4723 break; 4724 case 24: { 4725 4726 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4727 4728 4729 /* content: static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type type)*/ 4730 /* LDV_COMMENT_BEGIN_PREP */ 4731 #define DRIVER_AUTHOR \ 4732 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4733 "Dwaine Garden <DwaineGarden@rogers.com>" 4734 #define DRIVER_NAME "usbvision" 4735 #define DRIVER_ALIAS "USBVision" 4736 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4737 #define DRIVER_LICENSE "GPL" 4738 #define USBVISION_VERSION_STRING "0.9.11" 4739 #define ENABLE_HEXDUMP 0 4740 #ifdef USBVISION_DEBUG 4741 #define PDEBUG(level, fmt, args...) { \ 4742 if (video_debug & (level)) \ 4743 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4744 __func__, __LINE__ , ## args); \ 4745 } 4746 #else 4747 #define PDEBUG(level, fmt, args...) do {} while (0) 4748 #endif 4749 #define DBG_IO (1 << 1) 4750 #define DBG_PROBE (1 << 2) 4751 #define DBG_MMAP (1 << 3) 4752 #define rmspace(str) while (*str == ' ') str++; 4753 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4754 #define YES_NO(x) ((x) ? "Yes" : "No") 4755 #ifdef CONFIG_VIDEO_ADV_DEBUG 4756 #endif 4757 /* LDV_COMMENT_END_PREP */ 4758 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_streamoff" from driver structure with callbacks "usbvision_ioctl_ops" */ 4759 ldv_handler_precall(); 4760 vidioc_streamoff( var_group1, var_vidioc_streamoff_36_p1, var_vidioc_streamoff_36_p2); 4761 /* LDV_COMMENT_BEGIN_PREP */ 4762 #ifdef CONFIG_VIDEO_ADV_DEBUG 4763 #endif 4764 /* LDV_COMMENT_END_PREP */ 4765 4766 4767 4768 4769 } 4770 4771 break; 4772 case 25: { 4773 4774 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4775 4776 4777 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 4778 /* LDV_COMMENT_BEGIN_PREP */ 4779 #define DRIVER_AUTHOR \ 4780 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4781 "Dwaine Garden <DwaineGarden@rogers.com>" 4782 #define DRIVER_NAME "usbvision" 4783 #define DRIVER_ALIAS "USBVision" 4784 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4785 #define DRIVER_LICENSE "GPL" 4786 #define USBVISION_VERSION_STRING "0.9.11" 4787 #define ENABLE_HEXDUMP 0 4788 #ifdef USBVISION_DEBUG 4789 #define PDEBUG(level, fmt, args...) { \ 4790 if (video_debug & (level)) \ 4791 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4792 __func__, __LINE__ , ## args); \ 4793 } 4794 #else 4795 #define PDEBUG(level, fmt, args...) do {} while (0) 4796 #endif 4797 #define DBG_IO (1 << 1) 4798 #define DBG_PROBE (1 << 2) 4799 #define DBG_MMAP (1 << 3) 4800 #define rmspace(str) while (*str == ' ') str++; 4801 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4802 #define YES_NO(x) ((x) ? "Yes" : "No") 4803 #ifdef CONFIG_VIDEO_ADV_DEBUG 4804 #endif 4805 /* LDV_COMMENT_END_PREP */ 4806 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_tuner" from driver structure with callbacks "usbvision_ioctl_ops" */ 4807 ldv_handler_precall(); 4808 vidioc_g_tuner( var_group1, var_vidioc_g_tuner_22_p1, var_vidioc_g_tuner_22_p2); 4809 /* LDV_COMMENT_BEGIN_PREP */ 4810 #ifdef CONFIG_VIDEO_ADV_DEBUG 4811 #endif 4812 /* LDV_COMMENT_END_PREP */ 4813 4814 4815 4816 4817 } 4818 4819 break; 4820 case 26: { 4821 4822 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4823 4824 4825 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 4826 /* LDV_COMMENT_BEGIN_PREP */ 4827 #define DRIVER_AUTHOR \ 4828 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4829 "Dwaine Garden <DwaineGarden@rogers.com>" 4830 #define DRIVER_NAME "usbvision" 4831 #define DRIVER_ALIAS "USBVision" 4832 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4833 #define DRIVER_LICENSE "GPL" 4834 #define USBVISION_VERSION_STRING "0.9.11" 4835 #define ENABLE_HEXDUMP 0 4836 #ifdef USBVISION_DEBUG 4837 #define PDEBUG(level, fmt, args...) { \ 4838 if (video_debug & (level)) \ 4839 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4840 __func__, __LINE__ , ## args); \ 4841 } 4842 #else 4843 #define PDEBUG(level, fmt, args...) do {} while (0) 4844 #endif 4845 #define DBG_IO (1 << 1) 4846 #define DBG_PROBE (1 << 2) 4847 #define DBG_MMAP (1 << 3) 4848 #define rmspace(str) while (*str == ' ') str++; 4849 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4850 #define YES_NO(x) ((x) ? "Yes" : "No") 4851 #ifdef CONFIG_VIDEO_ADV_DEBUG 4852 #endif 4853 /* LDV_COMMENT_END_PREP */ 4854 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_tuner" from driver structure with callbacks "usbvision_ioctl_ops" */ 4855 ldv_handler_precall(); 4856 vidioc_s_tuner( var_group1, var_vidioc_s_tuner_23_p1, var_vidioc_s_tuner_23_p2); 4857 /* LDV_COMMENT_BEGIN_PREP */ 4858 #ifdef CONFIG_VIDEO_ADV_DEBUG 4859 #endif 4860 /* LDV_COMMENT_END_PREP */ 4861 4862 4863 4864 4865 } 4866 4867 break; 4868 case 27: { 4869 4870 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4871 4872 4873 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 4874 /* LDV_COMMENT_BEGIN_PREP */ 4875 #define DRIVER_AUTHOR \ 4876 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4877 "Dwaine Garden <DwaineGarden@rogers.com>" 4878 #define DRIVER_NAME "usbvision" 4879 #define DRIVER_ALIAS "USBVision" 4880 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4881 #define DRIVER_LICENSE "GPL" 4882 #define USBVISION_VERSION_STRING "0.9.11" 4883 #define ENABLE_HEXDUMP 0 4884 #ifdef USBVISION_DEBUG 4885 #define PDEBUG(level, fmt, args...) { \ 4886 if (video_debug & (level)) \ 4887 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4888 __func__, __LINE__ , ## args); \ 4889 } 4890 #else 4891 #define PDEBUG(level, fmt, args...) do {} while (0) 4892 #endif 4893 #define DBG_IO (1 << 1) 4894 #define DBG_PROBE (1 << 2) 4895 #define DBG_MMAP (1 << 3) 4896 #define rmspace(str) while (*str == ' ') str++; 4897 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4898 #define YES_NO(x) ((x) ? "Yes" : "No") 4899 #ifdef CONFIG_VIDEO_ADV_DEBUG 4900 #endif 4901 /* LDV_COMMENT_END_PREP */ 4902 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_frequency" from driver structure with callbacks "usbvision_ioctl_ops" */ 4903 ldv_handler_precall(); 4904 vidioc_g_frequency( var_group1, var_vidioc_g_frequency_24_p1, var_vidioc_g_frequency_24_p2); 4905 /* LDV_COMMENT_BEGIN_PREP */ 4906 #ifdef CONFIG_VIDEO_ADV_DEBUG 4907 #endif 4908 /* LDV_COMMENT_END_PREP */ 4909 4910 4911 4912 4913 } 4914 4915 break; 4916 case 28: { 4917 4918 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4919 4920 4921 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 4922 /* LDV_COMMENT_BEGIN_PREP */ 4923 #define DRIVER_AUTHOR \ 4924 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4925 "Dwaine Garden <DwaineGarden@rogers.com>" 4926 #define DRIVER_NAME "usbvision" 4927 #define DRIVER_ALIAS "USBVision" 4928 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4929 #define DRIVER_LICENSE "GPL" 4930 #define USBVISION_VERSION_STRING "0.9.11" 4931 #define ENABLE_HEXDUMP 0 4932 #ifdef USBVISION_DEBUG 4933 #define PDEBUG(level, fmt, args...) { \ 4934 if (video_debug & (level)) \ 4935 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4936 __func__, __LINE__ , ## args); \ 4937 } 4938 #else 4939 #define PDEBUG(level, fmt, args...) do {} while (0) 4940 #endif 4941 #define DBG_IO (1 << 1) 4942 #define DBG_PROBE (1 << 2) 4943 #define DBG_MMAP (1 << 3) 4944 #define rmspace(str) while (*str == ' ') str++; 4945 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4946 #define YES_NO(x) ((x) ? "Yes" : "No") 4947 #ifdef CONFIG_VIDEO_ADV_DEBUG 4948 #endif 4949 /* LDV_COMMENT_END_PREP */ 4950 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_frequency" from driver structure with callbacks "usbvision_ioctl_ops" */ 4951 ldv_handler_precall(); 4952 vidioc_s_frequency( var_group1, var_vidioc_s_frequency_25_p1, var_vidioc_s_frequency_25_p2); 4953 /* LDV_COMMENT_BEGIN_PREP */ 4954 #ifdef CONFIG_VIDEO_ADV_DEBUG 4955 #endif 4956 /* LDV_COMMENT_END_PREP */ 4957 4958 4959 4960 4961 } 4962 4963 break; 4964 case 29: { 4965 4966 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 4967 4968 4969 /* content: static int vidioc_g_register(struct file *file, void *priv, struct v4l2_dbg_register *reg)*/ 4970 /* LDV_COMMENT_BEGIN_PREP */ 4971 #define DRIVER_AUTHOR \ 4972 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 4973 "Dwaine Garden <DwaineGarden@rogers.com>" 4974 #define DRIVER_NAME "usbvision" 4975 #define DRIVER_ALIAS "USBVision" 4976 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 4977 #define DRIVER_LICENSE "GPL" 4978 #define USBVISION_VERSION_STRING "0.9.11" 4979 #define ENABLE_HEXDUMP 0 4980 #ifdef USBVISION_DEBUG 4981 #define PDEBUG(level, fmt, args...) { \ 4982 if (video_debug & (level)) \ 4983 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 4984 __func__, __LINE__ , ## args); \ 4985 } 4986 #else 4987 #define PDEBUG(level, fmt, args...) do {} while (0) 4988 #endif 4989 #define DBG_IO (1 << 1) 4990 #define DBG_PROBE (1 << 2) 4991 #define DBG_MMAP (1 << 3) 4992 #define rmspace(str) while (*str == ' ') str++; 4993 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 4994 #define YES_NO(x) ((x) ? "Yes" : "No") 4995 #ifdef CONFIG_VIDEO_ADV_DEBUG 4996 /* LDV_COMMENT_END_PREP */ 4997 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_register" from driver structure with callbacks "usbvision_ioctl_ops" */ 4998 ldv_handler_precall(); 4999 vidioc_g_register( var_group1, var_vidioc_g_register_14_p1, var_vidioc_g_register_14_p2); 5000 /* LDV_COMMENT_BEGIN_PREP */ 5001 #endif 5002 #ifdef CONFIG_VIDEO_ADV_DEBUG 5003 #endif 5004 /* LDV_COMMENT_END_PREP */ 5005 5006 5007 5008 5009 } 5010 5011 break; 5012 case 30: { 5013 5014 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_ioctl_ops **/ 5015 5016 5017 /* content: static int vidioc_s_register(struct file *file, void *priv, const struct v4l2_dbg_register *reg)*/ 5018 /* LDV_COMMENT_BEGIN_PREP */ 5019 #define DRIVER_AUTHOR \ 5020 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5021 "Dwaine Garden <DwaineGarden@rogers.com>" 5022 #define DRIVER_NAME "usbvision" 5023 #define DRIVER_ALIAS "USBVision" 5024 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5025 #define DRIVER_LICENSE "GPL" 5026 #define USBVISION_VERSION_STRING "0.9.11" 5027 #define ENABLE_HEXDUMP 0 5028 #ifdef USBVISION_DEBUG 5029 #define PDEBUG(level, fmt, args...) { \ 5030 if (video_debug & (level)) \ 5031 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5032 __func__, __LINE__ , ## args); \ 5033 } 5034 #else 5035 #define PDEBUG(level, fmt, args...) do {} while (0) 5036 #endif 5037 #define DBG_IO (1 << 1) 5038 #define DBG_PROBE (1 << 2) 5039 #define DBG_MMAP (1 << 3) 5040 #define rmspace(str) while (*str == ' ') str++; 5041 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5042 #define YES_NO(x) ((x) ? "Yes" : "No") 5043 #ifdef CONFIG_VIDEO_ADV_DEBUG 5044 /* LDV_COMMENT_END_PREP */ 5045 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_register" from driver structure with callbacks "usbvision_ioctl_ops" */ 5046 ldv_handler_precall(); 5047 vidioc_s_register( var_group1, var_vidioc_s_register_15_p1, var_vidioc_s_register_15_p2); 5048 /* LDV_COMMENT_BEGIN_PREP */ 5049 #endif 5050 #ifdef CONFIG_VIDEO_ADV_DEBUG 5051 #endif 5052 /* LDV_COMMENT_END_PREP */ 5053 5054 5055 5056 5057 } 5058 5059 break; 5060 case 31: { 5061 5062 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 5063 if(ldv_s_usbvision_radio_fops_v4l2_file_operations==0) { 5064 5065 /* content: static int usbvision_radio_open(struct file *file)*/ 5066 /* LDV_COMMENT_BEGIN_PREP */ 5067 #define DRIVER_AUTHOR \ 5068 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5069 "Dwaine Garden <DwaineGarden@rogers.com>" 5070 #define DRIVER_NAME "usbvision" 5071 #define DRIVER_ALIAS "USBVision" 5072 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5073 #define DRIVER_LICENSE "GPL" 5074 #define USBVISION_VERSION_STRING "0.9.11" 5075 #define ENABLE_HEXDUMP 0 5076 #ifdef USBVISION_DEBUG 5077 #define PDEBUG(level, fmt, args...) { \ 5078 if (video_debug & (level)) \ 5079 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5080 __func__, __LINE__ , ## args); \ 5081 } 5082 #else 5083 #define PDEBUG(level, fmt, args...) do {} while (0) 5084 #endif 5085 #define DBG_IO (1 << 1) 5086 #define DBG_PROBE (1 << 2) 5087 #define DBG_MMAP (1 << 3) 5088 #define rmspace(str) while (*str == ' ') str++; 5089 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5090 #define YES_NO(x) ((x) ? "Yes" : "No") 5091 #ifdef CONFIG_VIDEO_ADV_DEBUG 5092 #endif 5093 /* LDV_COMMENT_END_PREP */ 5094 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "usbvision_radio_fops". Standart function test for correct return result. */ 5095 ldv_handler_precall(); 5096 res_usbvision_radio_open_45 = usbvision_radio_open( var_group1); 5097 ldv_check_return_value(res_usbvision_radio_open_45); 5098 if(res_usbvision_radio_open_45) 5099 goto ldv_module_exit; 5100 /* LDV_COMMENT_BEGIN_PREP */ 5101 #ifdef CONFIG_VIDEO_ADV_DEBUG 5102 #endif 5103 /* LDV_COMMENT_END_PREP */ 5104 ldv_s_usbvision_radio_fops_v4l2_file_operations++; 5105 5106 } 5107 5108 } 5109 5110 break; 5111 case 32: { 5112 5113 /** STRUCT: struct type: v4l2_file_operations, struct name: usbvision_radio_fops **/ 5114 if(ldv_s_usbvision_radio_fops_v4l2_file_operations==1) { 5115 5116 /* content: static int usbvision_radio_close(struct file *file)*/ 5117 /* LDV_COMMENT_BEGIN_PREP */ 5118 #define DRIVER_AUTHOR \ 5119 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5120 "Dwaine Garden <DwaineGarden@rogers.com>" 5121 #define DRIVER_NAME "usbvision" 5122 #define DRIVER_ALIAS "USBVision" 5123 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5124 #define DRIVER_LICENSE "GPL" 5125 #define USBVISION_VERSION_STRING "0.9.11" 5126 #define ENABLE_HEXDUMP 0 5127 #ifdef USBVISION_DEBUG 5128 #define PDEBUG(level, fmt, args...) { \ 5129 if (video_debug & (level)) \ 5130 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5131 __func__, __LINE__ , ## args); \ 5132 } 5133 #else 5134 #define PDEBUG(level, fmt, args...) do {} while (0) 5135 #endif 5136 #define DBG_IO (1 << 1) 5137 #define DBG_PROBE (1 << 2) 5138 #define DBG_MMAP (1 << 3) 5139 #define rmspace(str) while (*str == ' ') str++; 5140 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5141 #define YES_NO(x) ((x) ? "Yes" : "No") 5142 #ifdef CONFIG_VIDEO_ADV_DEBUG 5143 #endif 5144 /* LDV_COMMENT_END_PREP */ 5145 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "usbvision_radio_fops" */ 5146 ldv_handler_precall(); 5147 usbvision_radio_close( var_group1); 5148 /* LDV_COMMENT_BEGIN_PREP */ 5149 #ifdef CONFIG_VIDEO_ADV_DEBUG 5150 #endif 5151 /* LDV_COMMENT_END_PREP */ 5152 ldv_s_usbvision_radio_fops_v4l2_file_operations=0; 5153 5154 } 5155 5156 } 5157 5158 break; 5159 case 33: { 5160 5161 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5162 5163 5164 /* content: static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *vc)*/ 5165 /* LDV_COMMENT_BEGIN_PREP */ 5166 #define DRIVER_AUTHOR \ 5167 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5168 "Dwaine Garden <DwaineGarden@rogers.com>" 5169 #define DRIVER_NAME "usbvision" 5170 #define DRIVER_ALIAS "USBVision" 5171 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5172 #define DRIVER_LICENSE "GPL" 5173 #define USBVISION_VERSION_STRING "0.9.11" 5174 #define ENABLE_HEXDUMP 0 5175 #ifdef USBVISION_DEBUG 5176 #define PDEBUG(level, fmt, args...) { \ 5177 if (video_debug & (level)) \ 5178 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5179 __func__, __LINE__ , ## args); \ 5180 } 5181 #else 5182 #define PDEBUG(level, fmt, args...) do {} while (0) 5183 #endif 5184 #define DBG_IO (1 << 1) 5185 #define DBG_PROBE (1 << 2) 5186 #define DBG_MMAP (1 << 3) 5187 #define rmspace(str) while (*str == ' ') str++; 5188 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5189 #define YES_NO(x) ((x) ? "Yes" : "No") 5190 #ifdef CONFIG_VIDEO_ADV_DEBUG 5191 #endif 5192 /* LDV_COMMENT_END_PREP */ 5193 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_querycap" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5194 ldv_handler_precall(); 5195 vidioc_querycap( var_group1, var_vidioc_querycap_16_p1, var_vidioc_querycap_16_p2); 5196 /* LDV_COMMENT_BEGIN_PREP */ 5197 #ifdef CONFIG_VIDEO_ADV_DEBUG 5198 #endif 5199 /* LDV_COMMENT_END_PREP */ 5200 5201 5202 5203 5204 } 5205 5206 break; 5207 case 34: { 5208 5209 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5210 5211 5212 /* content: static int vidioc_enum_input(struct file *file, void *priv, struct v4l2_input *vi)*/ 5213 /* LDV_COMMENT_BEGIN_PREP */ 5214 #define DRIVER_AUTHOR \ 5215 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5216 "Dwaine Garden <DwaineGarden@rogers.com>" 5217 #define DRIVER_NAME "usbvision" 5218 #define DRIVER_ALIAS "USBVision" 5219 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5220 #define DRIVER_LICENSE "GPL" 5221 #define USBVISION_VERSION_STRING "0.9.11" 5222 #define ENABLE_HEXDUMP 0 5223 #ifdef USBVISION_DEBUG 5224 #define PDEBUG(level, fmt, args...) { \ 5225 if (video_debug & (level)) \ 5226 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5227 __func__, __LINE__ , ## args); \ 5228 } 5229 #else 5230 #define PDEBUG(level, fmt, args...) do {} while (0) 5231 #endif 5232 #define DBG_IO (1 << 1) 5233 #define DBG_PROBE (1 << 2) 5234 #define DBG_MMAP (1 << 3) 5235 #define rmspace(str) while (*str == ' ') str++; 5236 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5237 #define YES_NO(x) ((x) ? "Yes" : "No") 5238 #ifdef CONFIG_VIDEO_ADV_DEBUG 5239 #endif 5240 /* LDV_COMMENT_END_PREP */ 5241 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_enum_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5242 ldv_handler_precall(); 5243 vidioc_enum_input( var_group1, var_vidioc_enum_input_17_p1, var_vidioc_enum_input_17_p2); 5244 /* LDV_COMMENT_BEGIN_PREP */ 5245 #ifdef CONFIG_VIDEO_ADV_DEBUG 5246 #endif 5247 /* LDV_COMMENT_END_PREP */ 5248 5249 5250 5251 5252 } 5253 5254 break; 5255 case 35: { 5256 5257 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5258 5259 5260 /* content: static int vidioc_g_input(struct file *file, void *priv, unsigned int *input)*/ 5261 /* LDV_COMMENT_BEGIN_PREP */ 5262 #define DRIVER_AUTHOR \ 5263 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5264 "Dwaine Garden <DwaineGarden@rogers.com>" 5265 #define DRIVER_NAME "usbvision" 5266 #define DRIVER_ALIAS "USBVision" 5267 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5268 #define DRIVER_LICENSE "GPL" 5269 #define USBVISION_VERSION_STRING "0.9.11" 5270 #define ENABLE_HEXDUMP 0 5271 #ifdef USBVISION_DEBUG 5272 #define PDEBUG(level, fmt, args...) { \ 5273 if (video_debug & (level)) \ 5274 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5275 __func__, __LINE__ , ## args); \ 5276 } 5277 #else 5278 #define PDEBUG(level, fmt, args...) do {} while (0) 5279 #endif 5280 #define DBG_IO (1 << 1) 5281 #define DBG_PROBE (1 << 2) 5282 #define DBG_MMAP (1 << 3) 5283 #define rmspace(str) while (*str == ' ') str++; 5284 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5285 #define YES_NO(x) ((x) ? "Yes" : "No") 5286 #ifdef CONFIG_VIDEO_ADV_DEBUG 5287 #endif 5288 /* LDV_COMMENT_END_PREP */ 5289 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5290 ldv_handler_precall(); 5291 vidioc_g_input( var_group1, var_vidioc_g_input_18_p1, var_vidioc_g_input_18_p2); 5292 /* LDV_COMMENT_BEGIN_PREP */ 5293 #ifdef CONFIG_VIDEO_ADV_DEBUG 5294 #endif 5295 /* LDV_COMMENT_END_PREP */ 5296 5297 5298 5299 5300 } 5301 5302 break; 5303 case 36: { 5304 5305 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5306 5307 5308 /* content: static int vidioc_s_input(struct file *file, void *priv, unsigned int input)*/ 5309 /* LDV_COMMENT_BEGIN_PREP */ 5310 #define DRIVER_AUTHOR \ 5311 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5312 "Dwaine Garden <DwaineGarden@rogers.com>" 5313 #define DRIVER_NAME "usbvision" 5314 #define DRIVER_ALIAS "USBVision" 5315 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5316 #define DRIVER_LICENSE "GPL" 5317 #define USBVISION_VERSION_STRING "0.9.11" 5318 #define ENABLE_HEXDUMP 0 5319 #ifdef USBVISION_DEBUG 5320 #define PDEBUG(level, fmt, args...) { \ 5321 if (video_debug & (level)) \ 5322 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5323 __func__, __LINE__ , ## args); \ 5324 } 5325 #else 5326 #define PDEBUG(level, fmt, args...) do {} while (0) 5327 #endif 5328 #define DBG_IO (1 << 1) 5329 #define DBG_PROBE (1 << 2) 5330 #define DBG_MMAP (1 << 3) 5331 #define rmspace(str) while (*str == ' ') str++; 5332 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5333 #define YES_NO(x) ((x) ? "Yes" : "No") 5334 #ifdef CONFIG_VIDEO_ADV_DEBUG 5335 #endif 5336 /* LDV_COMMENT_END_PREP */ 5337 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_input" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5338 ldv_handler_precall(); 5339 vidioc_s_input( var_group1, var_vidioc_s_input_19_p1, var_vidioc_s_input_19_p2); 5340 /* LDV_COMMENT_BEGIN_PREP */ 5341 #ifdef CONFIG_VIDEO_ADV_DEBUG 5342 #endif 5343 /* LDV_COMMENT_END_PREP */ 5344 5345 5346 5347 5348 } 5349 5350 break; 5351 case 37: { 5352 5353 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5354 5355 5356 /* content: static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *ctrl)*/ 5357 /* LDV_COMMENT_BEGIN_PREP */ 5358 #define DRIVER_AUTHOR \ 5359 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5360 "Dwaine Garden <DwaineGarden@rogers.com>" 5361 #define DRIVER_NAME "usbvision" 5362 #define DRIVER_ALIAS "USBVision" 5363 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5364 #define DRIVER_LICENSE "GPL" 5365 #define USBVISION_VERSION_STRING "0.9.11" 5366 #define ENABLE_HEXDUMP 0 5367 #ifdef USBVISION_DEBUG 5368 #define PDEBUG(level, fmt, args...) { \ 5369 if (video_debug & (level)) \ 5370 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5371 __func__, __LINE__ , ## args); \ 5372 } 5373 #else 5374 #define PDEBUG(level, fmt, args...) do {} while (0) 5375 #endif 5376 #define DBG_IO (1 << 1) 5377 #define DBG_PROBE (1 << 2) 5378 #define DBG_MMAP (1 << 3) 5379 #define rmspace(str) while (*str == ' ') str++; 5380 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5381 #define YES_NO(x) ((x) ? "Yes" : "No") 5382 #ifdef CONFIG_VIDEO_ADV_DEBUG 5383 #endif 5384 /* LDV_COMMENT_END_PREP */ 5385 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_queryctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5386 ldv_handler_precall(); 5387 vidioc_queryctrl( var_group1, var_vidioc_queryctrl_28_p1, var_vidioc_queryctrl_28_p2); 5388 /* LDV_COMMENT_BEGIN_PREP */ 5389 #ifdef CONFIG_VIDEO_ADV_DEBUG 5390 #endif 5391 /* LDV_COMMENT_END_PREP */ 5392 5393 5394 5395 5396 } 5397 5398 break; 5399 case 38: { 5400 5401 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5402 5403 5404 /* content: static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)*/ 5405 /* LDV_COMMENT_BEGIN_PREP */ 5406 #define DRIVER_AUTHOR \ 5407 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5408 "Dwaine Garden <DwaineGarden@rogers.com>" 5409 #define DRIVER_NAME "usbvision" 5410 #define DRIVER_ALIAS "USBVision" 5411 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5412 #define DRIVER_LICENSE "GPL" 5413 #define USBVISION_VERSION_STRING "0.9.11" 5414 #define ENABLE_HEXDUMP 0 5415 #ifdef USBVISION_DEBUG 5416 #define PDEBUG(level, fmt, args...) { \ 5417 if (video_debug & (level)) \ 5418 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5419 __func__, __LINE__ , ## args); \ 5420 } 5421 #else 5422 #define PDEBUG(level, fmt, args...) do {} while (0) 5423 #endif 5424 #define DBG_IO (1 << 1) 5425 #define DBG_PROBE (1 << 2) 5426 #define DBG_MMAP (1 << 3) 5427 #define rmspace(str) while (*str == ' ') str++; 5428 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5429 #define YES_NO(x) ((x) ? "Yes" : "No") 5430 #ifdef CONFIG_VIDEO_ADV_DEBUG 5431 #endif 5432 /* LDV_COMMENT_END_PREP */ 5433 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_audio" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5434 ldv_handler_precall(); 5435 vidioc_g_audio( var_group1, var_vidioc_g_audio_26_p1, var_vidioc_g_audio_26_p2); 5436 /* LDV_COMMENT_BEGIN_PREP */ 5437 #ifdef CONFIG_VIDEO_ADV_DEBUG 5438 #endif 5439 /* LDV_COMMENT_END_PREP */ 5440 5441 5442 5443 5444 } 5445 5446 break; 5447 case 39: { 5448 5449 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5450 5451 5452 /* content: static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *a)*/ 5453 /* LDV_COMMENT_BEGIN_PREP */ 5454 #define DRIVER_AUTHOR \ 5455 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5456 "Dwaine Garden <DwaineGarden@rogers.com>" 5457 #define DRIVER_NAME "usbvision" 5458 #define DRIVER_ALIAS "USBVision" 5459 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5460 #define DRIVER_LICENSE "GPL" 5461 #define USBVISION_VERSION_STRING "0.9.11" 5462 #define ENABLE_HEXDUMP 0 5463 #ifdef USBVISION_DEBUG 5464 #define PDEBUG(level, fmt, args...) { \ 5465 if (video_debug & (level)) \ 5466 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5467 __func__, __LINE__ , ## args); \ 5468 } 5469 #else 5470 #define PDEBUG(level, fmt, args...) do {} while (0) 5471 #endif 5472 #define DBG_IO (1 << 1) 5473 #define DBG_PROBE (1 << 2) 5474 #define DBG_MMAP (1 << 3) 5475 #define rmspace(str) while (*str == ' ') str++; 5476 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5477 #define YES_NO(x) ((x) ? "Yes" : "No") 5478 #ifdef CONFIG_VIDEO_ADV_DEBUG 5479 #endif 5480 /* LDV_COMMENT_END_PREP */ 5481 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_audio" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5482 ldv_handler_precall(); 5483 vidioc_s_audio( var_group1, var_vidioc_s_audio_27_p1, var_vidioc_s_audio_27_p2); 5484 /* LDV_COMMENT_BEGIN_PREP */ 5485 #ifdef CONFIG_VIDEO_ADV_DEBUG 5486 #endif 5487 /* LDV_COMMENT_END_PREP */ 5488 5489 5490 5491 5492 } 5493 5494 break; 5495 case 40: { 5496 5497 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5498 5499 5500 /* content: static int vidioc_g_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 5501 /* LDV_COMMENT_BEGIN_PREP */ 5502 #define DRIVER_AUTHOR \ 5503 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5504 "Dwaine Garden <DwaineGarden@rogers.com>" 5505 #define DRIVER_NAME "usbvision" 5506 #define DRIVER_ALIAS "USBVision" 5507 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5508 #define DRIVER_LICENSE "GPL" 5509 #define USBVISION_VERSION_STRING "0.9.11" 5510 #define ENABLE_HEXDUMP 0 5511 #ifdef USBVISION_DEBUG 5512 #define PDEBUG(level, fmt, args...) { \ 5513 if (video_debug & (level)) \ 5514 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5515 __func__, __LINE__ , ## args); \ 5516 } 5517 #else 5518 #define PDEBUG(level, fmt, args...) do {} while (0) 5519 #endif 5520 #define DBG_IO (1 << 1) 5521 #define DBG_PROBE (1 << 2) 5522 #define DBG_MMAP (1 << 3) 5523 #define rmspace(str) while (*str == ' ') str++; 5524 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5525 #define YES_NO(x) ((x) ? "Yes" : "No") 5526 #ifdef CONFIG_VIDEO_ADV_DEBUG 5527 #endif 5528 /* LDV_COMMENT_END_PREP */ 5529 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_ctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5530 ldv_handler_precall(); 5531 vidioc_g_ctrl( var_group1, var_vidioc_g_ctrl_29_p1, var_vidioc_g_ctrl_29_p2); 5532 /* LDV_COMMENT_BEGIN_PREP */ 5533 #ifdef CONFIG_VIDEO_ADV_DEBUG 5534 #endif 5535 /* LDV_COMMENT_END_PREP */ 5536 5537 5538 5539 5540 } 5541 5542 break; 5543 case 41: { 5544 5545 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5546 5547 5548 /* content: static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl)*/ 5549 /* LDV_COMMENT_BEGIN_PREP */ 5550 #define DRIVER_AUTHOR \ 5551 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5552 "Dwaine Garden <DwaineGarden@rogers.com>" 5553 #define DRIVER_NAME "usbvision" 5554 #define DRIVER_ALIAS "USBVision" 5555 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5556 #define DRIVER_LICENSE "GPL" 5557 #define USBVISION_VERSION_STRING "0.9.11" 5558 #define ENABLE_HEXDUMP 0 5559 #ifdef USBVISION_DEBUG 5560 #define PDEBUG(level, fmt, args...) { \ 5561 if (video_debug & (level)) \ 5562 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5563 __func__, __LINE__ , ## args); \ 5564 } 5565 #else 5566 #define PDEBUG(level, fmt, args...) do {} while (0) 5567 #endif 5568 #define DBG_IO (1 << 1) 5569 #define DBG_PROBE (1 << 2) 5570 #define DBG_MMAP (1 << 3) 5571 #define rmspace(str) while (*str == ' ') str++; 5572 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5573 #define YES_NO(x) ((x) ? "Yes" : "No") 5574 #ifdef CONFIG_VIDEO_ADV_DEBUG 5575 #endif 5576 /* LDV_COMMENT_END_PREP */ 5577 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_ctrl" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5578 ldv_handler_precall(); 5579 vidioc_s_ctrl( var_group1, var_vidioc_s_ctrl_30_p1, var_vidioc_s_ctrl_30_p2); 5580 /* LDV_COMMENT_BEGIN_PREP */ 5581 #ifdef CONFIG_VIDEO_ADV_DEBUG 5582 #endif 5583 /* LDV_COMMENT_END_PREP */ 5584 5585 5586 5587 5588 } 5589 5590 break; 5591 case 42: { 5592 5593 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5594 5595 5596 /* content: static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *vt)*/ 5597 /* LDV_COMMENT_BEGIN_PREP */ 5598 #define DRIVER_AUTHOR \ 5599 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5600 "Dwaine Garden <DwaineGarden@rogers.com>" 5601 #define DRIVER_NAME "usbvision" 5602 #define DRIVER_ALIAS "USBVision" 5603 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5604 #define DRIVER_LICENSE "GPL" 5605 #define USBVISION_VERSION_STRING "0.9.11" 5606 #define ENABLE_HEXDUMP 0 5607 #ifdef USBVISION_DEBUG 5608 #define PDEBUG(level, fmt, args...) { \ 5609 if (video_debug & (level)) \ 5610 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5611 __func__, __LINE__ , ## args); \ 5612 } 5613 #else 5614 #define PDEBUG(level, fmt, args...) do {} while (0) 5615 #endif 5616 #define DBG_IO (1 << 1) 5617 #define DBG_PROBE (1 << 2) 5618 #define DBG_MMAP (1 << 3) 5619 #define rmspace(str) while (*str == ' ') str++; 5620 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5621 #define YES_NO(x) ((x) ? "Yes" : "No") 5622 #ifdef CONFIG_VIDEO_ADV_DEBUG 5623 #endif 5624 /* LDV_COMMENT_END_PREP */ 5625 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_tuner" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5626 ldv_handler_precall(); 5627 vidioc_g_tuner( var_group1, var_vidioc_g_tuner_22_p1, var_vidioc_g_tuner_22_p2); 5628 /* LDV_COMMENT_BEGIN_PREP */ 5629 #ifdef CONFIG_VIDEO_ADV_DEBUG 5630 #endif 5631 /* LDV_COMMENT_END_PREP */ 5632 5633 5634 5635 5636 } 5637 5638 break; 5639 case 43: { 5640 5641 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5642 5643 5644 /* content: static int vidioc_s_tuner(struct file *file, void *priv, const struct v4l2_tuner *vt)*/ 5645 /* LDV_COMMENT_BEGIN_PREP */ 5646 #define DRIVER_AUTHOR \ 5647 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5648 "Dwaine Garden <DwaineGarden@rogers.com>" 5649 #define DRIVER_NAME "usbvision" 5650 #define DRIVER_ALIAS "USBVision" 5651 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5652 #define DRIVER_LICENSE "GPL" 5653 #define USBVISION_VERSION_STRING "0.9.11" 5654 #define ENABLE_HEXDUMP 0 5655 #ifdef USBVISION_DEBUG 5656 #define PDEBUG(level, fmt, args...) { \ 5657 if (video_debug & (level)) \ 5658 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5659 __func__, __LINE__ , ## args); \ 5660 } 5661 #else 5662 #define PDEBUG(level, fmt, args...) do {} while (0) 5663 #endif 5664 #define DBG_IO (1 << 1) 5665 #define DBG_PROBE (1 << 2) 5666 #define DBG_MMAP (1 << 3) 5667 #define rmspace(str) while (*str == ' ') str++; 5668 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5669 #define YES_NO(x) ((x) ? "Yes" : "No") 5670 #ifdef CONFIG_VIDEO_ADV_DEBUG 5671 #endif 5672 /* LDV_COMMENT_END_PREP */ 5673 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_tuner" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5674 ldv_handler_precall(); 5675 vidioc_s_tuner( var_group1, var_vidioc_s_tuner_23_p1, var_vidioc_s_tuner_23_p2); 5676 /* LDV_COMMENT_BEGIN_PREP */ 5677 #ifdef CONFIG_VIDEO_ADV_DEBUG 5678 #endif 5679 /* LDV_COMMENT_END_PREP */ 5680 5681 5682 5683 5684 } 5685 5686 break; 5687 case 44: { 5688 5689 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5690 5691 5692 /* content: static int vidioc_g_frequency(struct file *file, void *priv, struct v4l2_frequency *freq)*/ 5693 /* LDV_COMMENT_BEGIN_PREP */ 5694 #define DRIVER_AUTHOR \ 5695 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5696 "Dwaine Garden <DwaineGarden@rogers.com>" 5697 #define DRIVER_NAME "usbvision" 5698 #define DRIVER_ALIAS "USBVision" 5699 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5700 #define DRIVER_LICENSE "GPL" 5701 #define USBVISION_VERSION_STRING "0.9.11" 5702 #define ENABLE_HEXDUMP 0 5703 #ifdef USBVISION_DEBUG 5704 #define PDEBUG(level, fmt, args...) { \ 5705 if (video_debug & (level)) \ 5706 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5707 __func__, __LINE__ , ## args); \ 5708 } 5709 #else 5710 #define PDEBUG(level, fmt, args...) do {} while (0) 5711 #endif 5712 #define DBG_IO (1 << 1) 5713 #define DBG_PROBE (1 << 2) 5714 #define DBG_MMAP (1 << 3) 5715 #define rmspace(str) while (*str == ' ') str++; 5716 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5717 #define YES_NO(x) ((x) ? "Yes" : "No") 5718 #ifdef CONFIG_VIDEO_ADV_DEBUG 5719 #endif 5720 /* LDV_COMMENT_END_PREP */ 5721 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_g_frequency" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5722 ldv_handler_precall(); 5723 vidioc_g_frequency( var_group1, var_vidioc_g_frequency_24_p1, var_vidioc_g_frequency_24_p2); 5724 /* LDV_COMMENT_BEGIN_PREP */ 5725 #ifdef CONFIG_VIDEO_ADV_DEBUG 5726 #endif 5727 /* LDV_COMMENT_END_PREP */ 5728 5729 5730 5731 5732 } 5733 5734 break; 5735 case 45: { 5736 5737 /** STRUCT: struct type: v4l2_ioctl_ops, struct name: usbvision_radio_ioctl_ops **/ 5738 5739 5740 /* content: static int vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq)*/ 5741 /* LDV_COMMENT_BEGIN_PREP */ 5742 #define DRIVER_AUTHOR \ 5743 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5744 "Dwaine Garden <DwaineGarden@rogers.com>" 5745 #define DRIVER_NAME "usbvision" 5746 #define DRIVER_ALIAS "USBVision" 5747 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5748 #define DRIVER_LICENSE "GPL" 5749 #define USBVISION_VERSION_STRING "0.9.11" 5750 #define ENABLE_HEXDUMP 0 5751 #ifdef USBVISION_DEBUG 5752 #define PDEBUG(level, fmt, args...) { \ 5753 if (video_debug & (level)) \ 5754 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5755 __func__, __LINE__ , ## args); \ 5756 } 5757 #else 5758 #define PDEBUG(level, fmt, args...) do {} while (0) 5759 #endif 5760 #define DBG_IO (1 << 1) 5761 #define DBG_PROBE (1 << 2) 5762 #define DBG_MMAP (1 << 3) 5763 #define rmspace(str) while (*str == ' ') str++; 5764 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5765 #define YES_NO(x) ((x) ? "Yes" : "No") 5766 #ifdef CONFIG_VIDEO_ADV_DEBUG 5767 #endif 5768 /* LDV_COMMENT_END_PREP */ 5769 /* LDV_COMMENT_FUNCTION_CALL Function from field "vidioc_s_frequency" from driver structure with callbacks "usbvision_radio_ioctl_ops" */ 5770 ldv_handler_precall(); 5771 vidioc_s_frequency( var_group1, var_vidioc_s_frequency_25_p1, var_vidioc_s_frequency_25_p2); 5772 /* LDV_COMMENT_BEGIN_PREP */ 5773 #ifdef CONFIG_VIDEO_ADV_DEBUG 5774 #endif 5775 /* LDV_COMMENT_END_PREP */ 5776 5777 5778 5779 5780 } 5781 5782 break; 5783 case 46: { 5784 5785 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 5786 if(ldv_s_usbvision_driver_usb_driver==0) { 5787 5788 /* content: static int usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid)*/ 5789 /* LDV_COMMENT_BEGIN_PREP */ 5790 #define DRIVER_AUTHOR \ 5791 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5792 "Dwaine Garden <DwaineGarden@rogers.com>" 5793 #define DRIVER_NAME "usbvision" 5794 #define DRIVER_ALIAS "USBVision" 5795 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5796 #define DRIVER_LICENSE "GPL" 5797 #define USBVISION_VERSION_STRING "0.9.11" 5798 #define ENABLE_HEXDUMP 0 5799 #ifdef USBVISION_DEBUG 5800 #define PDEBUG(level, fmt, args...) { \ 5801 if (video_debug & (level)) \ 5802 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5803 __func__, __LINE__ , ## args); \ 5804 } 5805 #else 5806 #define PDEBUG(level, fmt, args...) do {} while (0) 5807 #endif 5808 #define DBG_IO (1 << 1) 5809 #define DBG_PROBE (1 << 2) 5810 #define DBG_MMAP (1 << 3) 5811 #define rmspace(str) while (*str == ' ') str++; 5812 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5813 #define YES_NO(x) ((x) ? "Yes" : "No") 5814 #ifdef CONFIG_VIDEO_ADV_DEBUG 5815 #endif 5816 #ifdef CONFIG_VIDEO_ADV_DEBUG 5817 #endif 5818 /* LDV_COMMENT_END_PREP */ 5819 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "usbvision_driver". Standart function test for correct return result. */ 5820 res_usbvision_probe_53 = usbvision_probe( var_group3, var_usbvision_probe_53_p1); 5821 ldv_check_return_value(res_usbvision_probe_53); 5822 ldv_check_return_value_probe(res_usbvision_probe_53); 5823 if(res_usbvision_probe_53) 5824 goto ldv_module_exit; 5825 ldv_s_usbvision_driver_usb_driver++; 5826 5827 } 5828 5829 } 5830 5831 break; 5832 case 47: { 5833 5834 /** STRUCT: struct type: usb_driver, struct name: usbvision_driver **/ 5835 if(ldv_s_usbvision_driver_usb_driver==1) { 5836 5837 /* content: static void usbvision_disconnect(struct usb_interface *intf)*/ 5838 /* LDV_COMMENT_BEGIN_PREP */ 5839 #define DRIVER_AUTHOR \ 5840 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5841 "Dwaine Garden <DwaineGarden@rogers.com>" 5842 #define DRIVER_NAME "usbvision" 5843 #define DRIVER_ALIAS "USBVision" 5844 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5845 #define DRIVER_LICENSE "GPL" 5846 #define USBVISION_VERSION_STRING "0.9.11" 5847 #define ENABLE_HEXDUMP 0 5848 #ifdef USBVISION_DEBUG 5849 #define PDEBUG(level, fmt, args...) { \ 5850 if (video_debug & (level)) \ 5851 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5852 __func__, __LINE__ , ## args); \ 5853 } 5854 #else 5855 #define PDEBUG(level, fmt, args...) do {} while (0) 5856 #endif 5857 #define DBG_IO (1 << 1) 5858 #define DBG_PROBE (1 << 2) 5859 #define DBG_MMAP (1 << 3) 5860 #define rmspace(str) while (*str == ' ') str++; 5861 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5862 #define YES_NO(x) ((x) ? "Yes" : "No") 5863 #ifdef CONFIG_VIDEO_ADV_DEBUG 5864 #endif 5865 #ifdef CONFIG_VIDEO_ADV_DEBUG 5866 #endif 5867 /* LDV_COMMENT_END_PREP */ 5868 /* LDV_COMMENT_FUNCTION_CALL Function from field "disconnect" from driver structure with callbacks "usbvision_driver" */ 5869 ldv_handler_precall(); 5870 usbvision_disconnect( var_group3); 5871 ldv_s_usbvision_driver_usb_driver=0; 5872 5873 } 5874 5875 } 5876 5877 break; 5878 default: break; 5879 5880 } 5881 5882 } 5883 5884 ldv_module_exit: 5885 5886 /** INIT: init_type: ST_MODULE_EXIT **/ 5887 /* content: static void __exit usbvision_exit(void)*/ 5888 /* LDV_COMMENT_BEGIN_PREP */ 5889 #define DRIVER_AUTHOR \ 5890 "Joerg Heckenbach <joerg@heckenbach-aw.de>, " \ 5891 "Dwaine Garden <DwaineGarden@rogers.com>" 5892 #define DRIVER_NAME "usbvision" 5893 #define DRIVER_ALIAS "USBVision" 5894 #define DRIVER_DESC "USBVision USB Video Device Driver for Linux" 5895 #define DRIVER_LICENSE "GPL" 5896 #define USBVISION_VERSION_STRING "0.9.11" 5897 #define ENABLE_HEXDUMP 0 5898 #ifdef USBVISION_DEBUG 5899 #define PDEBUG(level, fmt, args...) { \ 5900 if (video_debug & (level)) \ 5901 printk(KERN_INFO KBUILD_MODNAME ":[%s:%d] " fmt, \ 5902 __func__, __LINE__ , ## args); \ 5903 } 5904 #else 5905 #define PDEBUG(level, fmt, args...) do {} while (0) 5906 #endif 5907 #define DBG_IO (1 << 1) 5908 #define DBG_PROBE (1 << 2) 5909 #define DBG_MMAP (1 << 3) 5910 #define rmspace(str) while (*str == ' ') str++; 5911 #define goto2next(str) while (*str != ' ') str++; while (*str == ' ') str++; 5912 #define YES_NO(x) ((x) ? "Yes" : "No") 5913 #ifdef CONFIG_VIDEO_ADV_DEBUG 5914 #endif 5915 #ifdef CONFIG_VIDEO_ADV_DEBUG 5916 #endif 5917 /* LDV_COMMENT_END_PREP */ 5918 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */ 5919 ldv_handler_precall(); 5920 usbvision_exit(); 5921 5922 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */ 5923 ldv_final: ldv_check_final_state(); 5924 5925 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */ 5926 return; 5927 5928 } 5929 #endif 5930 5931 /* LDV_COMMENT_END_MAIN */ 5932 5933 #line 14 "/work/ldvuser/ref_launch/work/current--X--drivers--X--defaultlinux-4.0-rc1.tar.xz--X--132_1a/linux-4.0-rc1.tar.xz/csd_deg_dscv/8231/dscv_tempdir/dscv/ri/132_1a/drivers/media/usb/usbvision/usbvision-video.o.c.prepared"
1 2 #include <verifier/rcv.h> // For LDV auxiliary routines. 3 #include <kernel-model/ERR.inc> 4 5 // There are 3 possible states of usb device reference counter 6 enum 7 { 8 LDV_USB_DEV_ZERO_STATE = 0, // Usb device reference hasn't been acquired 9 LDV_USB_DEV_INCREASED = 1 // Usb device reference counter increased 10 }; 11 12 /* LDV_COMMENT_OTHER The model automaton state (one of thee possible ones). */ 13 int ldv_usb_dev_state = LDV_USB_DEV_ZERO_STATE; 14 15 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_usb_get_dev') Change state after increasing the reference counter with usb_get_dev. */ 16 void ldv_usb_get_dev(void) 17 { 18 /* LDV_COMMENT_CHANGE_STATE Increase reference counter. */ 19 ldv_usb_dev_state++; 20 } 21 22 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_usb_put_dev') Change state after decreasing the reference counter with usb_put_dev. */ 23 void ldv_usb_put_dev(void) 24 { 25 /* LDV_COMMENT_ASSERT Check usb device reference counter has been increased. */ 26 ldv_assert(ldv_usb_dev_state >= LDV_USB_DEV_INCREASED); 27 /* LDV_COMMENT_CHANGE_STATE Decrease reference counter. */ 28 ldv_usb_dev_state--; 29 } 30 31 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_check_return_value_probe') Check the probe function leaved the model in the proper state. */ 32 void ldv_check_return_value_probe(int retval) 33 { 34 /* LDV_COMMENT_OTHER Probe finished unsuccessfully and returned an error. */ 35 if (retval) { 36 /* LDV_COMMENT_ASSERT Check usb device reference counter is not increased. */ 37 ldv_assert(ldv_usb_dev_state < LDV_USB_DEV_INCREASED); 38 } 39 } 40 41 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_check_final_state') Check that usb device reference hasn't been acquired or the counter has been decreased. */ 42 void ldv_check_final_state(void) 43 { 44 /* LDV_COMMENT_ASSERT Check that usb device reference hasn't been acquired or the counter has been decreased. */ 45 ldv_assert(ldv_usb_dev_state < LDV_USB_DEV_INCREASED); 46 }
1 #ifndef __LINUX_USB_H 2 #define __LINUX_USB_H 3 4 #include <linux/mod_devicetable.h> 5 #include <linux/usb/ch9.h> 6 7 #define USB_MAJOR 180 8 #define USB_DEVICE_MAJOR 189 9 10 11 #ifdef __KERNEL__ 12 13 #include <linux/errno.h> /* for -ENODEV */ 14 #include <linux/delay.h> /* for mdelay() */ 15 #include <linux/interrupt.h> /* for in_interrupt() */ 16 #include <linux/list.h> /* for struct list_head */ 17 #include <linux/kref.h> /* for struct kref */ 18 #include <linux/device.h> /* for struct device */ 19 #include <linux/fs.h> /* for struct file_operations */ 20 #include <linux/completion.h> /* for struct completion */ 21 #include <linux/sched.h> /* for current && schedule_timeout */ 22 #include <linux/mutex.h> /* for struct mutex */ 23 #include <linux/pm_runtime.h> /* for runtime PM */ 24 25 struct usb_device; 26 struct usb_driver; 27 struct wusb_dev; 28 29 /*-------------------------------------------------------------------------*/ 30 31 /* 32 * Host-side wrappers for standard USB descriptors ... these are parsed 33 * from the data provided by devices. Parsing turns them from a flat 34 * sequence of descriptors into a hierarchy: 35 * 36 * - devices have one (usually) or more configs; 37 * - configs have one (often) or more interfaces; 38 * - interfaces have one (usually) or more settings; 39 * - each interface setting has zero or (usually) more endpoints. 40 * - a SuperSpeed endpoint has a companion descriptor 41 * 42 * And there might be other descriptors mixed in with those. 43 * 44 * Devices may also have class-specific or vendor-specific descriptors. 45 */ 46 47 struct ep_device; 48 49 /** 50 * struct usb_host_endpoint - host-side endpoint descriptor and queue 51 * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder 52 * @ss_ep_comp: SuperSpeed companion descriptor for this endpoint 53 * @urb_list: urbs queued to this endpoint; maintained by usbcore 54 * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) 55 * with one or more transfer descriptors (TDs) per urb 56 * @ep_dev: ep_device for sysfs info 57 * @extra: descriptors following this endpoint in the configuration 58 * @extralen: how many bytes of "extra" are valid 59 * @enabled: URBs may be submitted to this endpoint 60 * @streams: number of USB-3 streams allocated on the endpoint 61 * 62 * USB requests are always queued to a given endpoint, identified by a 63 * descriptor within an active interface in a given USB configuration. 64 */ 65 struct usb_host_endpoint { 66 struct usb_endpoint_descriptor desc; 67 struct usb_ss_ep_comp_descriptor ss_ep_comp; 68 struct list_head urb_list; 69 void *hcpriv; 70 struct ep_device *ep_dev; /* For sysfs info */ 71 72 unsigned char *extra; /* Extra descriptors */ 73 int extralen; 74 int enabled; 75 int streams; 76 }; 77 78 /* host-side wrapper for one interface setting's parsed descriptors */ 79 struct usb_host_interface { 80 struct usb_interface_descriptor desc; 81 82 int extralen; 83 unsigned char *extra; /* Extra descriptors */ 84 85 /* array of desc.bNumEndpoints endpoints associated with this 86 * interface setting. these will be in no particular order. 87 */ 88 struct usb_host_endpoint *endpoint; 89 90 char *string; /* iInterface string, if present */ 91 }; 92 93 enum usb_interface_condition { 94 USB_INTERFACE_UNBOUND = 0, 95 USB_INTERFACE_BINDING, 96 USB_INTERFACE_BOUND, 97 USB_INTERFACE_UNBINDING, 98 }; 99 100 /** 101 * struct usb_interface - what usb device drivers talk to 102 * @altsetting: array of interface structures, one for each alternate 103 * setting that may be selected. Each one includes a set of 104 * endpoint configurations. They will be in no particular order. 105 * @cur_altsetting: the current altsetting. 106 * @num_altsetting: number of altsettings defined. 107 * @intf_assoc: interface association descriptor 108 * @minor: the minor number assigned to this interface, if this 109 * interface is bound to a driver that uses the USB major number. 110 * If this interface does not use the USB major, this field should 111 * be unused. The driver should set this value in the probe() 112 * function of the driver, after it has been assigned a minor 113 * number from the USB core by calling usb_register_dev(). 114 * @condition: binding state of the interface: not bound, binding 115 * (in probe()), bound to a driver, or unbinding (in disconnect()) 116 * @sysfs_files_created: sysfs attributes exist 117 * @ep_devs_created: endpoint child pseudo-devices exist 118 * @unregistering: flag set when the interface is being unregistered 119 * @needs_remote_wakeup: flag set when the driver requires remote-wakeup 120 * capability during autosuspend. 121 * @needs_altsetting0: flag set when a set-interface request for altsetting 0 122 * has been deferred. 123 * @needs_binding: flag set when the driver should be re-probed or unbound 124 * following a reset or suspend operation it doesn't support. 125 * @dev: driver model's view of this device 126 * @usb_dev: if an interface is bound to the USB major, this will point 127 * to the sysfs representation for that device. 128 * @pm_usage_cnt: PM usage counter for this interface 129 * @reset_ws: Used for scheduling resets from atomic context. 130 * @resetting_device: USB core reset the device, so use alt setting 0 as 131 * current; needs bandwidth alloc after reset. 132 * 133 * USB device drivers attach to interfaces on a physical device. Each 134 * interface encapsulates a single high level function, such as feeding 135 * an audio stream to a speaker or reporting a change in a volume control. 136 * Many USB devices only have one interface. The protocol used to talk to 137 * an interface's endpoints can be defined in a usb "class" specification, 138 * or by a product's vendor. The (default) control endpoint is part of 139 * every interface, but is never listed among the interface's descriptors. 140 * 141 * The driver that is bound to the interface can use standard driver model 142 * calls such as dev_get_drvdata() on the dev member of this structure. 143 * 144 * Each interface may have alternate settings. The initial configuration 145 * of a device sets altsetting 0, but the device driver can change 146 * that setting using usb_set_interface(). Alternate settings are often 147 * used to control the use of periodic endpoints, such as by having 148 * different endpoints use different amounts of reserved USB bandwidth. 149 * All standards-conformant USB devices that use isochronous endpoints 150 * will use them in non-default settings. 151 * 152 * The USB specification says that alternate setting numbers must run from 153 * 0 to one less than the total number of alternate settings. But some 154 * devices manage to mess this up, and the structures aren't necessarily 155 * stored in numerical order anyhow. Use usb_altnum_to_altsetting() to 156 * look up an alternate setting in the altsetting array based on its number. 157 */ 158 struct usb_interface { 159 /* array of alternate settings for this interface, 160 * stored in no particular order */ 161 struct usb_host_interface *altsetting; 162 163 struct usb_host_interface *cur_altsetting; /* the currently 164 * active alternate setting */ 165 unsigned num_altsetting; /* number of alternate settings */ 166 167 /* If there is an interface association descriptor then it will list 168 * the associated interfaces */ 169 struct usb_interface_assoc_descriptor *intf_assoc; 170 171 int minor; /* minor number this interface is 172 * bound to */ 173 enum usb_interface_condition condition; /* state of binding */ 174 unsigned sysfs_files_created:1; /* the sysfs attributes exist */ 175 unsigned ep_devs_created:1; /* endpoint "devices" exist */ 176 unsigned unregistering:1; /* unregistration is in progress */ 177 unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ 178 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ 179 unsigned needs_binding:1; /* needs delayed unbind/rebind */ 180 unsigned resetting_device:1; /* true: bandwidth alloc after reset */ 181 182 struct device dev; /* interface specific device info */ 183 struct device *usb_dev; 184 atomic_t pm_usage_cnt; /* usage counter for autosuspend */ 185 struct work_struct reset_ws; /* for resets in atomic context */ 186 }; 187 #define to_usb_interface(d) container_of(d, struct usb_interface, dev) 188 189 static inline void *usb_get_intfdata(struct usb_interface *intf) 190 { 191 return dev_get_drvdata(&intf->dev); 192 } 193 194 static inline void usb_set_intfdata(struct usb_interface *intf, void *data) 195 { 196 dev_set_drvdata(&intf->dev, data); 197 } 198 199 struct usb_interface *usb_get_intf(struct usb_interface *intf); 200 void usb_put_intf(struct usb_interface *intf); 201 202 /* Hard limit */ 203 #define USB_MAXENDPOINTS 30 204 /* this maximum is arbitrary */ 205 #define USB_MAXINTERFACES 32 206 #define USB_MAXIADS (USB_MAXINTERFACES/2) 207 208 /** 209 * struct usb_interface_cache - long-term representation of a device interface 210 * @num_altsetting: number of altsettings defined. 211 * @ref: reference counter. 212 * @altsetting: variable-length array of interface structures, one for 213 * each alternate setting that may be selected. Each one includes a 214 * set of endpoint configurations. They will be in no particular order. 215 * 216 * These structures persist for the lifetime of a usb_device, unlike 217 * struct usb_interface (which persists only as long as its configuration 218 * is installed). The altsetting arrays can be accessed through these 219 * structures at any time, permitting comparison of configurations and 220 * providing support for the /proc/bus/usb/devices pseudo-file. 221 */ 222 struct usb_interface_cache { 223 unsigned num_altsetting; /* number of alternate settings */ 224 struct kref ref; /* reference counter */ 225 226 /* variable-length array of alternate settings for this interface, 227 * stored in no particular order */ 228 struct usb_host_interface altsetting[0]; 229 }; 230 #define ref_to_usb_interface_cache(r) \ 231 container_of(r, struct usb_interface_cache, ref) 232 #define altsetting_to_usb_interface_cache(a) \ 233 container_of(a, struct usb_interface_cache, altsetting[0]) 234 235 /** 236 * struct usb_host_config - representation of a device's configuration 237 * @desc: the device's configuration descriptor. 238 * @string: pointer to the cached version of the iConfiguration string, if 239 * present for this configuration. 240 * @intf_assoc: list of any interface association descriptors in this config 241 * @interface: array of pointers to usb_interface structures, one for each 242 * interface in the configuration. The number of interfaces is stored 243 * in desc.bNumInterfaces. These pointers are valid only while the 244 * the configuration is active. 245 * @intf_cache: array of pointers to usb_interface_cache structures, one 246 * for each interface in the configuration. These structures exist 247 * for the entire life of the device. 248 * @extra: pointer to buffer containing all extra descriptors associated 249 * with this configuration (those preceding the first interface 250 * descriptor). 251 * @extralen: length of the extra descriptors buffer. 252 * 253 * USB devices may have multiple configurations, but only one can be active 254 * at any time. Each encapsulates a different operational environment; 255 * for example, a dual-speed device would have separate configurations for 256 * full-speed and high-speed operation. The number of configurations 257 * available is stored in the device descriptor as bNumConfigurations. 258 * 259 * A configuration can contain multiple interfaces. Each corresponds to 260 * a different function of the USB device, and all are available whenever 261 * the configuration is active. The USB standard says that interfaces 262 * are supposed to be numbered from 0 to desc.bNumInterfaces-1, but a lot 263 * of devices get this wrong. In addition, the interface array is not 264 * guaranteed to be sorted in numerical order. Use usb_ifnum_to_if() to 265 * look up an interface entry based on its number. 266 * 267 * Device drivers should not attempt to activate configurations. The choice 268 * of which configuration to install is a policy decision based on such 269 * considerations as available power, functionality provided, and the user's 270 * desires (expressed through userspace tools). However, drivers can call 271 * usb_reset_configuration() to reinitialize the current configuration and 272 * all its interfaces. 273 */ 274 struct usb_host_config { 275 struct usb_config_descriptor desc; 276 277 char *string; /* iConfiguration string, if present */ 278 279 /* List of any Interface Association Descriptors in this 280 * configuration. */ 281 struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; 282 283 /* the interfaces associated with this configuration, 284 * stored in no particular order */ 285 struct usb_interface *interface[USB_MAXINTERFACES]; 286 287 /* Interface information available even when this is not the 288 * active configuration */ 289 struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; 290 291 unsigned char *extra; /* Extra descriptors */ 292 int extralen; 293 }; 294 295 /* USB2.0 and USB3.0 device BOS descriptor set */ 296 struct usb_host_bos { 297 struct usb_bos_descriptor *desc; 298 299 /* wireless cap descriptor is handled by wusb */ 300 struct usb_ext_cap_descriptor *ext_cap; 301 struct usb_ss_cap_descriptor *ss_cap; 302 struct usb_ss_container_id_descriptor *ss_id; 303 }; 304 305 int __usb_get_extra_descriptor(char *buffer, unsigned size, 306 unsigned char type, void **ptr); 307 #define usb_get_extra_descriptor(ifpoint, type, ptr) \ 308 __usb_get_extra_descriptor((ifpoint)->extra, \ 309 (ifpoint)->extralen, \ 310 type, (void **)ptr) 311 312 /* ----------------------------------------------------------------------- */ 313 314 /* USB device number allocation bitmap */ 315 struct usb_devmap { 316 unsigned long devicemap[128 / (8*sizeof(unsigned long))]; 317 }; 318 319 /* 320 * Allocated per bus (tree of devices) we have: 321 */ 322 struct usb_bus { 323 struct device *controller; /* host/master side hardware */ 324 int busnum; /* Bus number (in order of reg) */ 325 const char *bus_name; /* stable id (PCI slot_name etc) */ 326 u8 uses_dma; /* Does the host controller use DMA? */ 327 u8 uses_pio_for_control; /* 328 * Does the host controller use PIO 329 * for control transfers? 330 */ 331 u8 otg_port; /* 0, or number of OTG/HNP port */ 332 unsigned is_b_host:1; /* true during some HNP roleswitches */ 333 unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ 334 unsigned no_stop_on_short:1; /* 335 * Quirk: some controllers don't stop 336 * the ep queue on a short transfer 337 * with the URB_SHORT_NOT_OK flag set. 338 */ 339 unsigned no_sg_constraint:1; /* no sg constraint */ 340 unsigned sg_tablesize; /* 0 or largest number of sg list entries */ 341 342 int devnum_next; /* Next open device number in 343 * round-robin allocation */ 344 345 struct usb_devmap devmap; /* device address allocation map */ 346 struct usb_device *root_hub; /* Root hub */ 347 struct usb_bus *hs_companion; /* Companion EHCI bus, if any */ 348 struct list_head bus_list; /* list of busses */ 349 350 struct mutex usb_address0_mutex; /* unaddressed device mutex */ 351 352 int bandwidth_allocated; /* on this bus: how much of the time 353 * reserved for periodic (intr/iso) 354 * requests is used, on average? 355 * Units: microseconds/frame. 356 * Limits: Full/low speed reserve 90%, 357 * while high speed reserves 80%. 358 */ 359 int bandwidth_int_reqs; /* number of Interrupt requests */ 360 int bandwidth_isoc_reqs; /* number of Isoc. requests */ 361 362 unsigned resuming_ports; /* bit array: resuming root-hub ports */ 363 364 #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) 365 struct mon_bus *mon_bus; /* non-null when associated */ 366 int monitored; /* non-zero when monitored */ 367 #endif 368 }; 369 370 struct usb_dev_state; 371 372 /* ----------------------------------------------------------------------- */ 373 374 struct usb_tt; 375 376 enum usb_device_removable { 377 USB_DEVICE_REMOVABLE_UNKNOWN = 0, 378 USB_DEVICE_REMOVABLE, 379 USB_DEVICE_FIXED, 380 }; 381 382 enum usb_port_connect_type { 383 USB_PORT_CONNECT_TYPE_UNKNOWN = 0, 384 USB_PORT_CONNECT_TYPE_HOT_PLUG, 385 USB_PORT_CONNECT_TYPE_HARD_WIRED, 386 USB_PORT_NOT_USED, 387 }; 388 389 /* 390 * USB 2.0 Link Power Management (LPM) parameters. 391 */ 392 struct usb2_lpm_parameters { 393 /* Best effort service latency indicate how long the host will drive 394 * resume on an exit from L1. 395 */ 396 unsigned int besl; 397 398 /* Timeout value in microseconds for the L1 inactivity (LPM) timer. 399 * When the timer counts to zero, the parent hub will initiate a LPM 400 * transition to L1. 401 */ 402 int timeout; 403 }; 404 405 /* 406 * USB 3.0 Link Power Management (LPM) parameters. 407 * 408 * PEL and SEL are USB 3.0 Link PM latencies for device-initiated LPM exit. 409 * MEL is the USB 3.0 Link PM latency for host-initiated LPM exit. 410 * All three are stored in nanoseconds. 411 */ 412 struct usb3_lpm_parameters { 413 /* 414 * Maximum exit latency (MEL) for the host to send a packet to the 415 * device (either a Ping for isoc endpoints, or a data packet for 416 * interrupt endpoints), the hubs to decode the packet, and for all hubs 417 * in the path to transition the links to U0. 418 */ 419 unsigned int mel; 420 /* 421 * Maximum exit latency for a device-initiated LPM transition to bring 422 * all links into U0. Abbreviated as "PEL" in section 9.4.12 of the USB 423 * 3.0 spec, with no explanation of what "P" stands for. "Path"? 424 */ 425 unsigned int pel; 426 427 /* 428 * The System Exit Latency (SEL) includes PEL, and three other 429 * latencies. After a device initiates a U0 transition, it will take 430 * some time from when the device sends the ERDY to when it will finally 431 * receive the data packet. Basically, SEL should be the worse-case 432 * latency from when a device starts initiating a U0 transition to when 433 * it will get data. 434 */ 435 unsigned int sel; 436 /* 437 * The idle timeout value that is currently programmed into the parent 438 * hub for this device. When the timer counts to zero, the parent hub 439 * will initiate an LPM transition to either U1 or U2. 440 */ 441 int timeout; 442 }; 443 444 /** 445 * struct usb_device - kernel's representation of a USB device 446 * @devnum: device number; address on a USB bus 447 * @devpath: device ID string for use in messages (e.g., /port/...) 448 * @route: tree topology hex string for use with xHCI 449 * @state: device state: configured, not attached, etc. 450 * @speed: device speed: high/full/low (or error) 451 * @tt: Transaction Translator info; used with low/full speed dev, highspeed hub 452 * @ttport: device port on that tt hub 453 * @toggle: one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints 454 * @parent: our hub, unless we're the root 455 * @bus: bus we're part of 456 * @ep0: endpoint 0 data (default control pipe) 457 * @dev: generic device interface 458 * @descriptor: USB device descriptor 459 * @bos: USB device BOS descriptor set 460 * @config: all of the device's configs 461 * @actconfig: the active configuration 462 * @ep_in: array of IN endpoints 463 * @ep_out: array of OUT endpoints 464 * @rawdescriptors: raw descriptors for each config 465 * @bus_mA: Current available from the bus 466 * @portnum: parent port number (origin 1) 467 * @level: number of USB hub ancestors 468 * @can_submit: URBs may be submitted 469 * @persist_enabled: USB_PERSIST enabled for this device 470 * @have_langid: whether string_langid is valid 471 * @authorized: policy has said we can use it; 472 * (user space) policy determines if we authorize this device to be 473 * used or not. By default, wired USB devices are authorized. 474 * WUSB devices are not, until we authorize them from user space. 475 * FIXME -- complete doc 476 * @authenticated: Crypto authentication passed 477 * @wusb: device is Wireless USB 478 * @lpm_capable: device supports LPM 479 * @usb2_hw_lpm_capable: device can perform USB2 hardware LPM 480 * @usb2_hw_lpm_besl_capable: device can perform USB2 hardware BESL LPM 481 * @usb2_hw_lpm_enabled: USB2 hardware LPM is enabled 482 * @usb2_hw_lpm_allowed: Userspace allows USB 2.0 LPM to be enabled 483 * @usb3_lpm_enabled: USB3 hardware LPM enabled 484 * @string_langid: language ID for strings 485 * @product: iProduct string, if present (static) 486 * @manufacturer: iManufacturer string, if present (static) 487 * @serial: iSerialNumber string, if present (static) 488 * @filelist: usbfs files that are open to this device 489 * @maxchild: number of ports if hub 490 * @quirks: quirks of the whole device 491 * @urbnum: number of URBs submitted for the whole device 492 * @active_duration: total time device is not suspended 493 * @connect_time: time device was first connected 494 * @do_remote_wakeup: remote wakeup should be enabled 495 * @reset_resume: needs reset instead of resume 496 * @port_is_suspended: the upstream port is suspended (L2 or U3) 497 * @wusb_dev: if this is a Wireless USB device, link to the WUSB 498 * specific data for the device. 499 * @slot_id: Slot ID assigned by xHCI 500 * @removable: Device can be physically removed from this port 501 * @l1_params: best effor service latency for USB2 L1 LPM state, and L1 timeout. 502 * @u1_params: exit latencies for USB3 U1 LPM state, and hub-initiated timeout. 503 * @u2_params: exit latencies for USB3 U2 LPM state, and hub-initiated timeout. 504 * @lpm_disable_count: Ref count used by usb_disable_lpm() and usb_enable_lpm() 505 * to keep track of the number of functions that require USB 3.0 Link Power 506 * Management to be disabled for this usb_device. This count should only 507 * be manipulated by those functions, with the bandwidth_mutex is held. 508 * 509 * Notes: 510 * Usbcore drivers should not set usbdev->state directly. Instead use 511 * usb_set_device_state(). 512 */ 513 struct usb_device { 514 int devnum; 515 char devpath[16]; 516 u32 route; 517 enum usb_device_state state; 518 enum usb_device_speed speed; 519 520 struct usb_tt *tt; 521 int ttport; 522 523 unsigned int toggle[2]; 524 525 struct usb_device *parent; 526 struct usb_bus *bus; 527 struct usb_host_endpoint ep0; 528 529 struct device dev; 530 531 struct usb_device_descriptor descriptor; 532 struct usb_host_bos *bos; 533 struct usb_host_config *config; 534 535 struct usb_host_config *actconfig; 536 struct usb_host_endpoint *ep_in[16]; 537 struct usb_host_endpoint *ep_out[16]; 538 539 char **rawdescriptors; 540 541 unsigned short bus_mA; 542 u8 portnum; 543 u8 level; 544 545 unsigned can_submit:1; 546 unsigned persist_enabled:1; 547 unsigned have_langid:1; 548 unsigned authorized:1; 549 unsigned authenticated:1; 550 unsigned wusb:1; 551 unsigned lpm_capable:1; 552 unsigned usb2_hw_lpm_capable:1; 553 unsigned usb2_hw_lpm_besl_capable:1; 554 unsigned usb2_hw_lpm_enabled:1; 555 unsigned usb2_hw_lpm_allowed:1; 556 unsigned usb3_lpm_enabled:1; 557 int string_langid; 558 559 /* static strings from the device */ 560 char *product; 561 char *manufacturer; 562 char *serial; 563 564 struct list_head filelist; 565 566 int maxchild; 567 568 u32 quirks; 569 atomic_t urbnum; 570 571 unsigned long active_duration; 572 573 #ifdef CONFIG_PM 574 unsigned long connect_time; 575 576 unsigned do_remote_wakeup:1; 577 unsigned reset_resume:1; 578 unsigned port_is_suspended:1; 579 #endif 580 struct wusb_dev *wusb_dev; 581 int slot_id; 582 enum usb_device_removable removable; 583 struct usb2_lpm_parameters l1_params; 584 struct usb3_lpm_parameters u1_params; 585 struct usb3_lpm_parameters u2_params; 586 unsigned lpm_disable_count; 587 }; 588 #define to_usb_device(d) container_of(d, struct usb_device, dev) 589 590 static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf) 591 { 592 return to_usb_device(intf->dev.parent); 593 } 594 595 extern struct usb_device *usb_get_dev(struct usb_device *dev); 596 extern void usb_put_dev(struct usb_device *dev); 597 extern struct usb_device *usb_hub_find_child(struct usb_device *hdev, 598 int port1); 599 600 /** 601 * usb_hub_for_each_child - iterate over all child devices on the hub 602 * @hdev: USB device belonging to the usb hub 603 * @port1: portnum associated with child device 604 * @child: child device pointer 605 */ 606 #define usb_hub_for_each_child(hdev, port1, child) \ 607 for (port1 = 1, child = usb_hub_find_child(hdev, port1); \ 608 port1 <= hdev->maxchild; \ 609 child = usb_hub_find_child(hdev, ++port1)) \ 610 if (!child) continue; else 611 612 /* USB device locking */ 613 #define usb_lock_device(udev) device_lock(&(udev)->dev) 614 #define usb_unlock_device(udev) device_unlock(&(udev)->dev) 615 #define usb_trylock_device(udev) device_trylock(&(udev)->dev) 616 extern int usb_lock_device_for_reset(struct usb_device *udev, 617 const struct usb_interface *iface); 618 619 /* USB port reset for device reinitialization */ 620 extern int usb_reset_device(struct usb_device *dev); 621 extern void usb_queue_reset_device(struct usb_interface *dev); 622 623 #ifdef CONFIG_ACPI 624 extern int usb_acpi_set_power_state(struct usb_device *hdev, int index, 625 bool enable); 626 extern bool usb_acpi_power_manageable(struct usb_device *hdev, int index); 627 #else 628 static inline int usb_acpi_set_power_state(struct usb_device *hdev, int index, 629 bool enable) { return 0; } 630 static inline bool usb_acpi_power_manageable(struct usb_device *hdev, int index) 631 { return true; } 632 #endif 633 634 /* USB autosuspend and autoresume */ 635 #ifdef CONFIG_PM 636 extern void usb_enable_autosuspend(struct usb_device *udev); 637 extern void usb_disable_autosuspend(struct usb_device *udev); 638 639 extern int usb_autopm_get_interface(struct usb_interface *intf); 640 extern void usb_autopm_put_interface(struct usb_interface *intf); 641 extern int usb_autopm_get_interface_async(struct usb_interface *intf); 642 extern void usb_autopm_put_interface_async(struct usb_interface *intf); 643 extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf); 644 extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); 645 646 static inline void usb_mark_last_busy(struct usb_device *udev) 647 { 648 pm_runtime_mark_last_busy(&udev->dev); 649 } 650 651 #else 652 653 static inline int usb_enable_autosuspend(struct usb_device *udev) 654 { return 0; } 655 static inline int usb_disable_autosuspend(struct usb_device *udev) 656 { return 0; } 657 658 static inline int usb_autopm_get_interface(struct usb_interface *intf) 659 { return 0; } 660 static inline int usb_autopm_get_interface_async(struct usb_interface *intf) 661 { return 0; } 662 663 static inline void usb_autopm_put_interface(struct usb_interface *intf) 664 { } 665 static inline void usb_autopm_put_interface_async(struct usb_interface *intf) 666 { } 667 static inline void usb_autopm_get_interface_no_resume( 668 struct usb_interface *intf) 669 { } 670 static inline void usb_autopm_put_interface_no_suspend( 671 struct usb_interface *intf) 672 { } 673 static inline void usb_mark_last_busy(struct usb_device *udev) 674 { } 675 #endif 676 677 extern int usb_disable_lpm(struct usb_device *udev); 678 extern void usb_enable_lpm(struct usb_device *udev); 679 /* Same as above, but these functions lock/unlock the bandwidth_mutex. */ 680 extern int usb_unlocked_disable_lpm(struct usb_device *udev); 681 extern void usb_unlocked_enable_lpm(struct usb_device *udev); 682 683 extern int usb_disable_ltm(struct usb_device *udev); 684 extern void usb_enable_ltm(struct usb_device *udev); 685 686 static inline bool usb_device_supports_ltm(struct usb_device *udev) 687 { 688 if (udev->speed != USB_SPEED_SUPER || !udev->bos || !udev->bos->ss_cap) 689 return false; 690 return udev->bos->ss_cap->bmAttributes & USB_LTM_SUPPORT; 691 } 692 693 static inline bool usb_device_no_sg_constraint(struct usb_device *udev) 694 { 695 return udev && udev->bus && udev->bus->no_sg_constraint; 696 } 697 698 699 /*-------------------------------------------------------------------------*/ 700 701 /* for drivers using iso endpoints */ 702 extern int usb_get_current_frame_number(struct usb_device *usb_dev); 703 704 /* Sets up a group of bulk endpoints to support multiple stream IDs. */ 705 extern int usb_alloc_streams(struct usb_interface *interface, 706 struct usb_host_endpoint **eps, unsigned int num_eps, 707 unsigned int num_streams, gfp_t mem_flags); 708 709 /* Reverts a group of bulk endpoints back to not using stream IDs. */ 710 extern int usb_free_streams(struct usb_interface *interface, 711 struct usb_host_endpoint **eps, unsigned int num_eps, 712 gfp_t mem_flags); 713 714 /* used these for multi-interface device registration */ 715 extern int usb_driver_claim_interface(struct usb_driver *driver, 716 struct usb_interface *iface, void *priv); 717 718 /** 719 * usb_interface_claimed - returns true iff an interface is claimed 720 * @iface: the interface being checked 721 * 722 * Return: %true (nonzero) iff the interface is claimed, else %false 723 * (zero). 724 * 725 * Note: 726 * Callers must own the driver model's usb bus readlock. So driver 727 * probe() entries don't need extra locking, but other call contexts 728 * may need to explicitly claim that lock. 729 * 730 */ 731 static inline int usb_interface_claimed(struct usb_interface *iface) 732 { 733 return (iface->dev.driver != NULL); 734 } 735 736 extern void usb_driver_release_interface(struct usb_driver *driver, 737 struct usb_interface *iface); 738 const struct usb_device_id *usb_match_id(struct usb_interface *interface, 739 const struct usb_device_id *id); 740 extern int usb_match_one_id(struct usb_interface *interface, 741 const struct usb_device_id *id); 742 743 extern int usb_for_each_dev(void *data, int (*fn)(struct usb_device *, void *)); 744 extern struct usb_interface *usb_find_interface(struct usb_driver *drv, 745 int minor); 746 extern struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, 747 unsigned ifnum); 748 extern struct usb_host_interface *usb_altnum_to_altsetting( 749 const struct usb_interface *intf, unsigned int altnum); 750 extern struct usb_host_interface *usb_find_alt_setting( 751 struct usb_host_config *config, 752 unsigned int iface_num, 753 unsigned int alt_num); 754 755 /* port claiming functions */ 756 int usb_hub_claim_port(struct usb_device *hdev, unsigned port1, 757 struct usb_dev_state *owner); 758 int usb_hub_release_port(struct usb_device *hdev, unsigned port1, 759 struct usb_dev_state *owner); 760 761 /** 762 * usb_make_path - returns stable device path in the usb tree 763 * @dev: the device whose path is being constructed 764 * @buf: where to put the string 765 * @size: how big is "buf"? 766 * 767 * Return: Length of the string (> 0) or negative if size was too small. 768 * 769 * Note: 770 * This identifier is intended to be "stable", reflecting physical paths in 771 * hardware such as physical bus addresses for host controllers or ports on 772 * USB hubs. That makes it stay the same until systems are physically 773 * reconfigured, by re-cabling a tree of USB devices or by moving USB host 774 * controllers. Adding and removing devices, including virtual root hubs 775 * in host controller driver modules, does not change these path identifiers; 776 * neither does rebooting or re-enumerating. These are more useful identifiers 777 * than changeable ("unstable") ones like bus numbers or device addresses. 778 * 779 * With a partial exception for devices connected to USB 2.0 root hubs, these 780 * identifiers are also predictable. So long as the device tree isn't changed, 781 * plugging any USB device into a given hub port always gives it the same path. 782 * Because of the use of "companion" controllers, devices connected to ports on 783 * USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are 784 * high speed, and a different one if they are full or low speed. 785 */ 786 static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size) 787 { 788 int actual; 789 actual = snprintf(buf, size, "usb-%s-%s", dev->bus->bus_name, 790 dev->devpath); 791 return (actual >= (int)size) ? -1 : actual; 792 } 793 794 /*-------------------------------------------------------------------------*/ 795 796 #define USB_DEVICE_ID_MATCH_DEVICE \ 797 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) 798 #define USB_DEVICE_ID_MATCH_DEV_RANGE \ 799 (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI) 800 #define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \ 801 (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE) 802 #define USB_DEVICE_ID_MATCH_DEV_INFO \ 803 (USB_DEVICE_ID_MATCH_DEV_CLASS | \ 804 USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \ 805 USB_DEVICE_ID_MATCH_DEV_PROTOCOL) 806 #define USB_DEVICE_ID_MATCH_INT_INFO \ 807 (USB_DEVICE_ID_MATCH_INT_CLASS | \ 808 USB_DEVICE_ID_MATCH_INT_SUBCLASS | \ 809 USB_DEVICE_ID_MATCH_INT_PROTOCOL) 810 811 /** 812 * USB_DEVICE - macro used to describe a specific usb device 813 * @vend: the 16 bit USB Vendor ID 814 * @prod: the 16 bit USB Product ID 815 * 816 * This macro is used to create a struct usb_device_id that matches a 817 * specific device. 818 */ 819 #define USB_DEVICE(vend, prod) \ 820 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ 821 .idVendor = (vend), \ 822 .idProduct = (prod) 823 /** 824 * USB_DEVICE_VER - describe a specific usb device with a version range 825 * @vend: the 16 bit USB Vendor ID 826 * @prod: the 16 bit USB Product ID 827 * @lo: the bcdDevice_lo value 828 * @hi: the bcdDevice_hi value 829 * 830 * This macro is used to create a struct usb_device_id that matches a 831 * specific device, with a version range. 832 */ 833 #define USB_DEVICE_VER(vend, prod, lo, hi) \ 834 .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \ 835 .idVendor = (vend), \ 836 .idProduct = (prod), \ 837 .bcdDevice_lo = (lo), \ 838 .bcdDevice_hi = (hi) 839 840 /** 841 * USB_DEVICE_INTERFACE_CLASS - describe a usb device with a specific interface class 842 * @vend: the 16 bit USB Vendor ID 843 * @prod: the 16 bit USB Product ID 844 * @cl: bInterfaceClass value 845 * 846 * This macro is used to create a struct usb_device_id that matches a 847 * specific interface class of devices. 848 */ 849 #define USB_DEVICE_INTERFACE_CLASS(vend, prod, cl) \ 850 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 851 USB_DEVICE_ID_MATCH_INT_CLASS, \ 852 .idVendor = (vend), \ 853 .idProduct = (prod), \ 854 .bInterfaceClass = (cl) 855 856 /** 857 * USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol 858 * @vend: the 16 bit USB Vendor ID 859 * @prod: the 16 bit USB Product ID 860 * @pr: bInterfaceProtocol value 861 * 862 * This macro is used to create a struct usb_device_id that matches a 863 * specific interface protocol of devices. 864 */ 865 #define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \ 866 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 867 USB_DEVICE_ID_MATCH_INT_PROTOCOL, \ 868 .idVendor = (vend), \ 869 .idProduct = (prod), \ 870 .bInterfaceProtocol = (pr) 871 872 /** 873 * USB_DEVICE_INTERFACE_NUMBER - describe a usb device with a specific interface number 874 * @vend: the 16 bit USB Vendor ID 875 * @prod: the 16 bit USB Product ID 876 * @num: bInterfaceNumber value 877 * 878 * This macro is used to create a struct usb_device_id that matches a 879 * specific interface number of devices. 880 */ 881 #define USB_DEVICE_INTERFACE_NUMBER(vend, prod, num) \ 882 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ 883 USB_DEVICE_ID_MATCH_INT_NUMBER, \ 884 .idVendor = (vend), \ 885 .idProduct = (prod), \ 886 .bInterfaceNumber = (num) 887 888 /** 889 * USB_DEVICE_INFO - macro used to describe a class of usb devices 890 * @cl: bDeviceClass value 891 * @sc: bDeviceSubClass value 892 * @pr: bDeviceProtocol value 893 * 894 * This macro is used to create a struct usb_device_id that matches a 895 * specific class of devices. 896 */ 897 #define USB_DEVICE_INFO(cl, sc, pr) \ 898 .match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \ 899 .bDeviceClass = (cl), \ 900 .bDeviceSubClass = (sc), \ 901 .bDeviceProtocol = (pr) 902 903 /** 904 * USB_INTERFACE_INFO - macro used to describe a class of usb interfaces 905 * @cl: bInterfaceClass value 906 * @sc: bInterfaceSubClass value 907 * @pr: bInterfaceProtocol value 908 * 909 * This macro is used to create a struct usb_device_id that matches a 910 * specific class of interfaces. 911 */ 912 #define USB_INTERFACE_INFO(cl, sc, pr) \ 913 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \ 914 .bInterfaceClass = (cl), \ 915 .bInterfaceSubClass = (sc), \ 916 .bInterfaceProtocol = (pr) 917 918 /** 919 * USB_DEVICE_AND_INTERFACE_INFO - describe a specific usb device with a class of usb interfaces 920 * @vend: the 16 bit USB Vendor ID 921 * @prod: the 16 bit USB Product ID 922 * @cl: bInterfaceClass value 923 * @sc: bInterfaceSubClass value 924 * @pr: bInterfaceProtocol value 925 * 926 * This macro is used to create a struct usb_device_id that matches a 927 * specific device with a specific class of interfaces. 928 * 929 * This is especially useful when explicitly matching devices that have 930 * vendor specific bDeviceClass values, but standards-compliant interfaces. 931 */ 932 #define USB_DEVICE_AND_INTERFACE_INFO(vend, prod, cl, sc, pr) \ 933 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \ 934 | USB_DEVICE_ID_MATCH_DEVICE, \ 935 .idVendor = (vend), \ 936 .idProduct = (prod), \ 937 .bInterfaceClass = (cl), \ 938 .bInterfaceSubClass = (sc), \ 939 .bInterfaceProtocol = (pr) 940 941 /** 942 * USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces 943 * @vend: the 16 bit USB Vendor ID 944 * @cl: bInterfaceClass value 945 * @sc: bInterfaceSubClass value 946 * @pr: bInterfaceProtocol value 947 * 948 * This macro is used to create a struct usb_device_id that matches a 949 * specific vendor with a specific class of interfaces. 950 * 951 * This is especially useful when explicitly matching devices that have 952 * vendor specific bDeviceClass values, but standards-compliant interfaces. 953 */ 954 #define USB_VENDOR_AND_INTERFACE_INFO(vend, cl, sc, pr) \ 955 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \ 956 | USB_DEVICE_ID_MATCH_VENDOR, \ 957 .idVendor = (vend), \ 958 .bInterfaceClass = (cl), \ 959 .bInterfaceSubClass = (sc), \ 960 .bInterfaceProtocol = (pr) 961 962 /* ----------------------------------------------------------------------- */ 963 964 /* Stuff for dynamic usb ids */ 965 struct usb_dynids { 966 spinlock_t lock; 967 struct list_head list; 968 }; 969 970 struct usb_dynid { 971 struct list_head node; 972 struct usb_device_id id; 973 }; 974 975 extern ssize_t usb_store_new_id(struct usb_dynids *dynids, 976 const struct usb_device_id *id_table, 977 struct device_driver *driver, 978 const char *buf, size_t count); 979 980 extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf); 981 982 /** 983 * struct usbdrv_wrap - wrapper for driver-model structure 984 * @driver: The driver-model core driver structure. 985 * @for_devices: Non-zero for device drivers, 0 for interface drivers. 986 */ 987 struct usbdrv_wrap { 988 struct device_driver driver; 989 int for_devices; 990 }; 991 992 /** 993 * struct usb_driver - identifies USB interface driver to usbcore 994 * @name: The driver name should be unique among USB drivers, 995 * and should normally be the same as the module name. 996 * @probe: Called to see if the driver is willing to manage a particular 997 * interface on a device. If it is, probe returns zero and uses 998 * usb_set_intfdata() to associate driver-specific data with the 999 * interface. It may also use usb_set_interface() to specify the 1000 * appropriate altsetting. If unwilling to manage the interface, 1001 * return -ENODEV, if genuine IO errors occurred, an appropriate 1002 * negative errno value. 1003 * @disconnect: Called when the interface is no longer accessible, usually 1004 * because its device has been (or is being) disconnected or the 1005 * driver module is being unloaded. 1006 * @unlocked_ioctl: Used for drivers that want to talk to userspace through 1007 * the "usbfs" filesystem. This lets devices provide ways to 1008 * expose information to user space regardless of where they 1009 * do (or don't) show up otherwise in the filesystem. 1010 * @suspend: Called when the device is going to be suspended by the 1011 * system either from system sleep or runtime suspend context. The 1012 * return value will be ignored in system sleep context, so do NOT 1013 * try to continue using the device if suspend fails in this case. 1014 * Instead, let the resume or reset-resume routine recover from 1015 * the failure. 1016 * @resume: Called when the device is being resumed by the system. 1017 * @reset_resume: Called when the suspended device has been reset instead 1018 * of being resumed. 1019 * @pre_reset: Called by usb_reset_device() when the device is about to be 1020 * reset. This routine must not return until the driver has no active 1021 * URBs for the device, and no more URBs may be submitted until the 1022 * post_reset method is called. 1023 * @post_reset: Called by usb_reset_device() after the device 1024 * has been reset 1025 * @id_table: USB drivers use ID table to support hotplugging. 1026 * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set 1027 * or your driver's probe function will never get called. 1028 * @dynids: used internally to hold the list of dynamically added device 1029 * ids for this driver. 1030 * @drvwrap: Driver-model core structure wrapper. 1031 * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be 1032 * added to this driver by preventing the sysfs file from being created. 1033 * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend 1034 * for interfaces bound to this driver. 1035 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable 1036 * endpoints before calling the driver's disconnect method. 1037 * @disable_hub_initiated_lpm: if set to 0, the USB core will not allow hubs 1038 * to initiate lower power link state transitions when an idle timeout 1039 * occurs. Device-initiated USB 3.0 link PM will still be allowed. 1040 * 1041 * USB interface drivers must provide a name, probe() and disconnect() 1042 * methods, and an id_table. Other driver fields are optional. 1043 * 1044 * The id_table is used in hotplugging. It holds a set of descriptors, 1045 * and specialized data may be associated with each entry. That table 1046 * is used by both user and kernel mode hotplugging support. 1047 * 1048 * The probe() and disconnect() methods are called in a context where 1049 * they can sleep, but they should avoid abusing the privilege. Most 1050 * work to connect to a device should be done when the device is opened, 1051 * and undone at the last close. The disconnect code needs to address 1052 * concurrency issues with respect to open() and close() methods, as 1053 * well as forcing all pending I/O requests to complete (by unlinking 1054 * them as necessary, and blocking until the unlinks complete). 1055 */ 1056 struct usb_driver { 1057 const char *name; 1058 1059 int (*probe) (struct usb_interface *intf, 1060 const struct usb_device_id *id); 1061 1062 void (*disconnect) (struct usb_interface *intf); 1063 1064 int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code, 1065 void *buf); 1066 1067 int (*suspend) (struct usb_interface *intf, pm_message_t message); 1068 int (*resume) (struct usb_interface *intf); 1069 int (*reset_resume)(struct usb_interface *intf); 1070 1071 int (*pre_reset)(struct usb_interface *intf); 1072 int (*post_reset)(struct usb_interface *intf); 1073 1074 const struct usb_device_id *id_table; 1075 1076 struct usb_dynids dynids; 1077 struct usbdrv_wrap drvwrap; 1078 unsigned int no_dynamic_id:1; 1079 unsigned int supports_autosuspend:1; 1080 unsigned int disable_hub_initiated_lpm:1; 1081 unsigned int soft_unbind:1; 1082 }; 1083 #define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver) 1084 1085 /** 1086 * struct usb_device_driver - identifies USB device driver to usbcore 1087 * @name: The driver name should be unique among USB drivers, 1088 * and should normally be the same as the module name. 1089 * @probe: Called to see if the driver is willing to manage a particular 1090 * device. If it is, probe returns zero and uses dev_set_drvdata() 1091 * to associate driver-specific data with the device. If unwilling 1092 * to manage the device, return a negative errno value. 1093 * @disconnect: Called when the device is no longer accessible, usually 1094 * because it has been (or is being) disconnected or the driver's 1095 * module is being unloaded. 1096 * @suspend: Called when the device is going to be suspended by the system. 1097 * @resume: Called when the device is being resumed by the system. 1098 * @drvwrap: Driver-model core structure wrapper. 1099 * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend 1100 * for devices bound to this driver. 1101 * 1102 * USB drivers must provide all the fields listed above except drvwrap. 1103 */ 1104 struct usb_device_driver { 1105 const char *name; 1106 1107 int (*probe) (struct usb_device *udev); 1108 void (*disconnect) (struct usb_device *udev); 1109 1110 int (*suspend) (struct usb_device *udev, pm_message_t message); 1111 int (*resume) (struct usb_device *udev, pm_message_t message); 1112 struct usbdrv_wrap drvwrap; 1113 unsigned int supports_autosuspend:1; 1114 }; 1115 #define to_usb_device_driver(d) container_of(d, struct usb_device_driver, \ 1116 drvwrap.driver) 1117 1118 extern struct bus_type usb_bus_type; 1119 1120 /** 1121 * struct usb_class_driver - identifies a USB driver that wants to use the USB major number 1122 * @name: the usb class device name for this driver. Will show up in sysfs. 1123 * @devnode: Callback to provide a naming hint for a possible 1124 * device node to create. 1125 * @fops: pointer to the struct file_operations of this driver. 1126 * @minor_base: the start of the minor range for this driver. 1127 * 1128 * This structure is used for the usb_register_dev() and 1129 * usb_unregister_dev() functions, to consolidate a number of the 1130 * parameters used for them. 1131 */ 1132 struct usb_class_driver { 1133 char *name; 1134 char *(*devnode)(struct device *dev, umode_t *mode); 1135 const struct file_operations *fops; 1136 int minor_base; 1137 }; 1138 1139 /* 1140 * use these in module_init()/module_exit() 1141 * and don't forget MODULE_DEVICE_TABLE(usb, ...) 1142 */ 1143 extern int usb_register_driver(struct usb_driver *, struct module *, 1144 const char *); 1145 1146 /* use a define to avoid include chaining to get THIS_MODULE & friends */ 1147 #define usb_register(driver) \ 1148 usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME) 1149 1150 extern void usb_deregister(struct usb_driver *); 1151 1152 /** 1153 * module_usb_driver() - Helper macro for registering a USB driver 1154 * @__usb_driver: usb_driver struct 1155 * 1156 * Helper macro for USB drivers which do not do anything special in module 1157 * init/exit. This eliminates a lot of boilerplate. Each module may only 1158 * use this macro once, and calling it replaces module_init() and module_exit() 1159 */ 1160 #define module_usb_driver(__usb_driver) \ 1161 module_driver(__usb_driver, usb_register, \ 1162 usb_deregister) 1163 1164 extern int usb_register_device_driver(struct usb_device_driver *, 1165 struct module *); 1166 extern void usb_deregister_device_driver(struct usb_device_driver *); 1167 1168 extern int usb_register_dev(struct usb_interface *intf, 1169 struct usb_class_driver *class_driver); 1170 extern void usb_deregister_dev(struct usb_interface *intf, 1171 struct usb_class_driver *class_driver); 1172 1173 extern int usb_disabled(void); 1174 1175 /* ----------------------------------------------------------------------- */ 1176 1177 /* 1178 * URB support, for asynchronous request completions 1179 */ 1180 1181 /* 1182 * urb->transfer_flags: 1183 * 1184 * Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb(). 1185 */ 1186 #define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */ 1187 #define URB_ISO_ASAP 0x0002 /* iso-only; use the first unexpired 1188 * slot in the schedule */ 1189 #define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ 1190 #define URB_NO_FSBR 0x0020 /* UHCI-specific */ 1191 #define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ 1192 #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt 1193 * needed */ 1194 #define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ 1195 1196 /* The following flags are used internally by usbcore and HCDs */ 1197 #define URB_DIR_IN 0x0200 /* Transfer from device to host */ 1198 #define URB_DIR_OUT 0 1199 #define URB_DIR_MASK URB_DIR_IN 1200 1201 #define URB_DMA_MAP_SINGLE 0x00010000 /* Non-scatter-gather mapping */ 1202 #define URB_DMA_MAP_PAGE 0x00020000 /* HCD-unsupported S-G */ 1203 #define URB_DMA_MAP_SG 0x00040000 /* HCD-supported S-G */ 1204 #define URB_MAP_LOCAL 0x00080000 /* HCD-local-memory mapping */ 1205 #define URB_SETUP_MAP_SINGLE 0x00100000 /* Setup packet DMA mapped */ 1206 #define URB_SETUP_MAP_LOCAL 0x00200000 /* HCD-local setup packet */ 1207 #define URB_DMA_SG_COMBINED 0x00400000 /* S-G entries were combined */ 1208 #define URB_ALIGNED_TEMP_BUFFER 0x00800000 /* Temp buffer was alloc'd */ 1209 1210 struct usb_iso_packet_descriptor { 1211 unsigned int offset; 1212 unsigned int length; /* expected length */ 1213 unsigned int actual_length; 1214 int status; 1215 }; 1216 1217 struct urb; 1218 1219 struct usb_anchor { 1220 struct list_head urb_list; 1221 wait_queue_head_t wait; 1222 spinlock_t lock; 1223 atomic_t suspend_wakeups; 1224 unsigned int poisoned:1; 1225 }; 1226 1227 static inline void init_usb_anchor(struct usb_anchor *anchor) 1228 { 1229 memset(anchor, 0, sizeof(*anchor)); 1230 INIT_LIST_HEAD(&anchor->urb_list); 1231 init_waitqueue_head(&anchor->wait); 1232 spin_lock_init(&anchor->lock); 1233 } 1234 1235 typedef void (*usb_complete_t)(struct urb *); 1236 1237 /** 1238 * struct urb - USB Request Block 1239 * @urb_list: For use by current owner of the URB. 1240 * @anchor_list: membership in the list of an anchor 1241 * @anchor: to anchor URBs to a common mooring 1242 * @ep: Points to the endpoint's data structure. Will eventually 1243 * replace @pipe. 1244 * @pipe: Holds endpoint number, direction, type, and more. 1245 * Create these values with the eight macros available; 1246 * usb_{snd,rcv}TYPEpipe(dev,endpoint), where the TYPE is "ctrl" 1247 * (control), "bulk", "int" (interrupt), or "iso" (isochronous). 1248 * For example usb_sndbulkpipe() or usb_rcvintpipe(). Endpoint 1249 * numbers range from zero to fifteen. Note that "in" endpoint two 1250 * is a different endpoint (and pipe) from "out" endpoint two. 1251 * The current configuration controls the existence, type, and 1252 * maximum packet size of any given endpoint. 1253 * @stream_id: the endpoint's stream ID for bulk streams 1254 * @dev: Identifies the USB device to perform the request. 1255 * @status: This is read in non-iso completion functions to get the 1256 * status of the particular request. ISO requests only use it 1257 * to tell whether the URB was unlinked; detailed status for 1258 * each frame is in the fields of the iso_frame-desc. 1259 * @transfer_flags: A variety of flags may be used to affect how URB 1260 * submission, unlinking, or operation are handled. Different 1261 * kinds of URB can use different flags. 1262 * @transfer_buffer: This identifies the buffer to (or from) which the I/O 1263 * request will be performed unless URB_NO_TRANSFER_DMA_MAP is set 1264 * (however, do not leave garbage in transfer_buffer even then). 1265 * This buffer must be suitable for DMA; allocate it with 1266 * kmalloc() or equivalent. For transfers to "in" endpoints, contents 1267 * of this buffer will be modified. This buffer is used for the data 1268 * stage of control transfers. 1269 * @transfer_dma: When transfer_flags includes URB_NO_TRANSFER_DMA_MAP, 1270 * the device driver is saying that it provided this DMA address, 1271 * which the host controller driver should use in preference to the 1272 * transfer_buffer. 1273 * @sg: scatter gather buffer list, the buffer size of each element in 1274 * the list (except the last) must be divisible by the endpoint's 1275 * max packet size if no_sg_constraint isn't set in 'struct usb_bus' 1276 * @num_mapped_sgs: (internal) number of mapped sg entries 1277 * @num_sgs: number of entries in the sg list 1278 * @transfer_buffer_length: How big is transfer_buffer. The transfer may 1279 * be broken up into chunks according to the current maximum packet 1280 * size for the endpoint, which is a function of the configuration 1281 * and is encoded in the pipe. When the length is zero, neither 1282 * transfer_buffer nor transfer_dma is used. 1283 * @actual_length: This is read in non-iso completion functions, and 1284 * it tells how many bytes (out of transfer_buffer_length) were 1285 * transferred. It will normally be the same as requested, unless 1286 * either an error was reported or a short read was performed. 1287 * The URB_SHORT_NOT_OK transfer flag may be used to make such 1288 * short reads be reported as errors. 1289 * @setup_packet: Only used for control transfers, this points to eight bytes 1290 * of setup data. Control transfers always start by sending this data 1291 * to the device. Then transfer_buffer is read or written, if needed. 1292 * @setup_dma: DMA pointer for the setup packet. The caller must not use 1293 * this field; setup_packet must point to a valid buffer. 1294 * @start_frame: Returns the initial frame for isochronous transfers. 1295 * @number_of_packets: Lists the number of ISO transfer buffers. 1296 * @interval: Specifies the polling interval for interrupt or isochronous 1297 * transfers. The units are frames (milliseconds) for full and low 1298 * speed devices, and microframes (1/8 millisecond) for highspeed 1299 * and SuperSpeed devices. 1300 * @error_count: Returns the number of ISO transfers that reported errors. 1301 * @context: For use in completion functions. This normally points to 1302 * request-specific driver context. 1303 * @complete: Completion handler. This URB is passed as the parameter to the 1304 * completion function. The completion function may then do what 1305 * it likes with the URB, including resubmitting or freeing it. 1306 * @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to 1307 * collect the transfer status for each buffer. 1308 * 1309 * This structure identifies USB transfer requests. URBs must be allocated by 1310 * calling usb_alloc_urb() and freed with a call to usb_free_urb(). 1311 * Initialization may be done using various usb_fill_*_urb() functions. URBs 1312 * are submitted using usb_submit_urb(), and pending requests may be canceled 1313 * using usb_unlink_urb() or usb_kill_urb(). 1314 * 1315 * Data Transfer Buffers: 1316 * 1317 * Normally drivers provide I/O buffers allocated with kmalloc() or otherwise 1318 * taken from the general page pool. That is provided by transfer_buffer 1319 * (control requests also use setup_packet), and host controller drivers 1320 * perform a dma mapping (and unmapping) for each buffer transferred. Those 1321 * mapping operations can be expensive on some platforms (perhaps using a dma 1322 * bounce buffer or talking to an IOMMU), 1323 * although they're cheap on commodity x86 and ppc hardware. 1324 * 1325 * Alternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag, 1326 * which tells the host controller driver that no such mapping is needed for 1327 * the transfer_buffer since 1328 * the device driver is DMA-aware. For example, a device driver might 1329 * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). 1330 * When this transfer flag is provided, host controller drivers will 1331 * attempt to use the dma address found in the transfer_dma 1332 * field rather than determining a dma address themselves. 1333 * 1334 * Note that transfer_buffer must still be set if the controller 1335 * does not support DMA (as indicated by bus.uses_dma) and when talking 1336 * to root hub. If you have to trasfer between highmem zone and the device 1337 * on such controller, create a bounce buffer or bail out with an error. 1338 * If transfer_buffer cannot be set (is in highmem) and the controller is DMA 1339 * capable, assign NULL to it, so that usbmon knows not to use the value. 1340 * The setup_packet must always be set, so it cannot be located in highmem. 1341 * 1342 * Initialization: 1343 * 1344 * All URBs submitted must initialize the dev, pipe, transfer_flags (may be 1345 * zero), and complete fields. All URBs must also initialize 1346 * transfer_buffer and transfer_buffer_length. They may provide the 1347 * URB_SHORT_NOT_OK transfer flag, indicating that short reads are 1348 * to be treated as errors; that flag is invalid for write requests. 1349 * 1350 * Bulk URBs may 1351 * use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers 1352 * should always terminate with a short packet, even if it means adding an 1353 * extra zero length packet. 1354 * 1355 * Control URBs must provide a valid pointer in the setup_packet field. 1356 * Unlike the transfer_buffer, the setup_packet may not be mapped for DMA 1357 * beforehand. 1358 * 1359 * Interrupt URBs must provide an interval, saying how often (in milliseconds 1360 * or, for highspeed devices, 125 microsecond units) 1361 * to poll for transfers. After the URB has been submitted, the interval 1362 * field reflects how the transfer was actually scheduled. 1363 * The polling interval may be more frequent than requested. 1364 * For example, some controllers have a maximum interval of 32 milliseconds, 1365 * while others support intervals of up to 1024 milliseconds. 1366 * Isochronous URBs also have transfer intervals. (Note that for isochronous 1367 * endpoints, as well as high speed interrupt endpoints, the encoding of 1368 * the transfer interval in the endpoint descriptor is logarithmic. 1369 * Device drivers must convert that value to linear units themselves.) 1370 * 1371 * If an isochronous endpoint queue isn't already running, the host 1372 * controller will schedule a new URB to start as soon as bandwidth 1373 * utilization allows. If the queue is running then a new URB will be 1374 * scheduled to start in the first transfer slot following the end of the 1375 * preceding URB, if that slot has not already expired. If the slot has 1376 * expired (which can happen when IRQ delivery is delayed for a long time), 1377 * the scheduling behavior depends on the URB_ISO_ASAP flag. If the flag 1378 * is clear then the URB will be scheduled to start in the expired slot, 1379 * implying that some of its packets will not be transferred; if the flag 1380 * is set then the URB will be scheduled in the first unexpired slot, 1381 * breaking the queue's synchronization. Upon URB completion, the 1382 * start_frame field will be set to the (micro)frame number in which the 1383 * transfer was scheduled. Ranges for frame counter values are HC-specific 1384 * and can go from as low as 256 to as high as 65536 frames. 1385 * 1386 * Isochronous URBs have a different data transfer model, in part because 1387 * the quality of service is only "best effort". Callers provide specially 1388 * allocated URBs, with number_of_packets worth of iso_frame_desc structures 1389 * at the end. Each such packet is an individual ISO transfer. Isochronous 1390 * URBs are normally queued, submitted by drivers to arrange that 1391 * transfers are at least double buffered, and then explicitly resubmitted 1392 * in completion handlers, so 1393 * that data (such as audio or video) streams at as constant a rate as the 1394 * host controller scheduler can support. 1395 * 1396 * Completion Callbacks: 1397 * 1398 * The completion callback is made in_interrupt(), and one of the first 1399 * things that a completion handler should do is check the status field. 1400 * The status field is provided for all URBs. It is used to report 1401 * unlinked URBs, and status for all non-ISO transfers. It should not 1402 * be examined before the URB is returned to the completion handler. 1403 * 1404 * The context field is normally used to link URBs back to the relevant 1405 * driver or request state. 1406 * 1407 * When the completion callback is invoked for non-isochronous URBs, the 1408 * actual_length field tells how many bytes were transferred. This field 1409 * is updated even when the URB terminated with an error or was unlinked. 1410 * 1411 * ISO transfer status is reported in the status and actual_length fields 1412 * of the iso_frame_desc array, and the number of errors is reported in 1413 * error_count. Completion callbacks for ISO transfers will normally 1414 * (re)submit URBs to ensure a constant transfer rate. 1415 * 1416 * Note that even fields marked "public" should not be touched by the driver 1417 * when the urb is owned by the hcd, that is, since the call to 1418 * usb_submit_urb() till the entry into the completion routine. 1419 */ 1420 struct urb { 1421 /* private: usb core and host controller only fields in the urb */ 1422 struct kref kref; /* reference count of the URB */ 1423 void *hcpriv; /* private data for host controller */ 1424 atomic_t use_count; /* concurrent submissions counter */ 1425 atomic_t reject; /* submissions will fail */ 1426 int unlinked; /* unlink error code */ 1427 1428 /* public: documented fields in the urb that can be used by drivers */ 1429 struct list_head urb_list; /* list head for use by the urb's 1430 * current owner */ 1431 struct list_head anchor_list; /* the URB may be anchored */ 1432 struct usb_anchor *anchor; 1433 struct usb_device *dev; /* (in) pointer to associated device */ 1434 struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ 1435 unsigned int pipe; /* (in) pipe information */ 1436 unsigned int stream_id; /* (in) stream ID */ 1437 int status; /* (return) non-ISO status */ 1438 unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ 1439 void *transfer_buffer; /* (in) associated data buffer */ 1440 dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ 1441 struct scatterlist *sg; /* (in) scatter gather buffer list */ 1442 int num_mapped_sgs; /* (internal) mapped sg entries */ 1443 int num_sgs; /* (in) number of entries in the sg list */ 1444 u32 transfer_buffer_length; /* (in) data buffer length */ 1445 u32 actual_length; /* (return) actual transfer length */ 1446 unsigned char *setup_packet; /* (in) setup packet (control only) */ 1447 dma_addr_t setup_dma; /* (in) dma addr for setup_packet */ 1448 int start_frame; /* (modify) start frame (ISO) */ 1449 int number_of_packets; /* (in) number of ISO packets */ 1450 int interval; /* (modify) transfer interval 1451 * (INT/ISO) */ 1452 int error_count; /* (return) number of ISO errors */ 1453 void *context; /* (in) context for completion */ 1454 usb_complete_t complete; /* (in) completion routine */ 1455 struct usb_iso_packet_descriptor iso_frame_desc[0]; 1456 /* (in) ISO ONLY */ 1457 }; 1458 1459 /* ----------------------------------------------------------------------- */ 1460 1461 /** 1462 * usb_fill_control_urb - initializes a control urb 1463 * @urb: pointer to the urb to initialize. 1464 * @dev: pointer to the struct usb_device for this urb. 1465 * @pipe: the endpoint pipe 1466 * @setup_packet: pointer to the setup_packet buffer 1467 * @transfer_buffer: pointer to the transfer buffer 1468 * @buffer_length: length of the transfer buffer 1469 * @complete_fn: pointer to the usb_complete_t function 1470 * @context: what to set the urb context to. 1471 * 1472 * Initializes a control urb with the proper information needed to submit 1473 * it to a device. 1474 */ 1475 static inline void usb_fill_control_urb(struct urb *urb, 1476 struct usb_device *dev, 1477 unsigned int pipe, 1478 unsigned char *setup_packet, 1479 void *transfer_buffer, 1480 int buffer_length, 1481 usb_complete_t complete_fn, 1482 void *context) 1483 { 1484 urb->dev = dev; 1485 urb->pipe = pipe; 1486 urb->setup_packet = setup_packet; 1487 urb->transfer_buffer = transfer_buffer; 1488 urb->transfer_buffer_length = buffer_length; 1489 urb->complete = complete_fn; 1490 urb->context = context; 1491 } 1492 1493 /** 1494 * usb_fill_bulk_urb - macro to help initialize a bulk urb 1495 * @urb: pointer to the urb to initialize. 1496 * @dev: pointer to the struct usb_device for this urb. 1497 * @pipe: the endpoint pipe 1498 * @transfer_buffer: pointer to the transfer buffer 1499 * @buffer_length: length of the transfer buffer 1500 * @complete_fn: pointer to the usb_complete_t function 1501 * @context: what to set the urb context to. 1502 * 1503 * Initializes a bulk urb with the proper information needed to submit it 1504 * to a device. 1505 */ 1506 static inline void usb_fill_bulk_urb(struct urb *urb, 1507 struct usb_device *dev, 1508 unsigned int pipe, 1509 void *transfer_buffer, 1510 int buffer_length, 1511 usb_complete_t complete_fn, 1512 void *context) 1513 { 1514 urb->dev = dev; 1515 urb->pipe = pipe; 1516 urb->transfer_buffer = transfer_buffer; 1517 urb->transfer_buffer_length = buffer_length; 1518 urb->complete = complete_fn; 1519 urb->context = context; 1520 } 1521 1522 /** 1523 * usb_fill_int_urb - macro to help initialize a interrupt urb 1524 * @urb: pointer to the urb to initialize. 1525 * @dev: pointer to the struct usb_device for this urb. 1526 * @pipe: the endpoint pipe 1527 * @transfer_buffer: pointer to the transfer buffer 1528 * @buffer_length: length of the transfer buffer 1529 * @complete_fn: pointer to the usb_complete_t function 1530 * @context: what to set the urb context to. 1531 * @interval: what to set the urb interval to, encoded like 1532 * the endpoint descriptor's bInterval value. 1533 * 1534 * Initializes a interrupt urb with the proper information needed to submit 1535 * it to a device. 1536 * 1537 * Note that High Speed and SuperSpeed interrupt endpoints use a logarithmic 1538 * encoding of the endpoint interval, and express polling intervals in 1539 * microframes (eight per millisecond) rather than in frames (one per 1540 * millisecond). 1541 * 1542 * Wireless USB also uses the logarithmic encoding, but specifies it in units of 1543 * 128us instead of 125us. For Wireless USB devices, the interval is passed 1544 * through to the host controller, rather than being translated into microframe 1545 * units. 1546 */ 1547 static inline void usb_fill_int_urb(struct urb *urb, 1548 struct usb_device *dev, 1549 unsigned int pipe, 1550 void *transfer_buffer, 1551 int buffer_length, 1552 usb_complete_t complete_fn, 1553 void *context, 1554 int interval) 1555 { 1556 urb->dev = dev; 1557 urb->pipe = pipe; 1558 urb->transfer_buffer = transfer_buffer; 1559 urb->transfer_buffer_length = buffer_length; 1560 urb->complete = complete_fn; 1561 urb->context = context; 1562 1563 if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER) { 1564 /* make sure interval is within allowed range */ 1565 interval = clamp(interval, 1, 16); 1566 1567 urb->interval = 1 << (interval - 1); 1568 } else { 1569 urb->interval = interval; 1570 } 1571 1572 urb->start_frame = -1; 1573 } 1574 1575 extern void usb_init_urb(struct urb *urb); 1576 extern struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags); 1577 extern void usb_free_urb(struct urb *urb); 1578 #define usb_put_urb usb_free_urb 1579 extern struct urb *usb_get_urb(struct urb *urb); 1580 extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags); 1581 extern int usb_unlink_urb(struct urb *urb); 1582 extern void usb_kill_urb(struct urb *urb); 1583 extern void usb_poison_urb(struct urb *urb); 1584 extern void usb_unpoison_urb(struct urb *urb); 1585 extern void usb_block_urb(struct urb *urb); 1586 extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); 1587 extern void usb_poison_anchored_urbs(struct usb_anchor *anchor); 1588 extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor); 1589 extern void usb_unlink_anchored_urbs(struct usb_anchor *anchor); 1590 extern void usb_anchor_suspend_wakeups(struct usb_anchor *anchor); 1591 extern void usb_anchor_resume_wakeups(struct usb_anchor *anchor); 1592 extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor); 1593 extern void usb_unanchor_urb(struct urb *urb); 1594 extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, 1595 unsigned int timeout); 1596 extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor); 1597 extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor); 1598 extern int usb_anchor_empty(struct usb_anchor *anchor); 1599 1600 #define usb_unblock_urb usb_unpoison_urb 1601 1602 /** 1603 * usb_urb_dir_in - check if an URB describes an IN transfer 1604 * @urb: URB to be checked 1605 * 1606 * Return: 1 if @urb describes an IN transfer (device-to-host), 1607 * otherwise 0. 1608 */ 1609 static inline int usb_urb_dir_in(struct urb *urb) 1610 { 1611 return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN; 1612 } 1613 1614 /** 1615 * usb_urb_dir_out - check if an URB describes an OUT transfer 1616 * @urb: URB to be checked 1617 * 1618 * Return: 1 if @urb describes an OUT transfer (host-to-device), 1619 * otherwise 0. 1620 */ 1621 static inline int usb_urb_dir_out(struct urb *urb) 1622 { 1623 return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT; 1624 } 1625 1626 void *usb_alloc_coherent(struct usb_device *dev, size_t size, 1627 gfp_t mem_flags, dma_addr_t *dma); 1628 void usb_free_coherent(struct usb_device *dev, size_t size, 1629 void *addr, dma_addr_t dma); 1630 1631 #if 0 1632 struct urb *usb_buffer_map(struct urb *urb); 1633 void usb_buffer_dmasync(struct urb *urb); 1634 void usb_buffer_unmap(struct urb *urb); 1635 #endif 1636 1637 struct scatterlist; 1638 int usb_buffer_map_sg(const struct usb_device *dev, int is_in, 1639 struct scatterlist *sg, int nents); 1640 #if 0 1641 void usb_buffer_dmasync_sg(const struct usb_device *dev, int is_in, 1642 struct scatterlist *sg, int n_hw_ents); 1643 #endif 1644 void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in, 1645 struct scatterlist *sg, int n_hw_ents); 1646 1647 /*-------------------------------------------------------------------* 1648 * SYNCHRONOUS CALL SUPPORT * 1649 *-------------------------------------------------------------------*/ 1650 1651 extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, 1652 __u8 request, __u8 requesttype, __u16 value, __u16 index, 1653 void *data, __u16 size, int timeout); 1654 extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, 1655 void *data, int len, int *actual_length, int timeout); 1656 extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, 1657 void *data, int len, int *actual_length, 1658 int timeout); 1659 1660 /* wrappers around usb_control_msg() for the most common standard requests */ 1661 extern int usb_get_descriptor(struct usb_device *dev, unsigned char desctype, 1662 unsigned char descindex, void *buf, int size); 1663 extern int usb_get_status(struct usb_device *dev, 1664 int type, int target, void *data); 1665 extern int usb_string(struct usb_device *dev, int index, 1666 char *buf, size_t size); 1667 1668 /* wrappers that also update important state inside usbcore */ 1669 extern int usb_clear_halt(struct usb_device *dev, int pipe); 1670 extern int usb_reset_configuration(struct usb_device *dev); 1671 extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate); 1672 extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr); 1673 1674 /* this request isn't really synchronous, but it belongs with the others */ 1675 extern int usb_driver_set_configuration(struct usb_device *udev, int config); 1676 1677 /* choose and set configuration for device */ 1678 extern int usb_choose_configuration(struct usb_device *udev); 1679 extern int usb_set_configuration(struct usb_device *dev, int configuration); 1680 1681 /* 1682 * timeouts, in milliseconds, used for sending/receiving control messages 1683 * they typically complete within a few frames (msec) after they're issued 1684 * USB identifies 5 second timeouts, maybe more in a few cases, and a few 1685 * slow devices (like some MGE Ellipse UPSes) actually push that limit. 1686 */ 1687 #define USB_CTRL_GET_TIMEOUT 5000 1688 #define USB_CTRL_SET_TIMEOUT 5000 1689 1690 1691 /** 1692 * struct usb_sg_request - support for scatter/gather I/O 1693 * @status: zero indicates success, else negative errno 1694 * @bytes: counts bytes transferred. 1695 * 1696 * These requests are initialized using usb_sg_init(), and then are used 1697 * as request handles passed to usb_sg_wait() or usb_sg_cancel(). Most 1698 * members of the request object aren't for driver access. 1699 * 1700 * The status and bytecount values are valid only after usb_sg_wait() 1701 * returns. If the status is zero, then the bytecount matches the total 1702 * from the request. 1703 * 1704 * After an error completion, drivers may need to clear a halt condition 1705 * on the endpoint. 1706 */ 1707 struct usb_sg_request { 1708 int status; 1709 size_t bytes; 1710 1711 /* private: 1712 * members below are private to usbcore, 1713 * and are not provided for driver access! 1714 */ 1715 spinlock_t lock; 1716 1717 struct usb_device *dev; 1718 int pipe; 1719 1720 int entries; 1721 struct urb **urbs; 1722 1723 int count; 1724 struct completion complete; 1725 }; 1726 1727 int usb_sg_init( 1728 struct usb_sg_request *io, 1729 struct usb_device *dev, 1730 unsigned pipe, 1731 unsigned period, 1732 struct scatterlist *sg, 1733 int nents, 1734 size_t length, 1735 gfp_t mem_flags 1736 ); 1737 void usb_sg_cancel(struct usb_sg_request *io); 1738 void usb_sg_wait(struct usb_sg_request *io); 1739 1740 1741 /* ----------------------------------------------------------------------- */ 1742 1743 /* 1744 * For various legacy reasons, Linux has a small cookie that's paired with 1745 * a struct usb_device to identify an endpoint queue. Queue characteristics 1746 * are defined by the endpoint's descriptor. This cookie is called a "pipe", 1747 * an unsigned int encoded as: 1748 * 1749 * - direction: bit 7 (0 = Host-to-Device [Out], 1750 * 1 = Device-to-Host [In] ... 1751 * like endpoint bEndpointAddress) 1752 * - device address: bits 8-14 ... bit positions known to uhci-hcd 1753 * - endpoint: bits 15-18 ... bit positions known to uhci-hcd 1754 * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, 1755 * 10 = control, 11 = bulk) 1756 * 1757 * Given the device address and endpoint descriptor, pipes are redundant. 1758 */ 1759 1760 /* NOTE: these are not the standard USB_ENDPOINT_XFER_* values!! */ 1761 /* (yet ... they're the values used by usbfs) */ 1762 #define PIPE_ISOCHRONOUS 0 1763 #define PIPE_INTERRUPT 1 1764 #define PIPE_CONTROL 2 1765 #define PIPE_BULK 3 1766 1767 #define usb_pipein(pipe) ((pipe) & USB_DIR_IN) 1768 #define usb_pipeout(pipe) (!usb_pipein(pipe)) 1769 1770 #define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f) 1771 #define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf) 1772 1773 #define usb_pipetype(pipe) (((pipe) >> 30) & 3) 1774 #define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS) 1775 #define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT) 1776 #define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL) 1777 #define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK) 1778 1779 static inline unsigned int __create_pipe(struct usb_device *dev, 1780 unsigned int endpoint) 1781 { 1782 return (dev->devnum << 8) | (endpoint << 15); 1783 } 1784 1785 /* Create various pipes... */ 1786 #define usb_sndctrlpipe(dev, endpoint) \ 1787 ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) 1788 #define usb_rcvctrlpipe(dev, endpoint) \ 1789 ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) 1790 #define usb_sndisocpipe(dev, endpoint) \ 1791 ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) 1792 #define usb_rcvisocpipe(dev, endpoint) \ 1793 ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) 1794 #define usb_sndbulkpipe(dev, endpoint) \ 1795 ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) 1796 #define usb_rcvbulkpipe(dev, endpoint) \ 1797 ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) 1798 #define usb_sndintpipe(dev, endpoint) \ 1799 ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) 1800 #define usb_rcvintpipe(dev, endpoint) \ 1801 ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) 1802 1803 static inline struct usb_host_endpoint * 1804 usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe) 1805 { 1806 struct usb_host_endpoint **eps; 1807 eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out; 1808 return eps[usb_pipeendpoint(pipe)]; 1809 } 1810 1811 /*-------------------------------------------------------------------------*/ 1812 1813 static inline __u16 1814 usb_maxpacket(struct usb_device *udev, int pipe, int is_out) 1815 { 1816 struct usb_host_endpoint *ep; 1817 unsigned epnum = usb_pipeendpoint(pipe); 1818 1819 if (is_out) { 1820 WARN_ON(usb_pipein(pipe)); 1821 ep = udev->ep_out[epnum]; 1822 } else { 1823 WARN_ON(usb_pipeout(pipe)); 1824 ep = udev->ep_in[epnum]; 1825 } 1826 if (!ep) 1827 return 0; 1828 1829 /* NOTE: only 0x07ff bits are for packet size... */ 1830 return usb_endpoint_maxp(&ep->desc); 1831 } 1832 1833 /* ----------------------------------------------------------------------- */ 1834 1835 /* translate USB error codes to codes user space understands */ 1836 static inline int usb_translate_errors(int error_code) 1837 { 1838 switch (error_code) { 1839 case 0: 1840 case -ENOMEM: 1841 case -ENODEV: 1842 case -EOPNOTSUPP: 1843 return error_code; 1844 default: 1845 return -EIO; 1846 } 1847 } 1848 1849 /* Events from the usb core */ 1850 #define USB_DEVICE_ADD 0x0001 1851 #define USB_DEVICE_REMOVE 0x0002 1852 #define USB_BUS_ADD 0x0003 1853 #define USB_BUS_REMOVE 0x0004 1854 extern void usb_register_notify(struct notifier_block *nb); 1855 extern void usb_unregister_notify(struct notifier_block *nb); 1856 1857 /* debugfs stuff */ 1858 extern struct dentry *usb_debug_root; 1859 1860 /* LED triggers */ 1861 enum usb_led_event { 1862 USB_LED_EVENT_HOST = 0, 1863 USB_LED_EVENT_GADGET = 1, 1864 }; 1865 1866 #ifdef CONFIG_USB_LED_TRIG 1867 extern void usb_led_activity(enum usb_led_event ev); 1868 #else 1869 static inline void usb_led_activity(enum usb_led_event ev) {} 1870 #endif 1871 1872 #endif /* __KERNEL__ */ 1873 1874 #endif

Here is an explanation of a rule violation arisen while checking your driver against a corresponding kernel.

Note that it may be false positive, i.e. there isn't a real error indeed. Please analyze a given error trace and related source code to understand whether there is an error in your driver.

Error trace column contains a path on which the given rule is violated. You can expand/collapse some entity classes by clicking on corresponding checkboxes in a main menu or in an advanced Others menu. Also you can expand/collapse each particular entity by clicking on +/-. In hovering on some entities you can see some tips. Also the error trace is bound with related source code. Line numbers may be shown as links on the left. You can click on them to open corresponding lines in source code.

Source code column contains a content of files related with the error trace. There is source code of your driver (note that there are some LDV modifications at the end), kernel headers and rule model. Tabs show a currently opened file and other available files. In hovering on them you can see full file names. On clicking a corresponding file content will be shown.

Kernel Module Rule Verifier Verdict Status Timestamp Bug report
linux-4.0-rc1.tar.xz drivers/media/usb/usbvision/usbvision.ko 132_1a BLAST Bug Fixed 2015-03-28 01:43:28 L0200

Comment

reported: 28 Mar 2015

[Home]