mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
firmware: exynos-acpm: register ACPM clocks pdev
Register by hand a platform device for the ACPM clocks. The ACPM clocks are not modeled as a DT child of ACPM because: 1/ they don't have their own resources. 2/ they are not a block that can be reused. The clock identifying data is reduced (clock ID, clock name and mailbox channel ID) and may differ from a SoC to another. Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org> Reviewed-by: Peter Griffin <peter.griffin@linaro.org> Tested-by: Peter Griffin <peter.griffin@linaro.org> # on gs101-oriole Link: https://patch.msgid.link/20251010-acpm-clk-v6-3-321ee8826fd4@linaro.org Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
This commit is contained in:
committed by
Krzysztof Kozlowski
parent
84a222d1b3
commit
bad0d1260b
@@ -177,9 +177,11 @@ struct acpm_info {
|
||||
/**
|
||||
* struct acpm_match_data - of_device_id data.
|
||||
* @initdata_base: offset in SRAM where the channels configuration resides.
|
||||
* @acpm_clk_dev_name: base name for the ACPM clocks device that we're registering.
|
||||
*/
|
||||
struct acpm_match_data {
|
||||
loff_t initdata_base;
|
||||
const char *acpm_clk_dev_name;
|
||||
};
|
||||
|
||||
#define client_to_acpm_chan(c) container_of(c, struct acpm_chan, cl)
|
||||
@@ -604,9 +606,15 @@ static void acpm_setup_ops(struct acpm_info *acpm)
|
||||
pmic_ops->update_reg = acpm_pmic_update_reg;
|
||||
}
|
||||
|
||||
static void acpm_clk_pdev_unregister(void *data)
|
||||
{
|
||||
platform_device_unregister(data);
|
||||
}
|
||||
|
||||
static int acpm_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct acpm_match_data *match_data;
|
||||
struct platform_device *acpm_clk_pdev;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *shmem;
|
||||
struct acpm_info *acpm;
|
||||
@@ -647,6 +655,18 @@ static int acpm_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, acpm);
|
||||
|
||||
acpm_clk_pdev = platform_device_register_data(dev,
|
||||
match_data->acpm_clk_dev_name,
|
||||
PLATFORM_DEVID_NONE, NULL, 0);
|
||||
if (IS_ERR(acpm_clk_pdev))
|
||||
return dev_err_probe(dev, PTR_ERR(acpm_clk_pdev),
|
||||
"Failed to register ACPM clocks device.\n");
|
||||
|
||||
ret = devm_add_action_or_reset(dev, acpm_clk_pdev_unregister,
|
||||
acpm_clk_pdev);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Failed to add devm action.\n");
|
||||
|
||||
return devm_of_platform_populate(dev);
|
||||
}
|
||||
|
||||
@@ -746,6 +766,7 @@ EXPORT_SYMBOL_GPL(devm_acpm_get_by_node);
|
||||
|
||||
static const struct acpm_match_data acpm_gs101 = {
|
||||
.initdata_base = ACPM_GS101_INITDATA_BASE,
|
||||
.acpm_clk_dev_name = "gs101-acpm-clk",
|
||||
};
|
||||
|
||||
static const struct of_device_id acpm_match[] = {
|
||||
|
||||
Reference in New Issue
Block a user