mirror of https://gitee.com/openkylin/linux.git
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
|
@ -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 @@ rtc {
|
|||
interrupts = <11>;
|
||||
};
|
||||
|
||||
charger: bci {
|
||||
compatible = "ti,twl4030-bci";
|
||||
interrupts = <9>, <2>;
|
||||
bci3v1-supply = <&vusb3v1>;
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "ti,twl4030-wdt";
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
twl4030_charger_enable_backup(pdata->bb_uvolt,
|
||||
pdata->bb_uamp);
|
||||
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),
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue