Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eac53b36 authored by Hans de Goede's avatar Hans de Goede Committed by Sebastian Reichel
Browse files

power: supply: axp288_charger: Drop platform_data dependency



When the axp288_charger driver was originally merged, it was merged with
a dependency on some other driver providing platform data for it.

However the battery-data-framework which should provide that data never
got merged, so the axp288_charger as merged upstream has never worked,
its probe method simply always returns -ENODEV.

This commit removes the dependency on the platform_data instead reading
back the charging current and charging voltage that the firmware has set
and using those values as the maximum values the user may set.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
parent d556f21c
Loading
Loading
Loading
Loading
+30 −58
Original line number Diff line number Diff line
@@ -143,7 +143,6 @@ enum {

struct axp288_chrg_info {
	struct platform_device *pdev;
	struct axp20x_chrg_pdata *pdata;
	struct regmap *regmap;
	struct regmap_irq_chip_data *regmap_irqc;
	int irq[CHRG_INTR_END];
@@ -769,17 +768,14 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
		return ret;
	}

	/* Init charging current and voltage */
	info->max_cc = info->pdata->max_cc;
	info->max_cv = info->pdata->max_cv;

	/* Read current charge voltage and current limit */
	ret = regmap_read(info->regmap, AXP20X_CHRG_CTRL1, &val);
	if (ret < 0) {
		/* Assume default if cannot read */
		info->cc = info->pdata->def_cc;
		info->cv = info->pdata->def_cv;
	} else {
		dev_err(&info->pdev->dev, "register(%x) read error(%d)\n",
			AXP20X_CHRG_CTRL1, ret);
		return ret;
	}

	/* Determine charge voltage */
	cv = (val & CHRG_CCCV_CV_MASK) >> CHRG_CCCV_CV_BIT_POS;
	switch (cv) {
@@ -795,9 +791,6 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
	case CHRG_CCCV_CV_4350MV:
		info->cv = CV_4350MV;
		break;
		default:
			info->cv = INT_MAX;
			break;
	}

	/* Determine charge current limit */
@@ -805,24 +798,12 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
	cc = (cc * CHRG_CCCV_CC_LSB_RES) + CHRG_CCCV_CC_OFFSET;
	info->cc = cc;

		/* Program default charging voltage and current */
		cc = min(info->pdata->def_cc, info->max_cc);
		cv = min(info->pdata->def_cv, info->max_cv);

		ret = axp288_charger_set_cc(info, cc);
		if (ret < 0) {
			dev_err(&info->pdev->dev,
					"error(%d) in setting CC\n", ret);
			return ret;
		}

		ret = axp288_charger_set_cv(info, cv);
		if (ret < 0) {
			dev_err(&info->pdev->dev,
					"error(%d) in setting CV\n", ret);
			return ret;
		}
	}
	/*
	 * Do not allow the user to configure higher settings then those
	 * set by the firmware
	 */
	info->max_cv = info->cv;
	info->max_cc = info->cc;

	return 0;
}
@@ -841,15 +822,6 @@ static int axp288_charger_probe(struct platform_device *pdev)
	info->pdev = pdev;
	info->regmap = axp20x->regmap;
	info->regmap_irqc = axp20x->regmap_irqc;
	info->pdata = pdev->dev.platform_data;

	if (!info->pdata) {
		/* Try ACPI provided pdata via device properties */
		if (!device_property_present(&pdev->dev,
						"axp288_charger_data\n"))
			dev_err(&pdev->dev, "failed to get platform data\n");
		return -ENODEV;
	}

	info->cable.edev = extcon_get_extcon_dev(AXP288_EXTCON_DEV_NAME);
	if (info->cable.edev == NULL) {
+0 −7
Original line number Diff line number Diff line
@@ -554,13 +554,6 @@ struct axp20x_fg_pdata {
	int thermistor_curve[MAX_THERM_CURVE_SIZE][2];
};

struct axp20x_chrg_pdata {
	int max_cc;
	int max_cv;
	int def_cc;
	int def_cv;
};

struct axp288_extcon_pdata {
	/* GPIO pin control to switch D+/D- lines b/w PMIC and SOC */
	struct gpio_desc *gpio_mux_cntl;