platform/x86: int3472: Add new skl_int3472_gpiod_get_from_temp_lookup() helper
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Wed, 4 Oct 2023 16:23:14 +0000 (18:23 +0200)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 6 Oct 2023 10:34:54 +0000 (13:34 +0300)
Add a new skl_int3472_gpiod_get_from_temp_lookup() helper.

This is a preparation patch for removing usage of the deprecated
gpiod_toggle_active_low() and acpi_get_and_request_gpiod() functions.

[hdegoede@redhat.com] use the new skl_int3472_fill_gpiod_lookup() helper

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Co-developed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20231004162317.163488-3-hdegoede@redhat.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/intel/int3472/discrete.c

index 351ecf047944b979c121388fb28378be45557df3..b69ef63f75abe19bec05a134a2111eb8602db98f 100644 (file)
@@ -99,6 +99,32 @@ static int skl_int3472_map_gpio_to_sensor(struct int3472_discrete_device *int347
        return 0;
 }
 
+/* This should *really* only be used when there's no other way... */
+static struct gpio_desc *
+skl_int3472_gpiod_get_from_temp_lookup(struct int3472_discrete_device *int3472,
+                                      struct acpi_resource_gpio *agpio,
+                                      const char *func, u32 polarity)
+{
+       struct gpio_desc *desc;
+       int ret;
+
+       struct gpiod_lookup_table *lookup __free(kfree) =
+                       kzalloc(struct_size(lookup, table, 2), GFP_KERNEL);
+       if (!lookup)
+               return ERR_PTR(-ENOMEM);
+
+       lookup->dev_id = dev_name(int3472->dev);
+       ret = skl_int3472_fill_gpiod_lookup(&lookup->table[0], agpio, func, polarity);
+       if (ret)
+               return ERR_PTR(ret);
+
+       gpiod_add_lookup_table(lookup);
+       desc = gpiod_get(int3472->dev, func, GPIOD_OUT_LOW);
+       gpiod_remove_lookup_table(lookup);
+
+       return desc;
+}
+
 static void int3472_get_func_and_polarity(u8 type, const char **func, u32 *polarity)
 {
        switch (type) {