iio:accel:da280: Linx 820 Windows tablet has a da280 mapped via ACPI
This adds an ACPI table to the driver and the ACPI ID of the sensor on the tablet. Signed-off-by: Luke Ross <luke@lukeross.name> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
eed48a3beb
commit
4c42bef0d3
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/acpi.h>
|
||||||
#include <linux/iio/iio.h>
|
#include <linux/iio/iio.h>
|
||||||
#include <linux/iio/sysfs.h>
|
#include <linux/iio/sysfs.h>
|
||||||
#include <linux/byteorder/generic.h>
|
#include <linux/byteorder/generic.h>
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
#define DA280_MODE_ENABLE 0x1e
|
#define DA280_MODE_ENABLE 0x1e
|
||||||
#define DA280_MODE_DISABLE 0x9e
|
#define DA280_MODE_DISABLE 0x9e
|
||||||
|
|
||||||
enum { da226, da280 };
|
enum da280_chipset { da226, da280 };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* a value of + or -4096 corresponds to + or - 1G
|
* a value of + or -4096 corresponds to + or - 1G
|
||||||
|
@ -91,12 +92,24 @@ static const struct iio_info da280_info = {
|
||||||
.read_raw = da280_read_raw,
|
.read_raw = da280_read_raw,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static enum da280_chipset da280_match_acpi_device(struct device *dev)
|
||||||
|
{
|
||||||
|
const struct acpi_device_id *id;
|
||||||
|
|
||||||
|
id = acpi_match_device(dev->driver->acpi_match_table, dev);
|
||||||
|
if (!id)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return (enum da280_chipset) id->driver_data;
|
||||||
|
}
|
||||||
|
|
||||||
static int da280_probe(struct i2c_client *client,
|
static int da280_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct iio_dev *indio_dev;
|
struct iio_dev *indio_dev;
|
||||||
struct da280_data *data;
|
struct da280_data *data;
|
||||||
|
enum da280_chipset chip;
|
||||||
|
|
||||||
ret = i2c_smbus_read_byte_data(client, DA280_REG_CHIP_ID);
|
ret = i2c_smbus_read_byte_data(client, DA280_REG_CHIP_ID);
|
||||||
if (ret != DA280_CHIP_ID)
|
if (ret != DA280_CHIP_ID)
|
||||||
|
@ -114,7 +127,14 @@ static int da280_probe(struct i2c_client *client,
|
||||||
indio_dev->info = &da280_info;
|
indio_dev->info = &da280_info;
|
||||||
indio_dev->modes = INDIO_DIRECT_MODE;
|
indio_dev->modes = INDIO_DIRECT_MODE;
|
||||||
indio_dev->channels = da280_channels;
|
indio_dev->channels = da280_channels;
|
||||||
if (id->driver_data == da226) {
|
|
||||||
|
if (ACPI_HANDLE(&client->dev)) {
|
||||||
|
chip = da280_match_acpi_device(&client->dev);
|
||||||
|
} else {
|
||||||
|
chip = id->driver_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chip == da226) {
|
||||||
indio_dev->name = "da226";
|
indio_dev->name = "da226";
|
||||||
indio_dev->num_channels = 2;
|
indio_dev->num_channels = 2;
|
||||||
} else {
|
} else {
|
||||||
|
@ -158,6 +178,12 @@ static int da280_resume(struct device *dev)
|
||||||
|
|
||||||
static SIMPLE_DEV_PM_OPS(da280_pm_ops, da280_suspend, da280_resume);
|
static SIMPLE_DEV_PM_OPS(da280_pm_ops, da280_suspend, da280_resume);
|
||||||
|
|
||||||
|
static const struct acpi_device_id da280_acpi_match[] = {
|
||||||
|
{"MIRAACC", da280},
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(acpi, da280_acpi_match);
|
||||||
|
|
||||||
static const struct i2c_device_id da280_i2c_id[] = {
|
static const struct i2c_device_id da280_i2c_id[] = {
|
||||||
{ "da226", da226 },
|
{ "da226", da226 },
|
||||||
{ "da280", da280 },
|
{ "da280", da280 },
|
||||||
|
@ -168,6 +194,7 @@ MODULE_DEVICE_TABLE(i2c, da280_i2c_id);
|
||||||
static struct i2c_driver da280_driver = {
|
static struct i2c_driver da280_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "da280",
|
.name = "da280",
|
||||||
|
.acpi_match_table = ACPI_PTR(da280_acpi_match),
|
||||||
.pm = &da280_pm_ops,
|
.pm = &da280_pm_ops,
|
||||||
},
|
},
|
||||||
.probe = da280_probe,
|
.probe = da280_probe,
|
||||||
|
|
Loading…
Reference in New Issue