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

Commit ec0b3802 authored by NeilBrown's avatar NeilBrown Committed by Anton Vorontsov
Browse files

twl4030_charger: Add devicetree support



This allows the charger to be enabled with devicetree, and allows the
parameters for charging the backup battery to be set.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Acked-by: default avatarKumar Gala <galak@codeaurora.org>
Acked-by: default avatarGrant Likely <grant.likely@linaro.org>
Signed-off-by: default avatarAnton Vorontsov <anton@enomsg.org>
parent 588bd591
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
TWL BCI (Battery Charger Interface)

Required properties:
- compatible:
  - "ti,twl4030-bci"
- interrupts: two interrupt lines from the TWL SIH (secondary
  interrupt handler) - interrupts 9 and 2.

Optional properties:
- ti,bb-uvolt: microvolts for charging the backup battery.
- ti,bb-uamp: microamps for charging the backup battery.

Examples:

bci {
   compatible = "ti,twl4030-bci";
   interrupts = <9>, <2>;
   ti,bb-uvolt = <3200000>;
   ti,bb-uamp = <150>;
};
+6 −0
Original line number Diff line number Diff line
@@ -19,6 +19,12 @@
		interrupts = <11>;
	};

	charger: bci {
		compatible = "ti,twl4030-bci";
		interrupts = <9>, <2>;
		bci3v1-supply = <&vusb3v1>;
	};

	watchdog {
		compatible = "ti,twl4030-wdt";
	};
+44 −3
Original line number Diff line number Diff line
@@ -495,10 +495,38 @@ static enum power_supply_property twl4030_charger_props[] = {
	POWER_SUPPLY_PROP_CURRENT_NOW,
};

#ifdef CONFIG_OF
static const struct twl4030_bci_platform_data *
twl4030_bci_parse_dt(struct device *dev)
{
	struct device_node *np = dev->of_node;
	struct twl4030_bci_platform_data *pdata;
	u32 num;

	if (!np)
		return NULL;
	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
	if (!pdata)
		return pdata;

	if (of_property_read_u32(np, "ti,bb-uvolt", &num) == 0)
		pdata->bb_uvolt = num;
	if (of_property_read_u32(np, "ti,bb-uamp", &num) == 0)
		pdata->bb_uamp = num;
	return pdata;
}
#else
static inline const struct twl4030_bci_platform_data *
twl4030_bci_parse_dt(struct device *dev)
{
	return NULL;
}
#endif

static int __init twl4030_bci_probe(struct platform_device *pdev)
{
	struct twl4030_bci *bci;
	struct twl4030_bci_platform_data *pdata = pdev->dev.platform_data;
	const struct twl4030_bci_platform_data *pdata = pdev->dev.platform_data;
	int ret;
	u32 reg;

@@ -506,6 +534,9 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)
	if (bci == NULL)
		return -ENOMEM;

	if (!pdata)
		pdata = twl4030_bci_parse_dt(&pdev->dev);

	bci->dev = &pdev->dev;
	bci->irq_chg = platform_get_irq(pdev, 0);
	bci->irq_bci = platform_get_irq(pdev, 1);
@@ -581,8 +612,11 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)

	twl4030_charger_enable_ac(true);
	twl4030_charger_enable_usb(bci, true);
	if (pdata)
		twl4030_charger_enable_backup(pdata->bb_uvolt,
					      pdata->bb_uamp);
	else
		twl4030_charger_enable_backup(0, 0);

	return 0;

@@ -631,10 +665,17 @@ static int __exit twl4030_bci_remove(struct platform_device *pdev)
	return 0;
}

static const struct of_device_id twl_bci_of_match[] = {
	{.compatible = "ti,twl4030-bci", },
	{ }
};
MODULE_DEVICE_TABLE(of, twl_bci_of_match);

static struct platform_driver twl4030_bci_driver = {
	.driver	= {
		.name	= "twl4030_bci",
		.owner	= THIS_MODULE,
		.of_match_table = of_match_ptr(twl_bci_of_match),
	},
	.remove	= __exit_p(twl4030_bci_remove),
};