On Sat, 2019-12-14 at 22:24 -0600, Samuel Holland wrote: > Allwinner sun6i, sun8i, sun9i, and sun50i SoCs contain a hardware > message box used for communication between the ARM CPUs and the ARISC > management coprocessor. This mailbox contains 8 unidirectional > 4-message FIFOs. > > Add a driver for it, so it can be used for SCPI or other communication > protocols. > > Signed-off-by: Samuel Holland <samuel@xxxxxxxxxxxx> > --- > drivers/mailbox/Kconfig | 9 + > drivers/mailbox/Makefile | 2 + > drivers/mailbox/sun6i-msgbox.c | 332 +++++++++++++++++++++++++++++++++ > 3 files changed, 343 insertions(+) > create mode 100644 drivers/mailbox/sun6i-msgbox.c > [...] > diff --git a/drivers/mailbox/sun6i-msgbox.c b/drivers/mailbox/sun6i-msgbox.c > new file mode 100644 > index 000000000000..7a41e732457c > --- /dev/null > +++ b/drivers/mailbox/sun6i-msgbox.c > @@ -0,0 +1,332 @@ [...] > +static int sun6i_msgbox_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct mbox_chan *chans; > + struct reset_control *reset; > + struct resource *res; > + struct sun6i_msgbox *mbox; > + int i, ret; > + > + mbox = devm_kzalloc(dev, sizeof(*mbox), GFP_KERNEL); > + if (!mbox) > + return -ENOMEM; > + > + chans = devm_kcalloc(dev, NUM_CHANS, sizeof(*chans), GFP_KERNEL); > + if (!chans) > + return -ENOMEM; > + > + for (i = 0; i < NUM_CHANS; ++i) > + chans[i].con_priv = mbox; > + > + mbox->clk = devm_clk_get(dev, NULL); > + if (IS_ERR(mbox->clk)) { > + ret = PTR_ERR(mbox->clk); > + dev_err(dev, "Failed to get clock: %d\n", ret); > + return ret; > + } > + > + ret = clk_prepare_enable(mbox->clk); > + if (ret) { > + dev_err(dev, "Failed to enable clock: %d\n", ret); > + return ret; > + } > + > + reset = devm_reset_control_get(dev, NULL); Please use devm_reset_control_get_exclusive() explicitly. regards Philipp