Commit db821804 authored by Alexey Klimov's avatar Alexey Klimov Committed by Mauro Carvalho Chehab

V4L/DVB (10458): radio-mr800: move radio start and stop in one function

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.
Signed-off-by: default avatarAlexey Klimov <klimov.linux@gmail.com>
Signed-off-by: default avatarDouglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 8edafcc6
...@@ -87,6 +87,16 @@ devices, that would be 76 and 91. */ ...@@ -87,6 +87,16 @@ devices, that would be 76 and 91. */
#define FREQ_MAX 108.0 #define FREQ_MAX 108.0
#define FREQ_MUL 16000 #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 */ /* module parameter */
static int radio_nr = -1; static int radio_nr = -1;
module_param(radio_nr, int, 0); module_param(radio_nr, int, 0);
...@@ -169,40 +179,8 @@ static struct usb_driver usb_amradio_driver = { ...@@ -169,40 +179,8 @@ static struct usb_driver usb_amradio_driver = {
.supports_autosuspend = 0, .supports_autosuspend = 0,
}; };
/* switch on radio. Send 8 bytes to device. */ /* switch on/off the radio. Send 8 bytes to device */
static int amradio_start(struct amradio_device *radio) static int amradio_set_mute(struct amradio_device *radio, char argument)
{
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)
{ {
int retval; int retval;
int size; int size;
...@@ -217,8 +195,8 @@ static int amradio_stop(struct amradio_device *radio) ...@@ -217,8 +195,8 @@ static int amradio_stop(struct amradio_device *radio)
radio->buffer[1] = 0x55; radio->buffer[1] = 0x55;
radio->buffer[2] = 0xaa; radio->buffer[2] = 0xaa;
radio->buffer[3] = 0x00; radio->buffer[3] = 0x00;
radio->buffer[4] = 0xab; radio->buffer[4] = AMRADIO_SET_MUTE;
radio->buffer[5] = 0x01; radio->buffer[5] = argument;
radio->buffer[6] = 0x00; radio->buffer[6] = 0x00;
radio->buffer[7] = 0x00; radio->buffer[7] = 0x00;
...@@ -230,7 +208,7 @@ static int amradio_stop(struct amradio_device *radio) ...@@ -230,7 +208,7 @@ static int amradio_stop(struct amradio_device *radio)
return retval; return retval;
} }
radio->muted = 1; radio->muted = argument;
mutex_unlock(&radio->lock); mutex_unlock(&radio->lock);
...@@ -451,14 +429,14 @@ static int vidioc_s_ctrl(struct file *file, void *priv, ...@@ -451,14 +429,14 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
switch (ctrl->id) { switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE: case V4L2_CID_AUDIO_MUTE:
if (ctrl->value) { if (ctrl->value) {
retval = amradio_stop(radio); retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev->dev,
"amradio_stop failed\n"); "amradio_stop failed\n");
return -1; return -1;
} }
} else { } else {
retval = amradio_start(radio); retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev->dev,
"amradio_start failed\n"); "amradio_start failed\n");
...@@ -517,7 +495,7 @@ static int usb_amradio_open(struct file *file) ...@@ -517,7 +495,7 @@ static int usb_amradio_open(struct file *file)
radio->users = 1; radio->users = 1;
radio->muted = 1; radio->muted = 1;
retval = amradio_start(radio); retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) { if (retval < 0) {
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev->dev,
"radio did not start up properly\n"); "radio did not start up properly\n");
...@@ -547,7 +525,7 @@ static int usb_amradio_close(struct file *file) ...@@ -547,7 +525,7 @@ static int usb_amradio_close(struct file *file)
radio->users = 0; radio->users = 0;
if (!radio->removed) { if (!radio->removed) {
retval = amradio_stop(radio); retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) if (retval < 0)
amradio_dev_warn(&radio->videodev->dev, amradio_dev_warn(&radio->videodev->dev,
"amradio_stop failed\n"); "amradio_stop failed\n");
...@@ -562,7 +540,7 @@ static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message) ...@@ -562,7 +540,7 @@ static int usb_amradio_suspend(struct usb_interface *intf, pm_message_t message)
struct amradio_device *radio = usb_get_intfdata(intf); struct amradio_device *radio = usb_get_intfdata(intf);
int retval; int retval;
retval = amradio_stop(radio); retval = amradio_set_mute(radio, AMRADIO_STOP);
if (retval < 0) if (retval < 0)
dev_warn(&intf->dev, "amradio_stop failed\n"); dev_warn(&intf->dev, "amradio_stop failed\n");
...@@ -577,7 +555,7 @@ static int usb_amradio_resume(struct usb_interface *intf) ...@@ -577,7 +555,7 @@ static int usb_amradio_resume(struct usb_interface *intf)
struct amradio_device *radio = usb_get_intfdata(intf); struct amradio_device *radio = usb_get_intfdata(intf);
int retval; int retval;
retval = amradio_start(radio); retval = amradio_set_mute(radio, AMRADIO_START);
if (retval < 0) if (retval < 0)
dev_warn(&intf->dev, "amradio_start failed\n"); dev_warn(&intf->dev, "amradio_start failed\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment