diff options
-rw-r--r-- | drivers/media/radio/radio-si470x.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c index fd81a97a0fdb..4dfed6aa2dbc 100644 --- a/drivers/media/radio/radio-si470x.c +++ b/drivers/media/radio/radio-si470x.c | |||
@@ -101,11 +101,13 @@ | |||
101 | * 2009-01-31 Bob Ross <pigiron@gmx.com> | 101 | * 2009-01-31 Bob Ross <pigiron@gmx.com> |
102 | * - correction of stereo detection/setting | 102 | * - correction of stereo detection/setting |
103 | * - correction of signal strength indicator scaling | 103 | * - correction of signal strength indicator scaling |
104 | * 2009-01-31 Rick Bronson <rick@efn.org> | ||
105 | * Tobias Lorenz <tobias.lorenz@gmx.net> | ||
106 | * - add LED status output | ||
104 | * | 107 | * |
105 | * ToDo: | 108 | * ToDo: |
106 | * - add firmware download/update support | 109 | * - add firmware download/update support |
107 | * - RDS support: interrupt mode, instead of polling | 110 | * - RDS support: interrupt mode, instead of polling |
108 | * - add LED status output (check if that's not already done in firmware) | ||
109 | */ | 111 | */ |
110 | 112 | ||
111 | 113 | ||
@@ -885,6 +887,30 @@ static int si470x_rds_on(struct si470x_device *radio) | |||
885 | 887 | ||
886 | 888 | ||
887 | /************************************************************************** | 889 | /************************************************************************** |
890 | * General Driver Functions - LED_REPORT | ||
891 | **************************************************************************/ | ||
892 | |||
893 | /* | ||
894 | * si470x_set_led_state - sets the led state | ||
895 | */ | ||
896 | static int si470x_set_led_state(struct si470x_device *radio, | ||
897 | unsigned char led_state) | ||
898 | { | ||
899 | unsigned char buf[LED_REPORT_SIZE]; | ||
900 | int retval; | ||
901 | |||
902 | buf[0] = LED_REPORT; | ||
903 | buf[1] = LED_COMMAND; | ||
904 | buf[2] = led_state; | ||
905 | |||
906 | retval = si470x_set_report(radio, (void *) &buf, sizeof(buf)); | ||
907 | |||
908 | return (retval < 0) ? -EINVAL : 0; | ||
909 | } | ||
910 | |||
911 | |||
912 | |||
913 | /************************************************************************** | ||
888 | * RDS Driver Functions | 914 | * RDS Driver Functions |
889 | **************************************************************************/ | 915 | **************************************************************************/ |
890 | 916 | ||
@@ -1637,6 +1663,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf, | |||
1637 | /* set initial frequency */ | 1663 | /* set initial frequency */ |
1638 | si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ | 1664 | si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ |
1639 | 1665 | ||
1666 | /* set led to connect state */ | ||
1667 | si470x_set_led_state(radio, BLINK_GREEN_LED); | ||
1668 | |||
1640 | /* rds buffer allocation */ | 1669 | /* rds buffer allocation */ |
1641 | radio->buf_size = rds_buf * 3; | 1670 | radio->buf_size = rds_buf * 3; |
1642 | radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); | 1671 | radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); |
@@ -1720,6 +1749,9 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf) | |||
1720 | cancel_delayed_work_sync(&radio->work); | 1749 | cancel_delayed_work_sync(&radio->work); |
1721 | usb_set_intfdata(intf, NULL); | 1750 | usb_set_intfdata(intf, NULL); |
1722 | if (radio->users == 0) { | 1751 | if (radio->users == 0) { |
1752 | /* set led to disconnect state */ | ||
1753 | si470x_set_led_state(radio, BLINK_ORANGE_LED); | ||
1754 | |||
1723 | video_unregister_device(radio->videodev); | 1755 | video_unregister_device(radio->videodev); |
1724 | kfree(radio->buffer); | 1756 | kfree(radio->buffer); |
1725 | kfree(radio); | 1757 | kfree(radio); |