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: NeilBrown <neilb@suse.de> Acked-by: Kumar Gala <galak@codeaurora.org> Acked-by: Grant Likely <grant.likely@linaro.org> Signed-off-by: Anton Vorontsov <anton@enomsg.org>
This commit is contained in:
parent
588bd5918b
commit
ec0b380245
20
Documentation/devicetree/bindings/power/twl-charger.txt
Normal file
20
Documentation/devicetree/bindings/power/twl-charger.txt
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
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 @@
|
||||||
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[] = {
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue