add MAX17040 Fuel Gauge driver
PATCH 1/1 add MAX17040 Fuel Gauge driver
The MAX17040 is a I2C interfaced Fuel Gauge systems for lithium-ion batteries This patch adds support the MAX17040 Fuel Gauge
--- drivers/power/Kconfig | 8 + drivers/power/Makefile | 3 +- drivers/power/max17040_battery.c | 304 ++++++++++++++++++++++++++++++++++++++ include/linux/max17040_battery.h | 19 +++ 4 files changed, 333 insertions(+), 1 deletions(-) create mode 100644 drivers/power/max17040_battery.c create mode 100644 include/linux/max17040_battery.h
drivers/power/Kconfig +8 -0
@@ -88,4 +88,12 @@ config CHARGER_PCF50633 help Say Y to include support for NXP PCF50633 Main Battery Charger. +config BATTERY_MAX17040 + tristate "Maxim MAX17040 Fuel Gauge" + depends on I2C + help + MAX17040 is fuel-gauge systems for lithium-ion (Li+) batteries + in handheld and portable equipment. The MAX17040 is configured + to operate with a single lithium cell + endif # POWER_SUPPLY
drivers/power/Makefile +2 -1
@@ -25,4 +25,5 @@ obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o -obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o +obj-$(CONFIG_BATTERY_MAX17040)) += max17040_battery.o +obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
drivers/power/max17040_battery.c new file +304 -0
304 lines not on this page · raw message
include/linux/max17040_battery.h new file +19 -0
@@ -0,0 +1,19 @@ +/* +* Copyright (C) 2009 Samsung Electronics +* Minkyu Kang <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef __MAX17040_BATTERY_H_ +#define __MAX17040_BATTERY_H_ + +struct max17040_platform_data { +int (*battery_online)(void ); +int (*charger_online)(void ); +int (*charger_enable)(void ); +}; + +#endif
Signature · 1 line
1.5.4.3
Quoted 9 lines · On Wed, 03 Jun 2009 11:09:04 +0900 Minkyu Kang <[email protected]> wrote:
The MAX17040 is a I2C interfaced Fuel Gauge systems for lithium-ion batteries This patch adds support the MAX17040 Fuel Gauge
Signed-off-by Minkyu Kang <[email protected]>--- drivers/power/Kconfig | 8 + drivers/power/Makefile | 3 +- drivers/power/max17040_battery.c | 304 ++++++++++++++++++++++++++++++++++++++ include/linux/max17040_battery.h | 19 +++
Please Cc Anton Vorontsov <[email protected]> on drivers/power patches.
Quoted 27 lines
...
drivers/power/max17040_battery.c new file +24
-0+static int __devinit max17040_probe (struct i2c_client *client, +const struct i2c_device_id *id) +{ +struct max17040_chip *chip; +int ret; + + chip =kzalloc (sizeof (struct max17040_chip ),GFP_KERNEL ); +if (!chip) +return -ENOMEM ; + + chip->client = client; + pdata = client->dev.platform_data; + +i2c_set_clientdata (client, chip); + max17040 = chip; + +max17040_reset (); + +max17040_get_version (); + +INIT_DELAYED_WORK_DEFERRABLE (&chip->work, max17040_work); +schedule_delayed_work (&chip->work,MAX17040_DELAY ); + + bat_ps.properties = max17040_battery_props;
drivers/power/max17040_battery.c line 239
Quoted 10 lines
drivers/power/max17040_battery.c new file +10
-0+ bat_ps.num_properties =ARRAY_SIZE (max17040_battery_props); + + ret =power_supply_register (&client->dev, &bat_ps); +if (ret) { +dev_err (&max17040->client->dev, +"failed: power supply register\n" ); +kfree (chip); + max17040 =NULL ; +i2c_set_clientdata (client,NULL ); +return -1 ;
This leaves the delayed work still pending.
Quoted 5 lines
drivers/power/max17040_battery.c new file +5
-0+ } + +return 0 ; +} +
drivers/power/max17040_battery.c line 254
Quoted 10 lines
drivers/power/max17040_battery.c new file +10
-0+static int __devexit max17040_remove(struct i2c_client *client) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +kfree (chip); + max17040 =NULL ; +i2c_set_clientdata (client,NULL ); +power_supply_unregister (&bat_ps); +return 0 ; +}
Shouldn't max17040_remove() also cancel the delayed_work?
Quoted 16 lines
drivers/power/max17040_battery.c new file +16
-0+static int max17040_suspend (struct i2c_client *client, +pm_message_t state) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +cancel_delayed_work (&chip->work); +return 0 ; +} + +static int max17040_resume (struct i2c_client *client) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +schedule_delayed_work (&chip->work,MAX17040_DELAY ); +return 0 ; +}
Quoted 9 lines · On Wed, 03 Jun 2009 11:09:04 +0900 Minkyu Kang <[email protected]> wrote:
The MAX17040 is a I2C interfaced Fuel Gauge systems for lithium-ion batteries This patch adds support the MAX17040 Fuel Gauge
Signed-off-by Minkyu Kang <[email protected]>--- drivers/power/Kconfig | 8 + drivers/power/Makefile | 3 +- drivers/power/max17040_battery.c | 304 ++++++++++++++++++++++++++++++++++++++ include/linux/max17040_battery.h | 19 +++
Please Cc Anton Vorontsov <[email protected]> on drivers/power patches.
Quoted 27 lines
...
drivers/power/max17040_battery.c new file +24
-0+static int __devinit max17040_probe (struct i2c_client *client, +const struct i2c_device_id *id) +{ +struct max17040_chip *chip; +int ret; + + chip =kzalloc (sizeof (struct max17040_chip ),GFP_KERNEL ); +if (!chip) +return -ENOMEM ; + + chip->client = client; + pdata = client->dev.platform_data; + +i2c_set_clientdata (client, chip); + max17040 = chip; + +max17040_reset (); + +max17040_get_version (); + +INIT_DELAYED_WORK_DEFERRABLE (&chip->work, max17040_work); +schedule_delayed_work (&chip->work,MAX17040_DELAY ); + + bat_ps.properties = max17040_battery_props;
drivers/power/max17040_battery.c line 239
Quoted 10 lines
drivers/power/max17040_battery.c new file +10
-0+ bat_ps.num_properties =ARRAY_SIZE (max17040_battery_props); + + ret =power_supply_register (&client->dev, &bat_ps); +if (ret) { +dev_err (&max17040->client->dev, +"failed: power supply register\n" ); +kfree (chip); + max17040 =NULL ; +i2c_set_clientdata (client,NULL ); +return -1 ;
This leaves the delayed work still pending.
Quoted 5 lines
drivers/power/max17040_battery.c new file +5
-0+ } + +return 0 ; +} +
drivers/power/max17040_battery.c line 254
Quoted 10 lines
drivers/power/max17040_battery.c new file +10
-0+static int __devexit max17040_remove(struct i2c_client *client) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +kfree (chip); + max17040 =NULL ; +i2c_set_clientdata (client,NULL ); +power_supply_unregister (&bat_ps); +return 0 ; +}
Shouldn't max17040_remove() also cancel the delayed_work?
Quoted 16 lines
drivers/power/max17040_battery.c new file +16
-0+static int max17040_suspend (struct i2c_client *client, +pm_message_t state) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +cancel_delayed_work (&chip->work); +return 0 ; +} + +static int max17040_resume (struct i2c_client *client) +{ +struct max17040_chip *chip =i2c_get_clientdata (client); + +schedule_delayed_work (&chip->work,MAX17040_DELAY ); +return 0 ; +}