Messages in this thread Patch in this message | | | From | Liu Ying <> | Subject | [PATCH] mfd: Add Freescale i.MX8qxp Control and Status Registers (CSR) module driver | Date | Sun, 14 Aug 2022 16:04:57 +0800 |
| |
Freescale i.MX8qxp Control and Status Registers (CSR) module is a system controller. It represents a set of miscellaneous registers of a specific subsystem. It may provide control and/or status report interfaces to a mix of standalone hardware devices within that subsystem.
The CSR module in i.MX8qm/qxp SoCs is a child node of a simple power-managed bus(i.MX8qxp pixel link MSI bus). To propagate power management operations of the CSR module's child devices to that simple power-managed bus, add a dedicated driver for the CSR module. Also, the driver would populate the CSR module's child devices.
Signed-off-by: Liu Ying <victor.liu@nxp.com> --- The Freescale i.MX8qxp CSR DT bindings is at Documentation/devicetree/bindings/mfd/fsl,imx8qxp-csr.yaml.
drivers/mfd/Kconfig | 10 +++++++ drivers/mfd/Makefile | 1 + drivers/mfd/fsl-imx8qxp-csr.c | 53 +++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 drivers/mfd/fsl-imx8qxp-csr.c
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 3b59456f5545..45af4a98c02f 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -499,6 +499,16 @@ config MFD_MX25_TSADC i.MX25 processors. They consist of a conversion queue for general purpose ADC and a queue for Touchscreens. +config MFD_MX8QXP_CSR + tristate "Freescale i.MX8qxp Control and Status Registers (CSR) Module" + depends on (ARCH_MXC && OF) || COMPILE_TEST + help + Enable support for Freescale i.MX8qm/qxp Control and Status Registers + (CSR) Module. As a system controller, CSR represents a set of + miscellaneous registers of a specific subsystem. It may provide + control and/or status report interfaces to a mix of standalone + hardware devices within that subsystem. + config MFD_HI6421_PMIC tristate "HiSilicon Hi6421 PMU/Codec IC" depends on OF diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 858cacf659d6..c792abe24906 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -113,6 +113,7 @@ obj-$(CONFIG_MFD_TWL4030_AUDIO) += twl4030-audio.o obj-$(CONFIG_TWL6040_CORE) += twl6040.o obj-$(CONFIG_MFD_MX25_TSADC) += fsl-imx25-tsadc.o +obj-$(CONFIG_MFD_MX8QXP_CSR) += fsl-imx8qxp-csr.o obj-$(CONFIG_MFD_MC13XXX) += mc13xxx-core.o obj-$(CONFIG_MFD_MC13XXX_SPI) += mc13xxx-spi.o diff --git a/drivers/mfd/fsl-imx8qxp-csr.c b/drivers/mfd/fsl-imx8qxp-csr.c new file mode 100644 index 000000000000..3915d3d6ca65 --- /dev/null +++ b/drivers/mfd/fsl-imx8qxp-csr.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/* + * Copyright 2022 NXP + */ + +#include <linux/module.h> +#include <linux/of_platform.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> + +static int imx8qxp_csr_probe(struct platform_device *pdev) +{ + int ret; + + pm_runtime_enable(&pdev->dev); + + ret = devm_of_platform_populate(&pdev->dev); + if (ret < 0) { + dev_err(&pdev->dev, "failed to populate sub-devices: %d\n", ret); + pm_runtime_disable(&pdev->dev); + } + + return ret; +} + +static int imx8qxp_csr_remove(struct platform_device *pdev) +{ + pm_runtime_disable(&pdev->dev); + return 0; +} + +static const struct of_device_id imx8qxp_csr_of_match[] = { + { .compatible = "fsl,imx8qxp-mipi-lvds-csr", }, + { .compatible = "fsl,imx8qm-lvds-csr", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, imx8qxp_csr_of_match); + +static struct platform_driver imx8qxp_csr_driver = { + .probe = imx8qxp_csr_probe, + .remove = imx8qxp_csr_remove, + .driver = { + .name = "imx8qxp-csr", + .of_match_table = imx8qxp_csr_of_match, + }, +}; + +module_platform_driver(imx8qxp_csr_driver); + +MODULE_DESCRIPTION("Freescale i.MX8qm/qxp Control and Status Registers Module Driver"); +MODULE_AUTHOR("Liu Ying <victor.liu@nxp.com>"); +MODULE_LICENSE("GPL v2"); -- 2.37.1
| |