[PATCH 04/39] drm/imx: dc: Use bulk clock
Marek Vasut
marek.vasut at mailbox.org
Tue Oct 14 05:02:37 PDT 2025
On 10/13/25 6:54 PM, Frank Li wrote:
> On Sat, Oct 11, 2025 at 06:51:19PM +0200, Marek Vasut wrote:
>> Switch to bulk clock operations, as many of the blocks present in DC
>
> s/operations/API
>
>> use multiple clock on i.MX95. The use of bulk clock operations allows
>> the driver to seamlessly handle one or multiple clock.
>>
>> Signed-off-by: Marek Vasut <marek.vasut at mailbox.org>
>> ---
>> Cc: Abel Vesa <abelvesa at kernel.org>
>> Cc: Conor Dooley <conor+dt at kernel.org>
>> Cc: Fabio Estevam <festevam at gmail.com>
>> Cc: Krzysztof Kozlowski <krzk+dt at kernel.org>
>> Cc: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
>> Cc: Liu Ying <victor.liu at nxp.com>
>> Cc: Lucas Stach <l.stach at pengutronix.de>
>> Cc: Peng Fan <peng.fan at nxp.com>
>> Cc: Pengutronix Kernel Team <kernel at pengutronix.de>
>> Cc: Rob Herring <robh at kernel.org>
>> Cc: Shawn Guo <shawnguo at kernel.org>
>> Cc: Thomas Zimmermann <tzimmermann at suse.de>
>> Cc: devicetree at vger.kernel.org
>> Cc: dri-devel at lists.freedesktop.org
>> Cc: imx at lists.linux.dev
>> Cc: linux-arm-kernel at lists.infradead.org
>> Cc: linux-clk at vger.kernel.org
>> ---
>> drivers/gpu/drm/imx/dc/dc-drv.c | 14 ++++++++------
>> drivers/gpu/drm/imx/dc/dc-ic.c | 14 ++++++++------
>> drivers/gpu/drm/imx/dc/dc-pe.c | 12 ++++++------
>> drivers/gpu/drm/imx/dc/dc-pe.h | 3 ++-
>> 4 files changed, 24 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/imx/dc/dc-drv.c b/drivers/gpu/drm/imx/dc/dc-drv.c
>> index f108964bf89f4..2717c92aba6c5 100644
>> --- a/drivers/gpu/drm/imx/dc/dc-drv.c
>> +++ b/drivers/gpu/drm/imx/dc/dc-drv.c
>> @@ -31,7 +31,8 @@
>>
>> struct dc_priv {
>> struct drm_device *drm;
>> - struct clk *clk_cfg;
>> + struct clk_bulk_data *clk_cfg;
>> + int clk_cfg_count;
>> };
>>
>> DEFINE_DRM_GEM_DMA_FOPS(dc_drm_driver_fops);
>> @@ -163,10 +164,11 @@ static int dc_probe(struct platform_device *pdev)
>> if (!priv)
>> return -ENOMEM;
>>
>> - priv->clk_cfg = devm_clk_get(&pdev->dev, NULL);
>> - if (IS_ERR(priv->clk_cfg))
>> - return dev_err_probe(&pdev->dev, PTR_ERR(priv->clk_cfg),
>> + ret = devm_clk_bulk_get_all(&pdev->dev, &priv->clk_cfg);
>> + if (ret < 0)
>> + return dev_err_probe(&pdev->dev, ret,
>> "failed to get cfg clock\n");
>> + priv->clk_cfg_count = ret;
>>
>> dev_set_drvdata(&pdev->dev, priv);
>>
>> @@ -201,7 +203,7 @@ static int dc_runtime_suspend(struct device *dev)
>> {
>> struct dc_priv *priv = dev_get_drvdata(dev);
>>
>> - clk_disable_unprepare(priv->clk_cfg);
>> + clk_bulk_disable_unprepare(priv->clk_cfg_count, priv->clk_cfg);
>>
>> return 0;
>> }
>> @@ -211,7 +213,7 @@ static int dc_runtime_resume(struct device *dev)
>> struct dc_priv *priv = dev_get_drvdata(dev);
>> int ret;
>>
>> - ret = clk_prepare_enable(priv->clk_cfg);
>> + ret = clk_bulk_prepare_enable(priv->clk_cfg_count, priv->clk_cfg);
>> if (ret)
>> dev_err(dev, "failed to enable cfg clock: %d\n", ret);
>>
>> diff --git a/drivers/gpu/drm/imx/dc/dc-ic.c b/drivers/gpu/drm/imx/dc/dc-ic.c
>> index a270ae4030cdc..67441b349a7d2 100644
>> --- a/drivers/gpu/drm/imx/dc/dc-ic.c
>> +++ b/drivers/gpu/drm/imx/dc/dc-ic.c
>> @@ -30,7 +30,8 @@
>>
>> struct dc_ic_data {
>> struct regmap *regs;
>> - struct clk *clk_axi;
>> + struct clk_bulk_data *clk_axi;
>
> I am not sure if "axi' is good name for bulk clks. Maybe use 'clks'. _axi
> quite specific to special 'axi' clocks.
Fixed both, thanks.
More information about the linux-arm-kernel
mailing list