Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76528
b: refs/heads/master
c: 863c86d
h: refs/heads/master
v: v3
  • Loading branch information
Oliver Neukum authored and Mauro Carvalho Chehab committed Jan 25, 2008
1 parent 3bce82d commit afba231
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e1ba33df0cbc6a7ab339dc093f37825775b9caca
refs/heads/master: 863c86dd7e014e645207fd16f4e06bc223567984
18 changes: 13 additions & 5 deletions trunk/drivers/media/radio/dsbr100.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
History:
Version 0.43:
Oliver Neukum: avoided DMA coherency issue
Version 0.42:
Converted dsbr100 to use video_ioctl2
by Douglas Landgraf <dougsland@gmail.com>
Expand Down Expand Up @@ -135,7 +138,7 @@ module_param(radio_nr, int, 0);
struct dsbr100_device {
struct usb_device *usbdev;
struct video_device *videodev;
unsigned char transfer_buffer[TB_LEN];
u8 *transfer_buffer;
int curfreq;
int stereo;
int users;
Expand Down Expand Up @@ -237,10 +240,7 @@ static void dsbr100_getstat(struct dsbr100_device *radio)
/* handle unplugging of the device, release data structures
if nothing keeps us from doing it. If something is still
keeping us busy, the release callback of v4l will take care
of releasing it. stv680.c does not relase its private
data, so I don't do this here either. Checking out the
code I'd expect I better did that, but if there's a memory
leak here it's tiny (~50 bytes per disconnect) */
of releasing it. */
static void usb_dsbr100_disconnect(struct usb_interface *intf)
{
struct dsbr100_device *radio = usb_get_intfdata(intf);
Expand All @@ -250,6 +250,7 @@ static void usb_dsbr100_disconnect(struct usb_interface *intf)
video_unregister_device(radio->videodev);
radio->videodev = NULL;
if (radio->users) {
kfree(radio->transfer_buffer);
kfree(radio);
} else {
radio->removed = 1;
Expand Down Expand Up @@ -425,6 +426,7 @@ static int usb_dsbr100_close(struct inode *inode, struct file *file)
return -ENODEV;
radio->users = 0;
if (radio->removed) {
kfree(radio->transfer_buffer);
kfree(radio);
}
return 0;
Expand Down Expand Up @@ -471,7 +473,12 @@ static int usb_dsbr100_probe(struct usb_interface *intf,

if (!(radio = kmalloc(sizeof(struct dsbr100_device), GFP_KERNEL)))
return -ENOMEM;
if (!(radio->transfer_buffer = kmalloc(TB_LEN, GFP_KERNEL))) {
kfree(radio);
return -ENOMEM;
}
if (!(radio->videodev = video_device_alloc())) {
kfree(radio->transfer_buffer);
kfree(radio);
return -ENOMEM;
}
Expand All @@ -485,6 +492,7 @@ static int usb_dsbr100_probe(struct usb_interface *intf,
if (video_register_device(radio->videodev, VFL_TYPE_RADIO,radio_nr)) {
warn("Could not register video device");
video_device_release(radio->videodev);
kfree(radio->transfer_buffer);
kfree(radio);
return -EIO;
}
Expand Down

0 comments on commit afba231

Please sign in to comment.