Commit e2116202 authored by Hans de Goede's avatar Hans de Goede Committed by Sebastian Reichel

power: supply: max17042_battery: Add support for ACPI enumeration

Some x86 devices enumerate a max17047 fuel-gauge through a MAX17047
ACPI firmware-node, add support for this.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
parent 810e006a
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
* This driver is based on max17040_battery.c * This driver is based on max17040_battery.c
*/ */
#include <linux/acpi.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -982,6 +983,8 @@ static int max17042_probe(struct i2c_client *client, ...@@ -982,6 +983,8 @@ static int max17042_probe(struct i2c_client *client,
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
const struct power_supply_desc *max17042_desc = &max17042_psy_desc; const struct power_supply_desc *max17042_desc = &max17042_psy_desc;
struct power_supply_config psy_cfg = {}; struct power_supply_config psy_cfg = {};
const struct acpi_device_id *acpi_id;
struct device *dev = &client->dev;
struct max17042_chip *chip; struct max17042_chip *chip;
int ret; int ret;
int i; int i;
...@@ -995,7 +998,15 @@ static int max17042_probe(struct i2c_client *client, ...@@ -995,7 +998,15 @@ static int max17042_probe(struct i2c_client *client,
return -ENOMEM; return -ENOMEM;
chip->client = client; chip->client = client;
chip->chip_type = id->driver_data; if (id) {
chip->chip_type = id->driver_data;
} else {
acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev);
if (!acpi_id)
return -ENODEV;
chip->chip_type = acpi_id->driver_data;
}
chip->regmap = devm_regmap_init_i2c(client, &max17042_regmap_config); chip->regmap = devm_regmap_init_i2c(client, &max17042_regmap_config);
if (IS_ERR(chip->regmap)) { if (IS_ERR(chip->regmap)) {
dev_err(&client->dev, "Failed to initialize regmap\n"); dev_err(&client->dev, "Failed to initialize regmap\n");
...@@ -1104,6 +1115,14 @@ static int max17042_resume(struct device *dev) ...@@ -1104,6 +1115,14 @@ static int max17042_resume(struct device *dev)
static SIMPLE_DEV_PM_OPS(max17042_pm_ops, max17042_suspend, static SIMPLE_DEV_PM_OPS(max17042_pm_ops, max17042_suspend,
max17042_resume); max17042_resume);
#ifdef CONFIG_ACPI
static const struct acpi_device_id max17042_acpi_match[] = {
{ "MAX17047", MAXIM_DEVICE_TYPE_MAX17047 },
{ }
};
MODULE_DEVICE_TABLE(acpi, max17042_acpi_match);
#endif
#ifdef CONFIG_OF #ifdef CONFIG_OF
static const struct of_device_id max17042_dt_match[] = { static const struct of_device_id max17042_dt_match[] = {
{ .compatible = "maxim,max17042" }, { .compatible = "maxim,max17042" },
...@@ -1125,6 +1144,7 @@ MODULE_DEVICE_TABLE(i2c, max17042_id); ...@@ -1125,6 +1144,7 @@ MODULE_DEVICE_TABLE(i2c, max17042_id);
static struct i2c_driver max17042_i2c_driver = { static struct i2c_driver max17042_i2c_driver = {
.driver = { .driver = {
.name = "max17042", .name = "max17042",
.acpi_match_table = ACPI_PTR(max17042_acpi_match),
.of_match_table = of_match_ptr(max17042_dt_match), .of_match_table = of_match_ptr(max17042_dt_match),
.pm = &max17042_pm_ops, .pm = &max17042_pm_ops,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment