Lines Matching refs:radio

135 static int amradio_send_cmd(struct amradio_device *radio, u8 cmd, u8 arg,  in amradio_send_cmd()  argument
141 radio->buffer[0] = 0x00; in amradio_send_cmd()
142 radio->buffer[1] = 0x55; in amradio_send_cmd()
143 radio->buffer[2] = 0xaa; in amradio_send_cmd()
144 radio->buffer[3] = extralen; in amradio_send_cmd()
145 radio->buffer[4] = cmd; in amradio_send_cmd()
146 radio->buffer[5] = arg; in amradio_send_cmd()
147 radio->buffer[6] = 0x00; in amradio_send_cmd()
148 radio->buffer[7] = extra || reply ? 8 : 0; in amradio_send_cmd()
150 retval = usb_bulk_msg(radio->usbdev, usb_sndintpipe(radio->usbdev, 2), in amradio_send_cmd()
151 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
154 if (video_is_registered(&radio->vdev)) in amradio_send_cmd()
155 amradio_dev_warn(&radio->vdev.dev, in amradio_send_cmd()
163 memcpy(radio->buffer, extra, extralen); in amradio_send_cmd()
164 memset(radio->buffer + extralen, 0, 8 - extralen); in amradio_send_cmd()
165 retval = usb_bulk_msg(radio->usbdev, usb_sndintpipe(radio->usbdev, 2), in amradio_send_cmd()
166 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
168 memset(radio->buffer, 0, 8); in amradio_send_cmd()
169 retval = usb_bulk_msg(radio->usbdev, usb_rcvbulkpipe(radio->usbdev, 0x81), in amradio_send_cmd()
170 radio->buffer, BUFFER_LENGTH, &size, USB_TIMEOUT); in amradio_send_cmd()
174 if (video_is_registered(&radio->vdev) && cmd != AMRADIO_GET_READY_FLAG) in amradio_send_cmd()
175 amradio_dev_warn(&radio->vdev.dev, "follow-up to cmd %02x failed\n", cmd); in amradio_send_cmd()
180 static int amradio_set_mute(struct amradio_device *radio, bool mute) in amradio_set_mute() argument
182 int ret = amradio_send_cmd(radio, in amradio_set_mute()
186 radio->muted = mute; in amradio_set_mute()
191 static int amradio_set_freq(struct amradio_device *radio, int freq) in amradio_set_freq() argument
206 retval = amradio_send_cmd(radio, AMRADIO_SET_FREQ, 0, buf, 3, false); in amradio_set_freq()
209 radio->curfreq = freq; in amradio_set_freq()
214 static int amradio_set_stereo(struct amradio_device *radio, bool stereo) in amradio_set_stereo() argument
216 int ret = amradio_send_cmd(radio, in amradio_set_stereo()
220 radio->stereo = stereo; in amradio_set_stereo()
224 static int amradio_get_stat(struct amradio_device *radio, bool *is_stereo, u32 *signal) in amradio_get_stat() argument
226 int ret = amradio_send_cmd(radio, in amradio_get_stat()
231 *is_stereo = radio->buffer[2] >> 7; in amradio_get_stat()
232 *signal = (radio->buffer[3] & 0xf0) << 8; in amradio_get_stat()
243 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_disconnect() local
245 mutex_lock(&radio->lock); in usb_amradio_disconnect()
246 video_unregister_device(&radio->vdev); in usb_amradio_disconnect()
247 amradio_set_mute(radio, true); in usb_amradio_disconnect()
249 v4l2_device_disconnect(&radio->v4l2_dev); in usb_amradio_disconnect()
250 mutex_unlock(&radio->lock); in usb_amradio_disconnect()
251 v4l2_device_put(&radio->v4l2_dev); in usb_amradio_disconnect()
258 struct amradio_device *radio = video_drvdata(file); in vidioc_querycap() local
262 usb_make_path(radio->usbdev, v->bus_info, sizeof(v->bus_info)); in vidioc_querycap()
270 struct amradio_device *radio = video_drvdata(file); in vidioc_g_tuner() local
278 retval = amradio_get_stat(radio, &is_stereo, &v->signal); in vidioc_g_tuner()
289 v->audmode = radio->stereo ? in vidioc_g_tuner()
298 struct amradio_device *radio = video_drvdata(file); in vidioc_s_tuner() local
306 return amradio_set_stereo(radio, WANT_MONO); in vidioc_s_tuner()
308 return amradio_set_stereo(radio, WANT_STEREO); in vidioc_s_tuner()
316 struct amradio_device *radio = video_drvdata(file); in vidioc_s_frequency() local
320 return amradio_set_freq(radio, f->frequency); in vidioc_s_frequency()
327 struct amradio_device *radio = video_drvdata(file); in vidioc_g_frequency() local
332 f->frequency = radio->curfreq; in vidioc_g_frequency()
343 struct amradio_device *radio = video_drvdata(file); in vidioc_s_hw_freq_seek() local
353 retval = amradio_send_cmd(radio, in vidioc_s_hw_freq_seek()
357 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
358 retval = amradio_send_cmd(radio, in vidioc_s_hw_freq_seek()
373 retval = amradio_send_cmd(radio, AMRADIO_GET_READY_FLAG, in vidioc_s_hw_freq_seek()
377 amradio_send_cmd(radio, AMRADIO_GET_FREQ, 0, NULL, 0, true); in vidioc_s_hw_freq_seek()
378 if (radio->buffer[1] || radio->buffer[2]) { in vidioc_s_hw_freq_seek()
380 radio->curfreq = (radio->buffer[1] << 8) | radio->buffer[2]; in vidioc_s_hw_freq_seek()
381 radio->curfreq = (radio->curfreq - 0x10) * 200; in vidioc_s_hw_freq_seek()
382 amradio_send_cmd(radio, AMRADIO_STOP_SEARCH, in vidioc_s_hw_freq_seek()
384 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
389 amradio_send_cmd(radio, AMRADIO_STOP_SEARCH, 0, NULL, 0, false); in vidioc_s_hw_freq_seek()
390 amradio_set_freq(radio, radio->curfreq); in vidioc_s_hw_freq_seek()
396 struct amradio_device *radio = in usb_amradio_s_ctrl() local
401 return amradio_set_mute(radio, ctrl->val); in usb_amradio_s_ctrl()
407 static int usb_amradio_init(struct amradio_device *radio) in usb_amradio_init() argument
411 retval = amradio_set_mute(radio, true); in usb_amradio_init()
414 retval = amradio_set_stereo(radio, true); in usb_amradio_init()
417 retval = amradio_set_freq(radio, radio->curfreq); in usb_amradio_init()
423 amradio_dev_err(&radio->vdev.dev, "initialization failed\n"); in usb_amradio_init()
430 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_suspend() local
432 mutex_lock(&radio->lock); in usb_amradio_suspend()
433 if (!radio->muted) { in usb_amradio_suspend()
434 amradio_set_mute(radio, true); in usb_amradio_suspend()
435 radio->muted = false; in usb_amradio_suspend()
437 mutex_unlock(&radio->lock); in usb_amradio_suspend()
446 struct amradio_device *radio = to_amradio_dev(usb_get_intfdata(intf)); in usb_amradio_resume() local
448 mutex_lock(&radio->lock); in usb_amradio_resume()
449 amradio_set_stereo(radio, radio->stereo); in usb_amradio_resume()
450 amradio_set_freq(radio, radio->curfreq); in usb_amradio_resume()
452 if (!radio->muted) in usb_amradio_resume()
453 amradio_set_mute(radio, false); in usb_amradio_resume()
455 mutex_unlock(&radio->lock); in usb_amradio_resume()
488 struct amradio_device *radio = to_amradio_dev(v4l2_dev); in usb_amradio_release() local
491 v4l2_ctrl_handler_free(&radio->hdl); in usb_amradio_release()
492 v4l2_device_unregister(&radio->v4l2_dev); in usb_amradio_release()
493 kfree(radio->buffer); in usb_amradio_release()
494 kfree(radio); in usb_amradio_release()
501 struct amradio_device *radio; in usb_amradio_probe() local
504 radio = kzalloc(sizeof(struct amradio_device), GFP_KERNEL); in usb_amradio_probe()
506 if (!radio) { in usb_amradio_probe()
512 radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL); in usb_amradio_probe()
514 if (!radio->buffer) { in usb_amradio_probe()
520 retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev); in usb_amradio_probe()
526 v4l2_ctrl_handler_init(&radio->hdl, 1); in usb_amradio_probe()
527 v4l2_ctrl_new_std(&radio->hdl, &usb_amradio_ctrl_ops, in usb_amradio_probe()
529 if (radio->hdl.error) { in usb_amradio_probe()
530 retval = radio->hdl.error; in usb_amradio_probe()
534 mutex_init(&radio->lock); in usb_amradio_probe()
536 radio->v4l2_dev.ctrl_handler = &radio->hdl; in usb_amradio_probe()
537 radio->v4l2_dev.release = usb_amradio_release; in usb_amradio_probe()
538 strscpy(radio->vdev.name, radio->v4l2_dev.name, in usb_amradio_probe()
539 sizeof(radio->vdev.name)); in usb_amradio_probe()
540 radio->vdev.v4l2_dev = &radio->v4l2_dev; in usb_amradio_probe()
541 radio->vdev.fops = &usb_amradio_fops; in usb_amradio_probe()
542 radio->vdev.ioctl_ops = &usb_amradio_ioctl_ops; in usb_amradio_probe()
543 radio->vdev.release = video_device_release_empty; in usb_amradio_probe()
544 radio->vdev.lock = &radio->lock; in usb_amradio_probe()
545 radio->vdev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER | in usb_amradio_probe()
548 radio->usbdev = interface_to_usbdev(intf); in usb_amradio_probe()
549 radio->intf = intf; in usb_amradio_probe()
550 usb_set_intfdata(intf, &radio->v4l2_dev); in usb_amradio_probe()
551 radio->curfreq = 95.16 * FREQ_MUL; in usb_amradio_probe()
553 video_set_drvdata(&radio->vdev, radio); in usb_amradio_probe()
554 retval = usb_amradio_init(radio); in usb_amradio_probe()
558 retval = video_register_device(&radio->vdev, VFL_TYPE_RADIO, in usb_amradio_probe()
568 v4l2_ctrl_handler_free(&radio->hdl); in usb_amradio_probe()
570 v4l2_device_unregister(&radio->v4l2_dev); in usb_amradio_probe()
572 kfree(radio->buffer); in usb_amradio_probe()
574 kfree(radio); in usb_amradio_probe()