On Wed, 04 Jul 2018, Matthias Brugger wrote: > > > On 03/07/18 09:11, Lee Jones wrote: > > On Mon, 25 Jun 2018, Matthias Brugger wrote: > >> On 30/04/18 12:18, Lee Jones wrote: > >>> On Fri, 27 Apr 2018, matthias.bgg@xxxxxxxxxx wrote: > >>> > >>>> From: Matthias Brugger <mbrugger@xxxxxxxx> > >>>> > >>>> The MMSYS subsystem includes clocks and drm components. > >>>> This patch adds a MFD device to probe both drivers from the same > >>>> device tree compatible. > >>>> > >>>> Signed-off-by: Matthias Brugger <mbrugger@xxxxxxxx> > >>>> --- > >>>> drivers/mfd/Kconfig | 9 ++++++ > >>>> drivers/mfd/Makefile | 2 ++ > >>>> drivers/mfd/mtk-mmsys.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ > >>>> 3 files changed, 90 insertions(+) > >>>> create mode 100644 drivers/mfd/mtk-mmsys.c > >>>> > >>>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > >>>> index b860eb5aa194..d23a3b9a2c58 100644 > >>>> --- a/drivers/mfd/Kconfig > >>>> +++ b/drivers/mfd/Kconfig > >>>> @@ -378,6 +378,15 @@ config MFD_MC13XXX_I2C > >>>> help > >>>> Select this if your MC13xxx is connected via an I2C bus. > >>>> > >>>> +config MFD_MEDIATEK_MMSYS > >>>> + tristate "Mediatek MMSYS interface" > >>>> + select MFD_CORE > >>>> + select REGMAP_MMIO > >>>> + help > >>>> + Select this if you have a MMSYS subsystem in your SoC. The > >>>> + MMSYS subsystem has at least a clock driver part and some > >>>> + DRM components. > >>>> + > >>>> config MFD_MXS_LRADC > >>>> tristate "Freescale i.MX23/i.MX28 LRADC" > >>>> depends on ARCH_MXS || COMPILE_TEST > >>>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > >>>> index d9d2cf0d32ef..b96118bd68d9 100644 > >>>> --- a/drivers/mfd/Makefile > >>>> +++ b/drivers/mfd/Makefile > >>>> @@ -98,6 +98,8 @@ obj-$(CONFIG_MFD_MC13XXX) += mc13xxx-core.o > >>>> obj-$(CONFIG_MFD_MC13XXX_SPI) += mc13xxx-spi.o > >>>> obj-$(CONFIG_MFD_MC13XXX_I2C) += mc13xxx-i2c.o > >>>> > >>>> +obj-$(CONFIG_MFD_MEDIATEK_MMSYS) += mtk-mmsys.o > >>>> + > >>>> obj-$(CONFIG_MFD_CORE) += mfd-core.o > >>>> > >>>> obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o > >>>> diff --git a/drivers/mfd/mtk-mmsys.c b/drivers/mfd/mtk-mmsys.c > >>>> new file mode 100644 > >>>> index 000000000000..c802343fb1c6 > >>>> --- /dev/null > >>>> +++ b/drivers/mfd/mtk-mmsys.c > >>>> @@ -0,0 +1,79 @@ > >>>> +// SPDX-License-Identifier: GPL-2.0+ > >>>> + > >>>> +/* > >>>> + * mtk-mmsys.c -- Mediatek MMSYS multi-function driver > >>>> + * > >>>> + * Copyright (c) 2018 Matthias Brugger <matthias.bgg@xxxxxxxxx> > >>>> + * > >>>> + * Author: Matthias Brugger <matthias.bgg@xxxxxxxxx> > >>>> + */ > >>>> + > >>>> +#include <linux/module.h> > >>>> +#include <linux/init.h> > >>>> +#include <linux/mfd/core.h> > >>>> +#include <linux/of.h> > >>>> +#include <linux/of_address.h> > >>>> +#include <linux/of_device.h> > >>>> +#include <linux/platform_device.h> > >>>> +#include <linux/regmap.h> > >>>> + > >>>> +enum { > >>>> + MMSYS_MT2701 = 1, > >>>> +}; > >>>> + > >>>> +static const struct mfd_cell mmsys_mt2701_devs[] = { > >>>> + { .name = "clk-mt2701-mm", }, > >>>> + { .name = "drm-mt2701-mm", }, > >>>> +}; > >>>> + > >>>> +static int mmsys_probe(struct platform_device *pdev) > >>>> +{ > >>>> + const struct mfd_cell *mmsys_cells; > >>>> + int nr_cells; > >>>> + long id; > >>>> + int ret; > >>>> + > >>>> + id = (long) of_device_get_match_data(&pdev->dev); > >>>> + if (!id) { > >>>> + dev_err(&pdev->dev, "of_device_get match_data() failed\n"); > >>>> + return -EINVAL; > >>>> + } > >>>> + > >>>> + switch (id) { > >>>> + case MMSYS_MT2701: > >>>> + mmsys_cells = mmsys_mt2701_devs; > >>>> + nr_cells = ARRAY_SIZE(mmsys_mt2701_devs); > >>>> + break; > >>>> + default: > >>>> + return -ENODEV; > >>>> + } > >>>> + > >>>> + ret = devm_mfd_add_devices(&pdev->dev, 0, mmsys_cells, nr_cells, > >>>> + NULL, 0, NULL); > >>>> + if (ret) { > >>>> + dev_err(&pdev->dev, "failed to add MFD devices %d\n", ret); > >>>> + return ret; > >>>> + } > >>>> + > >>>> + return 0; > >>>> +}; > >>> > >>> This driver is pretty pointless. It doesn't actually do anything. > >>> > >>> I think you just want to use "simple-mfd" instead. > >>> > >> > >> I think the problem is, that right now we have two drivers which use the same > >> devicetree binding, which are clk and drm driver. With a simple-mfd we would > >> need two compatibles, and this would break backwards compatibility. > > > > So what functionality does this driver provide you with that you do > > not have currently? > > > > I'm not sure if I get your question. Point is, that the MMSYS implementation for > mt8173 is broken, as it assumes that we can probe two drivers with the > mediatek,mt8173-mmsys compatible. Somehow it used to work, but from what I > understand it was a bug. So older devicetrees use just on mt8173-mmsys > compatible in ther DTB. Okay, that is what I was getting at. Thanks for the explanation. Do you have a datasheet I can look at? > I would like to keep backwards compatibility for the device tree, that's why I > was searching for a solution where we can probe two drivers and came up with > this mfd solution. > > So no new functionality, the clk driver provides the clock the drm components need. -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel