Commit a16afaf7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull power supply and reset updates from Sebastian Reichel:
 - bq27xxx: Add BQ27426 support
 - ab8500: Drop AB8540/9540 support
 - Introduced new usb_type property
 - Properly document the power-supply ABI
 - misc. cleanups and fixes

* tag 'for-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply:
  MAINTAINERS: add entry for LEGO MINDSTORMS EV3
  power: supply: ab8500_charger: fix spelling mistake: "faile" -> "failed"
  power: supply: axp288_fuel_gauge: Remove polling from the driver
  power: supply: axp288_fuelguage: Do not bind when the fg function is not used
  power: supply: axp288_charger: Do not bind when the charge function is not used
  power: supply: axp288_charger: Support 3500 and 4000 mA input current limit
  power: supply: s3c-adc-battery: fix driver data initialization
  power: supply: charger-manager: Verify polling interval only when polling requested
  power: supply: sysfs: Use enum to specify property
  power: supply: ab8500: Drop AB8540/9540 support
  power: supply: ab8500_fg: fix spelling mistake: "Disharge" -> "Discharge"
  power: supply: simplify getting .drvdata
  power: supply: bq27xxx: Add support for BQ27426
  gpio-poweroff: Use gpiod_set_value_cansleep
parents 2a70ea5c c42812da
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ Required properties:
 * "ti,bq27545" - BQ27545
 * "ti,bq27421" - BQ27421
 * "ti,bq27425" - BQ27425
 * "ti,bq27426" - BQ27426
 * "ti,bq27441" - BQ27441
 * "ti,bq27621" - BQ27621
- reg: integer, I2C address of the fuel gauge.
+7 −0
Original line number Diff line number Diff line
@@ -8052,6 +8052,13 @@ S: Maintained
F:	Documentation/misc-devices/eeprom
F:	drivers/misc/eeprom/eeprom.c

LEGO MINDSTORMS EV3
R:	David Lechner <david@lechnology.com>
S:	Maintained
F:	arch/arm/boot/dts/da850-lego-ev3.dts
F:	Documentation/devicetree/bindings/power/supply/lego_ev3_battery.txt
F:	drivers/power/supply/lego_ev3_battery.c

LEGO USB Tower driver
M:	Juergen Stuber <starblue@users.sourceforge.net>
L:	legousb-devel@lists.sourceforge.net
+2 −2
Original line number Diff line number Diff line
@@ -35,11 +35,11 @@ static void gpio_poweroff_do_poweroff(void)
	gpiod_direction_output(reset_gpio, 1);
	mdelay(100);
	/* drive inactive, also active->inactive edge */
	gpiod_set_value(reset_gpio, 0);
	gpiod_set_value_cansleep(reset_gpio, 0);
	mdelay(100);

	/* drive it active, also inactive->active edge */
	gpiod_set_value(reset_gpio, 1);
	gpiod_set_value_cansleep(reset_gpio, 1);

	/* give it some time */
	mdelay(timeout);
+0 −63
Original line number Diff line number Diff line
@@ -430,13 +430,6 @@ static const struct abx500_maxim_parameters ab8500_maxi_params = {
	.charger_curr_step = 100,
};

static const struct abx500_maxim_parameters abx540_maxi_params = {
	.ena_maxi = true,
	.chg_curr = 3000,
	.wait_cycles = 10,
	.charger_curr_step = 200,
};

static const struct abx500_bm_charger_parameters chg = {
	.usb_volt_max		= 5500,
	.usb_curr_max		= 1500,
@@ -453,17 +446,6 @@ static int ab8500_charge_output_curr_map[] = {
        900,    1000,   1100,   1200,   1300,   1400,   1500,   1500,
};

static int ab8540_charge_output_curr_map[] = {
        0,      0,      0,      75,     100,    125,    150,    175,
        200,    225,    250,    275,    300,    325,    350,    375,
        400,    425,    450,    475,    500,    525,    550,    575,
        600,    625,    650,    675,    700,    725,    750,    775,
        800,    825,    850,    875,    900,    925,    950,    975,
        1000,   1025,   1050,   1075,   1100,   1125,   1150,   1175,
        1200,   1225,   1250,   1275,   1300,   1325,   1350,   1375,
        1400,   1425,   1450,   1500,   1600,   1700,   1900,   2000,
};

/*
 * This array maps the raw hex value to charger input current used by the
 * AB8500 values
@@ -473,17 +455,6 @@ static int ab8500_charge_input_curr_map[] = {
        700,    800,    900,    1000,   1100,   1300,   1400,   1500,
};

static int ab8540_charge_input_curr_map[] = {
        25,     50,     75,     100,    125,    150,    175,    200,
        225,    250,    275,    300,    325,    350,    375,    400,
        425,    450,    475,    500,    525,    550,    575,    600,
        625,    650,    675,    700,    725,    750,    775,    800,
        825,    850,    875,    900,    925,    950,    975,    1000,
        1025,   1050,   1075,   1100,   1125,   1150,   1175,   1200,
        1225,   1250,   1275,   1300,   1325,   1350,   1375,   1400,
        1425,   1450,   1475,   1500,   1500,   1500,   1500,   1500,
};

struct abx500_bm_data ab8500_bm_data = {
	.temp_under             = 3,
	.temp_low               = 8,
@@ -518,40 +489,6 @@ struct abx500_bm_data ab8500_bm_data = {
        .n_chg_in_curr          = ARRAY_SIZE(ab8500_charge_input_curr_map),
};

struct abx500_bm_data ab8540_bm_data = {
        .temp_under             = 3,
        .temp_low               = 8,
        .temp_high              = 43,
        .temp_over              = 48,
        .main_safety_tmr_h      = 4,
        .temp_interval_chg      = 20,
        .temp_interval_nochg    = 120,
        .usb_safety_tmr_h       = 4,
        .bkup_bat_v             = BUP_VCH_SEL_2P6V,
        .bkup_bat_i             = BUP_ICH_SEL_150UA,
        .no_maintenance         = false,
        .capacity_scaling       = false,
        .adc_therm              = ABx500_ADC_THERM_BATCTRL,
        .chg_unknown_bat        = false,
        .enable_overshoot       = false,
        .fg_res                 = 100,
        .cap_levels             = &cap_levels,
        .bat_type               = bat_type_thermistor,
        .n_btypes               = ARRAY_SIZE(bat_type_thermistor),
        .batt_id                = 0,
        .interval_charging      = 5,
        .interval_not_charging  = 120,
        .temp_hysteresis        = 3,
        .gnd_lift_resistance    = 0,
        .maxi                   = &abx540_maxi_params,
        .chg_params             = &chg,
        .fg_params              = &fg,
        .chg_output_curr        = ab8540_charge_output_curr_map,
        .n_chg_out_curr         = ARRAY_SIZE(ab8540_charge_output_curr_map),
        .chg_input_curr         = ab8540_charge_input_curr_map,
        .n_chg_in_curr          = ARRAY_SIZE(ab8540_charge_input_curr_map),
};

int ab8500_bm_of_probe(struct device *dev,
		       struct device_node *np,
		       struct abx500_bm_data *bm)
+18 −75
Original line number Diff line number Diff line
@@ -214,22 +214,10 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
	/* Only do this for batteries with internal NTC */
	if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) {

		if (is_ab8540(di->parent)) {
			if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_60UA)
				curr = BAT_CTRL_60U_ENA;
			else
				curr = BAT_CTRL_120U_ENA;
		} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
			if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA)
				curr = BAT_CTRL_16U_ENA;
			else
				curr = BAT_CTRL_18U_ENA;
		} else {
		if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA)
			curr = BAT_CTRL_7U_ENA;
		else
			curr = BAT_CTRL_20U_ENA;
		}

		dev_dbg(di->dev, "Set BATCTRL %duA\n", di->curr_source);

@@ -260,28 +248,12 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
	} else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) {
		dev_dbg(di->dev, "Disable BATCTRL curr source\n");

		if (is_ab8540(di->parent)) {
			/* Write 0 to the curr bits */
			ret = abx500_mask_and_set_register_interruptible(
				di->dev,
				AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
				BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
				~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
		} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
			/* Write 0 to the curr bits */
			ret = abx500_mask_and_set_register_interruptible(
				di->dev,
				AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
				BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
				~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
		} else {
		/* Write 0 to the curr bits */
		ret = abx500_mask_and_set_register_interruptible(
			di->dev,
			AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
			BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
			~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
		}

		if (ret) {
			dev_err(di->dev, "%s failed disabling current source\n",
@@ -324,25 +296,11 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
	 * if we got an error above
	 */
disable_curr_source:
	if (is_ab8540(di->parent)) {
		/* Write 0 to the curr bits */
		ret = abx500_mask_and_set_register_interruptible(di->dev,
			AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
			BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
			~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
	} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
		/* Write 0 to the curr bits */
		ret = abx500_mask_and_set_register_interruptible(di->dev,
			AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
			BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA,
			~(BAT_CTRL_16U_ENA | BAT_CTRL_18U_ENA));
	} else {
	/* Write 0 to the curr bits */
	ret = abx500_mask_and_set_register_interruptible(di->dev,
		AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
		BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA,
		~(BAT_CTRL_7U_ENA | BAT_CTRL_20U_ENA));
	}

	if (ret) {
		dev_err(di->dev, "%s failed disabling current source\n",
@@ -556,13 +514,8 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
{
	int res;
	u8 i;
	if (is_ab8540(di->parent))
		di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
	else if (is_ab9540(di->parent) || is_ab8505(di->parent))
		di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
	else
		di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;

	di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
	di->bm->batt_id = BATTERY_UNKNOWN;

	res =  ab8500_btemp_get_batctrl_res(di);
@@ -600,19 +553,9 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
	 */
	if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL &&
	    di->bm->batt_id == 1) {
		if (is_ab8540(di->parent)) {
			dev_dbg(di->dev,
				"Set BATCTRL current source to 60uA\n");
			di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
		} else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
			dev_dbg(di->dev,
				"Set BATCTRL current source to 16uA\n");
			di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
		} else {
		dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");
		di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA;
	}
	}

	return di->bm->batt_id;
}
Loading