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>
This commit is contained in:
parent
ae1c6b9aa3
commit
8ecfaca792
@ -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 = {
|
|||||||
|
|
||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user