platform/x86: int3472: Add skl_int3472_register_clock() helper
authorHans de Goede <hdegoede@redhat.com>
Thu, 17 Apr 2025 11:13:29 +0000 (13:13 +0200)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 24 Apr 2025 13:05:29 +0000 (16:05 +0300)
skl_int3472_register_dsm_clock() and skl_int3472_register_gpio_clock() are
80% the same code. Factor out the common code into a new
skl_int3472_register_clock() helper.

Reviewed-by: Andy Shevchenko <andy@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tested-by: David Heidelberg <david@ixit.cz> # Dell Latitude 9440
Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Link: https://lore.kernel.org/r/20250417111337.38142-2-hdegoede@redhat.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/intel/int3472/clk_and_regulator.c

index 16e36ac..837990a 100644 (file)
@@ -118,7 +118,7 @@ static const struct clk_ops skl_int3472_clock_ops = {
        .recalc_rate = skl_int3472_clk_recalc_rate,
 };
 
-int skl_int3472_register_dsm_clock(struct int3472_discrete_device *int3472)
+static int skl_int3472_register_clock(struct int3472_discrete_device *int3472)
 {
        struct acpi_device *adev = int3472->adev;
        struct clk_init_data init = {
@@ -127,12 +127,6 @@ int skl_int3472_register_dsm_clock(struct int3472_discrete_device *int3472)
        };
        int ret;
 
-       if (int3472->clock.cl)
-               return 0; /* A GPIO controlled clk has already been registered */
-
-       if (!acpi_check_dsm(adev->handle, &img_clk_guid, 0, BIT(1)))
-               return 0; /* DSM clock control is not available */
-
        init.name = kasprintf(GFP_KERNEL, "%s-clk", acpi_dev_name(adev));
        if (!init.name)
                return -ENOMEM;
@@ -161,51 +155,26 @@ out_free_init_name:
        return ret;
 }
 
+int skl_int3472_register_dsm_clock(struct int3472_discrete_device *int3472)
+{
+       if (int3472->clock.cl)
+               return 0; /* A GPIO controlled clk has already been registered */
+
+       if (!acpi_check_dsm(int3472->adev->handle, &img_clk_guid, 0, BIT(1)))
+               return 0; /* DSM clock control is not available */
+
+       return skl_int3472_register_clock(int3472);
+}
+
 int skl_int3472_register_gpio_clock(struct int3472_discrete_device *int3472,
                                    struct gpio_desc *gpio)
 {
-       struct clk_init_data init = {
-               .ops = &skl_int3472_clock_ops,
-               .flags = CLK_GET_RATE_NOCACHE,
-       };
-       int ret;
-
        if (int3472->clock.cl)
                return -EBUSY;
 
        int3472->clock.ena_gpio = gpio;
 
-       init.name = kasprintf(GFP_KERNEL, "%s-clk",
-                             acpi_dev_name(int3472->adev));
-       if (!init.name)
-               return -ENOMEM;
-
-       int3472->clock.frequency = skl_int3472_get_clk_frequency(int3472);
-
-       int3472->clock.clk_hw.init = &init;
-       int3472->clock.clk = clk_register(&int3472->adev->dev,
-                                         &int3472->clock.clk_hw);
-       if (IS_ERR(int3472->clock.clk)) {
-               ret = PTR_ERR(int3472->clock.clk);
-               goto out_free_init_name;
-       }
-
-       int3472->clock.cl = clkdev_create(int3472->clock.clk, NULL,
-                                         int3472->sensor_name);
-       if (!int3472->clock.cl) {
-               ret = -ENOMEM;
-               goto err_unregister_clk;
-       }
-
-       kfree(init.name);
-       return 0;
-
-err_unregister_clk:
-       clk_unregister(int3472->clock.clk);
-out_free_init_name:
-       kfree(init.name);
-
-       return ret;
+       return skl_int3472_register_clock(int3472);
 }
 
 void skl_int3472_unregister_clock(struct int3472_discrete_device *int3472)