aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/radio
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/radio')
-rw-r--r--drivers/media/radio/dsbr100.c62
-rw-r--r--drivers/media/radio/radio-mr800.c5
2 files changed, 42 insertions, 25 deletions
diff --git a/drivers/media/radio/dsbr100.c b/drivers/media/radio/dsbr100.c
index 78f56944e640..a5ca176a7b08 100644
--- a/drivers/media/radio/dsbr100.c
+++ b/drivers/media/radio/dsbr100.c
@@ -171,11 +171,11 @@ static int dsbr100_start(struct dsbr100_device *radio)
171 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 171 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
172 USB_REQ_GET_STATUS, 172 USB_REQ_GET_STATUS,
173 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 173 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
174 0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 || 174 0x00, 0xC7, radio->transfer_buffer, 8, 300) < 0 ||
175 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 175 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
176 DSB100_ONOFF, 176 DSB100_ONOFF,
177 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 177 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
178 0x01, 0x00, radio->transfer_buffer, 8, 300)<0) 178 0x01, 0x00, radio->transfer_buffer, 8, 300) < 0)
179 return -1; 179 return -1;
180 radio->muted=0; 180 radio->muted=0;
181 return (radio->transfer_buffer)[0]; 181 return (radio->transfer_buffer)[0];
@@ -188,11 +188,11 @@ static int dsbr100_stop(struct dsbr100_device *radio)
188 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 188 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
189 USB_REQ_GET_STATUS, 189 USB_REQ_GET_STATUS,
190 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 190 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
191 0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 || 191 0x16, 0x1C, radio->transfer_buffer, 8, 300) < 0 ||
192 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 192 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
193 DSB100_ONOFF, 193 DSB100_ONOFF,
194 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 194 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
195 0x00, 0x00, radio->transfer_buffer, 8, 300)<0) 195 0x00, 0x00, radio->transfer_buffer, 8, 300) < 0)
196 return -1; 196 return -1;
197 radio->muted=1; 197 radio->muted=1;
198 return (radio->transfer_buffer)[0]; 198 return (radio->transfer_buffer)[0];
@@ -201,24 +201,24 @@ static int dsbr100_stop(struct dsbr100_device *radio)
201/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */ 201/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
202static int dsbr100_setfreq(struct dsbr100_device *radio, int freq) 202static int dsbr100_setfreq(struct dsbr100_device *radio, int freq)
203{ 203{
204 freq = (freq/16*80)/1000+856; 204 freq = (freq / 16 * 80) / 1000 + 856;
205 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 205 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
206 DSB100_TUNE, 206 DSB100_TUNE,
207 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 207 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
208 (freq>>8)&0x00ff, freq&0xff, 208 (freq >> 8) & 0x00ff, freq & 0xff,
209 radio->transfer_buffer, 8, 300)<0 || 209 radio->transfer_buffer, 8, 300) < 0 ||
210 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 210 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
211 USB_REQ_GET_STATUS, 211 USB_REQ_GET_STATUS,
212 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 212 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
213 0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 || 213 0x96, 0xB7, radio->transfer_buffer, 8, 300) < 0 ||
214 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 214 usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
215 USB_REQ_GET_STATUS, 215 USB_REQ_GET_STATUS,
216 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 216 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
217 0x00, 0x24, radio->transfer_buffer, 8, 300)<0) { 217 0x00, 0x24, radio->transfer_buffer, 8, 300) < 0) {
218 radio->stereo = -1; 218 radio->stereo = -1;
219 return -1; 219 return -1;
220 } 220 }
221 radio->stereo = ! ((radio->transfer_buffer)[0]&0x01); 221 radio->stereo = !((radio->transfer_buffer)[0] & 0x01);
222 return (radio->transfer_buffer)[0]; 222 return (radio->transfer_buffer)[0];
223} 223}
224 224
@@ -229,10 +229,10 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
229 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0), 229 if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
230 USB_REQ_GET_STATUS, 230 USB_REQ_GET_STATUS,
231 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 231 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
232 0x00 , 0x24, radio->transfer_buffer, 8, 300)<0) 232 0x00 , 0x24, radio->transfer_buffer, 8, 300) < 0)
233 radio->stereo = -1; 233 radio->stereo = -1;
234 else 234 else
235 radio->stereo = ! (radio->transfer_buffer[0]&0x01); 235 radio->stereo = !(radio->transfer_buffer[0] & 0x01);
236} 236}
237 237
238 238
@@ -265,7 +265,7 @@ static int vidioc_querycap(struct file *file, void *priv,
265{ 265{
266 strlcpy(v->driver, "dsbr100", sizeof(v->driver)); 266 strlcpy(v->driver, "dsbr100", sizeof(v->driver));
267 strlcpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card)); 267 strlcpy(v->card, "D-Link R-100 USB FM Radio", sizeof(v->card));
268 sprintf(v->bus_info, "ISA"); 268 sprintf(v->bus_info, "USB");
269 v->version = RADIO_VERSION; 269 v->version = RADIO_VERSION;
270 v->capabilities = V4L2_CAP_TUNER; 270 v->capabilities = V4L2_CAP_TUNER;
271 return 0; 271 return 0;
@@ -282,9 +282,9 @@ static int vidioc_g_tuner(struct file *file, void *priv,
282 dsbr100_getstat(radio); 282 dsbr100_getstat(radio);
283 strcpy(v->name, "FM"); 283 strcpy(v->name, "FM");
284 v->type = V4L2_TUNER_RADIO; 284 v->type = V4L2_TUNER_RADIO;
285 v->rangelow = FREQ_MIN*FREQ_MUL; 285 v->rangelow = FREQ_MIN * FREQ_MUL;
286 v->rangehigh = FREQ_MAX*FREQ_MUL; 286 v->rangehigh = FREQ_MAX * FREQ_MUL;
287 v->rxsubchans = V4L2_TUNER_SUB_MONO|V4L2_TUNER_SUB_STEREO; 287 v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
288 v->capability = V4L2_TUNER_CAP_LOW; 288 v->capability = V4L2_TUNER_CAP_LOW;
289 if(radio->stereo) 289 if(radio->stereo)
290 v->audmode = V4L2_TUNER_MODE_STEREO; 290 v->audmode = V4L2_TUNER_MODE_STEREO;
@@ -309,7 +309,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
309 struct dsbr100_device *radio = video_drvdata(file); 309 struct dsbr100_device *radio = video_drvdata(file);
310 310
311 radio->curfreq = f->frequency; 311 radio->curfreq = f->frequency;
312 if (dsbr100_setfreq(radio, radio->curfreq)==-1) 312 if (dsbr100_setfreq(radio, radio->curfreq) == -1)
313 dev_warn(&radio->usbdev->dev, "Set frequency failed\n"); 313 dev_warn(&radio->usbdev->dev, "Set frequency failed\n");
314 return 0; 314 return 0;
315} 315}
@@ -331,8 +331,7 @@ static int vidioc_queryctrl(struct file *file, void *priv,
331 331
332 for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) { 332 for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) {
333 if (qc->id && qc->id == radio_qctrl[i].id) { 333 if (qc->id && qc->id == radio_qctrl[i].id) {
334 memcpy(qc, &(radio_qctrl[i]), 334 memcpy(qc, &(radio_qctrl[i]), sizeof(*qc));
335 sizeof(*qc));
336 return 0; 335 return 0;
337 } 336 }
338 } 337 }
@@ -412,19 +411,25 @@ static int vidioc_s_audio(struct file *file, void *priv,
412static int usb_dsbr100_open(struct inode *inode, struct file *file) 411static int usb_dsbr100_open(struct inode *inode, struct file *file)
413{ 412{
414 struct dsbr100_device *radio = video_drvdata(file); 413 struct dsbr100_device *radio = video_drvdata(file);
414 int retval;
415 415
416 lock_kernel(); 416 lock_kernel();
417 radio->users = 1; 417 radio->users = 1;
418 radio->muted = 1; 418 radio->muted = 1;
419 419
420 if (dsbr100_start(radio)<0) { 420 if (dsbr100_start(radio) < 0) {
421 dev_warn(&radio->usbdev->dev, 421 dev_warn(&radio->usbdev->dev,
422 "Radio did not start up properly\n"); 422 "Radio did not start up properly\n");
423 radio->users = 0; 423 radio->users = 0;
424 unlock_kernel(); 424 unlock_kernel();
425 return -EIO; 425 return -EIO;
426 } 426 }
427 dsbr100_setfreq(radio, radio->curfreq); 427
428 retval = dsbr100_setfreq(radio, radio->curfreq);
429
430 if (retval == -1)
431 printk(KERN_WARNING KBUILD_MODNAME ": Set frequency failed\n");
432
428 unlock_kernel(); 433 unlock_kernel();
429 return 0; 434 return 0;
430} 435}
@@ -485,13 +490,20 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
485{ 490{
486 struct dsbr100_device *radio; 491 struct dsbr100_device *radio;
487 492
488 if (!(radio = kmalloc(sizeof(struct dsbr100_device), GFP_KERNEL))) 493 radio = kmalloc(sizeof(struct dsbr100_device), GFP_KERNEL);
494
495 if (!radio)
489 return -ENOMEM; 496 return -ENOMEM;
490 if (!(radio->transfer_buffer = kmalloc(TB_LEN, GFP_KERNEL))) { 497
498 radio->transfer_buffer = kmalloc(TB_LEN, GFP_KERNEL);
499
500 if (!(radio->transfer_buffer)) {
491 kfree(radio); 501 kfree(radio);
492 return -ENOMEM; 502 return -ENOMEM;
493 } 503 }
494 if (!(radio->videodev = video_device_alloc())) { 504 radio->videodev = video_device_alloc();
505
506 if (!(radio->videodev)) {
495 kfree(radio->transfer_buffer); 507 kfree(radio->transfer_buffer);
496 kfree(radio); 508 kfree(radio);
497 return -ENOMEM; 509 return -ENOMEM;
@@ -501,7 +513,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
501 radio->removed = 0; 513 radio->removed = 0;
502 radio->users = 0; 514 radio->users = 0;
503 radio->usbdev = interface_to_usbdev(intf); 515 radio->usbdev = interface_to_usbdev(intf);
504 radio->curfreq = FREQ_MIN*FREQ_MUL; 516 radio->curfreq = FREQ_MIN * FREQ_MUL;
505 video_set_drvdata(radio->videodev, radio); 517 video_set_drvdata(radio->videodev, radio);
506 if (video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr) < 0) { 518 if (video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr) < 0) {
507 dev_warn(&intf->dev, "Could not register video device\n"); 519 dev_warn(&intf->dev, "Could not register video device\n");
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index a33717c48003..256cbeffdcb6 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -469,16 +469,21 @@ static int usb_amradio_open(struct inode *inode, struct file *file)
469{ 469{
470 struct amradio_device *radio = video_get_drvdata(video_devdata(file)); 470 struct amradio_device *radio = video_get_drvdata(video_devdata(file));
471 471
472 lock_kernel();
473
472 radio->users = 1; 474 radio->users = 1;
473 radio->muted = 1; 475 radio->muted = 1;
474 476
475 if (amradio_start(radio) < 0) { 477 if (amradio_start(radio) < 0) {
476 warn("Radio did not start up properly"); 478 warn("Radio did not start up properly");
477 radio->users = 0; 479 radio->users = 0;
480 unlock_kernel();
478 return -EIO; 481 return -EIO;
479 } 482 }
480 if (amradio_setfreq(radio, radio->curfreq) < 0) 483 if (amradio_setfreq(radio, radio->curfreq) < 0)
481 warn("Set frequency failed"); 484 warn("Set frequency failed");
485
486 unlock_kernel();
482 return 0; 487 return 0;
483} 488}
484 489