iio: proximity: sx9310: Convert enum->pointer for match data table
[linux-2.6-microblaze.git] / drivers / iio / proximity / sx9310.c
index d977aac..0d230a0 100644 (file)
@@ -159,6 +159,11 @@ static_assert(SX9310_NUM_CHANNELS <= SX_COMMON_MAX_NUM_CHANNELS);
 }
 #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[] = {
        SX9310_CHANNEL(0),                      /* CS0 */
        SX9310_CHANNEL(1),                      /* CS1 */
@@ -902,7 +907,7 @@ static int sx9310_check_whoami(struct device *dev,
                               struct iio_dev *indio_dev)
 {
        struct sx_common_data *data = iio_priv(indio_dev);
-       unsigned int long ddata;
+       const struct sx931x_info *ddata;
        unsigned int whoami;
        int ret;
 
@@ -910,20 +915,11 @@ static int sx9310_check_whoami(struct device *dev,
        if (ret)
                return ret;
 
-       ddata = (uintptr_t)device_get_match_data(dev);
-       if (ddata != whoami)
-               return -EINVAL;
-
-       switch (whoami) {
-       case SX9310_WHOAMI_VALUE:
-               indio_dev->name = "sx9310";
-               break;
-       case SX9311_WHOAMI_VALUE:
-               indio_dev->name = "sx9311";
-               break;
-       default:
+       ddata = device_get_match_data(dev);
+       if (ddata->whoami != whoami)
                return -ENODEV;
-       }
+
+       indio_dev->name = ddata->name;
 
        return 0;
 }
@@ -1015,23 +1011,33 @@ out:
 
 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[] = {
-       { "STH9310", SX9310_WHOAMI_VALUE },
-       { "STH9311", SX9311_WHOAMI_VALUE },
+       { "STH9310", (kernel_ulong_t)&sx9310_info },
+       { "STH9311", (kernel_ulong_t)&sx9311_info },
        {}
 };
 MODULE_DEVICE_TABLE(acpi, sx9310_acpi_match);
 
 static const struct of_device_id sx9310_of_match[] = {
-       { .compatible = "semtech,sx9310", (void *)SX9310_WHOAMI_VALUE },
-       { .compatible = "semtech,sx9311", (void *)SX9311_WHOAMI_VALUE },
+       { .compatible = "semtech,sx9310", &sx9310_info },
+       { .compatible = "semtech,sx9311", &sx9311_info },
        {}
 };
 MODULE_DEVICE_TABLE(of, sx9310_of_match);
 
 static const struct i2c_device_id sx9310_id[] = {
-       { "sx9310", SX9310_WHOAMI_VALUE },
-       { "sx9311", SX9311_WHOAMI_VALUE },
+       { "sx9310", (kernel_ulong_t)&sx9310_info },
+       { "sx9311", (kernel_ulong_t)&sx9311_info },
        {}
 };
 MODULE_DEVICE_TABLE(i2c, sx9310_id);