From 1317f548b13fdff6fdb5b44cb112aadd26ff43d0 Mon Sep 17 00:00:00 2001 From: Pritesh Raithatha Date: Wed, 5 Oct 2011 18:32:44 +0530 Subject: power: bq27x00: safely exit if battery is not connected -Driver is registering battery device even if battery is not connected so moved powersupply init after battery detection. Bug 872590 Change-Id: I7864ee357162a596d023af3bdbe17cfa8b9c390f Signed-off-by: Pritesh Raithatha Reviewed-on: http://git-master/r/56220 Reviewed-by: Varun Colbert Tested-by: Varun Colbert Rebase-Id: R0a353ec0cf3fb6b5b9536abf30253a96dc1a91cd --- drivers/power/bq27x00_battery.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'drivers/power') diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c index b33eae795fab..3fede6541e6f 100644 --- a/drivers/power/bq27x00_battery.c +++ b/drivers/power/bq27x00_battery.c @@ -758,21 +758,26 @@ static int bq27x00_battery_probe(struct i2c_client *client, di->bat.name = name; di->bus.read = &bq27x00_read_i2c; - if (bq27x00_powersupply_init(di)) - goto batt_failed_3; - i2c_set_clientdata(client, di); /* Let's see whether this adapter can support what we need. */ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_err(&client->dev, "insufficient functionality!\n"); - return -ENODEV; + retval = -ENODEV; + goto batt_failed_3; } read_data = i2c_smbus_read_word_data(di->client, BQ27x00_REG_FLAGS); - if (!(read_data & BQ27500_FLAG_BAT_DET)) + if (!(read_data & BQ27500_FLAG_BAT_DET)) { dev_err(&client->dev, "no battery present\n"); + retval = -ENODEV; + goto batt_failed_3; + } + + retval = bq27x00_powersupply_init(di); + if (retval < 0) + goto batt_failed_3; return 0; -- cgit v1.2.3