diff --git a/drivers/coresight/coresight-etb.c b/drivers/coresight/coresight-etb.c index 30f4d0c3db6..a9283ee2df0 100644 --- a/drivers/coresight/coresight-etb.c +++ b/drivers/coresight/coresight-etb.c @@ -343,58 +343,41 @@ static const struct attribute_group *etb_attr_grps[] = { static int __devinit etb_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct etb_drvdata *drvdata; struct resource *res; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + spin_lock_init(&drvdata->spinlock); - drvdata->clk = clk_get(drvdata->dev, "core_clk"); - if (IS_ERR(drvdata->clk)) { - ret = PTR_ERR(drvdata->clk); - goto err_clk_get; - } - + drvdata->clk = devm_clk_get(dev, "core_clk"); + if (IS_ERR(drvdata->clk)) + return PTR_ERR(drvdata->clk); ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; + return ret; - drvdata->buf = kzalloc(ETB_SIZE_WORDS * BYTES_PER_WORD, GFP_KERNEL); - if (!drvdata->buf) { - ret = -ENOMEM; - goto err_kzalloc_buf; - } - drvdata->miscdev.name = ((struct coresight_platform_data *) - (pdev->dev.platform_data))->name; - drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; - drvdata->miscdev.fops = &etb_fops; - ret = misc_register(&drvdata->miscdev); - if (ret) - goto err_misc_register; + drvdata->buf = devm_kzalloc(dev, ETB_SIZE_WORDS * BYTES_PER_WORD, + GFP_KERNEL); + if (!drvdata->buf) + return -ENOMEM; - desc = kzalloc(sizeof(*desc), GFP_KERNEL); - if (!desc) { - ret = -ENOMEM; - goto err_kzalloc_desc; - } + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; desc->type = CORESIGHT_DEV_TYPE_SINK; desc->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_BUFFER; desc->ops = &etb_cs_ops; @@ -403,30 +386,21 @@ static int __devinit etb_probe(struct platform_device *pdev) desc->groups = etb_attr_grps; desc->owner = THIS_MODULE; drvdata->csdev = coresight_register(desc); - if (IS_ERR(drvdata->csdev)) { - ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; - } - kfree(desc); + if (IS_ERR(drvdata->csdev)) + return PTR_ERR(drvdata->csdev); - dev_info(drvdata->dev, "ETB initialized\n"); + drvdata->miscdev.name = ((struct coresight_platform_data *) + (pdev->dev.platform_data))->name; + drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; + drvdata->miscdev.fops = &etb_fops; + ret = misc_register(&drvdata->miscdev); + if (ret) + goto err; + + dev_info(dev, "ETB initialized\n"); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: - misc_deregister(&drvdata->miscdev); -err_misc_register: - kfree(drvdata->buf); -err_kzalloc_buf: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: - iounmap(drvdata->base); -err_ioremap: -err_res: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "ETB init failed\n"); +err: + coresight_unregister(drvdata->csdev); return ret; } @@ -434,12 +408,8 @@ static int __devexit etb_remove(struct platform_device *pdev) { struct etb_drvdata *drvdata = platform_get_drvdata(pdev); - coresight_unregister(drvdata->csdev); misc_deregister(&drvdata->miscdev); - kfree(drvdata->buf); - clk_put(drvdata->clk); - iounmap(drvdata->base); - kfree(drvdata); + coresight_unregister(drvdata->csdev); return 0; } diff --git a/drivers/coresight/coresight-etm.c b/drivers/coresight/coresight-etm.c index 020e54236d9..d7f657de8ac 100644 --- a/drivers/coresight/coresight-etm.c +++ b/drivers/coresight/coresight-etm.c @@ -1505,59 +1505,54 @@ static void __devinit etm_init_default_data(struct etm_drvdata *drvdata) static int __devinit etm_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct etm_drvdata *drvdata; struct resource *res; static int etm_count; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + mutex_init(&drvdata->mutex); wake_lock_init(&drvdata->wake_lock, WAKE_LOCK_SUSPEND, "coresight-etm"); pm_qos_add_request(&drvdata->qos_req, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); - drvdata->cpu = etm_count++; - drvdata->clk = clk_get(drvdata->dev, "core_clk"); + drvdata->clk = devm_clk_get(dev, "core_clk"); if (IS_ERR(drvdata->clk)) { ret = PTR_ERR(drvdata->clk); - goto err_clk_get; + goto err0; } - ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; + goto err0; + + drvdata->cpu = etm_count++; + ret = clk_prepare_enable(drvdata->clk); if (ret) - goto err_clk_enable; - + goto err0; ret = etm_init_arch_data(drvdata); if (ret) - goto err_arch; + goto err1; etm_init_default_data(drvdata); - clk_disable_unprepare(drvdata->clk); - desc = kzalloc(sizeof(*desc), GFP_KERNEL); + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); if (!desc) { ret = -ENOMEM; - goto err_kzalloc_desc; + goto err0; } desc->type = CORESIGHT_DEV_TYPE_SOURCE; desc->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_PROC; @@ -1569,34 +1564,21 @@ static int __devinit etm_probe(struct platform_device *pdev) drvdata->csdev = coresight_register(desc); if (IS_ERR(drvdata->csdev)) { ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; + goto err0; } - kfree(desc); - dev_info(drvdata->dev, "ETM initialized\n"); + dev_info(dev, "ETM initialized\n"); if (boot_enable) coresight_enable(drvdata->csdev); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: -err_arch: +err1: clk_disable_unprepare(drvdata->clk); -err_clk_enable: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: +err0: pm_qos_remove_request(&drvdata->qos_req); wake_lock_destroy(&drvdata->wake_lock); mutex_destroy(&drvdata->mutex); - iounmap(drvdata->base); -err_ioremap: -err_res: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "ETM init failed\n"); return ret; } @@ -1605,12 +1587,9 @@ static int __devexit etm_remove(struct platform_device *pdev) struct etm_drvdata *drvdata = platform_get_drvdata(pdev); coresight_unregister(drvdata->csdev); - clk_put(drvdata->clk); pm_qos_remove_request(&drvdata->qos_req); wake_lock_destroy(&drvdata->wake_lock); mutex_destroy(&drvdata->mutex); - iounmap(drvdata->base); - kfree(drvdata); return 0; } diff --git a/drivers/coresight/coresight-funnel.c b/drivers/coresight/coresight-funnel.c index 333a07c005d..5072f7af6ca 100644 --- a/drivers/coresight/coresight-funnel.c +++ b/drivers/coresight/coresight-funnel.c @@ -172,43 +172,34 @@ static const struct attribute_group *funnel_attr_grps[] = { static int __devinit funnel_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct funnel_drvdata *drvdata; struct resource *res; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); - drvdata->clk = clk_get(drvdata->dev, "core_clk"); - if (IS_ERR(drvdata->clk)) { - ret = PTR_ERR(drvdata->clk); - goto err_clk_get; - } + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + drvdata->clk = devm_clk_get(dev, "core_clk"); + if (IS_ERR(drvdata->clk)) + return PTR_ERR(drvdata->clk); ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; + return ret; - desc = kzalloc(sizeof(*desc), GFP_KERNEL); - if (!desc) { - ret = -ENOMEM; - goto err_kzalloc_desc; - } + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; desc->type = CORESIGHT_DEV_TYPE_LINK; desc->subtype.link_subtype = CORESIGHT_DEV_SUBTYPE_LINK_MERG; desc->ops = &funnel_cs_ops; @@ -217,27 +208,11 @@ static int __devinit funnel_probe(struct platform_device *pdev) desc->groups = funnel_attr_grps; desc->owner = THIS_MODULE; drvdata->csdev = coresight_register(desc); - if (IS_ERR(drvdata->csdev)) { - ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; - } - kfree(desc); + if (IS_ERR(drvdata->csdev)) + return PTR_ERR(drvdata->csdev); - dev_info(drvdata->dev, "FUNNEL initialized\n"); + dev_info(dev, "FUNNEL initialized\n"); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: - iounmap(drvdata->base); -err_ioremap: -err_res: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "FUNNEL init failed\n"); - return ret; } static int __devexit funnel_remove(struct platform_device *pdev) @@ -245,9 +220,6 @@ static int __devexit funnel_remove(struct platform_device *pdev) struct funnel_drvdata *drvdata = platform_get_drvdata(pdev); coresight_unregister(drvdata->csdev); - clk_put(drvdata->clk); - iounmap(drvdata->base); - kfree(drvdata); return 0; } diff --git a/drivers/coresight/coresight-replicator.c b/drivers/coresight/coresight-replicator.c index d4507e463a9..7fe355d95ba 100644 --- a/drivers/coresight/coresight-replicator.c +++ b/drivers/coresight/coresight-replicator.c @@ -123,43 +123,34 @@ static const struct coresight_ops replicator_cs_ops = { static int __devinit replicator_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct replicator_drvdata *drvdata; struct resource *res; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); - drvdata->clk = clk_get(drvdata->dev, "core_clk"); - if (IS_ERR(drvdata->clk)) { - ret = PTR_ERR(drvdata->clk); - goto err_clk_get; - } + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + drvdata->clk = devm_clk_get(dev, "core_clk"); + if (IS_ERR(drvdata->clk)) + return PTR_ERR(drvdata->clk); ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; + return ret; - desc = kzalloc(sizeof(*desc), GFP_KERNEL); - if (!desc) { - ret = -ENOMEM; - goto err_kzalloc_desc; - } + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; desc->type = CORESIGHT_DEV_TYPE_LINK; desc->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_LINK_SPLIT; desc->ops = &replicator_cs_ops; @@ -167,27 +158,11 @@ static int __devinit replicator_probe(struct platform_device *pdev) desc->dev = &pdev->dev; desc->owner = THIS_MODULE; drvdata->csdev = coresight_register(desc); - if (IS_ERR(drvdata->csdev)) { - ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; - } - kfree(desc); + if (IS_ERR(drvdata->csdev)) + return PTR_ERR(drvdata->csdev); - dev_info(drvdata->dev, "REPLICATOR initialized\n"); + dev_info(dev, "REPLICATOR initialized\n"); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: - iounmap(drvdata->base); -err_ioremap: -err_res: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "REPLICATOR init failed\n"); - return ret; } static int __devexit replicator_remove(struct platform_device *pdev) @@ -195,9 +170,6 @@ static int __devexit replicator_remove(struct platform_device *pdev) struct replicator_drvdata *drvdata = platform_get_drvdata(pdev); coresight_unregister(drvdata->csdev); - clk_put(drvdata->clk); - iounmap(drvdata->base); - kfree(drvdata); return 0; } diff --git a/drivers/coresight/coresight-stm.c b/drivers/coresight/coresight-stm.c index 22928aa34c8..242418cc24e 100644 --- a/drivers/coresight/coresight-stm.c +++ b/drivers/coresight/coresight-stm.c @@ -426,34 +426,30 @@ static const struct attribute_group *stm_attr_grps[] = { static int __devinit stm_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct stm_drvdata *drvdata; struct resource *res; size_t res_size, bitmap_size; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res0; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap0; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; + /* Store the driver data pointer for use in exported functions */ + stmdrvdata = drvdata; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (!res) { - ret = -EINVAL; - goto err_res1; - } + if (!res) + return -ENODEV; if (boot_nr_channel) { res_size = min((resource_size_t)(boot_nr_channel * BYTES_PER_CHANNEL), resource_size(res)); @@ -463,44 +459,25 @@ static int __devinit stm_probe(struct platform_device *pdev) BYTES_PER_CHANNEL), resource_size(res)); bitmap_size = NR_STM_CHANNEL * sizeof(long); } - drvdata->chs.bitmap = kzalloc(bitmap_size, GFP_KERNEL); - if (!drvdata->chs.bitmap) { - ret = -ENOMEM; - goto err_kzalloc_bitmap; - } - drvdata->chs.base = ioremap_nocache(res->start, res_size); - if (!drvdata->chs.base) { - ret = -EINVAL; - goto err_ioremap1; - } - /* Store the driver data pointer for use in exported functions */ - stmdrvdata = drvdata; - - drvdata->clk = clk_get(drvdata->dev, "core_clk"); - if (IS_ERR(drvdata->clk)) { - ret = PTR_ERR(drvdata->clk); - goto err_clk_get; - } + drvdata->chs.base = devm_ioremap(dev, res->start, res_size); + if (!drvdata->chs.base) + return -ENOMEM; + drvdata->chs.bitmap = devm_kzalloc(dev, bitmap_size, GFP_KERNEL); + if (!drvdata->chs.bitmap) + return -ENOMEM; + drvdata->clk = devm_clk_get(dev, "core_clk"); + if (IS_ERR(drvdata->clk)) + return PTR_ERR(drvdata->clk); ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; - - drvdata->miscdev.name = ((struct coresight_platform_data *) - (pdev->dev.platform_data))->name; - drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; - drvdata->miscdev.fops = &stm_fops; - ret = misc_register(&drvdata->miscdev); - if (ret) - goto err_misc_register; + return ret; drvdata->entity = OST_ENTITY_ALL; - desc = kzalloc(sizeof(*desc), GFP_KERNEL); - if (!desc) { - ret = -ENOMEM; - goto err_kzalloc_desc; - } + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; desc->type = CORESIGHT_DEV_TYPE_SOURCE; desc->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_SOFTWARE; desc->ops = &stm_cs_ops; @@ -509,11 +486,16 @@ static int __devinit stm_probe(struct platform_device *pdev) desc->groups = stm_attr_grps; desc->owner = THIS_MODULE; drvdata->csdev = coresight_register(desc); - if (IS_ERR(drvdata->csdev)) { - ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; - } - kfree(desc); + if (IS_ERR(drvdata->csdev)) + return PTR_ERR(drvdata->csdev); + + drvdata->miscdev.name = ((struct coresight_platform_data *) + (pdev->dev.platform_data))->name; + drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; + drvdata->miscdev.fops = &stm_fops; + ret = misc_register(&drvdata->miscdev); + if (ret) + goto err; dev_info(drvdata->dev, "STM initialized\n"); @@ -521,25 +503,8 @@ static int __devinit stm_probe(struct platform_device *pdev) coresight_enable(drvdata->csdev); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: - misc_deregister(&drvdata->miscdev); -err_misc_register: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: - iounmap(drvdata->chs.base); -err_ioremap1: - kfree(drvdata->chs.bitmap); -err_kzalloc_bitmap: -err_res1: - iounmap(drvdata->base); -err_ioremap0: -err_res0: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "STM init failed\n"); +err: + coresight_unregister(drvdata->csdev); return ret; } @@ -547,13 +512,8 @@ static int __devexit stm_remove(struct platform_device *pdev) { struct stm_drvdata *drvdata = platform_get_drvdata(pdev); - coresight_unregister(drvdata->csdev); misc_deregister(&drvdata->miscdev); - clk_put(drvdata->clk); - iounmap(drvdata->chs.base); - kfree(drvdata->chs.bitmap); - iounmap(drvdata->base); - kfree(drvdata); + coresight_unregister(drvdata->csdev); return 0; } diff --git a/drivers/coresight/coresight-tpiu.c b/drivers/coresight/coresight-tpiu.c index 570eeb2c5ba..fc00ff287a0 100644 --- a/drivers/coresight/coresight-tpiu.c +++ b/drivers/coresight/coresight-tpiu.c @@ -125,50 +125,41 @@ static const struct coresight_ops tpiu_cs_ops = { static int __devinit tpiu_probe(struct platform_device *pdev) { int ret; + struct device *dev = &pdev->dev; struct tpiu_drvdata *drvdata; struct resource *res; struct coresight_desc *desc; - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) { - ret = -ENOMEM; - goto err_kzalloc_drvdata; - } - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) { - ret = -EINVAL; - goto err_res; - } - drvdata->base = ioremap_nocache(res->start, resource_size(res)); - if (!drvdata->base) { - ret = -EINVAL; - goto err_ioremap; - } + drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); + if (!drvdata) + return -ENOMEM; drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); - drvdata->clk = clk_get(drvdata->dev, "core_clk"); - if (IS_ERR(drvdata->clk)) { - ret = PTR_ERR(drvdata->clk); - goto err_clk_get; - } + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return -ENODEV; + drvdata->base = devm_ioremap(dev, res->start, resource_size(res)); + if (!drvdata->base) + return -ENOMEM; + drvdata->clk = devm_clk_get(dev, "core_clk"); + if (IS_ERR(drvdata->clk)) + return PTR_ERR(drvdata->clk); ret = clk_set_rate(drvdata->clk, CORESIGHT_CLK_RATE_TRACE); if (ret) - goto err_clk_rate; + return ret; /* Disable tpiu to support older targets that need this */ ret = clk_prepare_enable(drvdata->clk); if (ret) - goto err_clk_enable; + return ret; __tpiu_disable(drvdata); clk_disable_unprepare(drvdata->clk); - desc = kzalloc(sizeof(*desc), GFP_KERNEL); - if (!desc) { - ret = -ENOMEM; - goto err_kzalloc_desc; - } + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; desc->type = CORESIGHT_DEV_TYPE_SINK; desc->subtype.sink_subtype = CORESIGHT_DEV_SUBTYPE_SINK_PORT; desc->ops = &tpiu_cs_ops; @@ -176,28 +167,11 @@ static int __devinit tpiu_probe(struct platform_device *pdev) desc->dev = &pdev->dev; desc->owner = THIS_MODULE; drvdata->csdev = coresight_register(desc); - if (IS_ERR(drvdata->csdev)) { - ret = PTR_ERR(drvdata->csdev); - goto err_coresight_register; - } - kfree(desc); + if (IS_ERR(drvdata->csdev)) + return PTR_ERR(drvdata->csdev); - dev_info(drvdata->dev, "TPIU initialized\n"); + dev_info(dev, "TPIU initialized\n"); return 0; -err_coresight_register: - kfree(desc); -err_kzalloc_desc: -err_clk_enable: -err_clk_rate: - clk_put(drvdata->clk); -err_clk_get: - iounmap(drvdata->base); -err_ioremap: -err_res: - kfree(drvdata); -err_kzalloc_drvdata: - dev_err(drvdata->dev, "TPIU init failed\n"); - return ret; } static int __devexit tpiu_remove(struct platform_device *pdev) @@ -205,9 +179,6 @@ static int __devexit tpiu_remove(struct platform_device *pdev) struct tpiu_drvdata *drvdata = platform_get_drvdata(pdev); coresight_unregister(drvdata->csdev); - clk_put(drvdata->clk); - iounmap(drvdata->base); - kfree(drvdata); return 0; }