diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-26 19:49:09 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-26 19:49:09 -0700 |
| commit | f7816ad0f878dacd5f0120476f9b836ccf8699ea (patch) | |
| tree | 43c81a5697976af080e58e41ec84c7f5c7c29fbe /drivers/power/qcom_smbb.c | |
| parent | 6097d55e10a7e190279e99318a0e075c8d1dce9e (diff) | |
| parent | 4fcd504edbf7c793325511c2df8dcd083958e28a (diff) | |
Merge tag 'for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply
Pull power supply and reset updates from Sebastian Reichel:
- introduce reboot mode driver
- add DT support to max8903
- add power supply support for axp221
- misc fixes
* tag 'for-v4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply:
power: reset: add reboot mode driver
dt-bindings: power: reset: add document for reboot-mode driver
power_supply: fix return value of get_property
power: qcom_smbb: Make an extcon for usb cable detection
max8903: adds support for initiation via device tree
max8903: adds documentation for device tree bindings.
max8903: remove unnecessary 'out of memory' error message.
max8903: removes non zero validity checks on gpios.
max8903: adds requesting of gpios.
max8903: cleans up confusing relationship between dc_valid, dok and dcm.
max8903: store pointer to pdata instead of copying it.
power_supply: bq27xxx_battery: Group register mappings into one table
docs: Move brcm,bcm21664-resetmgr.txt
power/reset: make syscon_poweroff() static
power: axp20x_usb: Add support for usb power-supply on axp22x pmics
power_supply: bq27xxx_battery: Index register numbers by enum
power_supply: bq27xxx_battery: Fix copy/paste error in header comment
MAINTAINERS: Add file patterns for power supply device tree bindings
power: reset: keystone: Enable COMPILE_TEST
Diffstat (limited to 'drivers/power/qcom_smbb.c')
| -rw-r--r-- | drivers/power/qcom_smbb.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/power/qcom_smbb.c b/drivers/power/qcom_smbb.c index 5eb1e9e543e2..b5896ba2a602 100644 --- a/drivers/power/qcom_smbb.c +++ b/drivers/power/qcom_smbb.c @@ -34,6 +34,7 @@ #include <linux/power_supply.h> #include <linux/regmap.h> #include <linux/slab.h> +#include <linux/extcon.h> #define SMBB_CHG_VMAX 0x040 #define SMBB_CHG_VSAFE 0x041 @@ -111,6 +112,7 @@ struct smbb_charger { unsigned int revision; unsigned int addr; struct device *dev; + struct extcon_dev *edev; bool dc_disabled; bool jeita_ext_temp; @@ -125,6 +127,11 @@ struct smbb_charger { struct regmap *regmap; }; +static const unsigned int smbb_usb_extcon_cable[] = { + EXTCON_USB, + EXTCON_NONE, +}; + static int smbb_vbat_weak_fn(unsigned int index) { return 2100000 + index * 100000; @@ -371,6 +378,8 @@ static irqreturn_t smbb_usb_valid_handler(int irq, void *_data) struct smbb_charger *chg = _data; smbb_set_line_flag(chg, irq, STATUS_USBIN_VALID); + extcon_set_cable_state_(chg->edev, EXTCON_USB, + chg->status & STATUS_USBIN_VALID); power_supply_changed(chg->usb_psy); return IRQ_HANDLED; @@ -849,6 +858,18 @@ static int smbb_charger_probe(struct platform_device *pdev) return PTR_ERR(chg->usb_psy); } + chg->edev = devm_extcon_dev_allocate(&pdev->dev, smbb_usb_extcon_cable); + if (IS_ERR(chg->edev)) { + dev_err(&pdev->dev, "failed to allocate extcon device\n"); + return -ENOMEM; + } + + rc = devm_extcon_dev_register(&pdev->dev, chg->edev); + if (rc < 0) { + dev_err(&pdev->dev, "failed to register extcon device\n"); + return rc; + } + if (!chg->dc_disabled) { dc_cfg.drv_data = chg; dc_cfg.supplied_to = smbb_bif; |
