Skip to content

Commit

Permalink
[media] omap3isp: Use devm_* managed functions
Browse files Browse the repository at this point in the history
Replace kzalloc, request_mem_region, ioremap, clk_get and regulator_get
with their devm_* managed replacement.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Laurent Pinchart authored and Mauro Carvalho Chehab committed Feb 5, 2013
1 parent 3d5a71e commit cf2b4cf
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 113 deletions.
74 changes: 12 additions & 62 deletions drivers/media/platform/omap3isp/isp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1406,28 +1406,15 @@ static const char *isp_clocks[] = {
"l3_ick",
};

static void isp_put_clocks(struct isp_device *isp)
{
unsigned int i;

for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
if (isp->clock[i]) {
clk_put(isp->clock[i]);
isp->clock[i] = NULL;
}
}
}

static int isp_get_clocks(struct isp_device *isp)
{
struct clk *clk;
unsigned int i;

for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
clk = clk_get(isp->dev, isp_clocks[i]);
clk = devm_clk_get(isp->dev, isp_clocks[i]);
if (IS_ERR(clk)) {
dev_err(isp->dev, "clk_get %s failed\n", isp_clocks[i]);
isp_put_clocks(isp);
return PTR_ERR(clk);
}

Expand Down Expand Up @@ -1993,7 +1980,6 @@ static int isp_initialize_modules(struct isp_device *isp)
static int isp_remove(struct platform_device *pdev)
{
struct isp_device *isp = platform_get_drvdata(pdev);
int i;

isp_unregister_entities(isp);
isp_cleanup_modules(isp);
Expand All @@ -2004,26 +1990,6 @@ static int isp_remove(struct platform_device *pdev)
isp->domain = NULL;
omap3isp_put(isp);

free_irq(isp->irq_num, isp);
isp_put_clocks(isp);

for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
if (isp->mmio_base[i]) {
iounmap(isp->mmio_base[i]);
isp->mmio_base[i] = NULL;
}

if (isp->mmio_base_phys[i]) {
release_mem_region(isp->mmio_base_phys[i],
isp->mmio_size[i]);
isp->mmio_base_phys[i] = 0;
}
}

regulator_put(isp->isp_csiphy1.vdd);
regulator_put(isp->isp_csiphy2.vdd);
kfree(isp);

return 0;
}

Expand All @@ -2041,7 +2007,8 @@ static int isp_map_mem_resource(struct platform_device *pdev,
return -ENODEV;
}

if (!request_mem_region(mem->start, resource_size(mem), pdev->name)) {
if (!devm_request_mem_region(isp->dev, mem->start, resource_size(mem),
pdev->name)) {
dev_err(isp->dev,
"cannot reserve camera register I/O region\n");
return -ENODEV;
Expand All @@ -2050,8 +2017,9 @@ static int isp_map_mem_resource(struct platform_device *pdev,
isp->mmio_size[res] = resource_size(mem);

/* map the region */
isp->mmio_base[res] = ioremap_nocache(isp->mmio_base_phys[res],
isp->mmio_size[res]);
isp->mmio_base[res] = devm_ioremap_nocache(isp->dev,
isp->mmio_base_phys[res],
isp->mmio_size[res]);
if (!isp->mmio_base[res]) {
dev_err(isp->dev, "cannot map camera register I/O region\n");
return -ENODEV;
Expand Down Expand Up @@ -2081,7 +2049,7 @@ static int isp_probe(struct platform_device *pdev)
if (pdata == NULL)
return -EINVAL;

isp = kzalloc(sizeof(*isp), GFP_KERNEL);
isp = devm_kzalloc(&pdev->dev, sizeof(*isp), GFP_KERNEL);
if (!isp) {
dev_err(&pdev->dev, "could not allocate memory\n");
return -ENOMEM;
Expand All @@ -2104,8 +2072,8 @@ static int isp_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, isp);

/* Regulators */
isp->isp_csiphy1.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY1");
isp->isp_csiphy2.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY2");
isp->isp_csiphy1.vdd = devm_regulator_get(&pdev->dev, "VDD_CSIPHY1");
isp->isp_csiphy2.vdd = devm_regulator_get(&pdev->dev, "VDD_CSIPHY2");

/* Clocks
*
Expand Down Expand Up @@ -2180,7 +2148,8 @@ static int isp_probe(struct platform_device *pdev)
goto detach_dev;
}

if (request_irq(isp->irq_num, isp_isr, IRQF_SHARED, "OMAP3 ISP", isp)) {
if (devm_request_irq(isp->dev, isp->irq_num, isp_isr, IRQF_SHARED,
"OMAP3 ISP", isp)) {
dev_err(isp->dev, "Unable to request IRQ\n");
ret = -EINVAL;
goto detach_dev;
Expand All @@ -2189,7 +2158,7 @@ static int isp_probe(struct platform_device *pdev)
/* Entities */
ret = isp_initialize_modules(isp);
if (ret < 0)
goto error_irq;
goto detach_dev;

ret = isp_register_entities(isp);
if (ret < 0)
Expand All @@ -2202,35 +2171,16 @@ static int isp_probe(struct platform_device *pdev)

error_modules:
isp_cleanup_modules(isp);
error_irq:
free_irq(isp->irq_num, isp);
detach_dev:
iommu_detach_device(isp->domain, &pdev->dev);
free_domain:
iommu_domain_free(isp->domain);
error_isp:
omap3isp_put(isp);
error:
isp_put_clocks(isp);

for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
if (isp->mmio_base[i]) {
iounmap(isp->mmio_base[i]);
isp->mmio_base[i] = NULL;
}

if (isp->mmio_base_phys[i]) {
release_mem_region(isp->mmio_base_phys[i],
isp->mmio_size[i]);
isp->mmio_base_phys[i] = 0;
}
}
regulator_put(isp->isp_csiphy2.vdd);
regulator_put(isp->isp_csiphy1.vdd);
platform_set_drvdata(pdev, NULL);

mutex_destroy(&isp->isp_mutex);
kfree(isp);

return ret;
}
Expand Down
8 changes: 2 additions & 6 deletions drivers/media/platform/omap3isp/ispccp2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1136,7 +1136,7 @@ int omap3isp_ccp2_init(struct isp_device *isp)
* TODO: Don't hardcode the usage of PHY1 (shared with CSI2c).
*/
if (isp->revision == ISP_REVISION_2_0) {
ccp2->vdds_csib = regulator_get(isp->dev, "vdds_csib");
ccp2->vdds_csib = devm_regulator_get(isp->dev, "vdds_csib");
if (IS_ERR(ccp2->vdds_csib)) {
dev_dbg(isp->dev,
"Could not get regulator vdds_csib\n");
Expand All @@ -1147,10 +1147,8 @@ int omap3isp_ccp2_init(struct isp_device *isp)
}

ret = ccp2_init_entities(ccp2);
if (ret < 0) {
regulator_put(ccp2->vdds_csib);
if (ret < 0)
return ret;
}

ccp2_reset(ccp2);
return 0;
Expand All @@ -1166,6 +1164,4 @@ void omap3isp_ccp2_cleanup(struct isp_device *isp)

omap3isp_video_cleanup(&ccp2->video_in);
media_entity_cleanup(&ccp2->subdev.entity);

regulator_put(ccp2->vdds_csib);
}
27 changes: 6 additions & 21 deletions drivers/media/platform/omap3isp/isph3a_aewb.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,8 @@ int omap3isp_h3a_aewb_init(struct isp_device *isp)
struct ispstat *aewb = &isp->isp_aewb;
struct omap3isp_h3a_aewb_config *aewb_cfg;
struct omap3isp_h3a_aewb_config *aewb_recover_cfg;
int ret;

aewb_cfg = kzalloc(sizeof(*aewb_cfg), GFP_KERNEL);
aewb_cfg = devm_kzalloc(isp->dev, sizeof(*aewb_cfg), GFP_KERNEL);
if (!aewb_cfg)
return -ENOMEM;

Expand All @@ -313,12 +312,12 @@ int omap3isp_h3a_aewb_init(struct isp_device *isp)
aewb->isp = isp;

/* Set recover state configuration */
aewb_recover_cfg = kzalloc(sizeof(*aewb_recover_cfg), GFP_KERNEL);
aewb_recover_cfg = devm_kzalloc(isp->dev, sizeof(*aewb_recover_cfg),
GFP_KERNEL);
if (!aewb_recover_cfg) {
dev_err(aewb->isp->dev, "AEWB: cannot allocate memory for "
"recover configuration.\n");
ret = -ENOMEM;
goto err_recover_alloc;
return -ENOMEM;
}

aewb_recover_cfg->saturation_limit = OMAP3ISP_AEWB_MAX_SATURATION_LIM;
Expand All @@ -335,33 +334,19 @@ int omap3isp_h3a_aewb_init(struct isp_device *isp)
if (h3a_aewb_validate_params(aewb, aewb_recover_cfg)) {
dev_err(aewb->isp->dev, "AEWB: recover configuration is "
"invalid.\n");
ret = -EINVAL;
goto err_conf;
return -EINVAL;
}

aewb_recover_cfg->buf_size = h3a_aewb_get_buf_size(aewb_recover_cfg);
aewb->recover_priv = aewb_recover_cfg;

ret = omap3isp_stat_init(aewb, "AEWB", &h3a_aewb_subdev_ops);
if (ret)
goto err_conf;

return 0;

err_conf:
kfree(aewb_recover_cfg);
err_recover_alloc:
kfree(aewb_cfg);

return ret;
return omap3isp_stat_init(aewb, "AEWB", &h3a_aewb_subdev_ops);
}

/*
* omap3isp_h3a_aewb_cleanup - Module exit.
*/
void omap3isp_h3a_aewb_cleanup(struct isp_device *isp)
{
kfree(isp->isp_aewb.priv);
kfree(isp->isp_aewb.recover_priv);
omap3isp_stat_cleanup(&isp->isp_aewb);
}
27 changes: 6 additions & 21 deletions drivers/media/platform/omap3isp/isph3a_af.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,9 +363,8 @@ int omap3isp_h3a_af_init(struct isp_device *isp)
struct ispstat *af = &isp->isp_af;
struct omap3isp_h3a_af_config *af_cfg;
struct omap3isp_h3a_af_config *af_recover_cfg;
int ret;

af_cfg = kzalloc(sizeof(*af_cfg), GFP_KERNEL);
af_cfg = devm_kzalloc(isp->dev, sizeof(*af_cfg), GFP_KERNEL);
if (af_cfg == NULL)
return -ENOMEM;

Expand All @@ -376,12 +375,12 @@ int omap3isp_h3a_af_init(struct isp_device *isp)
af->isp = isp;

/* Set recover state configuration */
af_recover_cfg = kzalloc(sizeof(*af_recover_cfg), GFP_KERNEL);
af_recover_cfg = devm_kzalloc(isp->dev, sizeof(*af_recover_cfg),
GFP_KERNEL);
if (!af_recover_cfg) {
dev_err(af->isp->dev, "AF: cannot allocate memory for recover "
"configuration.\n");
ret = -ENOMEM;
goto err_recover_alloc;
return -ENOMEM;
}

af_recover_cfg->paxel.h_start = OMAP3ISP_AF_PAXEL_HZSTART_MIN;
Expand All @@ -393,30 +392,16 @@ int omap3isp_h3a_af_init(struct isp_device *isp)
if (h3a_af_validate_params(af, af_recover_cfg)) {
dev_err(af->isp->dev, "AF: recover configuration is "
"invalid.\n");
ret = -EINVAL;
goto err_conf;
return -EINVAL;
}

af_recover_cfg->buf_size = h3a_af_get_buf_size(af_recover_cfg);
af->recover_priv = af_recover_cfg;

ret = omap3isp_stat_init(af, "AF", &h3a_af_subdev_ops);
if (ret)
goto err_conf;

return 0;

err_conf:
kfree(af_recover_cfg);
err_recover_alloc:
kfree(af_cfg);

return ret;
return omap3isp_stat_init(af, "AF", &h3a_af_subdev_ops);
}

void omap3isp_h3a_af_cleanup(struct isp_device *isp)
{
kfree(isp->isp_af.priv);
kfree(isp->isp_af.recover_priv);
omap3isp_stat_cleanup(&isp->isp_af);
}
4 changes: 1 addition & 3 deletions drivers/media/platform/omap3isp/isphist.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ int omap3isp_hist_init(struct isp_device *isp)
struct omap3isp_hist_config *hist_cfg;
int ret = -1;

hist_cfg = kzalloc(sizeof(*hist_cfg), GFP_KERNEL);
hist_cfg = devm_kzalloc(isp->dev, sizeof(*hist_cfg), GFP_KERNEL);
if (hist_cfg == NULL)
return -ENOMEM;

Expand All @@ -503,7 +503,6 @@ int omap3isp_hist_init(struct isp_device *isp)

ret = omap3isp_stat_init(hist, "histogram", &hist_subdev_ops);
if (ret) {
kfree(hist_cfg);
if (HIST_USING_DMA(hist))
omap_free_dma(hist->dma_ch);
}
Expand All @@ -518,6 +517,5 @@ void omap3isp_hist_cleanup(struct isp_device *isp)
{
if (HIST_USING_DMA(&isp->isp_hist))
omap_free_dma(isp->isp_hist.dma_ch);
kfree(isp->isp_hist.priv);
omap3isp_stat_cleanup(&isp->isp_hist);
}

0 comments on commit cf2b4cf

Please sign in to comment.