mirror of
https://github.com/t2linux/kernel.git
synced 2026-04-30 13:48:59 -07:00
Merge tag 'for-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply
Pull power supply and reset updates from Sebastian Reichel: "New drivers: - Linear ltc3651 charger driver - Motorola CPCAP battery fuel-gauge driver New chip/feature support: - bq27xxx: prepare for chip data setup - axp20x_battery: support max charge current setup New core features: - add Apple Brick ID type - support "supplied-from" device property for generic ACPI/pdata support - support strings for sysfs properties representing enums - introduce battery-info (backend is DT only for now) - provide reboot-mode header globally .. and misc fixes" * tag 'for-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply: (39 commits) power: supply: sbs-battery: Don't needlessly set CAPACITY_MODE power: supply: sbs-battery: Prevent CAPACITY_MODE races power: supply: bq24735: remove incorrect le16_to_cpu calls power: supply: sbs-battery: remove incorrect le16_to_cpu calls power: supply: cpcap-charger: Add missing power_supply_config power: supply: twl4030-charger: move allocation of iio channel to the beginning power: supply: twl4030-charger: allocate iio by devm_iio_channel_get() and fix error path power: supply: core: constify psy_tcd_ops. dt-bindings: power: supply: cpcap-battery: Add power-supplies property dt-bindings: power: supply: move max8903-charger.txt to proper location dt-bindings: power: supply: move maxim,max14656.txt to proper location power: supply: twl4030_charger: Use sysfs_match_string() helper power: reset: reboot-mode: Make include file global power: supply: axp20x_battery: add DT support for battery max constant charge current power: supply: axp20x_battery: add support for DT battery power: supply: bq27xxx: Add power_supply_battery_info support power: supply: bq27xxx: Add chip data memory read/write support power: supply: bq27xxx: Add bulk transfer bus methods dt-bindings: power: supply: bq27xxx: Add monitored-battery documentation power: supply: core: Add power_supply_prop_precharge ...
This commit is contained in:
@@ -1,20 +1,3 @@
|
||||
What: /sys/class/power_supply/twl4030_ac/max_current
|
||||
/sys/class/power_supply/twl4030_usb/max_current
|
||||
Description:
|
||||
Read/Write limit on current which may
|
||||
be drawn from the ac (Accessory Charger) or
|
||||
USB port.
|
||||
|
||||
Value is in micro-Amps.
|
||||
|
||||
Value is set automatically to an appropriate
|
||||
value when a cable is plugged or unplugged.
|
||||
|
||||
Value can the set by writing to the attribute.
|
||||
The change will only persist until the next
|
||||
plug event. These event are reported via udev.
|
||||
|
||||
|
||||
What: /sys/class/power_supply/twl4030_usb/mode
|
||||
Description:
|
||||
Changing mode for USB port.
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
Battery Characteristics
|
||||
|
||||
The devicetree battery node provides static battery characteristics.
|
||||
In smart batteries, these are typically stored in non-volatile memory
|
||||
on a fuel gauge chip. The battery node should be used where there is
|
||||
no appropriate non-volatile memory, or it is unprogrammed/incorrect.
|
||||
|
||||
Upstream dts files should not include battery nodes, unless the battery
|
||||
represented cannot easily be replaced in the system by one of a
|
||||
different type. This prevents unpredictable, potentially harmful,
|
||||
behavior should a replacement that changes the battery type occur
|
||||
without a corresponding update to the dtb.
|
||||
|
||||
Required Properties:
|
||||
- compatible: Must be "simple-battery"
|
||||
|
||||
Optional Properties:
|
||||
- voltage-min-design-microvolt: drained battery voltage
|
||||
- energy-full-design-microwatt-hours: battery design energy
|
||||
- charge-full-design-microamp-hours: battery design capacity
|
||||
- precharge-current-microamp: current for pre-charge phase
|
||||
- charge-term-current-microamp: current for charge termination phase
|
||||
- constant-charge-current-max-microamp: maximum constant input current
|
||||
- constant-charge-voltage-max-microvolt: maximum constant input voltage
|
||||
|
||||
Battery properties are named, where possible, for the corresponding
|
||||
elements in enum power_supply_property, defined in
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/power_supply.h
|
||||
|
||||
Batteries must be referenced by chargers and/or fuel-gauges
|
||||
using a phandle. The phandle's property should be named
|
||||
"monitored-battery".
|
||||
|
||||
Example:
|
||||
|
||||
bat: battery {
|
||||
compatible = "simple-battery";
|
||||
voltage-min-design-microvolt = <3200000>;
|
||||
energy-full-design-microwatt-hours = <5290000>;
|
||||
charge-full-design-microamp-hours = <1430000>;
|
||||
precharge-current-microamp = <256000>;
|
||||
charge-term-current-microamp = <128000>;
|
||||
constant-charge-current-max-microamp = <900000>;
|
||||
constant-charge-voltage-max-microvolt = <4200000>;
|
||||
};
|
||||
|
||||
charger: charger@11 {
|
||||
....
|
||||
monitored-battery = <&bat>;
|
||||
...
|
||||
};
|
||||
|
||||
fuel_gauge: fuel-gauge@22 {
|
||||
....
|
||||
monitored-battery = <&bat>;
|
||||
...
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
Binding for TI BQ27XXX fuel gauge family
|
||||
TI BQ27XXX fuel gauge family
|
||||
|
||||
Required properties:
|
||||
- compatible: Should contain one of the following:
|
||||
- compatible: contains one of the following:
|
||||
* "ti,bq27200" - BQ27200
|
||||
* "ti,bq27210" - BQ27210
|
||||
* "ti,bq27500" - deprecated, use revision specific property below
|
||||
@@ -26,11 +26,28 @@ Required properties:
|
||||
* "ti,bq27425" - BQ27425
|
||||
* "ti,bq27441" - BQ27441
|
||||
* "ti,bq27621" - BQ27621
|
||||
- reg: integer, i2c address of the device.
|
||||
- reg: integer, I2C address of the fuel gauge.
|
||||
|
||||
Optional properties:
|
||||
- monitored-battery: phandle of battery characteristics node
|
||||
The fuel gauge uses the following battery properties:
|
||||
+ energy-full-design-microwatt-hours
|
||||
+ charge-full-design-microamp-hours
|
||||
+ voltage-min-design-microvolt
|
||||
Both or neither of the *-full-design-*-hours properties must be set.
|
||||
See Documentation/devicetree/bindings/power/supply/battery.txt
|
||||
|
||||
Example:
|
||||
|
||||
bq27510g3 {
|
||||
compatible = "ti,bq27510g3";
|
||||
reg = <0x55>;
|
||||
};
|
||||
bat: battery {
|
||||
compatible = "simple-battery";
|
||||
voltage-min-design-microvolt = <3200000>;
|
||||
energy-full-design-microwatt-hours = <5290000>;
|
||||
charge-full-design-microamp-hours = <1430000>;
|
||||
};
|
||||
|
||||
bq27510g3: fuel-gauge@55 {
|
||||
compatible = "ti,bq27510g3";
|
||||
reg = <0x55>;
|
||||
monitored-battery = <&bat>;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
Motorola CPCAP PMIC battery driver binding
|
||||
|
||||
Required properties:
|
||||
- compatible: Shall be "motorola,cpcap-battery"
|
||||
- interrupts: Interrupt specifier for each name in interrupt-names
|
||||
- interrupt-names: Should contain the following entries:
|
||||
"lowbph", "lowbpl", "chrgcurr1", "battdetb"
|
||||
- io-channels: IIO ADC channel specifier for each name in io-channel-names
|
||||
- io-channel-names: Should contain the following entries:
|
||||
"battdetb", "battp", "chg_isense", "batti"
|
||||
- power-supplies: List of phandles for power-supplying devices, as
|
||||
described in power_supply.txt. Typically a reference
|
||||
to cpcap_charger.
|
||||
|
||||
Example:
|
||||
|
||||
cpcap_battery: battery {
|
||||
compatible = "motorola,cpcap-battery";
|
||||
interrupts-extended = <
|
||||
&cpcap 5 0 &cpcap 3 0
|
||||
&cpcap 20 0 &cpcap 54 0
|
||||
>;
|
||||
interrupt-names =
|
||||
"lowbph", "lowbpl",
|
||||
"chrgcurr1", "battdetb";
|
||||
io-channels = <&cpcap_adc 0 &cpcap_adc 1
|
||||
&cpcap_adc 5 &cpcap_adc 6>;
|
||||
io-channel-names = "battdetb", "battp",
|
||||
"chg_isense", "batti";
|
||||
power-supplies = <&cpcap_charger>;
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
ltc3651-charger
|
||||
|
||||
Required properties:
|
||||
- compatible: "lltc,ltc3651-charger"
|
||||
- lltc,acpr-gpios: Connect to ACPR output. See remark below.
|
||||
|
||||
Optional properties:
|
||||
- lltc,fault-gpios: Connect to FAULT output. See remark below.
|
||||
- lltc,chrg-gpios: Connect to CHRG output. See remark below.
|
||||
|
||||
The ltc3651 outputs are open-drain type and active low. The driver assumes the
|
||||
GPIO reports "active" when the output is asserted, so if the pins have been
|
||||
connected directly, the GPIO flags should be set to active low also.
|
||||
|
||||
The driver will attempt to aquire interrupts for all GPIOs to detect changes in
|
||||
line state. If the system is not capabale of providing interrupts, the driver
|
||||
cannot report changes and userspace will need to periodically read the sysfs
|
||||
attributes to detect changes.
|
||||
|
||||
Example:
|
||||
|
||||
charger: battery-charger {
|
||||
compatible = "lltc,ltc3651-charger";
|
||||
lltc,acpr-gpios = <&gpio0 68 GPIO_ACTIVE_LOW>;
|
||||
lltc,fault-gpios = <&gpio0 64 GPIO_ACTIVE_LOW>;
|
||||
lltc,chrg-gpios = <&gpio0 63 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
@@ -25,8 +25,10 @@ Distance
|
||||
Electricity
|
||||
----------------------------------------
|
||||
-microamp : micro amps
|
||||
-microamp-hours : micro amp-hours
|
||||
-ohms : Ohms
|
||||
-micro-ohms : micro Ohms
|
||||
-microwatt-hours: micro Watt-hours
|
||||
-microvolt : micro volts
|
||||
|
||||
Temperature
|
||||
|
||||
@@ -115,28 +115,33 @@ of charge when battery became full/empty". It also could mean "value of
|
||||
charge when battery considered full/empty at given conditions (temperature,
|
||||
age)". I.e. these attributes represents real thresholds, not design values.
|
||||
|
||||
ENERGY_FULL, ENERGY_EMPTY - same as above but for energy.
|
||||
|
||||
CHARGE_COUNTER - the current charge counter (in µAh). This could easily
|
||||
be negative; there is no empty or full value. It is only useful for
|
||||
relative, time-based measurements.
|
||||
|
||||
PRECHARGE_CURRENT - the maximum charge current during precharge phase
|
||||
of charge cycle (typically 20% of battery capacity).
|
||||
CHARGE_TERM_CURRENT - Charge termination current. The charge cycle
|
||||
terminates when battery voltage is above recharge threshold, and charge
|
||||
current is below this setting (typically 10% of battery capacity).
|
||||
|
||||
CONSTANT_CHARGE_CURRENT - constant charge current programmed by charger.
|
||||
CONSTANT_CHARGE_CURRENT_MAX - maximum charge current supported by the
|
||||
power supply object.
|
||||
INPUT_CURRENT_LIMIT - input current limit programmed by charger. Indicates
|
||||
the current drawn from a charging source.
|
||||
CHARGE_TERM_CURRENT - Charge termination current used to detect the end of charge
|
||||
condition.
|
||||
|
||||
CALIBRATE - battery or coulomb counter calibration status
|
||||
|
||||
CONSTANT_CHARGE_VOLTAGE - constant charge voltage programmed by charger.
|
||||
CONSTANT_CHARGE_VOLTAGE_MAX - maximum charge voltage supported by the
|
||||
power supply object.
|
||||
|
||||
INPUT_CURRENT_LIMIT - input current limit programmed by charger. Indicates
|
||||
the current drawn from a charging source.
|
||||
|
||||
CHARGE_CONTROL_LIMIT - current charge control limit setting
|
||||
CHARGE_CONTROL_LIMIT_MAX - maximum charge control limit setting
|
||||
|
||||
ENERGY_FULL, ENERGY_EMPTY - same as above but for energy.
|
||||
CALIBRATE - battery or coulomb counter calibration status
|
||||
|
||||
CAPACITY - capacity in percents.
|
||||
CAPACITY_ALERT_MIN - minimum capacity alert value in percents.
|
||||
@@ -174,6 +179,18 @@ issued by external power supply will notify supplicants via
|
||||
external_power_changed callback.
|
||||
|
||||
|
||||
Devicetree battery characteristics
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Drivers should call power_supply_get_battery_info() to obtain battery
|
||||
characteristics from a devicetree battery node, defined in
|
||||
Documentation/devicetree/bindings/power/supply/battery.txt. This is
|
||||
implemented in drivers/power/supply/bq27xxx_battery.c.
|
||||
|
||||
Properties in struct power_supply_battery_info and their counterparts in the
|
||||
battery node have names corresponding to elements in enum power_supply_property,
|
||||
for naming consistency between sysfs attributes and battery node properties.
|
||||
|
||||
|
||||
QA
|
||||
~~
|
||||
Q: Where is POWER_SUPPLY_PROP_XYZ attribute?
|
||||
|
||||
@@ -58,9 +58,9 @@ config POWER_RESET_BRCMKONA
|
||||
|
||||
config POWER_RESET_BRCMSTB
|
||||
bool "Broadcom STB reset driver"
|
||||
depends on ARM || MIPS || COMPILE_TEST
|
||||
depends on ARM || ARM64 || MIPS || COMPILE_TEST
|
||||
depends on MFD_SYSCON
|
||||
default ARCH_BRCMSTB
|
||||
default ARCH_BRCMSTB || BMIPS_GENERIC
|
||||
help
|
||||
This driver provides restart support for Broadcom STB boards.
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ static void at91_lpddr_poweroff(void)
|
||||
"r" cpu_to_le32(AT91_DDRSDRC_LPDDR2_PWOFF),
|
||||
"r" (at91_shdwc_base),
|
||||
"r" cpu_to_le32(AT91_SHDW_KEY | AT91_SHDW_SHDW)
|
||||
: "r0");
|
||||
: "r6");
|
||||
}
|
||||
|
||||
static int at91_poweroff_get_wakeup_mode(struct device_node *np)
|
||||
|
||||
@@ -132,7 +132,7 @@ static void at91_lpddr_poweroff(void)
|
||||
"r" cpu_to_le32(AT91_DDRSDRC_LPDDR2_PWOFF),
|
||||
"r" (at91_shdwc->at91_shdwc_base),
|
||||
"r" cpu_to_le32(AT91_SHDW_KEY | AT91_SHDW_SHDW)
|
||||
: "r0");
|
||||
: "r6");
|
||||
}
|
||||
|
||||
static u32 at91_shdwc_debouncer_value(struct platform_device *pdev,
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/reboot.h>
|
||||
#include "reboot-mode.h"
|
||||
#include <linux/reboot-mode.h>
|
||||
|
||||
#define PREFIX "mode-"
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include "reboot-mode.h"
|
||||
#include <linux/reboot-mode.h>
|
||||
|
||||
struct syscon_reboot_mode {
|
||||
struct regmap *map;
|
||||
|
||||
@@ -82,6 +82,14 @@ config BATTERY_ACT8945A
|
||||
Say Y here to enable support for power supply provided by
|
||||
Active-semi ActivePath ACT8945A charger.
|
||||
|
||||
config BATTERY_CPCAP
|
||||
tristate "Motorola CPCAP PMIC battery driver"
|
||||
depends on MFD_CPCAP && IIO
|
||||
default MFD_CPCAP
|
||||
help
|
||||
Say Y here to enable support for battery on Motorola
|
||||
phones and tablets such as droid 4.
|
||||
|
||||
config BATTERY_DS2760
|
||||
tristate "DS2760 battery driver (HP iPAQ & others)"
|
||||
depends on W1 && W1_SLAVE_DS2760
|
||||
@@ -190,6 +198,17 @@ config BATTERY_BQ27XXX_I2C
|
||||
Say Y here to enable support for batteries with BQ27xxx chips
|
||||
connected over an I2C bus.
|
||||
|
||||
config BATTERY_BQ27XXX_DT_UPDATES_NVM
|
||||
bool "BQ27xxx support for update of NVM/flash data memory"
|
||||
depends on BATTERY_BQ27XXX_I2C
|
||||
help
|
||||
Say Y here to enable devicetree monitored-battery config to update
|
||||
NVM/flash data memory. Only enable this option for devices with a
|
||||
fuel gauge mounted on the circuit board, and a battery that cannot
|
||||
easily be replaced with one of a different type. Not for
|
||||
general-purpose kernels, as this can cause misconfiguration of a
|
||||
smart battery with embedded NVM/flash.
|
||||
|
||||
config BATTERY_DA9030
|
||||
tristate "DA9030 battery driver"
|
||||
depends on PMIC_DA903X
|
||||
@@ -408,6 +427,13 @@ config CHARGER_MANAGER
|
||||
runtime and in suspend-to-RAM by waking up the system periodically
|
||||
with help of suspend_again support.
|
||||
|
||||
config CHARGER_LTC3651
|
||||
tristate "LTC3651 charger"
|
||||
depends on GPIOLIB
|
||||
help
|
||||
Say Y to include support for the LTC3651 battery charger which reports
|
||||
its status via GPIO lines.
|
||||
|
||||
config CHARGER_MAX14577
|
||||
tristate "Maxim MAX14577/77836 battery charger driver"
|
||||
depends on MFD_MAX14577
|
||||
|
||||
@@ -20,6 +20,7 @@ obj-$(CONFIG_BATTERY_88PM860X) += 88pm860x_battery.o
|
||||
obj-$(CONFIG_BATTERY_ACT8945A) += act8945a_charger.o
|
||||
obj-$(CONFIG_BATTERY_AXP20X) += axp20x_battery.o
|
||||
obj-$(CONFIG_CHARGER_AXP20X) += axp20x_ac_power.o
|
||||
obj-$(CONFIG_BATTERY_CPCAP) += cpcap-battery.o
|
||||
obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
|
||||
obj-$(CONFIG_BATTERY_DS2780) += ds2780_battery.o
|
||||
obj-$(CONFIG_BATTERY_DS2781) += ds2781_battery.o
|
||||
@@ -61,6 +62,7 @@ obj-$(CONFIG_CHARGER_LP8727) += lp8727_charger.o
|
||||
obj-$(CONFIG_CHARGER_LP8788) += lp8788-charger.o
|
||||
obj-$(CONFIG_CHARGER_GPIO) += gpio-charger.o
|
||||
obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o
|
||||
obj-$(CONFIG_CHARGER_LTC3651) += ltc3651-charger.o
|
||||
obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o
|
||||
obj-$(CONFIG_CHARGER_DETECTOR_MAX14656) += max14656_charger_detector.o
|
||||
obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o
|
||||
|
||||
@@ -60,6 +60,8 @@ struct axp20x_batt_ps {
|
||||
struct iio_channel *batt_chrg_i;
|
||||
struct iio_channel *batt_dischrg_i;
|
||||
struct iio_channel *batt_v;
|
||||
/* Maximum constant charge current */
|
||||
unsigned int max_ccc;
|
||||
u8 axp_id;
|
||||
};
|
||||
|
||||
@@ -129,6 +131,14 @@ static void raw_to_constant_charge_current(struct axp20x_batt_ps *axp, int *val)
|
||||
*val = *val * 150000 + 300000;
|
||||
}
|
||||
|
||||
static void constant_charge_current_to_raw(struct axp20x_batt_ps *axp, int *val)
|
||||
{
|
||||
if (axp->axp_id == AXP209_ID)
|
||||
*val = (*val - 300000) / 100000;
|
||||
else
|
||||
*val = (*val - 300000) / 150000;
|
||||
}
|
||||
|
||||
static int axp20x_get_constant_charge_current(struct axp20x_batt_ps *axp,
|
||||
int *val)
|
||||
{
|
||||
@@ -221,9 +231,7 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
|
||||
break;
|
||||
|
||||
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
|
||||
val->intval = AXP20X_CHRG_CTRL1_TGT_CURR;
|
||||
raw_to_constant_charge_current(axp20x_batt, &val->intval);
|
||||
|
||||
val->intval = axp20x_batt->max_ccc;
|
||||
break;
|
||||
|
||||
case POWER_SUPPLY_PROP_CURRENT_NOW:
|
||||
@@ -340,10 +348,10 @@ static int axp20x_battery_set_max_voltage(struct axp20x_batt_ps *axp20x_batt,
|
||||
static int axp20x_set_constant_charge_current(struct axp20x_batt_ps *axp_batt,
|
||||
int charge_current)
|
||||
{
|
||||
if (axp_batt->axp_id == AXP209_ID)
|
||||
charge_current = (charge_current - 300000) / 100000;
|
||||
else
|
||||
charge_current = (charge_current - 300000) / 150000;
|
||||
if (charge_current > axp_batt->max_ccc)
|
||||
return -EINVAL;
|
||||
|
||||
constant_charge_current_to_raw(axp_batt, &charge_current);
|
||||
|
||||
if (charge_current > AXP20X_CHRG_CTRL1_TGT_CURR || charge_current < 0)
|
||||
return -EINVAL;
|
||||
@@ -352,6 +360,36 @@ static int axp20x_set_constant_charge_current(struct axp20x_batt_ps *axp_batt,
|
||||
AXP20X_CHRG_CTRL1_TGT_CURR, charge_current);
|
||||
}
|
||||
|
||||
static int axp20x_set_max_constant_charge_current(struct axp20x_batt_ps *axp,
|
||||
int charge_current)
|
||||
{
|
||||
bool lower_max = false;
|
||||
|
||||
constant_charge_current_to_raw(axp, &charge_current);
|
||||
|
||||
if (charge_current > AXP20X_CHRG_CTRL1_TGT_CURR || charge_current < 0)
|
||||
return -EINVAL;
|
||||
|
||||
raw_to_constant_charge_current(axp, &charge_current);
|
||||
|
||||
if (charge_current > axp->max_ccc)
|
||||
dev_warn(axp->dev,
|
||||
"Setting max constant charge current higher than previously defined. Note that increasing the constant charge current may damage your battery.\n");
|
||||
else
|
||||
lower_max = true;
|
||||
|
||||
axp->max_ccc = charge_current;
|
||||
|
||||
if (lower_max) {
|
||||
int current_cc;
|
||||
|
||||
axp20x_get_constant_charge_current(axp, ¤t_cc);
|
||||
if (current_cc > charge_current)
|
||||
axp20x_set_constant_charge_current(axp, charge_current);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int axp20x_set_voltage_min_design(struct axp20x_batt_ps *axp_batt,
|
||||
int min_voltage)
|
||||
{
|
||||
@@ -380,6 +418,9 @@ static int axp20x_battery_set_prop(struct power_supply *psy,
|
||||
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
|
||||
return axp20x_set_constant_charge_current(axp20x_batt,
|
||||
val->intval);
|
||||
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
|
||||
return axp20x_set_max_constant_charge_current(axp20x_batt,
|
||||
val->intval);
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
@@ -405,7 +446,8 @@ static int axp20x_battery_prop_writeable(struct power_supply *psy,
|
||||
{
|
||||
return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN ||
|
||||
psp == POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN ||
|
||||
psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT;
|
||||
psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT ||
|
||||
psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX;
|
||||
}
|
||||
|
||||
static const struct power_supply_desc axp20x_batt_ps_desc = {
|
||||
@@ -433,6 +475,7 @@ static int axp20x_power_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct axp20x_batt_ps *axp20x_batt;
|
||||
struct power_supply_config psy_cfg = {};
|
||||
struct power_supply_battery_info info;
|
||||
|
||||
if (!of_device_is_available(pdev->dev.of_node))
|
||||
return -ENODEV;
|
||||
@@ -484,6 +527,35 @@ static int axp20x_power_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(axp20x_batt->batt);
|
||||
}
|
||||
|
||||
if (!power_supply_get_battery_info(axp20x_batt->batt, &info)) {
|
||||
int vmin = info.voltage_min_design_uv;
|
||||
int ccc = info.constant_charge_current_max_ua;
|
||||
|
||||
if (vmin > 0 && axp20x_set_voltage_min_design(axp20x_batt,
|
||||
vmin))
|
||||
dev_err(&pdev->dev,
|
||||
"couldn't set voltage_min_design\n");
|
||||
|
||||
/* Set max to unverified value to be able to set CCC */
|
||||
axp20x_batt->max_ccc = ccc;
|
||||
|
||||
if (ccc <= 0 || axp20x_set_constant_charge_current(axp20x_batt,
|
||||
ccc)) {
|
||||
dev_err(&pdev->dev,
|
||||
"couldn't set constant charge current from DT: fallback to minimum value\n");
|
||||
ccc = 300000;
|
||||
axp20x_batt->max_ccc = ccc;
|
||||
axp20x_set_constant_charge_current(axp20x_batt, ccc);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Update max CCC to a valid value if battery info is present or set it
|
||||
* to current register value by default.
|
||||
*/
|
||||
axp20x_get_constant_charge_current(axp20x_batt,
|
||||
&axp20x_batt->max_ccc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -339,7 +339,7 @@ static int axp20x_usb_power_probe(struct platform_device *pdev)
|
||||
"VBUS_REMOVAL", "VBUS_VALID", "VBUS_NOT_VALID", NULL };
|
||||
static const char * const axp22x_irq_names[] = {
|
||||
"VBUS_PLUGIN", "VBUS_REMOVAL", NULL };
|
||||
static const char * const *irq_names;
|
||||
const char * const *irq_names;
|
||||
const struct power_supply_desc *usb_power_desc;
|
||||
int i, irq, ret;
|
||||
|
||||
|
||||
@@ -81,14 +81,12 @@ static int bq24735_charger_property_is_writeable(struct power_supply *psy,
|
||||
static inline int bq24735_write_word(struct i2c_client *client, u8 reg,
|
||||
u16 value)
|
||||
{
|
||||
return i2c_smbus_write_word_data(client, reg, le16_to_cpu(value));
|
||||
return i2c_smbus_write_word_data(client, reg, value);
|
||||
}
|
||||
|
||||
static inline int bq24735_read_word(struct i2c_client *client, u8 reg)
|
||||
{
|
||||
s32 ret = i2c_smbus_read_word_data(client, reg);
|
||||
|
||||
return ret < 0 ? ret : le16_to_cpu(ret);
|
||||
return i2c_smbus_read_word_data(client, reg);
|
||||
}
|
||||
|
||||
static int bq24735_update_word(struct i2c_client *client, u8 reg,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user