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

Commit 174f2366 authored by Axel Lin's avatar Axel Lin Committed by Wolfram Sang
Browse files

i2c: au1550: Convert to devm_kzalloc and devm_ioremap_resource



Use devm_* APIs to simplify the code.

Signed-off-by: default avatarAxel Lin <axel.lin@ingics.com>
Tested-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 9e685c84
Loading
Loading
Loading
Loading
+13 −39
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ struct i2c_au1550_data {
	void __iomem *psc_base;
	int	xfer_timeout;
	struct i2c_adapter adap;
	struct resource *ioarea;
};

static inline void WR(struct i2c_au1550_data *a, int r, unsigned long v)
@@ -315,30 +314,16 @@ i2c_au1550_probe(struct platform_device *pdev)
	struct resource *r;
	int ret;

	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!r) {
		ret = -ENODEV;
		goto out;
	}

	priv = kzalloc(sizeof(struct i2c_au1550_data), GFP_KERNEL);
	if (!priv) {
		ret = -ENOMEM;
		goto out;
	}
	priv = devm_kzalloc(&pdev->dev, sizeof(struct i2c_au1550_data),
			    GFP_KERNEL);
	if (!priv)
		return -ENOMEM;

	priv->ioarea = request_mem_region(r->start, resource_size(r),
					  pdev->name);
	if (!priv->ioarea) {
		ret = -EBUSY;
		goto out_mem;
	}
	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	priv->psc_base = devm_ioremap_resource(&pdev->dev, r);
	if (IS_ERR(priv->psc_base))
		return PTR_ERR(priv->psc_base);

	priv->psc_base = ioremap(r->start, resource_size(r));
	if (!priv->psc_base) {
		ret = -EIO;
		goto out_map;
	}
	priv->xfer_timeout = 200;

	priv->adap.nr = pdev->id;
@@ -351,32 +336,21 @@ i2c_au1550_probe(struct platform_device *pdev)
	i2c_au1550_setup(priv);

	ret = i2c_add_numbered_adapter(&priv->adap);
	if (ret == 0) {
		platform_set_drvdata(pdev, priv);
		return 0;
	}

	if (ret) {
		i2c_au1550_disable(priv);
	iounmap(priv->psc_base);
out_map:
	release_resource(priv->ioarea);
	kfree(priv->ioarea);
out_mem:
	kfree(priv);
out:
		return ret;
	}

	platform_set_drvdata(pdev, priv);
	return 0;
}

static int i2c_au1550_remove(struct platform_device *pdev)
{
	struct i2c_au1550_data *priv = platform_get_drvdata(pdev);

	i2c_del_adapter(&priv->adap);
	i2c_au1550_disable(priv);
	iounmap(priv->psc_base);
	release_resource(priv->ioarea);
	kfree(priv->ioarea);
	kfree(priv);
	return 0;
}