power: supply: bq24190_charger: Add support for bq24192i
authorHans de Goede <hdegoede@redhat.com>
Wed, 22 Mar 2017 14:55:31 +0000 (15:55 +0100)
committerSebastian Reichel <sre@kernel.org>
Thu, 13 Apr 2017 23:41:34 +0000 (01:41 +0200)
The bq24192 and bq24192i are mostly identical to the bq24190, TI even
published a single datasheet for all 3 of them. The difference
between the bq24190 and bq24192[i] is the way charger-type detection
is done, the bq24190 is to be directly connected to the USB a/b lines,
where as the the bq24192[i] has a gpio which should be driven high/low
externally depending on the type of charger connected, from a register
level access pov there is no difference.

The differences between the bq24192 and bq24192i are:
1) Lower default charge rate on the bq24192i
2) Pre-charge-current can be max 640 mA on the bq24192i

On x86/ACPI systems the code which instantiates the i2c client may not
know the exact variant being used, so instead of coding the model-id
in the i2c_id struct and bailing if it does not match, check the reported
model-id matches one of the supported variants.

This commit only adds support for the bq24192i as I don't
have a bq24192 to test with, adding support for the bq24192 should
be as simple as also accepting its model-id in the model-id test.

Cc: Liam Breck <kernel@networkimprov.net>
Cc: Tony Lindgren <tony@atomide.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sebastian Reichel <sre@kernel.org>
drivers/power/supply/bq24190_charger.c

index fa2d2da2de5f226733610953586fd373243c2bf5..d74c8cce0770e141f7c5c346415dbc5177147b44 100644 (file)
@@ -149,7 +149,6 @@ struct bq24190_dev_info {
        struct power_supply             *charger;
        struct power_supply             *battery;
        char                            model_name[I2C_NAME_SIZE];
-       kernel_ulong_t                  model;
        bool                            initialized;
        bool                            irq_event;
        struct mutex                    f_reg_lock;
@@ -1291,8 +1290,11 @@ static int bq24190_hw_init(struct bq24190_dev_info *bdi)
        if (ret < 0)
                return ret;
 
-       if (v != bdi->model)
+       if (v != BQ24190_REG_VPRS_PN_24190 &&
+           v != BQ24190_REG_VPRS_PN_24192I) {
+               dev_err(bdi->dev, "Error unknown model: 0x%02x\n", v);
                return -ENODEV;
+       }
 
        ret = bq24190_register_reset(bdi);
        if (ret < 0)
@@ -1327,7 +1329,6 @@ static int bq24190_probe(struct i2c_client *client,
 
        bdi->client = client;
        bdi->dev = dev;
-       bdi->model = id->driver_data;
        strncpy(bdi->model_name, id->name, I2C_NAME_SIZE);
        mutex_init(&bdi->f_reg_lock);
        bdi->f_reg = 0;
@@ -1526,13 +1527,9 @@ static const struct dev_pm_ops bq24190_pm_ops = {
        SET_SYSTEM_SLEEP_PM_OPS(bq24190_pm_suspend, bq24190_pm_resume)
 };
 
-/*
- * Only support the bq24190 right now.  The bq24192, bq24192i, and bq24193
- * are similar but not identical so the driver needs to be extended to
- * support them.
- */
 static const struct i2c_device_id bq24190_i2c_ids[] = {
-       { "bq24190", BQ24190_REG_VPRS_PN_24190 },
+       { "bq24190" },
+       { "bq24192i" },
        { },
 };
 MODULE_DEVICE_TABLE(i2c, bq24190_i2c_ids);