[PATCH 6/6] firmware: samsung: acpm: Add devm_acpm_get_by_phandle helper

Peter Griffin peter.griffin at linaro.org
Fri May 8 14:36:47 PDT 2026


On Wed, 6 May 2026 at 12:39, Tudor Ambarus <tudor.ambarus at linaro.org> wrote:
>
> Introduce devm_acpm_get_by_phandle() to standardize how consumer
> drivers acquire a handle to the ACPM IPC interface. Enforce the
> use of the "samsung,acpm-ipc" property name across the SoC and
> simplify the boilerplate code in client drivers.
>
> The first consumer of this helper is the Exynos ACPM Thermal Management
> Unit (TMU) driver. The TMU utilizes a hybrid management approach: direct
> register access from the Application Processor (AP) is restricted to the
> interrupt pending (INTPEND) registers for event identification.
> High-level functional tasks, such as sensor initialization, threshold
> programming, and temperature reads, are delegated to the ACPM firmware
> via this IPC interface.
>
> Signed-off-by: Tudor Ambarus <tudor.ambarus at linaro.org>
> ---

Reviewed-by: Peter Griffin <peter.griffin at linaro.org>

>  drivers/firmware/samsung/exynos-acpm.c             | 23 ++++++++++++++++++++++
>  .../linux/firmware/samsung/exynos-acpm-protocol.h  |  6 ++++++
>  2 files changed, 29 insertions(+)
>
> diff --git a/drivers/firmware/samsung/exynos-acpm.c b/drivers/firmware/samsung/exynos-acpm.c
> index 2cebc5456968..a663e15fbad6 100644
> --- a/drivers/firmware/samsung/exynos-acpm.c
> +++ b/drivers/firmware/samsung/exynos-acpm.c
> @@ -857,6 +857,29 @@ struct acpm_handle *devm_acpm_get_by_node(struct device *dev,
>  }
>  EXPORT_SYMBOL_GPL(devm_acpm_get_by_node);
>
> +/**
> + * devm_acpm_get_by_phandle - Resource managed lookup of the standardized
> + * "samsung,acpm-ipc" handle.
> + * @dev: consumer device
> + *
> + * Return: pointer to handle on success, ERR_PTR(-errno) otherwise.
> + */
> +struct acpm_handle *devm_acpm_get_by_phandle(struct device *dev)
> +{
> +       struct acpm_handle *handle;
> +       struct device_node *np;
> +
> +       np = of_parse_phandle(dev->of_node, "samsung,acpm-ipc", 0);
> +       if (!np)
> +               return ERR_PTR(-ENODEV);
> +
> +       handle = devm_acpm_get_by_node(dev, np);
> +       of_node_put(np);
> +
> +       return handle;
> +}
> +EXPORT_SYMBOL_GPL(devm_acpm_get_by_phandle);
> +
>  static const struct acpm_match_data acpm_gs101 = {
>         .initdata_base = ACPM_GS101_INITDATA_BASE,
>         .acpm_clk_dev_name = "gs101-acpm-clk",
> diff --git a/include/linux/firmware/samsung/exynos-acpm-protocol.h b/include/linux/firmware/samsung/exynos-acpm-protocol.h
> index 08d9f5c95701..83cbd425b652 100644
> --- a/include/linux/firmware/samsung/exynos-acpm-protocol.h
> +++ b/include/linux/firmware/samsung/exynos-acpm-protocol.h
> @@ -71,6 +71,7 @@ struct device;
>  #if IS_ENABLED(CONFIG_EXYNOS_ACPM_PROTOCOL)
>  struct acpm_handle *devm_acpm_get_by_node(struct device *dev,
>                                           struct device_node *np);
> +struct acpm_handle *devm_acpm_get_by_phandle(struct device *dev);
>  #else
>
>  static inline struct acpm_handle *devm_acpm_get_by_node(struct device *dev,
> @@ -78,6 +79,11 @@ static inline struct acpm_handle *devm_acpm_get_by_node(struct device *dev,
>  {
>         return ERR_PTR(-ENODEV);
>  }
> +
> +static inline struct acpm_handle *devm_acpm_get_by_phandle(struct device *dev)
> +{
> +       return ERR_PTR(-ENODEV);
> +}
>  #endif
>
>  #endif /* __EXYNOS_ACPM_PROTOCOL_H */
>
> --
> 2.54.0.545.g6539524ca2-goog
>



More information about the linux-arm-kernel mailing list