Lines Matching refs:radio

148 static int amradio_send_cmd(struct amradio_device *radio, u8 cmd, u8 arg,  in amradio_send_cmd()  argument
154 radio->buffer[0] = 0x00; in amradio_send_cmd()
155 radio->buffer[1] = 0x55; in amradio_send_cmd()
156 radio->buffer[2] = 0xaa; in amradio_send_cmd()
157 radio->buffer[3] = extralen; in amradio_send_cmd()
158 radio->buffer[4] = cmd; in amradio_send_cmd()
159 radio->buffer[5] = arg; in amradio_send_cmd()
160 radio->buffer[6] = 0x00; in amradio_send_cmd()
161 radio->buffer[7] = extra || reply ? 8 : 0; in amradio_send_cmd()
163 retval = usb_bulk_msg(radio->usbdev, usb_sndintpipe(radio->usbdev, 2), in amradio_send_cmd()
164 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
167 if (video_is_registered(&radio->vdev)) in amradio_send_cmd()
168 amradio_dev_warn(&radio->vdev.dev, in amradio_send_cmd()
176 memcpy(radio->buffer, extra, extralen); in amradio_send_cmd()
177 memset(radio->buffer + extralen, 0, 8 - extralen); in amradio_send_cmd()
178 retval = usb_bulk_msg(radio->usbdev, usb_sndintpipe(radio->usbdev, 2), in amradio_send_cmd()
179 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
181 memset(radio->buffer, 0, 8); in amradio_send_cmd()
182 retval = usb_bulk_msg(radio->usbdev, usb_rcvbulkpipe(radio->usbdev, 0x81), in amradio_send_cmd()
183 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
187 if (video_is_registered(&radio->vdev) && cmd != AMRADIO_GET_READY_FLAG) in amradio_send_cmd()
188 amradio_dev_warn(&radio->vdev.dev, "follow-up to cmd %02x failed\n", cmd); in amradio_send_cmd()
193 static int amradio_set_mute(struct amradio_device *radio, bool mute) in amradio_set_mute() argument
195 int ret = amradio_send_cmd(radio, in amradio_set_mute()
199 radio->muted = mute; in amradio_set_mute()
204 static int amradio_set_freq(struct amradio_device *radio, int freq) in amradio_set_freq() argument
219 retval = amradio_send_cmd(radio, AMRADIO_SET_FREQ, 0, buf, 3, false); in amradio_set_freq()
222 radio->curfreq = freq; in amradio_set_freq()
227 static int amradio_set_stereo(struct amradio_device *radio, bool stereo) in amradio_set_stereo() argument
229 int ret = amradio_send_cmd(radio, in amradio_set_stereo()
233 radio->stereo = stereo; in amradio_set_stereo()
237 static int amradio_get_stat(struct amradio_device *radio, bool *is_stereo, u32 *signal) in amradio_get_stat() argument
239 int ret = amradio_send_cmd(radio, in amradio_get_stat()
244 *is_stereo = radio->buffer[2] >> 7; in amradio_get_stat()
245 *signal = (radio->buffer[3] & 0xf0) << 8; in amradio_get_stat()
256 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_disconnect() local
258 mutex_lock(&radio->lock); in usb_amradio_disconnect()
259 video_unregister_device(&radio->vdev); in usb_amradio_disconnect()
260 amradio_set_mute(radio, true); in usb_amradio_disconnect()
262 v4l2_device_disconnect(&radio->v4l2_dev); in usb_amradio_disconnect()
263 mutex_unlock(&radio->lock); in usb_amradio_disconnect()
264 v4l2_device_put(&radio->v4l2_dev); in usb_amradio_disconnect()
271 struct amradio_device *radio = video_drvdata(file); in vidioc_querycap() local
275 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); in vidioc_querycap()
286 struct amradio_device *radio = video_drvdata(file); in vidioc_g_tuner() local
294 retval = amradio_get_stat(radio, &is_stereo, &v->signal); in vidioc_g_tuner()
305 v->audmode = radio->stereo ? in vidioc_g_tuner()
314 struct amradio_device *radio = video_drvdata(file); in vidioc_s_tuner() local
322 return amradio_set_stereo(radio, WANT_MONO); in vidioc_s_tuner()
324 return amradio_set_stereo(radio, WANT_STEREO); in vidioc_s_tuner()
332 struct amradio_device *radio = video_drvdata(file); in vidioc_s_frequency() local
336 return amradio_set_freq(radio, f->frequency); in vidioc_s_frequency()
343 struct amradio_device *radio = video_drvdata(file); in vidioc_g_frequency() local
348 f->frequency = radio->curfreq; in vidioc_g_frequency()
359 struct amradio_device *radio = video_drvdata(file); in vidioc_s_hw_freq_seek() local
369 retval = amradio_send_cmd(radio, in vidioc_s_hw_freq_seek()
373 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
374 retval = amradio_send_cmd(radio, in vidioc_s_hw_freq_seek()
389 retval = amradio_send_cmd(radio, AMRADIO_GET_READY_FLAG, in vidioc_s_hw_freq_seek()
393 amradio_send_cmd(radio, AMRADIO_GET_FREQ, 0, NULL, 0, true); in vidioc_s_hw_freq_seek()
394 if (radio->buffer[1] || radio->buffer[2]) { in vidioc_s_hw_freq_seek()
396 radio->curfreq = (radio->buffer[1] << 8) | radio->buffer[2]; in vidioc_s_hw_freq_seek()
397 radio->curfreq = (radio->curfreq - 0x10) * 200; in vidioc_s_hw_freq_seek()
398 amradio_send_cmd(radio, AMRADIO_STOP_SEARCH, in vidioc_s_hw_freq_seek()
400 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
405 amradio_send_cmd(radio, AMRADIO_STOP_SEARCH, 0, NULL, 0, false); in vidioc_s_hw_freq_seek()
406 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
412 struct amradio_device *radio = in usb_amradio_s_ctrl() local
417 return amradio_set_mute(radio, ctrl->val); in usb_amradio_s_ctrl()
423 static int usb_amradio_init(struct amradio_device *radio) in usb_amradio_init() argument
427 retval = amradio_set_mute(radio, true); in usb_amradio_init()
430 retval = amradio_set_stereo(radio, true); in usb_amradio_init()
433 retval = amradio_set_freq(radio, radio->curfreq); in usb_amradio_init()
439 amradio_dev_err(&radio->vdev.dev, "initialization failed\n"); in usb_amradio_init()
446 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_suspend() local
448 mutex_lock(&radio->lock); in usb_amradio_suspend()
449 if (!radio->muted) { in usb_amradio_suspend()
450 amradio_set_mute(radio, true); in usb_amradio_suspend()
451 radio->muted = false; in usb_amradio_suspend()
453 mutex_unlock(&radio->lock); in usb_amradio_suspend()
462 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_resume() local
464 mutex_lock(&radio->lock); in usb_amradio_resume()
465 amradio_set_stereo(radio, radio->stereo); in usb_amradio_resume()
466 amradio_set_freq(radio, radio->curfreq); in usb_amradio_resume()
468 if (!radio->muted) in usb_amradio_resume()
469 amradio_set_mute(radio, false); in usb_amradio_resume()
471 mutex_unlock(&radio->lock); in usb_amradio_resume()
504 struct amradio_device *radio = to_amradio_dev(v4l2_dev); in usb_amradio_release() local
507 v4l2_ctrl_handler_free(&radio->hdl); in usb_amradio_release()
508 v4l2_device_unregister(&radio->v4l2_dev); in usb_amradio_release()
509 kfree(radio->buffer); in usb_amradio_release()
510 kfree(radio); in usb_amradio_release()
517 struct amradio_device *radio; in usb_amradio_probe() local
520 radio = kzalloc(sizeof(struct amradio_device), GFP_KERNEL); in usb_amradio_probe()
522 if (!radio) { in usb_amradio_probe()
528 radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL); in usb_amradio_probe()
530 if (!radio->buffer) { in usb_amradio_probe()
536 retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev); in usb_amradio_probe()
542 v4l2_ctrl_handler_init(&radio->hdl, 1); in usb_amradio_probe()
543 v4l2_ctrl_new_std(&radio->hdl, &usb_amradio_ctrl_ops, in usb_amradio_probe()
545 if (radio->hdl.error) { in usb_amradio_probe()
546 retval = radio->hdl.error; in usb_amradio_probe()
550 mutex_init(&radio->lock); in usb_amradio_probe()
552 radio->v4l2_dev.ctrl_handler = &radio->hdl; in usb_amradio_probe()
553 radio->v4l2_dev.release = usb_amradio_release; in usb_amradio_probe()
554 strlcpy(radio->vdev.name, radio->v4l2_dev.name, in usb_amradio_probe()
555 sizeof(radio->vdev.name)); in usb_amradio_probe()
556 radio->vdev.v4l2_dev = &radio->v4l2_dev; in usb_amradio_probe()
557 radio->vdev.fops = &usb_amradio_fops; in usb_amradio_probe()
558 radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops; in usb_amradio_probe()
559 radio->vdev.release = video_device_release_empty; in usb_amradio_probe()
560 radio->vdev.lock = &radio->lock; in usb_amradio_probe()
562 radio->usbdev = interface_to_usbdev(intf); in usb_amradio_probe()
563 radio->intf = intf; in usb_amradio_probe()
564 usb_set_intfdata(intf, &radio->v4l2_dev); in usb_amradio_probe()
565 radio->curfreq = 95.16 * FREQ_MUL; in usb_amradio_probe()
567 video_set_drvdata(&radio->vdev, radio); in usb_amradio_probe()
568 retval = usb_amradio_init(radio); in usb_amradio_probe()
572 retval = video_register_device(&radio->vdev, VFL_TYPE_RADIO, in usb_amradio_probe()
582 v4l2_ctrl_handler_free(&radio->hdl); in usb_amradio_probe()
584 v4l2_device_unregister(&radio->v4l2_dev); in usb_amradio_probe()
586 kfree(radio->buffer); in usb_amradio_probe()
588 kfree(radio); in usb_amradio_probe()