diff mbox series

[v3,2/3] iio: adc128s052: add ACPI _HID AANT1280

Message ID 1540481742-23596-3-git-send-email-dan@emutex.com (mailing list archive)
State New, archived
Headers show
Series iio: adc128s052: add matching options | expand

Commit Message

Dan O'Donovan Oct. 25, 2018, 3:35 p.m. UTC
From: Nicola Lunghi <nicola.lunghi@emutex.com>

ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
Squared board.

Add it to the driver.

Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
[javier@emutex.com: fix up commit message and one checkpatch warning]
Signed-off-by: Javier Arteaga <javier@emutex.com>
Signed-off-by: Dan O'Donovan <dan@emutex.com>
---
 drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

Comments

Andy Shevchenko Oct. 25, 2018, 5:46 p.m. UTC | #1
On Thu, Oct 25, 2018 at 04:35:41PM +0100, Dan O'Donovan wrote:
> From: Nicola Lunghi <nicola.lunghi@emutex.com>
> 
> ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
> Squared board.
> 
> Add it to the driver.
> 
> Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
> [javier@emutex.com: fix up commit message and one checkpatch warning]
> Signed-off-by: Javier Arteaga <javier@emutex.com>
> Signed-off-by: Dan O'Donovan <dan@emutex.com>
> ---
>  drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
> index e6716c3..c2d1453 100644
> --- a/drivers/iio/adc/ti-adc128s052.c
> +++ b/drivers/iio/adc/ti-adc128s052.c
> @@ -12,10 +12,12 @@
>   * published by the Free Software Foundation.
>   */
>  
> +#include <linux/acpi.h>
>  #include <linux/err.h>
>  #include <linux/spi/spi.h>
>  #include <linux/module.h>
>  #include <linux/iio/iio.h>
> +#include <linux/property.h>
>  #include <linux/regulator/consumer.h>
>  
>  struct adc128_configuration {
> @@ -135,10 +137,15 @@ static const struct iio_info adc128_info = {
>  static int adc128_probe(struct spi_device *spi)
>  {
>  	struct iio_dev *indio_dev;
> +	unsigned int config;
>  	struct adc128 *adc;
> -	int config = spi_get_device_id(spi)->driver_data;
>  	int ret;
>  
> +	if (dev_fwnode(&spi->dev))
> +		config = (unsigned long) device_get_match_data(&spi->dev);
> +	else
> +		config = spi_get_device_id(spi)->driver_data;
> +
>  	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
>  	if (!indio_dev)
>  		return -ENOMEM;
> @@ -207,10 +214,19 @@ static const struct spi_device_id adc128_id[] = {
>  };
>  MODULE_DEVICE_TABLE(spi, adc128_id);
>  
> +#ifdef CONFIG_ACPI
> +static const struct acpi_device_id adc128_acpi_match[] = {

> +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */

Looking how driver is organized and what ACPI can provide I would highly
recommend to look forward to PTYP field for utilization of the type of the HW.

Maybe it would not work with published BIOSes, but would be good for the future
(in that case anybody can utilize that _HID + PTYP pair on their platforms).

> +	{ }
> +};
> +MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
> +#endif
> +
>  static struct spi_driver adc128_driver = {
>  	.driver = {
>  		.name = "adc128s052",

>  		.of_match_table = of_match_ptr(adc128_of_match),
> +		.acpi_match_table = ACPI_PTR(adc128_acpi_match),
>  	},
>  	.probe = adc128_probe,
>  	.remove = adc128_remove,
> -- 
> 2.7.4
> 
> 
> ------
> This email has been scanned for spam and malware by The Email Laundry.
>
Dan O'Donovan Oct. 26, 2018, 10:13 a.m. UTC | #2
On 10/25/2018 06:46 PM, Andy Shevchenko wrote:
> On Thu, Oct 25, 2018 at 04:35:41PM +0100, Dan O'Donovan wrote:
>> From: Nicola Lunghi <nicola.lunghi@emutex.com>
>>
>> ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
>> Squared board.
>>
>> Add it to the driver.
>>
>> Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
>> [javier@emutex.com: fix up commit message and one checkpatch warning]
>> Signed-off-by: Javier Arteaga <javier@emutex.com>
>> Signed-off-by: Dan O'Donovan <dan@emutex.com>
>> ---
>>  drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
>>  1 file changed, 17 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
>> index e6716c3..c2d1453 100644
>> --- a/drivers/iio/adc/ti-adc128s052.c
>> +++ b/drivers/iio/adc/ti-adc128s052.c
>> @@ -12,10 +12,12 @@
>>   * published by the Free Software Foundation.
>>   */
>>  
>> +#include <linux/acpi.h>
>>  #include <linux/err.h>
>>  #include <linux/spi/spi.h>
>>  #include <linux/module.h>
>>  #include <linux/iio/iio.h>
>> +#include <linux/property.h>
>>  #include <linux/regulator/consumer.h>
>>  
>>  struct adc128_configuration {
>> @@ -135,10 +137,15 @@ static const struct iio_info adc128_info = {
>>  static int adc128_probe(struct spi_device *spi)
>>  {
>>  	struct iio_dev *indio_dev;
>> +	unsigned int config;
>>  	struct adc128 *adc;
>> -	int config = spi_get_device_id(spi)->driver_data;
>>  	int ret;
>>  
>> +	if (dev_fwnode(&spi->dev))
>> +		config = (unsigned long) device_get_match_data(&spi->dev);
>> +	else
>> +		config = spi_get_device_id(spi)->driver_data;
>> +
>>  	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
>>  	if (!indio_dev)
>>  		return -ENOMEM;
>> @@ -207,10 +214,19 @@ static const struct spi_device_id adc128_id[] = {
>>  };
>>  MODULE_DEVICE_TABLE(spi, adc128_id);
>>  
>> +#ifdef CONFIG_ACPI
>> +static const struct acpi_device_id adc128_acpi_match[] = {
> 
>> +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> 
> Looking how driver is organized and what ACPI can provide I would highly
> recommend to look forward to PTYP field for utilization of the type of the HW.
> 
> Maybe it would not work with published BIOSes, but would be good for the future
> (in that case anybody can utilize that _HID + PTYP pair on their platforms).
> 
Thanks Andy for your review and feedback.  Your _HID + PTYP suggestion sounds
interesting, but I couldn't find any information in the ACPI spec or elsewhere
about how/when/where to use it.  It isn't used in the UP Squared ACPI tables.
Do you have any links or other information you could share about it? Thanks!

>> +	{ }
>> +};
>> +MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
>> +#endif
>> +
>>  static struct spi_driver adc128_driver = {
>>  	.driver = {
>>  		.name = "adc128s052",
> 
>>  		.of_match_table = of_match_ptr(adc128_of_match),
>> +		.acpi_match_table = ACPI_PTR(adc128_acpi_match),
>>  	},
>>  	.probe = adc128_probe,
>>  	.remove = adc128_remove,
>> -- 
>> 2.7.4
>>
>>
>> ------
>> This email has been scanned for spam and malware by The Email Laundry.
>>
> 

------
This email has been scanned for spam and malware by The Email Laundry.
Andy Shevchenko Oct. 26, 2018, 12:12 p.m. UTC | #3
On Fri, Oct 26, 2018 at 11:13:01AM +0100, Dan O'Donovan wrote:
> On 10/25/2018 06:46 PM, Andy Shevchenko wrote:
> > On Thu, Oct 25, 2018 at 04:35:41PM +0100, Dan O'Donovan wrote:

> >> +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */

> > Looking how driver is organized and what ACPI can provide I would highly
> > recommend to look forward to PTYP field for utilization of the type of the HW.

> > Maybe it would not work with published BIOSes, but would be good for the future
> > (in that case anybody can utilize that _HID + PTYP pair on their platforms).

> Thanks Andy for your review and feedback.  Your _HID + PTYP suggestion sounds
> interesting, but I couldn't find any information in the ACPI spec or elsewhere
> about how/when/where to use it.  

I stand corrected, it's not in the spec, rather de facto use of it in some
cases, see below.

> It isn't used in the UP Squared ACPI tables.
> Do you have any links or other information you could share about it? Thanks!

As far as I can find the following code in the kernel and thus real ACPI tables
in the wild that utilize it.

drivers/acpi/dptf/dptf_power.c:84:      status = acpi_evaluate_integer(acpi_dev->handle, "PTYP", NULL, &ptype);
drivers/platform/x86/intel_cht_int33fe.c:101:   status = acpi_evaluate_integer(ACPI_HANDLE(dev), "PTYP", NULL, &ptyp);
drivers/thermal/int340x_thermal/int3403_thermal.c:237:  status = acpi_evaluate_integer(priv->adev->handle, "PTYP",
Himanshu Jha Oct. 27, 2018, 5:14 p.m. UTC | #4
Hi Dan,

On Thu, Oct 25, 2018 at 04:35:41PM +0100, Dan O'Donovan wrote:
> From: Nicola Lunghi <nicola.lunghi@emutex.com>
> 
> ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
> Squared board.
> 
> Add it to the driver.
> 
> Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
> [javier@emutex.com: fix up commit message and one checkpatch warning]
> Signed-off-by: Javier Arteaga <javier@emutex.com>
> Signed-off-by: Dan O'Donovan <dan@emutex.com>
> ---
>  drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)

[]

> +#ifdef CONFIG_ACPI
> +static const struct acpi_device_id adc128_acpi_match[] = {
> +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
> +#endif

I'm curious about the naming conventions used for selecting 
an ACPI ID.

AFAIK, ACPI or PNP ID consists of *Vendor* ID + Product ID.

PNP ID: PNP Vendor IDs consist of 3 characters, each character being
an uppercase letter (A-Z).

ACPI ID: ACPI Vendor IDs consist of 4 characters, each character being
either an uppercase letter (A-Z) or a numeral (0-9).

In your case,

Vendor ID -> AANT (AAEON TECHNOLOGY INC. registered ACPI ID prefix)
http://www.uefi.org/ACPI_ID_List?search=AANT

Product ID -> 1280

How did you come up with 1280 ? And why AANT ? why not TXNW which is
registered ACPI prefix for TEXAS INSTRUMENTS ?
http://www.uefi.org/ACPI_ID_List?search=Texas+

Latest ACPI manuals says:

6.1.5 _HID (Hardware ID)
------------------------

This object is used to supply OSPM with the device’s Plug and Play
hardware ID.[1]

[1] "A Plug and Play ID or ACPI ID can be obtained by sending e-mail to
pnpid@microsoft.com."

A _HID object evaluates to either a numeric 32-bit compressed EISA type ID or a string. If a
string, the format must be an alphanumeric PNP or ACPI ID with no asterisk or other leading
characters.

A valid PNP ID must be of the form "AAA####" where A is an uppercase letter and # is a hex
digit. A valid ACPI ID must be of the form "NNNN####" where N is an uppercase letter or a
digit ('0'-'9') and # is a hex digit. This specification reserves the string "ACPI" for use only
with devices defined herein. It further reserves all strings representing 4 HEX digits for
exclusive use with PCI-assigned Vendor IDs.


Next question:

There are a lot drivers in iio/ using ACPI for device enumeration using
these IDs. For now, let's take an example of Bosch Sensors:

drivers/iio/accel/bmc150-accel-i2c.c:static const struct acpi_device_id bmc150_accel_acpi_match[] = {
drivers/iio/accel/bmc150-accel-i2c.c-   {"BSBA0150",    bmc150},
drivers/iio/accel/bmc150-accel-i2c.c-   {"BMC150A",     bmc150},
drivers/iio/accel/bmc150-accel-i2c.c-   {"BMI055A",     bmi055},
drivers/iio/accel/bmc150-accel-i2c.c-   {"BMA0255",     bma255},

drivers/iio/gyro/bmg160_i2c.c:static const struct acpi_device_id bmg160_acpi_match[] = {
drivers/iio/gyro/bmg160_i2c.c-  {"BMG0160", 0},
drivers/iio/gyro/bmg160_i2c.c-  {"BMI055B", 0},
drivers/iio/gyro/bmg160_i2c.c-  {},
drivers/iio/gyro/bmg160_i2c.c-};

drivers/iio/imu/bmi160/bmi160_i2c.c:static const struct acpi_device_id bmi160_acpi_match[] = {
drivers/iio/imu/bmi160/bmi160_i2c.c-    {"BMI0160", 0},
drivers/iio/imu/bmi160/bmi160_i2c.c-    { },
drivers/iio/imu/bmi160/bmi160_i2c.c-};
drivers/iio/imu/bmi160/bmi160_i2c.c-MODULE_DEVICE_TABLE(acpi, bmi160_acpi_match);

Bosch registered ACPI ID: BOSC
http://www.uefi.org/ACPI_ID_List?search=Bosch

Bosch registered PNP ID: BSG
http://www.uefi.org/PNP_ID_List?search=Bosch

So, how could we use PNP ID "BMI" which is registered prefix for
BENSON MEDICAL INSTRUMENTS COMPANY ?
http://www.uefi.org/PNP_ID_List?search=BMI

Product ID -> "160" is fine for bmi160 which uniquely identifies the
sensor device.

But shouldn't the prefix be "BSG0160" instead of "BMI0160" ?

When I wrote the driver for Bosch BME680, I followed the same guideline
as done everywhere else in the Bosch family:

drivers/iio/pressure/bmp280-i2c.c-      {"BMP0280", BMP280_CHIP_ID },
drivers/iio/pressure/bmp280-i2c.c-      {"BMP0180", BMP180_CHIP_ID },
drivers/iio/pressure/bmp280-i2c.c-      {"BMP0085", BMP180_CHIP_ID },
drivers/iio/pressure/bmp280-i2c.c-      {"BME0280", BME280_CHIP_ID },

Therefore, I used BME0680 for bosch bme680 sensor!

In OF matching, we use vendor prefixes and that looks more legimate:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/Documentation/devicetree/bindings/vendor-prefixes.txt

Dan,

These questions are not just for you but to rest of the community
members as well.

If there is something I misunderstood, then please let me know :)


Thanks
Jonathan Cameron Oct. 28, 2018, 11:42 a.m. UTC | #5
On Sat, 27 Oct 2018 22:44:28 +0530
Himanshu Jha <himanshujha199640@gmail.com> wrote:

> Hi Dan,
> 
> On Thu, Oct 25, 2018 at 04:35:41PM +0100, Dan O'Donovan wrote:
> > From: Nicola Lunghi <nicola.lunghi@emutex.com>
> > 
> > ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
> > Squared board.
> > 
> > Add it to the driver.
> > 
> > Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
> > [javier@emutex.com: fix up commit message and one checkpatch warning]
> > Signed-off-by: Javier Arteaga <javier@emutex.com>
> > Signed-off-by: Dan O'Donovan <dan@emutex.com>
> > ---
> >  drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
> >  1 file changed, 17 insertions(+), 1 deletion(-)  
> 
> []
> 
> > +#ifdef CONFIG_ACPI
> > +static const struct acpi_device_id adc128_acpi_match[] = {
> > +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> > +	{ }
> > +};
> > +MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
> > +#endif  
> 
> I'm curious about the naming conventions used for selecting 
> an ACPI ID.
> 
> AFAIK, ACPI or PNP ID consists of *Vendor* ID + Product ID.
> 
> PNP ID: PNP Vendor IDs consist of 3 characters, each character being
> an uppercase letter (A-Z).
> 
> ACPI ID: ACPI Vendor IDs consist of 4 characters, each character being
> either an uppercase letter (A-Z) or a numeral (0-9).
> 
> In your case,
> 
> Vendor ID -> AANT (AAEON TECHNOLOGY INC. registered ACPI ID prefix)
> http://www.uefi.org/ACPI_ID_List?search=AANT
> 
> Product ID -> 1280
> 
> How did you come up with 1280 ? And why AANT ? why not TXNW which is
> registered ACPI prefix for TEXAS INSTRUMENTS ?
> http://www.uefi.org/ACPI_ID_List?search=Texas+
Simple answer to that:

TI don't (as far as I know) publish defined ID spaces so no one can
use their ID without risking stepping on an ID in use by someone else.
I would assume there is an AAEON module on this board (pretty common
for embedded boards) so they have assigned an ID from their namespace
as they can know it doesn't clash with anyone else.

> 
> Latest ACPI manuals says:
> 
> 6.1.5 _HID (Hardware ID)
> ------------------------
> 
> This object is used to supply OSPM with the device’s Plug and Play
> hardware ID.[1]
> 
> [1] "A Plug and Play ID or ACPI ID can be obtained by sending e-mail to
> pnpid@microsoft.com."
> 
> A _HID object evaluates to either a numeric 32-bit compressed EISA type ID or a string. If a
> string, the format must be an alphanumeric PNP or ACPI ID with no asterisk or other leading
> characters.
> 
> A valid PNP ID must be of the form "AAA####" where A is an uppercase letter and # is a hex
> digit. A valid ACPI ID must be of the form "NNNN####" where N is an uppercase letter or a
> digit ('0'-'9') and # is a hex digit. This specification reserves the string "ACPI" for use only
> with devices defined herein. It further reserves all strings representing 4 HEX digits for
> exclusive use with PCI-assigned Vendor IDs.
> 
> 
> Next question:
> 
> There are a lot drivers in iio/ using ACPI for device enumeration using
> these IDs. For now, let's take an example of Bosch Sensors:
> 
> drivers/iio/accel/bmc150-accel-i2c.c:static const struct acpi_device_id bmc150_accel_acpi_match[] = {
> drivers/iio/accel/bmc150-accel-i2c.c-   {"BSBA0150",    bmc150},
> drivers/iio/accel/bmc150-accel-i2c.c-   {"BMC150A",     bmc150},
> drivers/iio/accel/bmc150-accel-i2c.c-   {"BMI055A",     bmi055},
> drivers/iio/accel/bmc150-accel-i2c.c-   {"BMA0255",     bma255},
> 
> drivers/iio/gyro/bmg160_i2c.c:static const struct acpi_device_id bmg160_acpi_match[] = {
> drivers/iio/gyro/bmg160_i2c.c-  {"BMG0160", 0},
> drivers/iio/gyro/bmg160_i2c.c-  {"BMI055B", 0},
> drivers/iio/gyro/bmg160_i2c.c-  {},
> drivers/iio/gyro/bmg160_i2c.c-};
> 
> drivers/iio/imu/bmi160/bmi160_i2c.c:static const struct acpi_device_id bmi160_acpi_match[] = {
> drivers/iio/imu/bmi160/bmi160_i2c.c-    {"BMI0160", 0},
> drivers/iio/imu/bmi160/bmi160_i2c.c-    { },
> drivers/iio/imu/bmi160/bmi160_i2c.c-};
> drivers/iio/imu/bmi160/bmi160_i2c.c-MODULE_DEVICE_TABLE(acpi, bmi160_acpi_match);
> 
> Bosch registered ACPI ID: BOSC
> http://www.uefi.org/ACPI_ID_List?search=Bosch
> 
> Bosch registered PNP ID: BSG
> http://www.uefi.org/PNP_ID_List?search=Bosch
> 
> So, how could we use PNP ID "BMI" which is registered prefix for
> BENSON MEDICAL INSTRUMENTS COMPANY ?
> http://www.uefi.org/PNP_ID_List?search=BMI
> 
> Product ID -> "160" is fine for bmi160 which uniquely identifies the
> sensor device.
> 
> But shouldn't the prefix be "BSG0160" instead of "BMI0160" ?
> 
> When I wrote the driver for Bosch BME680, I followed the same guideline
> as done everywhere else in the Bosch family:
> 
> drivers/iio/pressure/bmp280-i2c.c-      {"BMP0280", BMP280_CHIP_ID },
> drivers/iio/pressure/bmp280-i2c.c-      {"BMP0180", BMP180_CHIP_ID },
> drivers/iio/pressure/bmp280-i2c.c-      {"BMP0085", BMP180_CHIP_ID },
> drivers/iio/pressure/bmp280-i2c.c-      {"BME0280", BME280_CHIP_ID },
> 
> Therefore, I used BME0680 for bosch bme680 sensor!
> 
> In OF matching, we use vendor prefixes and that looks more legimate:
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/Documentation/devicetree/bindings/vendor-prefixes.txt
> 
> Dan,
> 
> These questions are not just for you but to rest of the community
> members as well.
> 
> If there is something I misunderstood, then please let me know :)
The sad truth is that for ACPI things aren't really governed by the
spec, but rather by what people put in bios tables.

Now, I know is some cases the ID has been assigned pretty much to provide
an easy way to test the device as there are no known IDs in use for
the part.  In those cases we should be a little careful and it would be
nice to keep to the spec.  If companies actually published a
canonical list of their ID usage it would certainly make this nicer.
I have access to the Hisilicon list for example, but it's not (as far
as I know) public.

Some of the more random IDs are real ones found in the wild (such as
the one in this case).  Reality of a lot of these parts is that we will
never get them to fix the Bios.

I can rock up at an ACPI WG meeting and rant about it (mostly I don't as
they are in the middle of the night UK time) but in reality the smaller
companies don't have anyone attending so it wouldn't help much.

One thing we could do perhaps is start recording as comments, boards
on which a particular ID is found, or when we know it is the suggested
value from the manufacturer of a device.

Jonathan

P.S Technically I'm a member of the ASWG part of UEFI who is responsible
for that standard (on behalf of Huawei, though I never actually attend as
the call are in the middle of the night), but there are only so many things
one can try to solve + to be honest inconsistent namespaces don't
really hurt anyone other than requiring additional IDs to be added when
a new one shows up in the wild.

> 
> 
> Thanks
Jonathan Cameron Oct. 28, 2018, 11:56 a.m. UTC | #6
On Thu, 25 Oct 2018 16:35:41 +0100
Dan O'Donovan <dan@emutex.com> wrote:

> From: Nicola Lunghi <nicola.lunghi@emutex.com>
> 
> ACPI _HID AANT1280 matches an ADC124S101 present on E3940 SKUs of the UP
> Squared board.
> 
> Add it to the driver.
> 
> Signed-off-by: Nicola Lunghi <nicola.lunghi@emutex.com>
> [javier@emutex.com: fix up commit message and one checkpatch warning]
> Signed-off-by: Javier Arteaga <javier@emutex.com>
> Signed-off-by: Dan O'Donovan <dan@emutex.com>
Applied to the togreg branch of iio.git and pushed out as testing for
the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/ti-adc128s052.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
> index e6716c3..c2d1453 100644
> --- a/drivers/iio/adc/ti-adc128s052.c
> +++ b/drivers/iio/adc/ti-adc128s052.c
> @@ -12,10 +12,12 @@
>   * published by the Free Software Foundation.
>   */
>  
> +#include <linux/acpi.h>
>  #include <linux/err.h>
>  #include <linux/spi/spi.h>
>  #include <linux/module.h>
>  #include <linux/iio/iio.h>
> +#include <linux/property.h>
>  #include <linux/regulator/consumer.h>
>  
>  struct adc128_configuration {
> @@ -135,10 +137,15 @@ static const struct iio_info adc128_info = {
>  static int adc128_probe(struct spi_device *spi)
>  {
>  	struct iio_dev *indio_dev;
> +	unsigned int config;
>  	struct adc128 *adc;
> -	int config = spi_get_device_id(spi)->driver_data;
>  	int ret;
>  
> +	if (dev_fwnode(&spi->dev))
> +		config = (unsigned long) device_get_match_data(&spi->dev);
> +	else
> +		config = spi_get_device_id(spi)->driver_data;
> +
>  	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
>  	if (!indio_dev)
>  		return -ENOMEM;
> @@ -207,10 +214,19 @@ static const struct spi_device_id adc128_id[] = {
>  };
>  MODULE_DEVICE_TABLE(spi, adc128_id);
>  
> +#ifdef CONFIG_ACPI
> +static const struct acpi_device_id adc128_acpi_match[] = {
> +	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
> +#endif
> +
>  static struct spi_driver adc128_driver = {
>  	.driver = {
>  		.name = "adc128s052",
>  		.of_match_table = of_match_ptr(adc128_of_match),
> +		.acpi_match_table = ACPI_PTR(adc128_acpi_match),
>  	},
>  	.probe = adc128_probe,
>  	.remove = adc128_remove,
diff mbox series

Patch

diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
index e6716c3..c2d1453 100644
--- a/drivers/iio/adc/ti-adc128s052.c
+++ b/drivers/iio/adc/ti-adc128s052.c
@@ -12,10 +12,12 @@ 
  * published by the Free Software Foundation.
  */
 
+#include <linux/acpi.h>
 #include <linux/err.h>
 #include <linux/spi/spi.h>
 #include <linux/module.h>
 #include <linux/iio/iio.h>
+#include <linux/property.h>
 #include <linux/regulator/consumer.h>
 
 struct adc128_configuration {
@@ -135,10 +137,15 @@  static const struct iio_info adc128_info = {
 static int adc128_probe(struct spi_device *spi)
 {
 	struct iio_dev *indio_dev;
+	unsigned int config;
 	struct adc128 *adc;
-	int config = spi_get_device_id(spi)->driver_data;
 	int ret;
 
+	if (dev_fwnode(&spi->dev))
+		config = (unsigned long) device_get_match_data(&spi->dev);
+	else
+		config = spi_get_device_id(spi)->driver_data;
+
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
 	if (!indio_dev)
 		return -ENOMEM;
@@ -207,10 +214,19 @@  static const struct spi_device_id adc128_id[] = {
 };
 MODULE_DEVICE_TABLE(spi, adc128_id);
 
+#ifdef CONFIG_ACPI
+static const struct acpi_device_id adc128_acpi_match[] = {
+	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
+	{ }
+};
+MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
+#endif
+
 static struct spi_driver adc128_driver = {
 	.driver = {
 		.name = "adc128s052",
 		.of_match_table = of_match_ptr(adc128_of_match),
+		.acpi_match_table = ACPI_PTR(adc128_acpi_match),
 	},
 	.probe = adc128_probe,
 	.remove = adc128_remove,