Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Pankaj Bansal <pankaj.bansal@nxp.com>
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Pankaj Bansal and committed by
Greg Kroah-Hartman
8ecfaca7 ae1c6b9a

+11 -7
+6 -6
drivers/mux/Kconfig
··· 46 46 be called mux-gpio. 47 47 48 48 config MUX_MMIO 49 - tristate "MMIO register bitfield-controlled Multiplexer" 50 - depends on (OF && MFD_SYSCON) || COMPILE_TEST 49 + tristate "MMIO/Regmap register bitfield-controlled Multiplexer" 50 + depends on OF || COMPILE_TEST 51 51 help 52 - MMIO register bitfield-controlled Multiplexer controller. 52 + MMIO/Regmap register bitfield-controlled Multiplexer controller. 53 53 54 - The driver builds multiplexer controllers for bitfields in a syscon 55 - register. For N bit wide bitfields, there will be 2^N possible 56 - multiplexer states. 54 + The driver builds multiplexer controllers for bitfields in either 55 + a syscon register or a driver regmap register. For N bit wide 56 + bitfields, there will be 2^N possible multiplexer states. 57 57 58 58 To compile the driver as a module, choose M here: the module will 59 59 be called mux-mmio.
+5 -1
drivers/mux/mmio.c
··· 28 28 29 29 static const struct of_device_id mux_mmio_dt_ids[] = { 30 30 { .compatible = "mmio-mux", }, 31 + { .compatible = "reg-mux", }, 31 32 { /* sentinel */ } 32 33 }; 33 34 MODULE_DEVICE_TABLE(of, mux_mmio_dt_ids); ··· 44 43 int ret; 45 44 int i; 46 45 47 - regmap = syscon_node_to_regmap(np->parent); 46 + if (of_device_is_compatible(np, "mmio-mux")) 47 + regmap = syscon_node_to_regmap(np->parent); 48 + else 49 + regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV); 48 50 if (IS_ERR(regmap)) { 49 51 ret = PTR_ERR(regmap); 50 52 dev_err(dev, "failed to get regmap: %d\n", ret);