All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karol Lewandowski <k.lewandowsk@samsung.com>
To: myungjoo.ham@samsung.com
Cc: kyungmin.park@samsung.com, m.szyprowski@samsung.com,
	devicetree-discuss@lists.ozlabs.org,
	linux-kernel@vger.kernel.org, cbou@mail.ru,
	Karol Lewandowski <k.lewandowsk@samsung.com>
Subject: [PATCH 2/3] max17042_battery: Preserve properties outside of platform data
Date: Wed, 22 Feb 2012 19:06:21 +0100	[thread overview]
Message-ID: <1329933982-2529-3-git-send-email-k.lewandowsk@samsung.com> (raw)
In-Reply-To: <1329933982-2529-1-git-send-email-k.lewandowsk@samsung.com>

Add fields originally found in platform data back to max17042_chip,
as the former data structure might be not available on device
tree-based systems.

This commit makes it possible to safely declare platform data with
__initdata tag.

Signed-off-by: Karol Lewandowski <k.lewandowsk@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/power/max17042_battery.c |   36 +++++++++++++++++++++++-------------
 1 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c
index 21a3650..49c1377 100644
--- a/drivers/power/max17042_battery.c
+++ b/drivers/power/max17042_battery.c
@@ -33,7 +33,8 @@
 struct max17042_chip {
 	struct i2c_client *client;
 	struct power_supply battery;
-	struct max17042_platform_data *pdata;
+	bool enable_current_sense;
+	u32 r_sns;
 };
 
 static int max17042_write_reg(struct i2c_client *client, u8 reg, u16 value)
@@ -168,7 +169,7 @@ static int max17042_get_property(struct power_supply *psy,
 		val->intval = val->intval * 10 / 256;
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_NOW:
-		if (chip->pdata->enable_current_sense) {
+		if (chip->enable_current_sense) {
 			ret = max17042_read_reg(chip->client, MAX17042_Current);
 			if (ret < 0)
 				return ret;
@@ -180,13 +181,13 @@ static int max17042_get_property(struct power_supply *psy,
 				val->intval++;
 				val->intval *= -1;
 			}
-			val->intval *= 1562500 / chip->pdata->r_sns;
+			val->intval *= 1562500 / chip->r_sns;
 		} else {
 			return -EINVAL;
 		}
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_AVG:
-		if (chip->pdata->enable_current_sense) {
+		if (chip->enable_current_sense) {
 			ret = max17042_read_reg(chip->client,
 						MAX17042_AvgCurrent);
 			if (ret < 0)
@@ -199,7 +200,7 @@ static int max17042_get_property(struct power_supply *psy,
 				val->intval++;
 				val->intval *= -1;
 			}
-			val->intval *= 1562500 / chip->pdata->r_sns;
+			val->intval *= 1562500 / chip->r_sns;
 		} else {
 			return -EINVAL;
 		}
@@ -215,6 +216,7 @@ static int __devinit max17042_probe(struct i2c_client *client,
 {
 	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 	struct max17042_chip *chip;
+	struct max17042_platform_data *pdata;
 	int ret;
 
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA))
@@ -225,7 +227,7 @@ static int __devinit max17042_probe(struct i2c_client *client,
 		return -ENOMEM;
 
 	chip->client = client;
-	chip->pdata = client->dev.platform_data;
+	pdata = client->dev.platform_data;
 
 	i2c_set_clientdata(client, chip);
 
@@ -235,13 +237,21 @@ static int __devinit max17042_probe(struct i2c_client *client,
 	chip->battery.properties	= max17042_battery_props;
 	chip->battery.num_properties	= ARRAY_SIZE(max17042_battery_props);
 
+	if (pdata) {
+		chip->r_sns = pdata->r_sns;
+		chip->enable_current_sense = pdata->enable_current_sense;
+	} else {
+		dev_warn(&client->dev, "no driver data provided\n");
+		return -ENODEV;
+	}
+
 	/* When current is not measured,
 	 * CURRENT_NOW and CURRENT_AVG properties should be invisible. */
-	if (!chip->pdata->enable_current_sense)
+	if (!chip->enable_current_sense)
 		chip->battery.num_properties -= 2;
 
-	if (chip->pdata->r_sns == 0)
-		chip->pdata->r_sns = MAX17042_DEFAULT_SNS_RESISTOR;
+	if (chip->r_sns == 0)
+		chip->r_sns = MAX17042_DEFAULT_SNS_RESISTOR;
 
 	ret = power_supply_register(&client->dev, &chip->battery);
 	if (ret) {
@@ -250,11 +260,11 @@ static int __devinit max17042_probe(struct i2c_client *client,
 	}
 
 	/* Initialize registers according to values from the platform data */
-	if (chip->pdata->init_data)
-		max17042_set_reg(client, chip->pdata->init_data,
-				 chip->pdata->num_init_data);
+	if (pdata && pdata->init_data)
+		max17042_set_reg(client, pdata->init_data,
+				 pdata->num_init_data);
 
-	if (!chip->pdata->enable_current_sense) {
+	if (!chip->enable_current_sense) {
 		max17042_write_reg(client, MAX17042_CGAIN, 0x0000);
 		max17042_write_reg(client, MAX17042_MiscCFG, 0x0003);
 		max17042_write_reg(client, MAX17042_LearnCFG, 0x0007);
-- 
1.7.8.3


  parent reply	other threads:[~2012-02-22 18:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-22 18:06 [PATCH 0/3] power: max17042_battery: Add DT bindings Karol Lewandowski
2012-02-22 18:06 ` [PATCH 1/3] max17042_battery: Use devm_kzalloc() where applicable Karol Lewandowski
2012-03-13 19:18   ` Anton Vorontsov
2012-03-13 19:18     ` Anton Vorontsov
2012-02-22 18:06 ` Karol Lewandowski [this message]
2012-03-13 19:21   ` [PATCH 2/3] max17042_battery: Preserve properties outside of platform data Anton Vorontsov
2012-03-14  9:14     ` Karol Lewandowski
2012-02-22 18:06 ` [PATCH 3/3] max17042_battery: Make it possible to instantiate driver from DT Karol Lewandowski
2012-03-13 19:22   ` Anton Vorontsov
2012-03-14 12:29     ` Karol Lewandowski
2012-03-14 12:29       ` Karol Lewandowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1329933982-2529-3-git-send-email-k.lewandowsk@samsung.com \
    --to=k.lewandowsk@samsung.com \
    --cc=cbou@mail.ru \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=myungjoo.ham@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.