mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
platform/x86: int3472: Add skl_int3472_register_clock() helper
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>
This commit is contained in:
parent
e99e2c54ea
commit
1d78798b4e
|
|
@ -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 @@ int skl_int3472_register_dsm_clock(struct int3472_discrete_device *int3472)
|
|||
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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user