Lines Matching refs:s
161 struct msi2500_state *s) in msi2500_get_next_fill_buf() argument
166 spin_lock_irqsave(&s->queued_bufs_lock, flags); in msi2500_get_next_fill_buf()
167 if (list_empty(&s->queued_bufs)) in msi2500_get_next_fill_buf()
170 buf = list_entry(s->queued_bufs.next, struct msi2500_frame_buf, list); in msi2500_get_next_fill_buf()
173 spin_unlock_irqrestore(&s->queued_bufs_lock, flags); in msi2500_get_next_fill_buf()
259 static int msi2500_convert_stream(struct msi2500_state *s, u8 *dst, u8 *src, in msi2500_convert_stream() argument
271 if (i == 0 && s->next_sample != sample[0]) { in msi2500_convert_stream()
272 dev_dbg_ratelimited(s->dev, in msi2500_convert_stream()
274 sample[0] - s->next_sample, in msi2500_convert_stream()
275 src_len, s->next_sample, sample[0]); in msi2500_convert_stream()
282 dev_dbg_ratelimited(s->dev, "%*ph\n", 12, &src[4]); in msi2500_convert_stream()
286 switch (s->pixelformat) { in msi2500_convert_stream()
298 s->next_sample = sample[i] + 504; in msi2500_convert_stream()
320 s->next_sample = sample[i] + 252; in msi2500_convert_stream()
325 dev_dbg_ratelimited(s->dev, "%*ph\n", 24, &src[1000]); in msi2500_convert_stream()
330 s->next_sample = sample[i] + 384; in msi2500_convert_stream()
337 s->next_sample = sample[i] + 504; in msi2500_convert_stream()
344 s->next_sample = sample[i] + 336; in msi2500_convert_stream()
351 s->next_sample = sample[i] + 252; in msi2500_convert_stream()
359 if (unlikely(time_is_before_jiffies(s->jiffies_next))) { in msi2500_convert_stream()
362 s->jiffies_next + msecs_to_jiffies(MSECS)); in msi2500_convert_stream()
363 unsigned int samples = s->next_sample - s->sample; in msi2500_convert_stream()
365 s->jiffies_next = jiffies + msecs_to_jiffies(MSECS); in msi2500_convert_stream()
366 s->sample = s->next_sample; in msi2500_convert_stream()
367 dev_dbg(s->dev, "size=%u samples=%u msecs=%u sample rate=%lu\n", in msi2500_convert_stream()
381 struct msi2500_state *s = (struct msi2500_state *)urb->context; in msi2500_isoc_handler() local
388 dev_dbg(s->dev, "URB (%p) unlinked %ssynchronuously\n", in msi2500_isoc_handler()
394 dev_dbg(s->dev, "called with status %d\n", urb->status); in msi2500_isoc_handler()
396 if (++s->isoc_errors > MAX_ISOC_ERRORS) in msi2500_isoc_handler()
397 dev_dbg(s->dev, "Too many ISOC errors, bailing out\n"); in msi2500_isoc_handler()
401 s->isoc_errors = 0; in msi2500_isoc_handler()
411 dev_dbg_ratelimited(s->dev, in msi2500_isoc_handler()
425 fbuf = msi2500_get_next_fill_buf(s); in msi2500_isoc_handler()
427 s->vb_full++; in msi2500_isoc_handler()
428 dev_dbg_ratelimited(s->dev, in msi2500_isoc_handler()
430 s->vb_full); in msi2500_isoc_handler()
436 flen = msi2500_convert_stream(s, ptr, iso_buf, flen); in msi2500_isoc_handler()
444 dev_dbg(s->dev, "Error (%d) re-submitting urb\n", i); in msi2500_isoc_handler()
447 static void msi2500_iso_stop(struct msi2500_state *s) in msi2500_iso_stop() argument
451 dev_dbg(s->dev, "\n"); in msi2500_iso_stop()
455 if (s->urbs[i]) { in msi2500_iso_stop()
456 dev_dbg(s->dev, "Unlinking URB %p\n", s->urbs[i]); in msi2500_iso_stop()
457 usb_kill_urb(s->urbs[i]); in msi2500_iso_stop()
462 static void msi2500_iso_free(struct msi2500_state *s) in msi2500_iso_free() argument
466 dev_dbg(s->dev, "\n"); in msi2500_iso_free()
470 if (s->urbs[i]) { in msi2500_iso_free()
471 dev_dbg(s->dev, "Freeing URB\n"); in msi2500_iso_free()
472 if (s->urbs[i]->transfer_buffer) { in msi2500_iso_free()
473 usb_free_coherent(s->udev, in msi2500_iso_free()
474 s->urbs[i]->transfer_buffer_length, in msi2500_iso_free()
475 s->urbs[i]->transfer_buffer, in msi2500_iso_free()
476 s->urbs[i]->transfer_dma); in msi2500_iso_free()
478 usb_free_urb(s->urbs[i]); in msi2500_iso_free()
479 s->urbs[i] = NULL; in msi2500_iso_free()
485 static void msi2500_isoc_cleanup(struct msi2500_state *s) in msi2500_isoc_cleanup() argument
487 dev_dbg(s->dev, "\n"); in msi2500_isoc_cleanup()
489 msi2500_iso_stop(s); in msi2500_isoc_cleanup()
490 msi2500_iso_free(s); in msi2500_isoc_cleanup()
494 static int msi2500_isoc_init(struct msi2500_state *s) in msi2500_isoc_init() argument
499 dev_dbg(s->dev, "\n"); in msi2500_isoc_init()
501 s->isoc_errors = 0; in msi2500_isoc_init()
503 ret = usb_set_interface(s->udev, 0, 1); in msi2500_isoc_init()
511 dev_err(s->dev, "Failed to allocate urb %d\n", i); in msi2500_isoc_init()
512 msi2500_isoc_cleanup(s); in msi2500_isoc_init()
515 s->urbs[i] = urb; in msi2500_isoc_init()
516 dev_dbg(s->dev, "Allocated URB at 0x%p\n", urb); in msi2500_isoc_init()
519 urb->dev = s->udev; in msi2500_isoc_init()
520 urb->pipe = usb_rcvisocpipe(s->udev, 0x81); in msi2500_isoc_init()
522 urb->transfer_buffer = usb_alloc_coherent(s->udev, in msi2500_isoc_init()
526 dev_err(s->dev, "Failed to allocate urb buffer %d\n", in msi2500_isoc_init()
528 msi2500_isoc_cleanup(s); in msi2500_isoc_init()
533 urb->context = s; in msi2500_isoc_init()
544 ret = usb_submit_urb(s->urbs[i], GFP_KERNEL); in msi2500_isoc_init()
546 dev_err(s->dev, "usb_submit_urb %d failed with error %d\n", in msi2500_isoc_init()
548 msi2500_isoc_cleanup(s); in msi2500_isoc_init()
551 dev_dbg(s->dev, "URB 0x%p submitted.\n", s->urbs[i]); in msi2500_isoc_init()
559 static void msi2500_cleanup_queued_bufs(struct msi2500_state *s) in msi2500_cleanup_queued_bufs() argument
563 dev_dbg(s->dev, "\n"); in msi2500_cleanup_queued_bufs()
565 spin_lock_irqsave(&s->queued_bufs_lock, flags); in msi2500_cleanup_queued_bufs()
566 while (!list_empty(&s->queued_bufs)) { in msi2500_cleanup_queued_bufs()
569 buf = list_entry(s->queued_bufs.next, struct msi2500_frame_buf, in msi2500_cleanup_queued_bufs()
574 spin_unlock_irqrestore(&s->queued_bufs_lock, flags); in msi2500_cleanup_queued_bufs()
581 struct msi2500_state *s = in msi2500_disconnect() local
584 dev_dbg(s->dev, "\n"); in msi2500_disconnect()
586 mutex_lock(&s->vb_queue_lock); in msi2500_disconnect()
587 mutex_lock(&s->v4l2_lock); in msi2500_disconnect()
589 s->udev = NULL; in msi2500_disconnect()
590 v4l2_device_disconnect(&s->v4l2_dev); in msi2500_disconnect()
591 video_unregister_device(&s->vdev); in msi2500_disconnect()
592 spi_unregister_master(s->master); in msi2500_disconnect()
593 mutex_unlock(&s->v4l2_lock); in msi2500_disconnect()
594 mutex_unlock(&s->vb_queue_lock); in msi2500_disconnect()
596 v4l2_device_put(&s->v4l2_dev); in msi2500_disconnect()
602 struct msi2500_state *s = video_drvdata(file); in msi2500_querycap() local
604 dev_dbg(s->dev, "\n"); in msi2500_querycap()
607 strlcpy(cap->card, s->vdev.name, sizeof(cap->card)); in msi2500_querycap()
608 usb_make_path(s->udev, cap->bus_info, sizeof(cap->bus_info)); in msi2500_querycap()
620 struct msi2500_state *s = vb2_get_drv_priv(vq); in msi2500_queue_setup() local
622 dev_dbg(s->dev, "nbuffers=%d\n", *nbuffers); in msi2500_queue_setup()
627 sizes[0] = PAGE_ALIGN(s->buffersize); in msi2500_queue_setup()
628 dev_dbg(s->dev, "nbuffers=%d sizes[0]=%d\n", *nbuffers, sizes[0]); in msi2500_queue_setup()
634 struct msi2500_state *s = vb2_get_drv_priv(vb->vb2_queue); in msi2500_buf_queue() local
640 if (unlikely(!s->udev)) { in msi2500_buf_queue()
645 spin_lock_irqsave(&s->queued_bufs_lock, flags); in msi2500_buf_queue()
646 list_add_tail(&buf->list, &s->queued_bufs); in msi2500_buf_queue()
647 spin_unlock_irqrestore(&s->queued_bufs_lock, flags); in msi2500_buf_queue()
666 static int msi2500_ctrl_msg(struct msi2500_state *s, u8 cmd, u32 data) in msi2500_ctrl_msg() argument
674 msi2500_dbg_usb_control_msg(s->dev, in msi2500_ctrl_msg()
676 ret = usb_control_msg(s->udev, usb_sndctrlpipe(s->udev, 0), in msi2500_ctrl_msg()
679 dev_err(s->dev, "failed %d, cmd %02x, data %04x\n", in msi2500_ctrl_msg()
687 static int msi2500_set_usb_adc(struct msi2500_state *s) in msi2500_set_usb_adc() argument
694 f_sr = s->f_adc; in msi2500_set_usb_adc()
697 bandwidth_auto = v4l2_ctrl_find(&s->hdl, in msi2500_set_usb_adc()
700 bandwidth = v4l2_ctrl_find(&s->hdl, in msi2500_set_usb_adc()
702 v4l2_ctrl_s_ctrl(bandwidth, s->f_adc); in msi2500_set_usb_adc()
706 switch (s->pixelformat) { in msi2500_set_usb_adc()
772 dev_dbg(s->dev, "div_r_out=%d f_vco=%d\n", div_r_out, f_vco); in msi2500_set_usb_adc()
786 dev_dbg(s->dev, "f_sr=%d f_vco=%d div_n=%d div_m=%d div_r_out=%d reg3=%08x reg4=%08x\n", in msi2500_set_usb_adc()
789 ret = msi2500_ctrl_msg(s, CMD_WREG, 0x00608008); in msi2500_set_usb_adc()
793 ret = msi2500_ctrl_msg(s, CMD_WREG, 0x00000c05); in msi2500_set_usb_adc()
797 ret = msi2500_ctrl_msg(s, CMD_WREG, 0x00020000); in msi2500_set_usb_adc()
801 ret = msi2500_ctrl_msg(s, CMD_WREG, 0x00480102); in msi2500_set_usb_adc()
805 ret = msi2500_ctrl_msg(s, CMD_WREG, 0x00f38008); in msi2500_set_usb_adc()
809 ret = msi2500_ctrl_msg(s, CMD_WREG, reg7); in msi2500_set_usb_adc()
813 ret = msi2500_ctrl_msg(s, CMD_WREG, reg4); in msi2500_set_usb_adc()
817 ret = msi2500_ctrl_msg(s, CMD_WREG, reg3); in msi2500_set_usb_adc()
826 struct msi2500_state *s = vb2_get_drv_priv(vq); in msi2500_start_streaming() local
829 dev_dbg(s->dev, "\n"); in msi2500_start_streaming()
831 if (!s->udev) in msi2500_start_streaming()
834 if (mutex_lock_interruptible(&s->v4l2_lock)) in msi2500_start_streaming()
838 v4l2_subdev_call(s->v4l2_subdev, core, s_power, 1); in msi2500_start_streaming()
840 ret = msi2500_set_usb_adc(s); in msi2500_start_streaming()
842 ret = msi2500_isoc_init(s); in msi2500_start_streaming()
844 msi2500_cleanup_queued_bufs(s); in msi2500_start_streaming()
846 ret = msi2500_ctrl_msg(s, CMD_START_STREAMING, 0); in msi2500_start_streaming()
848 mutex_unlock(&s->v4l2_lock); in msi2500_start_streaming()
855 struct msi2500_state *s = vb2_get_drv_priv(vq); in msi2500_stop_streaming() local
857 dev_dbg(s->dev, "\n"); in msi2500_stop_streaming()
859 mutex_lock(&s->v4l2_lock); in msi2500_stop_streaming()
861 if (s->udev) in msi2500_stop_streaming()
862 msi2500_isoc_cleanup(s); in msi2500_stop_streaming()
864 msi2500_cleanup_queued_bufs(s); in msi2500_stop_streaming()
868 if (!msi2500_ctrl_msg(s, CMD_STOP_STREAMING, 0)) { in msi2500_stop_streaming()
870 msi2500_ctrl_msg(s, CMD_WREG, 0x01000003); in msi2500_stop_streaming()
874 v4l2_subdev_call(s->v4l2_subdev, core, s_power, 0); in msi2500_stop_streaming()
876 mutex_unlock(&s->v4l2_lock); in msi2500_stop_streaming()
891 struct msi2500_state *s = video_drvdata(file); in msi2500_enum_fmt_sdr_cap() local
893 dev_dbg(s->dev, "index=%d\n", f->index); in msi2500_enum_fmt_sdr_cap()
895 if (f->index >= s->num_formats) in msi2500_enum_fmt_sdr_cap()
907 struct msi2500_state *s = video_drvdata(file); in msi2500_g_fmt_sdr_cap() local
909 dev_dbg(s->dev, "pixelformat fourcc %4.4s\n", in msi2500_g_fmt_sdr_cap()
910 (char *)&s->pixelformat); in msi2500_g_fmt_sdr_cap()
912 f->fmt.sdr.pixelformat = s->pixelformat; in msi2500_g_fmt_sdr_cap()
913 f->fmt.sdr.buffersize = s->buffersize; in msi2500_g_fmt_sdr_cap()
922 struct msi2500_state *s = video_drvdata(file); in msi2500_s_fmt_sdr_cap() local
923 struct vb2_queue *q = &s->vb_queue; in msi2500_s_fmt_sdr_cap()
926 dev_dbg(s->dev, "pixelformat fourcc %4.4s\n", in msi2500_s_fmt_sdr_cap()
933 for (i = 0; i < s->num_formats; i++) { in msi2500_s_fmt_sdr_cap()
935 s->pixelformat = formats[i].pixelformat; in msi2500_s_fmt_sdr_cap()
936 s->buffersize = formats[i].buffersize; in msi2500_s_fmt_sdr_cap()
942 s->pixelformat = formats[0].pixelformat; in msi2500_s_fmt_sdr_cap()
943 s->buffersize = formats[0].buffersize; in msi2500_s_fmt_sdr_cap()
953 struct msi2500_state *s = video_drvdata(file); in msi2500_try_fmt_sdr_cap() local
956 dev_dbg(s->dev, "pixelformat fourcc %4.4s\n", in msi2500_try_fmt_sdr_cap()
960 for (i = 0; i < s->num_formats; i++) { in msi2500_try_fmt_sdr_cap()
976 struct msi2500_state *s = video_drvdata(file); in msi2500_s_tuner() local
979 dev_dbg(s->dev, "index=%d\n", v->index); in msi2500_s_tuner()
984 ret = v4l2_subdev_call(s->v4l2_subdev, tuner, s_tuner, v); in msi2500_s_tuner()
993 struct msi2500_state *s = video_drvdata(file); in msi2500_g_tuner() local
996 dev_dbg(s->dev, "index=%d\n", v->index); in msi2500_g_tuner()
1006 ret = v4l2_subdev_call(s->v4l2_subdev, tuner, g_tuner, v); in msi2500_g_tuner()
1017 struct msi2500_state *s = video_drvdata(file); in msi2500_g_frequency() local
1020 dev_dbg(s->dev, "tuner=%d type=%d\n", f->tuner, f->type); in msi2500_g_frequency()
1023 f->frequency = s->f_adc; in msi2500_g_frequency()
1027 ret = v4l2_subdev_call(s->v4l2_subdev, tuner, g_frequency, f); in msi2500_g_frequency()
1038 struct msi2500_state *s = video_drvdata(file); in msi2500_s_frequency() local
1041 dev_dbg(s->dev, "tuner=%d type=%d frequency=%u\n", in msi2500_s_frequency()
1045 s->f_adc = clamp_t(unsigned int, f->frequency, in msi2500_s_frequency()
1048 dev_dbg(s->dev, "ADC frequency=%u Hz\n", s->f_adc); in msi2500_s_frequency()
1049 ret = msi2500_set_usb_adc(s); in msi2500_s_frequency()
1051 ret = v4l2_subdev_call(s->v4l2_subdev, tuner, s_frequency, f); in msi2500_s_frequency()
1062 struct msi2500_state *s = video_drvdata(file); in msi2500_enum_freq_bands() local
1065 dev_dbg(s->dev, "tuner=%d type=%d index=%d\n", in msi2500_enum_freq_bands()
1076 ret = v4l2_subdev_call(s->v4l2_subdev, tuner, in msi2500_enum_freq_bands()
1134 struct msi2500_state *s = in msi2500_video_release() local
1137 v4l2_ctrl_handler_free(&s->hdl); in msi2500_video_release()
1138 v4l2_device_unregister(&s->v4l2_dev); in msi2500_video_release()
1139 kfree(s); in msi2500_video_release()
1145 struct msi2500_state *s = spi_master_get_devdata(master); in msi2500_transfer_one_message() local
1151 dev_dbg(s->dev, "msg=%*ph\n", t->len, t->tx_buf); in msi2500_transfer_one_message()
1156 ret = msi2500_ctrl_msg(s, CMD_WREG, data); in msi2500_transfer_one_message()
1167 struct msi2500_state *s; in msi2500_probe() local
1178 s = kzalloc(sizeof(struct msi2500_state), GFP_KERNEL); in msi2500_probe()
1179 if (s == NULL) { in msi2500_probe()
1184 mutex_init(&s->v4l2_lock); in msi2500_probe()
1185 mutex_init(&s->vb_queue_lock); in msi2500_probe()
1186 spin_lock_init(&s->queued_bufs_lock); in msi2500_probe()
1187 INIT_LIST_HEAD(&s->queued_bufs); in msi2500_probe()
1188 s->dev = &intf->dev; in msi2500_probe()
1189 s->udev = interface_to_usbdev(intf); in msi2500_probe()
1190 s->f_adc = bands[0].rangelow; in msi2500_probe()
1191 s->pixelformat = formats[0].pixelformat; in msi2500_probe()
1192 s->buffersize = formats[0].buffersize; in msi2500_probe()
1193 s->num_formats = NUM_FORMATS; in msi2500_probe()
1195 s->num_formats -= 2; in msi2500_probe()
1198 s->vb_queue.type = V4L2_BUF_TYPE_SDR_CAPTURE; in msi2500_probe()
1199 s->vb_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; in msi2500_probe()
1200 s->vb_queue.drv_priv = s; in msi2500_probe()
1201 s->vb_queue.buf_struct_size = sizeof(struct msi2500_frame_buf); in msi2500_probe()
1202 s->vb_queue.ops = &msi2500_vb2_ops; in msi2500_probe()
1203 s->vb_queue.mem_ops = &vb2_vmalloc_memops; in msi2500_probe()
1204 s->vb_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; in msi2500_probe()
1205 ret = vb2_queue_init(&s->vb_queue); in msi2500_probe()
1207 dev_err(s->dev, "Could not initialize vb2 queue\n"); in msi2500_probe()
1212 s->vdev = msi2500_template; in msi2500_probe()
1213 s->vdev.queue = &s->vb_queue; in msi2500_probe()
1214 s->vdev.queue->lock = &s->vb_queue_lock; in msi2500_probe()
1215 video_set_drvdata(&s->vdev, s); in msi2500_probe()
1218 s->v4l2_dev.release = msi2500_video_release; in msi2500_probe()
1219 ret = v4l2_device_register(&intf->dev, &s->v4l2_dev); in msi2500_probe()
1221 dev_err(s->dev, "Failed to register v4l2-device (%d)\n", ret); in msi2500_probe()
1226 master = spi_alloc_master(s->dev, 0); in msi2500_probe()
1232 s->master = master; in msi2500_probe()
1236 spi_master_set_devdata(master, s); in msi2500_probe()
1244 sd = v4l2_spi_new_subdev(&s->v4l2_dev, master, &board_info); in msi2500_probe()
1245 s->v4l2_subdev = sd; in msi2500_probe()
1247 dev_err(s->dev, "cannot get v4l2 subdevice\n"); in msi2500_probe()
1253 v4l2_ctrl_handler_init(&s->hdl, 0); in msi2500_probe()
1254 if (s->hdl.error) { in msi2500_probe()
1255 ret = s->hdl.error; in msi2500_probe()
1256 dev_err(s->dev, "Could not initialize controls\n"); in msi2500_probe()
1261 v4l2_ctrl_add_handler(&s->hdl, sd->ctrl_handler, NULL); in msi2500_probe()
1263 s->v4l2_dev.ctrl_handler = &s->hdl; in msi2500_probe()
1264 s->vdev.v4l2_dev = &s->v4l2_dev; in msi2500_probe()
1265 s->vdev.lock = &s->v4l2_lock; in msi2500_probe()
1267 ret = video_register_device(&s->vdev, VFL_TYPE_SDR, -1); in msi2500_probe()
1269 dev_err(s->dev, "Failed to register as video device (%d)\n", in msi2500_probe()
1273 dev_info(s->dev, "Registered as %s\n", in msi2500_probe()
1274 video_device_node_name(&s->vdev)); in msi2500_probe()
1275 …dev_notice(s->dev, "SDR API is still slightly experimental and functionality changes may follow\n"… in msi2500_probe()
1280 v4l2_ctrl_handler_free(&s->hdl); in msi2500_probe()
1282 spi_unregister_master(s->master); in msi2500_probe()
1284 v4l2_device_unregister(&s->v4l2_dev); in msi2500_probe()
1286 kfree(s); in msi2500_probe()