Commit 21fd3b13 authored by Biju Das's avatar Biju Das Committed by Jonathan Cameron

iio: proximity: sx9310: Convert enum->pointer for match data table

Convert enum->pointer for data in match data table, so that
device_get_match_data() can do match against OF/ACPI/I2C tables, once i2c
bus type match support added to it.

Add struct sx931x_info and replace enum->sx931x_info in the match table
and simplify sx9310_check_whoami().
Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20230818175819.325663-1-biju.das.jz@bp.renesas.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 7f8643aa
...@@ -159,6 +159,11 @@ static_assert(SX9310_NUM_CHANNELS <= SX_COMMON_MAX_NUM_CHANNELS); ...@@ -159,6 +159,11 @@ static_assert(SX9310_NUM_CHANNELS <= SX_COMMON_MAX_NUM_CHANNELS);
} }
#define SX9310_CHANNEL(idx) SX9310_NAMED_CHANNEL(idx, NULL) #define SX9310_CHANNEL(idx) SX9310_NAMED_CHANNEL(idx, NULL)
struct sx931x_info {
const char *name;
unsigned int whoami;
};
static const struct iio_chan_spec sx9310_channels[] = { static const struct iio_chan_spec sx9310_channels[] = {
SX9310_CHANNEL(0), /* CS0 */ SX9310_CHANNEL(0), /* CS0 */
SX9310_CHANNEL(1), /* CS1 */ SX9310_CHANNEL(1), /* CS1 */
...@@ -902,7 +907,7 @@ static int sx9310_check_whoami(struct device *dev, ...@@ -902,7 +907,7 @@ static int sx9310_check_whoami(struct device *dev,
struct iio_dev *indio_dev) struct iio_dev *indio_dev)
{ {
struct sx_common_data *data = iio_priv(indio_dev); struct sx_common_data *data = iio_priv(indio_dev);
unsigned int long ddata; const struct sx931x_info *ddata;
unsigned int whoami; unsigned int whoami;
int ret; int ret;
...@@ -910,20 +915,11 @@ static int sx9310_check_whoami(struct device *dev, ...@@ -910,20 +915,11 @@ static int sx9310_check_whoami(struct device *dev,
if (ret) if (ret)
return ret; return ret;
ddata = (uintptr_t)device_get_match_data(dev); ddata = device_get_match_data(dev);
if (ddata != whoami) if (ddata->whoami != whoami)
return -EINVAL;
switch (whoami) {
case SX9310_WHOAMI_VALUE:
indio_dev->name = "sx9310";
break;
case SX9311_WHOAMI_VALUE:
indio_dev->name = "sx9311";
break;
default:
return -ENODEV; return -ENODEV;
}
indio_dev->name = ddata->name;
return 0; return 0;
} }
...@@ -1015,23 +1011,33 @@ static int sx9310_resume(struct device *dev) ...@@ -1015,23 +1011,33 @@ static int sx9310_resume(struct device *dev)
static DEFINE_SIMPLE_DEV_PM_OPS(sx9310_pm_ops, sx9310_suspend, sx9310_resume); static DEFINE_SIMPLE_DEV_PM_OPS(sx9310_pm_ops, sx9310_suspend, sx9310_resume);
static const struct sx931x_info sx9310_info = {
.name = "sx9310",
.whoami = SX9310_WHOAMI_VALUE,
};
static const struct sx931x_info sx9311_info = {
.name = "sx9311",
.whoami = SX9311_WHOAMI_VALUE,
};
static const struct acpi_device_id sx9310_acpi_match[] = { static const struct acpi_device_id sx9310_acpi_match[] = {
{ "STH9310", SX9310_WHOAMI_VALUE }, { "STH9310", (kernel_ulong_t)&sx9310_info },
{ "STH9311", SX9311_WHOAMI_VALUE }, { "STH9311", (kernel_ulong_t)&sx9311_info },
{} {}
}; };
MODULE_DEVICE_TABLE(acpi, sx9310_acpi_match); MODULE_DEVICE_TABLE(acpi, sx9310_acpi_match);
static const struct of_device_id sx9310_of_match[] = { static const struct of_device_id sx9310_of_match[] = {
{ .compatible = "semtech,sx9310", (void *)SX9310_WHOAMI_VALUE }, { .compatible = "semtech,sx9310", &sx9310_info },
{ .compatible = "semtech,sx9311", (void *)SX9311_WHOAMI_VALUE }, { .compatible = "semtech,sx9311", &sx9311_info },
{} {}
}; };
MODULE_DEVICE_TABLE(of, sx9310_of_match); MODULE_DEVICE_TABLE(of, sx9310_of_match);
static const struct i2c_device_id sx9310_id[] = { static const struct i2c_device_id sx9310_id[] = {
{ "sx9310", SX9310_WHOAMI_VALUE }, { "sx9310", (kernel_ulong_t)&sx9310_info },
{ "sx9311", SX9311_WHOAMI_VALUE }, { "sx9311", (kernel_ulong_t)&sx9311_info },
{} {}
}; };
MODULE_DEVICE_TABLE(i2c, sx9310_id); MODULE_DEVICE_TABLE(i2c, sx9310_id);
......
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