From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753346AbbDCI3r (ORCPT ); Fri, 3 Apr 2015 04:29:47 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:18392 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753805AbbDCI02 (ORCPT ); Fri, 3 Apr 2015 04:26:28 -0400 X-AuditID: cbfee68e-f79b46d000002b74-87-551e4eb0a85c From: Beomho Seo To: sre@kernel.org, k.kozlowski@samsung.com Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, cw00.choi@samsung.com, inki.dae@samsung.com, sangbae90.lee@samsung.com, Beomho Seo Subject: [PATCH v2 1/2] power: max17042_battery: Use reg type instead of chip type Date: Fri, 03 Apr 2015 17:26:08 +0900 Message-id: <1428049570-3295-2-git-send-email-beomho.seo@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1428049570-3295-1-git-send-email-beomho.seo@samsung.com> References: <1428049570-3295-1-git-send-email-beomho.seo@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsWyRsSkUHeDn1yowfOn/BanP21jt7j+5Tmr xaT7E1gsXr8wtLi8aw6bxefeI4wWxz8dZLE4vbvEgcNj06pONo++LasYPT5vkgtgjuKySUnN ySxLLdK3S+DK+P/qElvBdbWKGa8dGhifKXQxcnJICJhITDyzjxnCFpO4cG89WxcjF4eQwFJG iVVzlrDCFE3438wOYgsJLGKU6O7XhSj6wSjx9/F7sCI2AU2J91OusHQxcnCICGhLPFuaD1LD LLCaUeJmyyywZmGBEImfl3eB1bMIqEosb94FFucVcJVY8APkCg6gZQoScybZgIQ5Bdwkense MEHsdZXYvGkOM8hMCYF+dokH+04zQswRkPg2+RALRK+sxKYDUM9IShxccYNlAqPwAkaGVYyi qQXJBcVJ6UVGesWJucWleel6yfm5mxiBQX3637O+HYw3D1gfYhTgYFTi4c3YIxMqxJpYVlyZ e4jRFGjDRGYp0eR8YOzklcQbGpsZWZiamBobmVuaKYnzJkj9DBYSSE8sSc1OTS1ILYovKs1J LT7EyMTBKdXAKC3SNt/hv/+UK086Vx75O/n1sxtHPvJZmel6TywoFHZ92tDt48xRz3TrGu9M vgOOPNa8h+NuJryIvvYuNs4i2kXDxu5ls/5Pr3dLHuxcc4uzjGXrBP2k3FOHb7cE+G3esTWt /jl7wIVb94Rr7GfmWn/ocI7LSn2jZHRy4a2sxVksHss+T2X2UmIpzkg01GIuKk4EANn3D9ll AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprDIsWRmVeSWpSXmKPExsVy+t9jAd0NfnKhBtsusVuc/rSN3eL6l+es FpPuT2CxeP3C0OLyrjlsFp97jzBaHP90kMXi9O4SBw6PTas62Tz6tqxi9Pi8SS6AOaqB0SYj NTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnFJ0DXLTMH6AAlhbLEnFKg UEBicbGSvh2mCaEhbroWMI0Rur4hQXA9RgZoIGENY8b/V5fYCq6rVcx47dDA+Eyhi5GTQ0LA RGLC/2Z2CFtM4sK99WwgtpDAIkaJ7n7dLkYuIPsHo8Tfx+9ZQRJsApoS76dcYeli5OAQEdCW eLY0H6SGWWA1o8TNlllgg4QFQiR+Xt4FVs8ioCqxvHkXWJxXwFViwY99zCC9EgIKEnMm2YCE OQXcJHp7HjBB7HWV2LxpDvMERt4FjAyrGEVTC5ILipPSc430ihNzi0vz0vWS83M3MYJj5pn0 DsZVDRaHGAU4GJV4eDP2yIQKsSaWFVfmHmKU4GBWEuFdsVs2VIg3JbGyKrUoP76oNCe1+BCj KdBRE5mlRJPzgfGcVxJvaGxiZmRpZG5oYWRsriTOO0dXLlRIID2xJDU7NbUgtQimj4mDU6qB MS3mmIyte3tGKIPXP6PtWiXCl8VP3J3SVGDg/pn58d1rd4+fnPVbaIKO4W/bmv+zrwucNRbe 8zrKVETIwX+j/IKGkIpVJycd00gTVtvb6ex1ZEP7t/awTaWFMs7xd0xXby+c3Zb+5Piq/GeS vxuOGv1oW29uPyMmWXbVsbm2IvYxl66xCTfMVmIpzkg01GIuKk4EAGOIDI+vAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, max17042 battery driver choose register map by MAX17042_DevName register. But it is return IC specific firmware version. So other maxim chip hard to use this drvier. This patch choose chip type from driver_data. Cc: Sebastian Reichel Signed-off-by: Beomho Seo --- drivers/power/max17042_battery.c | 33 ++++++++++---------------------- include/linux/power/max17042_battery.h | 9 ++++++++- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c index e5645ea..bf5a82c 100644 --- a/drivers/power/max17042_battery.c +++ b/drivers/power/max17042_battery.c @@ -63,9 +63,6 @@ #define dP_ACC_100 0x1900 #define dP_ACC_200 0x3200 -#define MAX17042_IC_VERSION 0x0092 -#define MAX17047_IC_VERSION 0x00AC /* same for max17050 */ - struct max17042_chip { struct i2c_client *client; struct regmap *regmap; @@ -131,7 +128,7 @@ static int max17042_get_property(struct power_supply *psy, val->intval *= 20000; /* Units of LSB = 20mV */ break; case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: - if (chip->chip_type == MAX17042) + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) ret = regmap_read(map, MAX17042_V_empty, &data); else ret = regmap_read(map, MAX17047_V_empty, &data); @@ -378,7 +375,8 @@ static void max17042_write_config_regs(struct max17042_chip *chip) regmap_write(map, MAX17042_FilterCFG, config->filter_cfg); regmap_write(map, MAX17042_RelaxCFG, config->relax_cfg); - if (chip->chip_type == MAX17047) + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17047 || + chip->chip_type == MAXIM_DEVICE_TYPE_MAX17050) regmap_write(map, MAX17047_FullSOCThr, config->full_soc_thresh); } @@ -391,7 +389,7 @@ static void max17042_write_custom_regs(struct max17042_chip *chip) max17042_write_verify_reg(map, MAX17042_RCOMP0, config->rcomp0); max17042_write_verify_reg(map, MAX17042_TempCo, config->tcompc0); max17042_write_verify_reg(map, MAX17042_ICHGTerm, config->ichgt_term); - if (chip->chip_type == MAX17042) { + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) { regmap_write(map, MAX17042_EmptyTempCo, config->empty_tempco); max17042_write_verify_reg(map, MAX17042_K_empty0, config->kempty0); @@ -500,14 +498,14 @@ static inline void max17042_override_por_values(struct max17042_chip *chip) max17042_override_por(map, MAX17042_FullCAP, config->fullcap); max17042_override_por(map, MAX17042_FullCAPNom, config->fullcapnom); - if (chip->chip_type == MAX17042) + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) max17042_override_por(map, MAX17042_SOC_empty, config->socempty); max17042_override_por(map, MAX17042_LAvg_empty, config->lavg_empty); max17042_override_por(map, MAX17042_dQacc, config->dqacc); max17042_override_por(map, MAX17042_dPacc, config->dpacc); - if (chip->chip_type == MAX17042) + if (chip->chip_type == MAXIM_DEVICE_TYPE_MAX17042) max17042_override_por(map, MAX17042_V_empty, config->vempty); else max17042_override_por(map, MAX17047_V_empty, config->vempty); @@ -709,20 +707,9 @@ static int max17042_probe(struct i2c_client *client, } i2c_set_clientdata(client, chip); + chip->chip_type = id->driver_data; psy_cfg.drv_data = chip; - regmap_read(chip->regmap, MAX17042_DevName, &val); - if (val == MAX17042_IC_VERSION) { - dev_dbg(&client->dev, "chip type max17042 detected\n"); - chip->chip_type = MAX17042; - } else if (val == MAX17047_IC_VERSION) { - dev_dbg(&client->dev, "chip type max17047/50 detected\n"); - chip->chip_type = MAX17047; - } else { - dev_err(&client->dev, "device version mismatch: %x\n", val); - return -EIO; - } - /* When current is not measured, * CURRENT_NOW and CURRENT_AVG properties should be invisible. */ if (!chip->pdata->enable_current_sense) @@ -834,9 +821,9 @@ MODULE_DEVICE_TABLE(of, max17042_dt_match); #endif static const struct i2c_device_id max17042_id[] = { - { "max17042", 0 }, - { "max17047", 1 }, - { "max17050", 2 }, + { "max17042", MAXIM_DEVICE_TYPE_MAX17042 }, + { "max17047", MAXIM_DEVICE_TYPE_MAX17047 }, + { "max17050", MAXIM_DEVICE_TYPE_MAX17050 }, { } }; MODULE_DEVICE_TABLE(i2c, max17042_id); diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h index 89dd84f..cf112b4 100644 --- a/include/linux/power/max17042_battery.h +++ b/include/linux/power/max17042_battery.h @@ -126,7 +126,14 @@ enum max17047_register { MAX17047_QRTbl30 = 0x42, }; -enum max170xx_chip_type {MAX17042, MAX17047}; +enum max170xx_chip_type { + MAXIM_DEVICE_TYPE_UNKNOWN = 0, + MAXIM_DEVICE_TYPE_MAX17042, + MAXIM_DEVICE_TYPE_MAX17047, + MAXIM_DEVICE_TYPE_MAX17050, + + MAXIM_DEVICE_TYPE_NUM +}; /* * used for setting a register to a desired value -- 1.7.9.5