Message ID | CY4PR04MB056777077970A6935BC6349BCBF69@CY4PR04MB0567.namprd04.prod.outlook.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mtd: onenand: samsung: Add support for device tree | expand |
On 23/04/2022 05:46, Jonathan Bakker wrote: > From: Tomasz Figa <tomasz.figa@gmail.com> > > 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@gmail.com> > Signed-off-by: Paweł Chmiel <pawel.mikolaj.chmiel@gmail.com> > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> > Signed-off-by: Jonathan Bakker <xc-racer2@live.ca> > --- > 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
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 (!IS_ERR(onenand->clk_bus)) + clk_prepare_enable(onenand->clk_bus); + err = onenand_scan(mtd, 1); if (err) return err; @@ -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; }