summaryrefslogtreecommitdiff
path: root/linux/drivers/media/radio/radio-mr800.c
diff options
context:
space:
mode:
authorDouglas Schilling Landgraf <dougsland@redhat.com>2009-02-05 09:53:02 -0200
committerDouglas Schilling Landgraf <dougsland@redhat.com>2009-02-05 09:53:02 -0200
commitb01c0f56c2b1a2db922b500adf902bbcde73e021 (patch)
tree149806fd9a693046ab9f8892f908606676695534 /linux/drivers/media/radio/radio-mr800.c
parent97f4aaf0e577018bba36f877b081e05c6be0567b (diff)
downloadmediapointer-dvb-s2-b01c0f56c2b1a2db922b500adf902bbcde73e021.tar.gz
mediapointer-dvb-s2-b01c0f56c2b1a2db922b500adf902bbcde73e021.tar.bz2
radio-mr800: move radio start and stop in one function
From: Alexey Klimov <klimov.linux@gmail.com> Patch introduces new amradio_set_mute function. Amradio_start and amradio_stop removed. This makes driver more flexible and it's useful for next changes. Priority: normal Signed-off-by: Alexey Klimov <klimov.linux@gmail.com> Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Diffstat (limited to 'linux/drivers/media/radio/radio-mr800.c')
-rw-r--r--linux/drivers/media/radio/radio-mr800.c64
1 files changed, 21 insertions, 43 deletions
diff --git a/linux/drivers/media/radio/radio-mr800.c b/linux/drivers/media/radio/radio-mr800.c
index 83f4f2b67..5e5aafec1 100644
--- a/linux/drivers/media/radio/radio-mr800.c
+++ b/linux/drivers/media/radio/radio-mr800.c
@@ -88,6 +88,16 @@ devices, that would be 76 and 91. */
#define FREQ_MAX 108.0
#define FREQ_MUL 16000
+/*
+ * Commands that device should understand
+ * List isnt full and will be updated with implementation of new functions
+ */
+#define AMRADIO_SET_MUTE 0xab
+
+/* Comfortable defines for amradio_set_mute */
+#define AMRADIO_START 0x00
+#define AMRADIO_STOP 0x01
+
/* module parameter */
static int radio_nr = -1;
module_param(radio_nr, int, 0);
@@ -172,40 +182,8 @@ static struct usb_driver usb_amradio_driver = {
.supports_autosuspend = 0,
};
-/* switch on radio. Send 8 bytes to device. */
-static int amradio_start(struct amradio_device *radio)
-{
- int retval;
- int size;
-
- mutex_lock(&radio->lock);
-
- radio->buffer[0] = 0x00;
- radio->buffer[1] = 0x55;
- radio->buffer[2] = 0xaa;
- radio->buffer[3] = 0x00;
- radio->buffer[4] = 0xab;
- radio->buffer[5] = 0x00;
- radio->buffer[6] = 0x00;
- radio->buffer[7] = 0x00;
-
- retval = usb_bulk_msg(radio->usbdev, usb_sndintpipe(radio->usbdev, 2),
- (void *) (radio->buffer), BUFFER_LENGTH, &size, USB_TIMEOUT);
-
- if (retval) {
- mutex_unlock(&radio->lock);
- return retval;
- }
-
- radio->muted = 0;
-
- mutex_unlock(&radio->lock);
-
- return retval;
-}
-
-/* switch off radio */
-static int amradio_stop(struct amradio_device *radio)
+/* switch on/off the radio. Send 8 bytes to device */
+static int amradio_set_mute(struct amradio_device *radio, char argument)
{
int retval;
int size;
@@ -220,8 +198,8 @@ static int amradio_stop(struct amradio_device *radio)
radio->buffer[1] = 0x55;
radio->buffer[2] = 0xaa;
radio->buffer[3] = 0x00;
- radio->buffer[4] = 0xab;
- radio->buffer[5] = 0x01;
+ radio->buffer[4] = AMRADIO_SET_MUTE;
+ radio->buffer[5] = argument;
radio->buffer[6] = 0x00;
radio->buffer[7] = 0x00;
@@ -233,7 +211,7 @@ static int amradio_stop(struct amradio_device *radio)
return retval;
}
- radio->muted = 1;
+ radio->muted = argument;
mutex_unlock(&radio->lock);
@@ -454,14 +432,14 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
if (ctrl->value) {
- retval = amradio_stop(radio);
+ retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev,
"amradio_stop failed\n");
return -1;
}
} else {
- retval = amradio_start(radio);
+ retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev,
"amradio_start failed\n");
@@ -520,7 +498,7 @@ static int usb_amradio_open(struct file *file)
radio->users = 1;
radio->muted = 1;
- retval = amradio_start(radio);
+ retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev,
"radio did not start up properly\n");
@@ -550,7 +528,7 @@ static int usb_amradio_close(struct file *file)
radio->users = 0;
if (!radio->removed) {
- retval = amradio_stop(radio);
+ retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0)
amradio_dev_warn(&radio->videodev->dev,
"amradio_stop failed\n");
@@ -565,7 +543,7 @@ static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message)
struct amradio_device *radio = usb_get_intfdata(intf);
int retval;
- retval = amradio_stop(radio);
+ retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0)
dev_warn(&intf->dev, "amradio_stop failed\n");
@@ -580,7 +558,7 @@ static int usb_amradio_resume(struct usb_interface *intf)
struct amradio_device *radio = usb_get_intfdata(intf);
int retval;
- retval = amradio_start(radio);
+ retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0)
dev_warn(&intf->dev, "amradio_start failed\n");