Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1745e696 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Daniel Lezcano
Browse files

clocksource: em_sti: Convert to devm_* managed helpers



Replace kzalloc, clk_get, ioremap and request_irq by their managed
counterparts to simplify error paths.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent cfb6d656
Loading
Loading
Loading
Loading
+14 −35
Original line number Diff line number Diff line
@@ -315,68 +315,47 @@ static int em_sti_probe(struct platform_device *pdev)
{
	struct em_sti_priv *p;
	struct resource *res;
	int irq, ret;
	int irq;

	p = kzalloc(sizeof(*p), GFP_KERNEL);
	p = devm_kzalloc(&pdev->dev, sizeof(*p), GFP_KERNEL);
	if (p == NULL) {
		dev_err(&pdev->dev, "failed to allocate driver data\n");
		ret = -ENOMEM;
		goto err0;
		return -ENOMEM;
	}

	p->pdev = pdev;
	platform_set_drvdata(pdev, p);

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		dev_err(&pdev->dev, "failed to get I/O memory\n");
		ret = -EINVAL;
		goto err0;
	}

	irq = platform_get_irq(pdev, 0);
	if (irq < 0) {
		dev_err(&pdev->dev, "failed to get irq\n");
		ret = -EINVAL;
		goto err0;
		return -EINVAL;
	}

	/* map memory, let base point to the STI instance */
	p->base = ioremap_nocache(res->start, resource_size(res));
	if (p->base == NULL) {
		dev_err(&pdev->dev, "failed to remap I/O memory\n");
		ret = -ENXIO;
		goto err0;
	}
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	p->base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(p->base))
		return PTR_ERR(p->base);

	/* get hold of clock */
	p->clk = clk_get(&pdev->dev, "sclk");
	p->clk = devm_clk_get(&pdev->dev, "sclk");
	if (IS_ERR(p->clk)) {
		dev_err(&pdev->dev, "cannot get clock\n");
		ret = PTR_ERR(p->clk);
		goto err1;
		return PTR_ERR(p->clk);
	}

	if (request_irq(irq, em_sti_interrupt,
	if (devm_request_irq(&pdev->dev, irq, em_sti_interrupt,
			     IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
			     dev_name(&pdev->dev), p)) {
		dev_err(&pdev->dev, "failed to request low IRQ\n");
		ret = -ENOENT;
		goto err2;
		return -ENOENT;
	}

	raw_spin_lock_init(&p->lock);
	em_sti_register_clockevent(p);
	em_sti_register_clocksource(p);
	return 0;

err2:
	clk_put(p->clk);
err1:
	iounmap(p->base);
err0:
	kfree(p);
	return ret;
}

static int em_sti_remove(struct platform_device *pdev)