iio: magnetometer: ak8975: Convert enum->pointer for data in the match tables
authorBiju Das <biju.das.jz@bp.renesas.com>
Fri, 18 Aug 2023 07:55:56 +0000 (08:55 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 11 Sep 2023 19:12:42 +0000 (20:12 +0100)
Convert enum->pointer for data in the match tables to simplify the probe()
by replacing device_get_match_data() and i2c_client_get_device_id by
i2c_get_match_data() as we have similar I2C, ACPI and DT matching table.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20230818075600.24277-2-biju.das.jz@bp.renesas.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/magnetometer/ak8975.c

index eb706d0bf70bc0d6354a44d1b99e704b63561b83..104798549de1123bfe0d283e3fcfd944be7c6364 100644 (file)
@@ -813,13 +813,13 @@ static const struct iio_info ak8975_info = {
 };
 
 static const struct acpi_device_id ak_acpi_match[] = {
-       {"AK8975", AK8975},
-       {"AK8963", AK8963},
-       {"INVN6500", AK8963},
-       {"AK009911", AK09911},
-       {"AK09911", AK09911},
-       {"AKM9911", AK09911},
-       {"AK09912", AK09912},
+       {"AK8975", (kernel_ulong_t)&ak_def_array[AK8975] },
+       {"AK8963", (kernel_ulong_t)&ak_def_array[AK8963] },
+       {"INVN6500", (kernel_ulong_t)&ak_def_array[AK8963] },
+       {"AK009911", (kernel_ulong_t)&ak_def_array[AK09911] },
+       {"AK09911", (kernel_ulong_t)&ak_def_array[AK09911] },
+       {"AKM9911", (kernel_ulong_t)&ak_def_array[AK09911] },
+       {"AK09912", (kernel_ulong_t)&ak_def_array[AK09912] },
        { }
 };
 MODULE_DEVICE_TABLE(acpi, ak_acpi_match);
@@ -883,10 +883,7 @@ static int ak8975_probe(struct i2c_client *client)
        struct iio_dev *indio_dev;
        struct gpio_desc *eoc_gpiod;
        struct gpio_desc *reset_gpiod;
-       const void *match;
-       unsigned int i;
        int err;
-       enum asahi_compass_chipset chipset;
        const char *name = NULL;
 
        /*
@@ -928,27 +925,15 @@ static int ak8975_probe(struct i2c_client *client)
                return err;
 
        /* id will be NULL when enumerated via ACPI */
-       match = device_get_match_data(&client->dev);
-       if (match) {
-               chipset = (uintptr_t)match;
-               name = dev_name(&client->dev);
-       } else if (id) {
-               chipset = (enum asahi_compass_chipset)(id->driver_data);
-               name = id->name;
-       } else
-               return -ENOSYS;
-
-       for (i = 0; i < ARRAY_SIZE(ak_def_array); i++)
-               if (ak_def_array[i].type == chipset)
-                       break;
-
-       if (i == ARRAY_SIZE(ak_def_array)) {
-               dev_err(&client->dev, "AKM device type unsupported: %d\n",
-                       chipset);
+       data->def = i2c_get_match_data(client);
+       if (!data->def)
                return -ENODEV;
-       }
 
-       data->def = &ak_def_array[i];
+       /* If enumerated via firmware node, fix the ABI */
+       if (dev_fwnode(&client->dev))
+               name = dev_name(&client->dev);
+       else
+               name = id->name;
 
        /* Fetch the regulators */
        data->vdd = devm_regulator_get(&client->dev, "vdd");
@@ -1077,28 +1062,28 @@ static DEFINE_RUNTIME_DEV_PM_OPS(ak8975_dev_pm_ops, ak8975_runtime_suspend,
                                 ak8975_runtime_resume, NULL);
 
 static const struct i2c_device_id ak8975_id[] = {
-       {"ak8975", AK8975},
-       {"ak8963", AK8963},
-       {"AK8963", AK8963},
-       {"ak09911", AK09911},
-       {"ak09912", AK09912},
-       {"ak09916", AK09916},
+       {"ak8975", (kernel_ulong_t)&ak_def_array[AK8975] },
+       {"ak8963", (kernel_ulong_t)&ak_def_array[AK8963] },
+       {"AK8963", (kernel_ulong_t)&ak_def_array[AK8963] },
+       {"ak09911", (kernel_ulong_t)&ak_def_array[AK09911] },
+       {"ak09912", (kernel_ulong_t)&ak_def_array[AK09912] },
+       {"ak09916", (kernel_ulong_t)&ak_def_array[AK09916] },
        {}
 };
 
 MODULE_DEVICE_TABLE(i2c, ak8975_id);
 
 static const struct of_device_id ak8975_of_match[] = {
-       { .compatible = "asahi-kasei,ak8975", },
-       { .compatible = "ak8975", },
-       { .compatible = "asahi-kasei,ak8963", },
-       { .compatible = "ak8963", },
-       { .compatible = "asahi-kasei,ak09911", },
-       { .compatible = "ak09911", },
-       { .compatible = "asahi-kasei,ak09912", },
-       { .compatible = "ak09912", },
-       { .compatible = "asahi-kasei,ak09916", },
-       { .compatible = "ak09916", },
+       { .compatible = "asahi-kasei,ak8975", .data = &ak_def_array[AK8975] },
+       { .compatible = "ak8975", .data = &ak_def_array[AK8975] },
+       { .compatible = "asahi-kasei,ak8963", .data = &ak_def_array[AK8963] },
+       { .compatible = "ak8963", .data = &ak_def_array[AK8963] },
+       { .compatible = "asahi-kasei,ak09911", .data = &ak_def_array[AK09911] },
+       { .compatible = "ak09911", .data = &ak_def_array[AK09911] },
+       { .compatible = "asahi-kasei,ak09912", .data = &ak_def_array[AK09912] },
+       { .compatible = "ak09912", .data = &ak_def_array[AK09912] },
+       { .compatible = "asahi-kasei,ak09916", .data = &ak_def_array[AK09916] },
+       { .compatible = "ak09916", .data = &ak_def_array[AK09916] },
        {}
 };
 MODULE_DEVICE_TABLE(of, ak8975_of_match);