On Thu, 2022-01-13 at 12:47 -0600, Pierre-Louis Bossart wrote: > > +static int mtk_adsp_mbox_probe(struct platform_device *pdev) > > +{ > > + struct device *dev = &pdev->dev; > > + struct mtk_adsp_mbox_priv *priv; > > + const struct mtk_adsp_mbox_cfg *cfg; > > + struct mbox_controller *mbox; > > + int ret, irq; > > + > > + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > > + if (!priv) > > + return -ENOMEM; > > + > > + mbox = &priv->mbox; > > + mbox->dev = dev; > > + mbox->ops = &mtk_adsp_mbox_chan_ops; > > + mbox->txdone_irq = false; > > + mbox->txdone_poll = true; > > + mbox->of_xlate = mtk_adsp_mbox_xlate; > > + mbox->num_chans = 1; > > + mbox->chans = devm_kzalloc(dev, sizeof(*mbox->chans), > > GFP_KERNEL); > > + if (!mbox->chans) > > + return -ENOMEM; > > + > > + priv->va_mboxreg = devm_platform_ioremap_resource(pdev, 0); > > + if (IS_ERR(priv->va_mboxreg)) > > + return PTR_ERR(priv->va_mboxreg); > > + > > + priv->cfg = of_device_get_match_data(dev); > > question: is any error handling needed here? some drivers do, others > don't, but that function can return NULL. > Hi Pierre, Thanks for your question. I prefer my previous version which check NULL from of_device_get_match_data. I will revert this part in the next version. Thanks. > > + > > + irq = platform_get_irq(pdev, 0); > > + if (irq < 0) > > + return irq; > > + > > + ret = devm_request_threaded_irq(dev, irq, mtk_adsp_mbox_irq, > > + mtk_adsp_mbox_isr, > > IRQF_TRIGGER_NONE, > > + dev_name(dev), mbox->chans); > > + if (ret < 0) > > + return ret; > > + > > + platform_set_drvdata(pdev, priv); > > + > > + return devm_mbox_controller_register(dev, &priv->mbox); > > +} > >