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

Commit f7bf6f58 authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

Input: tsc2004/5 - fix regulator handling



In case of an optional regulator missing, regulator core will return
ERR_PTR(-ENOENT) and not NULL, so the check for missing regulator is
incorrect. Also, the regulator is not optional, it may simply be missing
from platform description, so let's use devm_regulator_get() and rely on
regulator core to give us dummy supply when real one is not available.

Fixes: d257f298 ("Input: tsc2005 - convert to gpiod")
Acked-By: default avatarSebastian Reichel <sre@kernel.org>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 449aa83e
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -527,10 +527,10 @@ int tsc200x_probe(struct device *dev, int irq, const struct input_id *tsc_id,
		return error;
	}

	ts->vio = devm_regulator_get_optional(dev, "vio");
	ts->vio = devm_regulator_get(dev, "vio");
	if (IS_ERR(ts->vio)) {
		error = PTR_ERR(ts->vio);
		dev_err(dev, "vio regulator missing (%d)", error);
		dev_err(dev, "error acquiring vio regulator: %d", error);
		return error;
	}

@@ -587,12 +587,9 @@ int tsc200x_probe(struct device *dev, int irq, const struct input_id *tsc_id,
		return error;
	}

	/* enable regulator for DT */
	if (ts->vio) {
	error = regulator_enable(ts->vio);
	if (error)
		return error;
	}

	dev_set_drvdata(dev, ts);
	error = sysfs_create_group(&dev->kobj, &tsc200x_attr_group);
@@ -615,7 +612,6 @@ int tsc200x_probe(struct device *dev, int irq, const struct input_id *tsc_id,
err_remove_sysfs:
	sysfs_remove_group(&dev->kobj, &tsc200x_attr_group);
disable_regulator:
	if (ts->vio)
	regulator_disable(ts->vio);
	return error;
}
@@ -627,7 +623,6 @@ int tsc200x_remove(struct device *dev)

	sysfs_remove_group(&dev->kobj, &tsc200x_attr_group);

	if (ts->vio)
	regulator_disable(ts->vio);

	return 0;