]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mux: mmio: add generic regmap bitfield-based multiplexer
authorPankaj Bansal <pankaj.bansal@nxp.com>
Wed, 12 Jun 2019 08:53:00 +0000 (08:53 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2019 13:59:53 +0000 (15:59 +0200)
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: Pankaj Bansal <pankaj.bansal@nxp.com>
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mux/Kconfig
drivers/mux/mmio.c

index 7659d6c5f7180807ea4f8ef1f7a16bd170430679..e5c571fd232cc2f220d84e72339443c5176b272e 100644 (file)
@@ -46,14 +46,14 @@ config MUX_GPIO
          be called mux-gpio.
 
 config MUX_MMIO
-       tristate "MMIO register bitfield-controlled Multiplexer"
-       depends on (OF && MFD_SYSCON) || COMPILE_TEST
+       tristate "MMIO/Regmap register bitfield-controlled Multiplexer"
+       depends on OF || COMPILE_TEST
        help
-         MMIO register bitfield-controlled Multiplexer controller.
+         MMIO/Regmap register bitfield-controlled Multiplexer controller.
 
-         The driver builds multiplexer controllers for bitfields in a syscon
-         register. For N bit wide bitfields, there will be 2^N possible
-         multiplexer states.
+         The driver builds multiplexer controllers for bitfields in either
+         a syscon register or a driver regmap register. For N bit wide
+         bitfields, there will be 2^N possible multiplexer states.
 
          To compile the driver as a module, choose M here: the module will
          be called mux-mmio.
index 935ac44aa209e9f8753299f01edbc6476cd7d827..44a7a0e885b8dc0ab5b436ea6366a7a87a8ef59b 100644 (file)
@@ -28,6 +28,7 @@ static const struct mux_control_ops mux_mmio_ops = {
 
 static const struct of_device_id mux_mmio_dt_ids[] = {
        { .compatible = "mmio-mux", },
+       { .compatible = "reg-mux", },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, mux_mmio_dt_ids);
@@ -43,7 +44,10 @@ static int mux_mmio_probe(struct platform_device *pdev)
        int ret;
        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)) {
                ret = PTR_ERR(regmap);
                dev_err(dev, "failed to get regmap: %d\n", ret);