On 23/04/2022 05:46, Jonathan Bakker wrote: > From: Tomasz Figa <tomasz.figa@xxxxxxxxx> > > This patch adds basic handling of controller bus clock to make sure that > in device probe it is enabled and device can operate correctly. The > clock is optional and driver behavior is identical as before this patch > if not provided. > > Signed-off-by: Tomasz Figa <tomasz.figa@xxxxxxxxx> > Signed-off-by: Paweł Chmiel <pawel.mikolaj.chmiel@xxxxxxxxx> > Reviewed-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> > Signed-off-by: Jonathan Bakker <xc-racer2@xxxxxxx> > --- > drivers/mtd/nand/onenand/onenand_samsung.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/mtd/nand/onenand/onenand_samsung.c b/drivers/mtd/nand/onenand/onenand_samsung.c > index a3ef4add865a..62014f8d27b6 100644 > --- a/drivers/mtd/nand/onenand/onenand_samsung.c > +++ b/drivers/mtd/nand/onenand/onenand_samsung.c > @@ -11,6 +11,7 @@ > * S5PC110: use DMA > */ > > +#include <linux/clk.h> > #include <linux/module.h> > #include <linux/platform_device.h> > #include <linux/sched.h> > @@ -122,6 +123,7 @@ enum soc_type { > struct s3c_onenand { > struct mtd_info *mtd; > struct platform_device *pdev; > + struct clk *clk_bus; > enum soc_type type; > void __iomem *ctrl_base; > void __iomem *chip_base; > @@ -914,6 +916,10 @@ static int s3c_onenand_probe(struct platform_device *pdev) > } > } > > + onenand->clk_bus = devm_clk_get(&pdev->dev, "bus"); If it is optional, use optional clk API. > + if (!IS_ERR(onenand->clk_bus)) > + clk_prepare_enable(onenand->clk_bus); > + > err = onenand_scan(mtd, 1); > if (err) > return err; Error paths not updated. Also what about other clocks? I propose you should take over the authorship of the patch because it will be more changes. > @@ -945,6 +951,8 @@ static int s3c_onenand_remove(struct platform_device *pdev) > struct mtd_info *mtd = platform_get_drvdata(pdev); > > onenand_release(mtd); > + if (!IS_ERR(onenand->clk_bus)) > + clk_disable_unprepare(onenand->clk_bus); > > return 0; > } Best regards, Krzysztof