• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/media/radio/si470x/

Lines Matching refs:radio

2  *  drivers/media/radio/si470x/radio-si470x-usb.c
34 #define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers"
42 #include "radio-si470x.h"
210 static int si470x_get_report(struct si470x_device *radio, void *buf, int size)
215 retval = usb_control_msg(radio->usbdev,
216 usb_rcvctrlpipe(radio->usbdev, 0),
223 dev_warn(&radio->intf->dev,
233 static int si470x_set_report(struct si470x_device *radio, void *buf, int size)
238 retval = usb_control_msg(radio->usbdev,
239 usb_sndctrlpipe(radio->usbdev, 0),
246 dev_warn(&radio->intf->dev,
256 int si470x_get_register(struct si470x_device *radio, int regnr)
263 retval = si470x_get_report(radio, (void *) &buf, sizeof(buf));
266 radio->registers[regnr] = get_unaligned_be16(&buf[1]);
275 int si470x_set_register(struct si470x_device *radio, int regnr)
281 put_unaligned_be16(radio->registers[regnr], &buf[1]);
283 retval = si470x_set_report(radio, (void *) &buf, sizeof(buf));
297 static int si470x_get_all_registers(struct si470x_device *radio)
305 retval = si470x_get_report(radio, (void *) &buf, sizeof(buf));
309 radio->registers[regnr] = get_unaligned_be16(
324 static int si470x_set_led_state(struct si470x_device *radio,
334 retval = si470x_set_report(radio, (void *) &buf, sizeof(buf));
348 static int si470x_get_scratch_page_versions(struct si470x_device *radio)
355 retval = si470x_get_report(radio, (void *) &buf, sizeof(buf));
358 dev_warn(&radio->intf->dev, "si470x_get_scratch: "
361 radio->software_version = buf[1];
362 radio->hardware_version = buf[2];
375 * si470x_disconnect_check - check whether radio disconnects
377 int si470x_disconnect_check(struct si470x_device *radio)
379 if (radio->disconnected)
398 struct si470x_device *radio = urb->context;
413 dev_warn(&radio->intf->dev,
420 if (radio->disconnected)
422 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
429 radio->registers[STATUSRSSI + regnr] =
430 get_unaligned_be16(&radio->int_in_buffer[
433 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSR) == 0) {
437 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSS) == 0) {
444 bler = (radio->registers[STATUSRSSI] &
446 rds = radio->registers[RDSA];
449 bler = (radio->registers[READCHAN] &
451 rds = radio->registers[RDSB];
454 bler = (radio->registers[READCHAN] &
456 rds = radio->registers[RDSC];
459 bler = (radio->registers[READCHAN] &
461 rds = radio->registers[RDSD];
475 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3);
476 radio->wr_index += 3;
479 if (radio->wr_index >= radio->buf_size)
480 radio->wr_index = 0;
483 if (radio->wr_index == radio->rd_index) {
485 radio->rd_index += 3;
486 if (radio->rd_index >= radio->buf_size)
487 radio->rd_index = 0;
490 if (radio->wr_index != radio->rd_index)
491 wake_up_interruptible(&radio->read_queue);
496 if (radio->int_in_running && radio->usbdev) {
497 retval = usb_submit_urb(radio->int_in_urb, GFP_ATOMIC);
499 dev_warn(&radio->intf->dev,
501 radio->int_in_running = 0;
517 struct si470x_device *radio = video_drvdata(file);
521 radio->users++;
523 retval = usb_autopm_get_interface(radio->intf);
525 radio->users--;
530 if (radio->users == 1) {
531 /* start radio */
532 retval = si470x_start(radio);
534 usb_autopm_put_interface(radio->intf);
539 usb_fill_int_urb(radio->int_in_urb, radio->usbdev,
540 usb_rcvintpipe(radio->usbdev,
541 radio->int_in_endpoint->bEndpointAddress),
542 radio->int_in_buffer,
543 le16_to_cpu(radio->int_in_endpoint->wMaxPacketSize),
545 radio,
546 radio->int_in_endpoint->bInterval);
548 radio->int_in_running = 1;
551 retval = usb_submit_urb(radio->int_in_urb, GFP_KERNEL);
553 dev_info(&radio->intf->dev,
555 radio->int_in_running = 0;
556 usb_autopm_put_interface(radio->intf);
571 struct si470x_device *radio = video_drvdata(file);
575 if (!radio) {
580 mutex_lock(&radio->disconnect_lock);
581 radio->users--;
582 if (radio->users == 0) {
584 if (radio->int_in_running) {
585 radio->int_in_running = 0;
586 if (radio->int_in_urb)
587 usb_kill_urb(radio->int_in_urb);
590 if (radio->disconnected) {
591 video_unregister_device(radio->videodev);
592 kfree(radio->int_in_buffer);
593 kfree(radio->buffer);
594 mutex_unlock(&radio->disconnect_lock);
595 kfree(radio);
600 wake_up_interruptible(&radio->read_queue);
602 /* stop radio */
603 retval = si470x_stop(radio);
604 usb_autopm_put_interface(radio->intf);
606 mutex_unlock(&radio->disconnect_lock);
623 struct si470x_device *radio = video_drvdata(file);
627 usb_make_path(radio->usbdev, capability->bus_info,
648 struct si470x_device *radio;
655 radio = kzalloc(sizeof(struct si470x_device), GFP_KERNEL);
656 if (!radio) {
660 radio->users = 0;
661 radio->disconnected = 0;
662 radio->usbdev = interface_to_usbdev(intf);
663 radio->intf = intf;
664 mutex_init(&radio->disconnect_lock);
665 mutex_init(&radio->lock);
675 radio->int_in_endpoint = endpoint;
677 if (!radio->int_in_endpoint) {
683 int_end_size = le16_to_cpu(radio->int_in_endpoint->wMaxPacketSize);
685 radio->int_in_buffer = kmalloc(int_end_size, GFP_KERNEL);
686 if (!radio->int_in_buffer) {
692 radio->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
693 if (!radio->int_in_urb) {
700 radio->videodev = video_device_alloc();
701 if (!radio->videodev) {
705 memcpy(radio->videodev, &si470x_viddev_template,
707 video_set_drvdata(radio->videodev, radio);
710 if (si470x_get_all_registers(radio) < 0) {
715 radio->registers[DEVICEID], radio->registers[CHIPID]);
716 if ((radio->registers[CHIPID] & CHIPID_FIRMWARE) < RADIO_FW_VERSION) {
722 radio->registers[CHIPID] & CHIPID_FIRMWARE);
727 if (si470x_get_scratch_page_versions(radio) < 0) {
732 radio->software_version, radio->hardware_version);
733 if (radio->software_version < RADIO_SW_VERSION) {
739 radio->software_version);
742 if (radio->hardware_version < RADIO_HW_VERSION) {
748 radio->hardware_version);
762 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */
765 si470x_set_led_state(radio, BLINK_GREEN_LED);
768 radio->buf_size = rds_buf * 3;
769 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
770 if (!radio->buffer) {
776 radio->wr_index = 0;
777 radio->rd_index = 0;
778 init_waitqueue_head(&radio->read_queue);
781 retval = video_register_device(radio->videodev, VFL_TYPE_RADIO,
787 usb_set_intfdata(intf, radio);
791 kfree(radio->buffer);
793 video_device_release(radio->videodev);
795 kfree(radio->int_in_buffer);
797 kfree(radio);
831 struct si470x_device *radio = usb_get_intfdata(intf);
833 mutex_lock(&radio->disconnect_lock);
834 radio->disconnected = 1;
836 if (radio->users == 0) {
838 si470x_set_led_state(radio, BLINK_ORANGE_LED);
841 usb_free_urb(radio->int_in_urb);
843 kfree(radio->int_in_buffer);
844 video_unregister_device(radio->videodev);
845 kfree(radio->buffer);
846 mutex_unlock(&radio->disconnect_lock);
847 kfree(radio);
849 mutex_unlock(&radio->disconnect_lock);