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: Alexey Klimov <klimov.linux@gmail.com> Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
8edafcc63d
commit
db821804f4
@@ -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 = {
|
|||||||
.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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user