diff options
Diffstat (limited to 'drivers/media/radio')
-rw-r--r-- | drivers/media/radio/dsbr100.c | 62 | ||||
-rw-r--r-- | drivers/media/radio/radio-mr800.c | 5 |
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 */ |
202 | static int dsbr100_setfreq(struct dsbr100_device *radio, int freq) | 202 | static 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, | |||
412 | static int usb_dsbr100_open(struct inode *inode, struct file *file) | 411 | static 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 | ||