Commit 8ecfaca7 authored by Pankaj Bansal's avatar Pankaj Bansal Committed by Greg Kroah-Hartman

mux: mmio: add generic regmap bitfield-based multiplexer

Generic register bitfield-based multiplexer that controls the multiplexer
producer defined under a parent node.
The driver corresponding to parent node provides register read/write
capabilities.
Signed-off-by: default avatarPankaj Bansal <pankaj.bansal@nxp.com>
Signed-off-by: default avatarPeter Rosin <peda@axentia.se>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ae1c6b9a
...@@ -46,14 +46,14 @@ config MUX_GPIO ...@@ -46,14 +46,14 @@ config MUX_GPIO
be called mux-gpio. be called mux-gpio.
config MUX_MMIO config MUX_MMIO
tristate "MMIO register bitfield-controlled Multiplexer" tristate "MMIO/Regmap register bitfield-controlled Multiplexer"
depends on (OF && MFD_SYSCON) || COMPILE_TEST depends on OF || COMPILE_TEST
help help
MMIO register bitfield-controlled Multiplexer controller. MMIO/Regmap register bitfield-controlled Multiplexer controller.
The driver builds multiplexer controllers for bitfields in a syscon The driver builds multiplexer controllers for bitfields in either
register. For N bit wide bitfields, there will be 2^N possible a syscon register or a driver regmap register. For N bit wide
multiplexer states. bitfields, there will be 2^N possible multiplexer states.
To compile the driver as a module, choose M here: the module will To compile the driver as a module, choose M here: the module will
be called mux-mmio. be called mux-mmio.
......
...@@ -28,6 +28,7 @@ static const struct mux_control_ops mux_mmio_ops = { ...@@ -28,6 +28,7 @@ static const struct mux_control_ops mux_mmio_ops = {
static const struct of_device_id mux_mmio_dt_ids[] = { static const struct of_device_id mux_mmio_dt_ids[] = {
{ .compatible = "mmio-mux", }, { .compatible = "mmio-mux", },
{ .compatible = "reg-mux", },
{ /* sentinel */ } { /* sentinel */ }
}; };
MODULE_DEVICE_TABLE(of, mux_mmio_dt_ids); MODULE_DEVICE_TABLE(of, mux_mmio_dt_ids);
...@@ -43,7 +44,10 @@ static int mux_mmio_probe(struct platform_device *pdev) ...@@ -43,7 +44,10 @@ static int mux_mmio_probe(struct platform_device *pdev)
int ret; int ret;
int i; int i;
regmap = syscon_node_to_regmap(np->parent); if (of_device_is_compatible(np, "mmio-mux"))
regmap = syscon_node_to_regmap(np->parent);
else
regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
if (IS_ERR(regmap)) { if (IS_ERR(regmap)) {
ret = PTR_ERR(regmap); ret = PTR_ERR(regmap);
dev_err(dev, "failed to get regmap: %d\n", ret); dev_err(dev, "failed to get regmap: %d\n", ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment