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

Commit 8c4203cb authored by Lee Jones's avatar Lee Jones Committed by Samuel Ortiz
Browse files

mfd: ab8500-core: Use devm_* memory/IRQ and allocation/free routines



It is better to use devm_* calls, as they allow for easier
and more automatic clean-up. Resources are device allocated,
so when a device is freed, so are all associated resources.

Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 84e6de81
Loading
Loading
Loading
Loading
+24 −38
Original line number Diff line number Diff line
@@ -1233,7 +1233,7 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
	int i;
	u8 value;

	ab8500 = kzalloc(sizeof *ab8500, GFP_KERNEL);
	ab8500 = devm_kzalloc(&pdev->dev, sizeof *ab8500, GFP_KERNEL);
	if (!ab8500)
		return -ENOMEM;

@@ -1243,10 +1243,8 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
	ab8500->dev = &pdev->dev;

	resource = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
	if (!resource) {
		ret = -ENODEV;
		goto out_free_ab8500;
	}
	if (!resource)
		return -ENODEV;

	ab8500->irq = resource->start;

@@ -1269,7 +1267,7 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
		ret = get_register_interruptible(ab8500, AB8500_MISC,
			AB8500_IC_NAME_REG, &value);
		if (ret < 0)
			goto out_free_ab8500;
			return ret;

		ab8500->version = value;
	}
@@ -1277,7 +1275,7 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
	ret = get_register_interruptible(ab8500, AB8500_MISC,
		AB8500_REV_REG, &value);
	if (ret < 0)
		goto out_free_ab8500;
		return ret;

	ab8500->chip_id = value;

@@ -1294,14 +1292,13 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
		ab8500->mask_size = AB8500_NUM_IRQ_REGS;
		ab8500->irq_reg_offset = ab8500_irq_regoffset;
	}
	ab8500->mask = kzalloc(ab8500->mask_size, GFP_KERNEL);
	ab8500->mask = devm_kzalloc(&pdev->dev, ab8500->mask_size, GFP_KERNEL);
	if (!ab8500->mask)
		return -ENOMEM;
	ab8500->oldmask = kzalloc(ab8500->mask_size, GFP_KERNEL);
	if (!ab8500->oldmask) {
		ret = -ENOMEM;
		goto out_freemask;
	}
	ab8500->oldmask = devm_kzalloc(&pdev->dev, ab8500->mask_size, GFP_KERNEL);
	if (!ab8500->oldmask)
		return -ENOMEM;

	/*
	 * ab8500 has switched off due to (SWITCH_OFF_STATUS):
	 * 0x01 Swoff bit programming
@@ -1355,37 +1352,37 @@ static int __devinit ab8500_probe(struct platform_device *pdev)

	ret = abx500_register_ops(ab8500->dev, &ab8500_ops);
	if (ret)
		goto out_freeoldmask;
		return ret;

	for (i = 0; i < ab8500->mask_size; i++)
		ab8500->mask[i] = ab8500->oldmask[i] = 0xff;

	ret = ab8500_irq_init(ab8500, np);
	if (ret)
		goto out_freeoldmask;
		return ret;

	/*  Activate this feature only in ab9540 */
	/*  till tests are done on ab8500 1p2 or later*/
	if (is_ab9540(ab8500)) {
		ret = request_threaded_irq(ab8500->irq, NULL,
		ret = devm_request_threaded_irq(&pdev->dev, ab8500->irq, NULL,
						ab8500_hierarchical_irq,
						IRQF_ONESHOT | IRQF_NO_SUSPEND,
						"ab8500", ab8500);
	}
	else {
		ret = request_threaded_irq(ab8500->irq, NULL,
		ret = devm_request_threaded_irq(&pdev->dev, ab8500->irq, NULL,
						ab8500_irq,
						IRQF_ONESHOT | IRQF_NO_SUSPEND,
						"ab8500", ab8500);
		if (ret)
			goto out_freeoldmask;
			return ret;
	}

	ret = mfd_add_devices(ab8500->dev, 0, abx500_common_devs,
			ARRAY_SIZE(abx500_common_devs), NULL,
			ab8500->irq_base, ab8500->domain);
	if (ret)
		goto out_freeirq;
		return ret;

	if (is_ab9540(ab8500))
		ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
@@ -1396,14 +1393,14 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
				ARRAY_SIZE(ab8500_devs), NULL,
				ab8500->irq_base, ab8500->domain);
	if (ret)
		goto out_freeirq;
		return ret;

	if (is_ab9540(ab8500) || is_ab8505(ab8500))
		ret = mfd_add_devices(ab8500->dev, 0, ab9540_ab8505_devs,
				ARRAY_SIZE(ab9540_ab8505_devs), NULL,
				ab8500->irq_base, ab8500->domain);
	if (ret)
		goto out_freeirq;
		return ret;

	if (!no_bm) {
		/* Add battery management devices */
@@ -1424,17 +1421,6 @@ static int __devinit ab8500_probe(struct platform_device *pdev)
		dev_err(ab8500->dev, "error creating sysfs entries\n");

	return ret;

out_freeirq:
	free_irq(ab8500->irq, ab8500);
out_freeoldmask:
	kfree(ab8500->oldmask);
out_freemask:
	kfree(ab8500->mask);
out_free_ab8500:
	kfree(ab8500);

	return ret;
}

static int __devexit ab8500_remove(struct platform_device *pdev)