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

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
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>;
};
...@@ -19,6 +19,12 @@ rtc { ...@@ -19,6 +19,12 @@ rtc {
interrupts = <11>; interrupts = <11>;
}; };
charger: bci {
compatible = "ti,twl4030-bci";
interrupts = <9>, <2>;
bci3v1-supply = <&vusb3v1>;
};
watchdog { watchdog {
compatible = "ti,twl4030-wdt"; compatible = "ti,twl4030-wdt";
}; };
......
...@@ -495,10 +495,38 @@ static enum power_supply_property twl4030_charger_props[] = { ...@@ -495,10 +495,38 @@ static enum power_supply_property twl4030_charger_props[] = {
POWER_SUPPLY_PROP_CURRENT_NOW, 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) static int __init twl4030_bci_probe(struct platform_device *pdev)
{ {
struct twl4030_bci *bci; 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; int ret;
u32 reg; u32 reg;
...@@ -506,6 +534,9 @@ static int __init twl4030_bci_probe(struct platform_device *pdev) ...@@ -506,6 +534,9 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)
if (bci == NULL) if (bci == NULL)
return -ENOMEM; return -ENOMEM;
if (!pdata)
pdata = twl4030_bci_parse_dt(&pdev->dev);
bci->dev = &pdev->dev; bci->dev = &pdev->dev;
bci->irq_chg = platform_get_irq(pdev, 0); bci->irq_chg = platform_get_irq(pdev, 0);
bci->irq_bci = platform_get_irq(pdev, 1); bci->irq_bci = platform_get_irq(pdev, 1);
...@@ -581,8 +612,11 @@ static int __init twl4030_bci_probe(struct platform_device *pdev) ...@@ -581,8 +612,11 @@ static int __init twl4030_bci_probe(struct platform_device *pdev)
twl4030_charger_enable_ac(true); twl4030_charger_enable_ac(true);
twl4030_charger_enable_usb(bci, true); twl4030_charger_enable_usb(bci, true);
twl4030_charger_enable_backup(pdata->bb_uvolt, if (pdata)
pdata->bb_uamp); twl4030_charger_enable_backup(pdata->bb_uvolt,
pdata->bb_uamp);
else
twl4030_charger_enable_backup(0, 0);
return 0; return 0;
...@@ -631,10 +665,17 @@ static int __exit twl4030_bci_remove(struct platform_device *pdev) ...@@ -631,10 +665,17 @@ static int __exit twl4030_bci_remove(struct platform_device *pdev)
return 0; 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 = { static struct platform_driver twl4030_bci_driver = {
.driver = { .driver = {
.name = "twl4030_bci", .name = "twl4030_bci",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.of_match_table = of_match_ptr(twl_bci_of_match),
}, },
.remove = __exit_p(twl4030_bci_remove), .remove = __exit_p(twl4030_bci_remove),
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment