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

Commit 8ec98fe0 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Anton Vorontsov
Browse files

jz4740-battery: Protect against concurrent battery readings



We can not handle more then one ADC request at a time to the battery.
The patch adds a mutex around the ADC read code to ensure this.

Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Cc: stable@kernel.org
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent 86af9503
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ struct jz_battery {

	struct power_supply battery;
	struct delayed_work work;

	struct mutex lock;
};

static inline struct jz_battery *psy_to_jz_battery(struct power_supply *psy)
@@ -68,6 +70,8 @@ static long jz_battery_read_voltage(struct jz_battery *battery)
	unsigned long val;
	long voltage;

	mutex_lock(&battery->lock);

	INIT_COMPLETION(battery->read_completion);

	enable_irq(battery->irq);
@@ -91,6 +95,8 @@ static long jz_battery_read_voltage(struct jz_battery *battery)
	battery->cell->disable(battery->pdev);
	disable_irq(battery->irq);

	mutex_unlock(&battery->lock);

	return voltage;
}

@@ -291,6 +297,7 @@ static int __devinit jz_battery_probe(struct platform_device *pdev)
	jz_battery->pdev = pdev;

	init_completion(&jz_battery->read_completion);
	mutex_init(&jz_battery->lock);

	INIT_DELAYED_WORK(&jz_battery->work, jz_battery_work);