mfd: atmel-hlcdc: Fetch LVDS PLL clock for LVDS display

The XLCDC IP supports parallel RGB, MIPI DSI and LVDS Display.
The LCD Generic clock (sys_clk) is used for Parallel RGB and MIPI
displays, while the LVDS PLL clock (lvds_pll_clk) is used for LVDS
displays.Since both the clocks cannot co-exist together in the DT
for a given display, this patch tries sys_clk first (RGB/MIPI),
fallback to lvds_pll_clk (LVDS).

Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
Signed-off-by: Dharma Balasubiramani <dharma.b@microchip.com>
Link: https://patch.msgid.link/20260223101920.284697-2-manikandan.m@microchip.com
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Manikandan Muralidharan 2026-02-23 15:49:17 +05:30 committed by Lee Jones
parent c2b06b133c
commit 239cd6a417
2 changed files with 12 additions and 2 deletions

View File

@ -108,10 +108,19 @@ static int atmel_hlcdc_probe(struct platform_device *pdev)
return PTR_ERR(hlcdc->periph_clk);
}
/*
* Retrieve one of the primary clocks required for LCD operation:
* prefer sys_clk (for RGB/MIPI), and fall back to lvds_pll_clk
* (for LVDS) if needed.
*/
hlcdc->sys_clk = devm_clk_get(dev, "sys_clk");
if (IS_ERR(hlcdc->sys_clk)) {
dev_err(dev, "failed to get system clock\n");
return PTR_ERR(hlcdc->sys_clk);
hlcdc->sys_clk = NULL;
hlcdc->lvds_pll_clk = devm_clk_get(dev, "lvds_pll_clk");
if (IS_ERR(hlcdc->lvds_pll_clk)) {
dev_err(dev, "Failed to obtain both the LCDC (generic) and LVDS PLL clocks\n");
return PTR_ERR(hlcdc->lvds_pll_clk);
}
}
hlcdc->slow_clk = devm_clk_get(dev, "slow_clk");

View File

@ -75,6 +75,7 @@
*/
struct atmel_hlcdc {
struct regmap *regmap;
struct clk *lvds_pll_clk;
struct clk *periph_clk;
struct clk *sys_clk;
struct clk *slow_clk;