RE: [PATCH v2] iio: adc: ti-adc081c: Partial revert of removal of ACPI IDs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jonathan,

This patch is looked good to me, and I used our product UP-extremei11 to verify ADC ADC081C function.

Thanks,

Kunyang

-----Original Message-----
From: Jonathan Cameron <jic23@xxxxxxxxxx>
Sent: Monday, December 6, 2021 1:27 AM
To: linux-iio@xxxxxxxxxxxxxxx
Cc: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>; Kunyang Fan <Kunyang_Fan@xxxxxxxxxxxx>; Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
Subject: [PATCH v2] iio: adc: ti-adc081c: Partial revert of removal of ACPI IDs

From: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>

Unfortuanately a non standards compliant ACPI ID is known to be in the wild on some AAEON boards.

Partly revert the removal of these IDs so that ADC081C will again work + add a comment to that affect for future reference.

Whilst here use generic firmware properties rather than the ACPI specific handling previously found in this driver.

Reported-by: Kunyang Fan <Kunyang_Fan@xxxxxxxxxxxx>
Fixes: c458b7ca3fd0 ("iio:adc:ti-adc081c: Drop ACPI ids that seem very unlikely to be official.")
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
Cc: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
---

Looking ideally for a tested-by for this from Kunyang Fan.

v2: Use generic firmware properties as Andy Shevchenko rightly suggested.
I took it a bit further than strictly necessary as I don't like putting enums in the driver_data only to use them to index a table when we could just use the pointers directly.

Note this driver does have device tree binding documentation but that's a job for another day.  Or maybe later today if I get really bored this evening :)

 drivers/iio/adc/ti-adc081c.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/adc/ti-adc081c.c b/drivers/iio/adc/ti-adc081c.c index 16fc608db36a..bd48b073e720 100644
--- a/drivers/iio/adc/ti-adc081c.c
+++ b/drivers/iio/adc/ti-adc081c.c
@@ -19,6 +19,7 @@
 #include <linux/i2c.h>
 #include <linux/module.h>
 #include <linux/mod_devicetable.h>
+#include <linux/property.h>

 #include <linux/iio/iio.h>
 #include <linux/iio/buffer.h>
@@ -156,13 +157,16 @@ static int adc081c_probe(struct i2c_client *client,  {
        struct iio_dev *iio;
        struct adc081c *adc;
-       struct adcxx1c_model *model;
+       const struct adcxx1c_model *model;
        int err;

        if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA))
                return -EOPNOTSUPP;

-       model = &adcxx1c_models[id->driver_data];
+       if (dev_fwnode(&client->dev))
+               model = device_get_match_data(&client->dev);
+       else
+               model = &adcxx1c_models[id->driver_data];

        iio = devm_iio_device_alloc(&client->dev, sizeof(*adc));
        if (!iio)
@@ -210,10 +214,17 @@ static const struct i2c_device_id adc081c_id[] = {  };  MODULE_DEVICE_TABLE(i2c, adc081c_id);

+static const struct acpi_device_id adc081c_acpi_match[] = {
+       /* Used on some AAEON boards */
+       { "ADC081C", (kernel_ulong_t)&adcxx1c_models[ADC081C] },
+       { }
+};
+MODULE_DEVICE_TABLE(acpi, adc081c_acpi_match);
+
 static const struct of_device_id adc081c_of_match[] = {
-       { .compatible = "ti,adc081c" },
-       { .compatible = "ti,adc101c" },
-       { .compatible = "ti,adc121c" },
+       { .compatible = "ti,adc081c", .data = &adcxx1c_models[ADC081C] },
+       { .compatible = "ti,adc101c", .data = &adcxx1c_models[ADC101C] },
+       { .compatible = "ti,adc121c", .data = &adcxx1c_models[ADC121C] },
        { }
 };
 MODULE_DEVICE_TABLE(of, adc081c_of_match); @@ -222,6 +233,7 @@ static struct i2c_driver adc081c_driver = {
        .driver = {
                .name = "adc081c",
                .of_match_table = adc081c_of_match,
+               .acpi_match_table = adc081c_acpi_match,
        },
        .probe = adc081c_probe,
        .id_table = adc081c_id,
--
2.34.1

<p></p>

===================================================================================================================================
This email and any attachments to it contain confidential information and are intended solely for the use of the individual to whom it is addressed.If you are not the intended recipient or receive it accidentally, please immediately notify the sender by e-mail and delete the message and any attachments from your computer system, and destroy all hard copies. If any, please be advised that any unauthorized disclosure, copying, distribution or any action taken or omitted in reliance on this, is illegal and prohibited. Furthermore, any views or opinions expressed are solely those of the author and do not represent those of ASUSTeK. Thank you for your cooperation.
===================================================================================================================================




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux