summaryrefslogtreecommitdiff
path: root/drivers/media/platform/sh_vou.c
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2015-06-07 11:57:56 +0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-07-06 14:26:09 +0300
commit4690271ce14cd4cf4796e0b6631978d151abe8e4 (patch)
tree599c1592f2b7c894a0edd5408a2725d6ec3ba632 /drivers/media/platform/sh_vou.c
parent41bdc3cf81c4d0f0dfe09f06ff203dd59d422f37 (diff)
downloadlinux-4690271ce14cd4cf4796e0b6631978d151abe8e4.tar.xz
[media] sh-vou: use resource managed calls
Simplify the sh-vou clean up by using devm_* were possible. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Cc: Magnus Damm <damm@opensource.se> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/sh_vou.c')
-rw-r--r--drivers/media/platform/sh_vou.c43
1 files changed, 8 insertions, 35 deletions
diff --git a/drivers/media/platform/sh_vou.c b/drivers/media/platform/sh_vou.c
index 8b799bae01b8..801d5ef4dc28 100644
--- a/drivers/media/platform/sh_vou.c
+++ b/drivers/media/platform/sh_vou.c
@@ -1300,7 +1300,7 @@ static int sh_vou_probe(struct platform_device *pdev)
struct i2c_adapter *i2c_adap;
struct video_device *vdev;
struct sh_vou_device *vou_dev;
- struct resource *reg_res, *region;
+ struct resource *reg_res;
struct v4l2_subdev *subdev;
int irq, ret;
@@ -1312,7 +1312,7 @@ static int sh_vou_probe(struct platform_device *pdev)
return -ENODEV;
}
- vou_dev = kzalloc(sizeof(*vou_dev), GFP_KERNEL);
+ vou_dev = devm_kzalloc(&pdev->dev, sizeof(*vou_dev), GFP_KERNEL);
if (!vou_dev)
return -ENOMEM;
@@ -1340,28 +1340,18 @@ static int sh_vou_probe(struct platform_device *pdev)
pix->sizeimage = VOU_MAX_IMAGE_WIDTH * 2 * 480;
pix->colorspace = V4L2_COLORSPACE_SMPTE170M;
- region = request_mem_region(reg_res->start, resource_size(reg_res),
- pdev->name);
- if (!region) {
- dev_err(&pdev->dev, "VOU region already claimed\n");
- ret = -EBUSY;
- goto ereqmemreg;
- }
-
- vou_dev->base = ioremap(reg_res->start, resource_size(reg_res));
- if (!vou_dev->base) {
- ret = -ENOMEM;
- goto emap;
- }
+ vou_dev->base = devm_ioremap_resource(&pdev->dev, reg_res);
+ if (IS_ERR(vou_dev->base))
+ return PTR_ERR(vou_dev->base);
- ret = request_irq(irq, sh_vou_isr, 0, "vou", vou_dev);
+ ret = devm_request_irq(&pdev->dev, irq, sh_vou_isr, 0, "vou", vou_dev);
if (ret < 0)
- goto ereqirq;
+ return ret;
ret = v4l2_device_register(&pdev->dev, &vou_dev->v4l2_dev);
if (ret < 0) {
dev_err(&pdev->dev, "Error registering v4l2 device\n");
- goto ev4l2devreg;
+ return ret;
}
vdev = &vou_dev->vdev;
@@ -1407,39 +1397,22 @@ ereset:
ei2cgadap:
pm_runtime_disable(&pdev->dev);
v4l2_device_unregister(&vou_dev->v4l2_dev);
-ev4l2devreg:
- free_irq(irq, vou_dev);
-ereqirq:
- iounmap(vou_dev->base);
-emap:
- release_mem_region(reg_res->start, resource_size(reg_res));
-ereqmemreg:
- kfree(vou_dev);
return ret;
}
static int sh_vou_remove(struct platform_device *pdev)
{
- int irq = platform_get_irq(pdev, 0);
struct v4l2_device *v4l2_dev = platform_get_drvdata(pdev);
struct sh_vou_device *vou_dev = container_of(v4l2_dev,
struct sh_vou_device, v4l2_dev);
struct v4l2_subdev *sd = list_entry(v4l2_dev->subdevs.next,
struct v4l2_subdev, list);
struct i2c_client *client = v4l2_get_subdevdata(sd);
- struct resource *reg_res;
- if (irq > 0)
- free_irq(irq, vou_dev);
pm_runtime_disable(&pdev->dev);
video_unregister_device(&vou_dev->vdev);
i2c_put_adapter(client->adapter);
v4l2_device_unregister(&vou_dev->v4l2_dev);
- iounmap(vou_dev->base);
- reg_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (reg_res)
- release_mem_region(reg_res->start, resource_size(reg_res));
- kfree(vou_dev);
return 0;
}