From: Andy Shevchenko <andriy.shevche...@linux.intel.com>

There is a 24c08 chip connected to i2c bus on Intel Galileo Gen2 board. Enable
it via ACPI ID INT3499.

Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com>

Upstream-status: Submitted
Signed-off-by: Saul Wold <s...@linux.intel.com>
---
 drivers/misc/eeprom/at24.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 2d3db81..2b01377 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -21,6 +21,7 @@
 #include <linux/bitops.h>
 #include <linux/jiffies.h>
 #include <linux/of.h>
+#include <linux/acpi.h>
 #include <linux/i2c.h>
 #include <linux/platform_data/at24.h>
 
@@ -131,6 +132,12 @@ static const struct i2c_device_id at24_ids[] = {
 };
 MODULE_DEVICE_TABLE(i2c, at24_ids);
 
+static const struct acpi_device_id at24_acpi_ids[] = {
+       { "INT3499", AT24_DEVICE_MAGIC(8192 / 8, 0) },
+       { }
+};
+MODULE_DEVICE_TABLE(acpi, at24_acpi_ids);
+
 /*-------------------------------------------------------------------------*/
 
 /*
@@ -501,15 +508,23 @@ static int at24_probe(struct i2c_client *client, const 
struct i2c_device_id *id)
        struct at24_data *at24;
        int err;
        unsigned i, num_addresses;
-       kernel_ulong_t magic;
+       kernel_ulong_t magic = 0;
 
        if (client->dev.platform_data) {
                chip = *(struct at24_platform_data *)client->dev.platform_data;
        } else {
-               if (!id->driver_data)
+               if (id) {
+                       magic = id->driver_data;
+               } else {
+                       const struct acpi_device_id *id;
+
+                       id = acpi_match_device(at24_acpi_ids, &client->dev);
+                       if (id)
+                               magic = id->driver_data;
+               }
+               if (!magic)
                        return -ENODEV;
 
-               magic = id->driver_data;
                chip.byte_len = BIT(magic & AT24_BITMASK(AT24_SIZE_BYTELEN));
                magic >>= AT24_SIZE_BYTELEN;
                chip.flags = magic & AT24_BITMASK(AT24_SIZE_FLAGS);
@@ -690,6 +705,7 @@ static struct i2c_driver at24_driver = {
        .driver = {
                .name = "at24",
                .owner = THIS_MODULE,
+               .acpi_match_table = ACPI_PTR(at24_acpi_ids),
        },
        .probe = at24_probe,
        .remove = at24_remove,
-- 
2.5.0

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to