coresight: use devm apis in driver probe
Using devm_* apis helps in simplifying driver init and exit paths, hence switch to using them in the driver probe calls. Change-Id: I41aba1129f6638fcee859e57f957fa3f14c1c439 Signed-off-by: Pratik Patel <pratikp@codeaurora.org>
This commit is contained in:
committed by
Stephen Boyd
parent
0fa0d1a330
commit
a6722a9a08
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user