From: Boris Brezillon <boris.brezillon@collabora.com>
To: Qii Wang <qii.wang@mediatek.com>
Cc: devicetree@vger.kernel.org, srv_heupstream@mediatek.com,
bbrezillon@kernel.org, leilk.liu@mediatek.com,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
liguo.zhang@mediatek.com, linux-mediatek@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com,
linux-i3c@lists.infradead.org, xinping.qian@mediatek.com
Subject: Re: [PATCH 2/2] i3c: master: Add driver for MediaTek IP
Date: Tue, 4 Jun 2019 09:58:58 +0200 [thread overview]
Message-ID: <20190604095858.38ed9a28@collabora.com> (raw)
In-Reply-To: <1559533863-10292-3-git-send-email-qii.wang@mediatek.com>
On Mon, 3 Jun 2019 11:51:03 +0800
Qii Wang <qii.wang@mediatek.com> wrote:
> +static int mtk_i3c_master_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct mtk_i3c_master *master;
> + struct resource *res;
> + int ret, irqnr;
> +
> + master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
> + if (!master)
> + return -ENOMEM;
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "main");
> + master->regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->regs))
> + return PTR_ERR(master->regs);
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
> + master->dma_regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->dma_regs))
> + return PTR_ERR(master->dma_regs);
> +
> + irqnr = platform_get_irq(pdev, 0);
> + if (irqnr < 0)
> + return irqnr;
> +
> + ret = devm_request_irq(dev, irqnr, mtk_i3c_master_irq,
> + IRQF_TRIGGER_NONE, DRV_NAME, master);
> + if (ret < 0) {
> + dev_err(dev, "Request I3C IRQ %d fail\n", irqnr);
> + return ret;
> + }
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "clock-div",
> + &master->clk_src_div);
You say in one comment that this clock divider is fixed in HW but might
change on a per-SoC basis. If that's the case, you should get rid of
this clock-div prop and attach the divider to the compatible (using an
mtk_i3c_master_variant struct that contains a divider field).
> + if (ret < 0)
> + return -EINVAL;
> +
> + spin_lock_init(&master->xferqueue.lock);
> + INIT_LIST_HEAD(&master->xferqueue.list);
> +
> + if (dma_set_mask(dev, DMA_BIT_MASK(33))) {
> + dev_err(dev, "dma_set_mask return error.\n");
> + return -EINVAL;
> + }
> +
> + master->clk_main = devm_clk_get(dev, "main");
> + if (IS_ERR(master->clk_main)) {
> + dev_err(dev, "cannot get main clock\n");
> + return PTR_ERR(master->clk_main);
> + }
> + master->clk_dma = devm_clk_get(dev, "dma");
> + if (IS_ERR(master->clk_dma)) {
> + dev_err(dev, "cannot get dma clock\n");
> + return PTR_ERR(master->clk_dma);
> + }
> +
> + master->clk_arb = devm_clk_get_optional(dev, "arb");
> + if (IS_ERR(master->clk_arb))
> + return PTR_ERR(master->clk_arb);
> +
> + ret = mtk_i3c_master_clock_enable(master);
> + if (ret) {
> + dev_err(dev, "clock enable failed!\n");
> + return ret;
> + }
> +
> + master->dev = dev;
> + platform_set_drvdata(pdev, master);
> +
> + ret = i3c_master_register(&master->mas_ctrler, dev,
> + &mtk_i3c_master_ops, false);
> + if (ret) {
> + dev_err(dev, "Failed to add i3c bus to i3c core\n");
> + mtk_i3c_master_clock_disable(master);
> + return ret;
> + }
> +
> + return 0;
> +}
_______________________________________________
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Qii Wang <qii.wang@mediatek.com>
Cc: bbrezillon@kernel.org, devicetree@vger.kernel.org,
srv_heupstream@mediatek.com, leilk.liu@mediatek.com,
gregkh@linuxfoundation.org, xinping.qian@mediatek.com,
linux-kernel@vger.kernel.org, liguo.zhang@mediatek.com,
linux-mediatek@lists.infradead.org, matthias.bgg@gmail.com,
linux-i3c@lists.infradead.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] i3c: master: Add driver for MediaTek IP
Date: Tue, 4 Jun 2019 09:58:58 +0200 [thread overview]
Message-ID: <20190604095858.38ed9a28@collabora.com> (raw)
In-Reply-To: <1559533863-10292-3-git-send-email-qii.wang@mediatek.com>
On Mon, 3 Jun 2019 11:51:03 +0800
Qii Wang <qii.wang@mediatek.com> wrote:
> +static int mtk_i3c_master_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct mtk_i3c_master *master;
> + struct resource *res;
> + int ret, irqnr;
> +
> + master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
> + if (!master)
> + return -ENOMEM;
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "main");
> + master->regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->regs))
> + return PTR_ERR(master->regs);
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
> + master->dma_regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->dma_regs))
> + return PTR_ERR(master->dma_regs);
> +
> + irqnr = platform_get_irq(pdev, 0);
> + if (irqnr < 0)
> + return irqnr;
> +
> + ret = devm_request_irq(dev, irqnr, mtk_i3c_master_irq,
> + IRQF_TRIGGER_NONE, DRV_NAME, master);
> + if (ret < 0) {
> + dev_err(dev, "Request I3C IRQ %d fail\n", irqnr);
> + return ret;
> + }
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "clock-div",
> + &master->clk_src_div);
You say in one comment that this clock divider is fixed in HW but might
change on a per-SoC basis. If that's the case, you should get rid of
this clock-div prop and attach the divider to the compatible (using an
mtk_i3c_master_variant struct that contains a divider field).
> + if (ret < 0)
> + return -EINVAL;
> +
> + spin_lock_init(&master->xferqueue.lock);
> + INIT_LIST_HEAD(&master->xferqueue.list);
> +
> + if (dma_set_mask(dev, DMA_BIT_MASK(33))) {
> + dev_err(dev, "dma_set_mask return error.\n");
> + return -EINVAL;
> + }
> +
> + master->clk_main = devm_clk_get(dev, "main");
> + if (IS_ERR(master->clk_main)) {
> + dev_err(dev, "cannot get main clock\n");
> + return PTR_ERR(master->clk_main);
> + }
> + master->clk_dma = devm_clk_get(dev, "dma");
> + if (IS_ERR(master->clk_dma)) {
> + dev_err(dev, "cannot get dma clock\n");
> + return PTR_ERR(master->clk_dma);
> + }
> +
> + master->clk_arb = devm_clk_get_optional(dev, "arb");
> + if (IS_ERR(master->clk_arb))
> + return PTR_ERR(master->clk_arb);
> +
> + ret = mtk_i3c_master_clock_enable(master);
> + if (ret) {
> + dev_err(dev, "clock enable failed!\n");
> + return ret;
> + }
> +
> + master->dev = dev;
> + platform_set_drvdata(pdev, master);
> +
> + ret = i3c_master_register(&master->mas_ctrler, dev,
> + &mtk_i3c_master_ops, false);
> + if (ret) {
> + dev_err(dev, "Failed to add i3c bus to i3c core\n");
> + mtk_i3c_master_clock_disable(master);
> + return ret;
> + }
> +
> + return 0;
> +}
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Qii Wang <qii.wang@mediatek.com>
Cc: devicetree@vger.kernel.org, srv_heupstream@mediatek.com,
bbrezillon@kernel.org, leilk.liu@mediatek.com,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
liguo.zhang@mediatek.com, linux-mediatek@lists.infradead.org,
linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com,
linux-i3c@lists.infradead.org, xinping.qian@mediatek.com
Subject: Re: [PATCH 2/2] i3c: master: Add driver for MediaTek IP
Date: Tue, 4 Jun 2019 09:58:58 +0200 [thread overview]
Message-ID: <20190604095858.38ed9a28@collabora.com> (raw)
In-Reply-To: <1559533863-10292-3-git-send-email-qii.wang@mediatek.com>
On Mon, 3 Jun 2019 11:51:03 +0800
Qii Wang <qii.wang@mediatek.com> wrote:
> +static int mtk_i3c_master_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct mtk_i3c_master *master;
> + struct resource *res;
> + int ret, irqnr;
> +
> + master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
> + if (!master)
> + return -ENOMEM;
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "main");
> + master->regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->regs))
> + return PTR_ERR(master->regs);
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
> + master->dma_regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->dma_regs))
> + return PTR_ERR(master->dma_regs);
> +
> + irqnr = platform_get_irq(pdev, 0);
> + if (irqnr < 0)
> + return irqnr;
> +
> + ret = devm_request_irq(dev, irqnr, mtk_i3c_master_irq,
> + IRQF_TRIGGER_NONE, DRV_NAME, master);
> + if (ret < 0) {
> + dev_err(dev, "Request I3C IRQ %d fail\n", irqnr);
> + return ret;
> + }
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "clock-div",
> + &master->clk_src_div);
You say in one comment that this clock divider is fixed in HW but might
change on a per-SoC basis. If that's the case, you should get rid of
this clock-div prop and attach the divider to the compatible (using an
mtk_i3c_master_variant struct that contains a divider field).
> + if (ret < 0)
> + return -EINVAL;
> +
> + spin_lock_init(&master->xferqueue.lock);
> + INIT_LIST_HEAD(&master->xferqueue.list);
> +
> + if (dma_set_mask(dev, DMA_BIT_MASK(33))) {
> + dev_err(dev, "dma_set_mask return error.\n");
> + return -EINVAL;
> + }
> +
> + master->clk_main = devm_clk_get(dev, "main");
> + if (IS_ERR(master->clk_main)) {
> + dev_err(dev, "cannot get main clock\n");
> + return PTR_ERR(master->clk_main);
> + }
> + master->clk_dma = devm_clk_get(dev, "dma");
> + if (IS_ERR(master->clk_dma)) {
> + dev_err(dev, "cannot get dma clock\n");
> + return PTR_ERR(master->clk_dma);
> + }
> +
> + master->clk_arb = devm_clk_get_optional(dev, "arb");
> + if (IS_ERR(master->clk_arb))
> + return PTR_ERR(master->clk_arb);
> +
> + ret = mtk_i3c_master_clock_enable(master);
> + if (ret) {
> + dev_err(dev, "clock enable failed!\n");
> + return ret;
> + }
> +
> + master->dev = dev;
> + platform_set_drvdata(pdev, master);
> +
> + ret = i3c_master_register(&master->mas_ctrler, dev,
> + &mtk_i3c_master_ops, false);
> + if (ret) {
> + dev_err(dev, "Failed to add i3c bus to i3c core\n");
> + mtk_i3c_master_clock_disable(master);
> + return ret;
> + }
> +
> + return 0;
> +}
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Qii Wang <qii.wang@mediatek.com>
Cc: <bbrezillon@kernel.org>,
devicetree@vger.kernel.org, srv_heupstream@mediatek.com,
leilk.liu@mediatek.com, gregkh@linuxfoundation.org,
xinping.qian@mediatek.com, linux-kernel@vger.kernel.org,
liguo.zhang@mediatek.com, linux-mediatek@lists.infradead.org,
matthias.bgg@gmail.com, linux-i3c@lists.infradead.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/2] i3c: master: Add driver for MediaTek IP
Date: Tue, 4 Jun 2019 09:58:58 +0200 [thread overview]
Message-ID: <20190604095858.38ed9a28@collabora.com> (raw)
In-Reply-To: <1559533863-10292-3-git-send-email-qii.wang@mediatek.com>
On Mon, 3 Jun 2019 11:51:03 +0800
Qii Wang <qii.wang@mediatek.com> wrote:
> +static int mtk_i3c_master_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct mtk_i3c_master *master;
> + struct resource *res;
> + int ret, irqnr;
> +
> + master = devm_kzalloc(dev, sizeof(*master), GFP_KERNEL);
> + if (!master)
> + return -ENOMEM;
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "main");
> + master->regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->regs))
> + return PTR_ERR(master->regs);
> +
> + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
> + master->dma_regs = devm_ioremap_resource(dev, res);
> + if (IS_ERR(master->dma_regs))
> + return PTR_ERR(master->dma_regs);
> +
> + irqnr = platform_get_irq(pdev, 0);
> + if (irqnr < 0)
> + return irqnr;
> +
> + ret = devm_request_irq(dev, irqnr, mtk_i3c_master_irq,
> + IRQF_TRIGGER_NONE, DRV_NAME, master);
> + if (ret < 0) {
> + dev_err(dev, "Request I3C IRQ %d fail\n", irqnr);
> + return ret;
> + }
> +
> + ret = of_property_read_u32(pdev->dev.of_node, "clock-div",
> + &master->clk_src_div);
You say in one comment that this clock divider is fixed in HW but might
change on a per-SoC basis. If that's the case, you should get rid of
this clock-div prop and attach the divider to the compatible (using an
mtk_i3c_master_variant struct that contains a divider field).
> + if (ret < 0)
> + return -EINVAL;
> +
> + spin_lock_init(&master->xferqueue.lock);
> + INIT_LIST_HEAD(&master->xferqueue.list);
> +
> + if (dma_set_mask(dev, DMA_BIT_MASK(33))) {
> + dev_err(dev, "dma_set_mask return error.\n");
> + return -EINVAL;
> + }
> +
> + master->clk_main = devm_clk_get(dev, "main");
> + if (IS_ERR(master->clk_main)) {
> + dev_err(dev, "cannot get main clock\n");
> + return PTR_ERR(master->clk_main);
> + }
> + master->clk_dma = devm_clk_get(dev, "dma");
> + if (IS_ERR(master->clk_dma)) {
> + dev_err(dev, "cannot get dma clock\n");
> + return PTR_ERR(master->clk_dma);
> + }
> +
> + master->clk_arb = devm_clk_get_optional(dev, "arb");
> + if (IS_ERR(master->clk_arb))
> + return PTR_ERR(master->clk_arb);
> +
> + ret = mtk_i3c_master_clock_enable(master);
> + if (ret) {
> + dev_err(dev, "clock enable failed!\n");
> + return ret;
> + }
> +
> + master->dev = dev;
> + platform_set_drvdata(pdev, master);
> +
> + ret = i3c_master_register(&master->mas_ctrler, dev,
> + &mtk_i3c_master_ops, false);
> + if (ret) {
> + dev_err(dev, "Failed to add i3c bus to i3c core\n");
> + mtk_i3c_master_clock_disable(master);
> + return ret;
> + }
> +
> + return 0;
> +}
next prev parent reply other threads:[~2019-06-04 8:55 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 3:51 [PATCH 0/2] Add MediaTek I3C master controller driver Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` [PATCH 1/2] dt-bindings: i3c: Document MediaTek I3C master bindings Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` [PATCH 2/2] i3c: master: Add driver for MediaTek IP Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-03 3:51 ` Qii Wang
2019-06-04 7:58 ` Boris Brezillon [this message]
2019-06-04 7:58 ` Boris Brezillon
2019-06-04 7:58 ` Boris Brezillon
2019-06-04 7:58 ` Boris Brezillon
2019-06-04 12:26 ` Qii Wang
2019-06-04 12:26 ` Qii Wang
2019-06-04 12:26 ` Qii Wang
2019-06-04 12:26 ` Qii Wang
2019-06-11 12:25 ` Qii Wang
2019-06-11 12:25 ` Qii Wang
2019-06-11 12:25 ` Qii Wang
2019-06-11 12:25 ` Qii Wang
2019-06-11 12:28 ` Boris Brezillon
2019-06-11 12:28 ` Boris Brezillon
2019-06-11 12:28 ` Boris Brezillon
2019-06-11 12:28 ` Boris Brezillon
2019-06-13 2:29 ` Qii Wang
2019-06-13 2:29 ` Qii Wang
2019-06-13 2:29 ` Qii Wang
2019-06-13 2:29 ` Qii Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190604095858.38ed9a28@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=bbrezillon@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=leilk.liu@mediatek.com \
--cc=liguo.zhang@mediatek.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=qii.wang@mediatek.com \
--cc=srv_heupstream@mediatek.com \
--cc=xinping.qian@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.