On Fri, 2020-06-05 at 19:43 +0200, Maxime Ripard wrote: > Hi Nicolas, > > On Thu, Jun 04, 2020 at 07:26:07PM +0200, Nicolas Saenz Julienne wrote: > > On Wed, 2020-05-27 at 17:47 +0200, Maxime Ripard wrote: > > > The HDMI block has a block that controls clocks and reset signals to the > > > HDMI0 and HDMI1 controllers. > > > > Why not having two separate drivers? > > They share the same address space, so it wouldn't really make sense to > split it into two drivers and an MFD, especially when the clock/reset > association is fairly common. Fair enough. > > > > Let's expose that through a clock driver implementing a clock and reset > > > provider. > > > > > > Cc: Michael Turquette <mturquette@xxxxxxxxxxxx> > > > Cc: Stephen Boyd <sboyd@xxxxxxxxxx> > > > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > > > Cc: linux-clk@xxxxxxxxxxxxxxx > > > Cc: devicetree@xxxxxxxxxxxxxxx > > > Reviewed-by: Stephen Boyd <sboyd@xxxxxxxxxx> > > > Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx> > > > --- > > > drivers/clk/bcm/Kconfig | 11 +++- > > > drivers/clk/bcm/Makefile | 1 +- > > > drivers/clk/bcm/clk-bcm2711-dvp.c | 127 +++++++++++++++++++++++++++++++- > > > 3 files changed, 139 insertions(+) > > > create mode 100644 drivers/clk/bcm/clk-bcm2711-dvp.c > > > > > > diff --git a/drivers/clk/bcm/Kconfig b/drivers/clk/bcm/Kconfig > > > index 8c83977a7dc4..784f12c72365 100644 > > > --- a/drivers/clk/bcm/Kconfig > > > +++ b/drivers/clk/bcm/Kconfig > > > @@ -1,4 +1,15 @@ > > > # SPDX-License-Identifier: GPL-2.0-only > > > + > > > +config CLK_BCM2711_DVP > > > + tristate "Broadcom BCM2711 DVP support" > > > + depends on ARCH_BCM2835 ||COMPILE_TEST > > > + depends on COMMON_CLK > > > + default ARCH_BCM2835 > > > + select RESET_SIMPLE > > > + help > > > + Enable common clock framework support for the Broadcom BCM2711 > > > + DVP Controller. > > > + > > > config CLK_BCM2835 > > > bool "Broadcom BCM2835 clock support" > > > depends on ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST > > > diff --git a/drivers/clk/bcm/Makefile b/drivers/clk/bcm/Makefile > > > index 0070ddf6cdd2..2c1349062147 100644 > > > --- a/drivers/clk/bcm/Makefile > > > +++ b/drivers/clk/bcm/Makefile > > > @@ -6,6 +6,7 @@ obj-$(CONFIG_CLK_BCM_KONA) += clk-kona-setup.o > > > obj-$(CONFIG_CLK_BCM_KONA) += clk-bcm281xx.o > > > obj-$(CONFIG_CLK_BCM_KONA) += clk-bcm21664.o > > > obj-$(CONFIG_COMMON_CLK_IPROC) += clk-iproc-armpll.o clk-iproc-pll.o > > > clk-iproc-asiu.o > > > +obj-$(CONFIG_CLK_BCM2835) += clk-bcm2711-dvp.o > > > obj-$(CONFIG_CLK_BCM2835) += clk-bcm2835.o > > > obj-$(CONFIG_CLK_BCM2835) += clk-bcm2835-aux.o > > > obj-$(CONFIG_CLK_RASPBERRYPI) += clk-raspberrypi.o > > > diff --git a/drivers/clk/bcm/clk-bcm2711-dvp.c b/drivers/clk/bcm/clk- > > > bcm2711- > > > dvp.c > > > new file mode 100644 > > > index 000000000000..c1c4b5857d32 > > > --- /dev/null > > > +++ b/drivers/clk/bcm/clk-bcm2711-dvp.c > > > @@ -0,0 +1,127 @@ > > > +// SPDX-License-Identifier: GPL-2.0-or-later > > > +// Copyright 2020 Cerno > > > + > > > +#include <linux/clk-provider.h> > > > +#include <linux/module.h> > > > +#include <linux/platform_device.h> > > > +#include <linux/reset-controller.h> > > > +#include <linux/reset/reset-simple.h> > > > + > > > +#define DVP_HT_RPI_SW_INIT 0x04 > > > +#define DVP_HT_RPI_MISC_CONFIG 0x08 > > > + > > > +#define NR_CLOCKS 2 > > > +#define NR_RESETS 6 > > > + > > > +struct clk_dvp { > > > + struct clk_hw_onecell_data *data; > > > + struct reset_simple_data reset; > > > +}; > > > + > > > +static const struct clk_parent_data clk_dvp_parent = { > > > + .index = 0, > > > +}; > > > + > > > +static int clk_dvp_probe(struct platform_device *pdev) > > > +{ > > > + struct clk_hw_onecell_data *data; > > > + struct resource *res; > > > + struct clk_dvp *dvp; > > > + void __iomem *base; > > > + int ret; > > > + > > > + dvp = devm_kzalloc(&pdev->dev, sizeof(*dvp), GFP_KERNEL); > > > + if (!dvp) > > > + return -ENOMEM; > > > + platform_set_drvdata(pdev, dvp); > > > + > > > + dvp->data = devm_kzalloc(&pdev->dev, > > > + struct_size(dvp->data, hws, NR_CLOCKS), > > > + GFP_KERNEL); > > > + if (!dvp->data) > > > + return -ENOMEM; > > > + data = dvp->data; > > > + > > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > + base = devm_ioremap_resource(&pdev->dev, res); > > > > I think the cool function to use these days is > > devm_platform_get_and_ioremap_resource(). > > i'll change it, thanks! Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@xxxxxxx> Regards, Nicolas
Attachment:
signature.asc
Description: This is a digitally signed message part