From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Todor Tomov <todor.tomov@linaro.org>
Cc: wsa@the-dreams.de, linux-i2c@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/4] i2c: Add Qualcomm Camera Control Interface driver
Date: Mon, 16 Oct 2017 15:58:11 -0700 [thread overview]
Message-ID: <20171016225811.GR1165@minitux> (raw)
In-Reply-To: <1978f9ea-5b9d-fb16-7758-4b263c787b7f@linaro.org>
On Thu 12 Oct 07:47 PDT 2017, Todor Tomov wrote:
> Hi Bjorn,
>
> Thank you for the review. There are a lot of important suggestions.
>
> On 6.10.2017 08:20, Bjorn Andersson wrote:
> > On Mon 02 Oct 07:13 PDT 2017, Todor Tomov wrote:
> >> diff --git a/drivers/i2c/busses/i2c-qcom-cci.c b/drivers/i2c/busses/i2c-qcom-cci.c
> > [..]
> >> +#define NUM_MASTERS 1
> >
> > So you will only register one of the masters?
>
> Yes, in this version of the driver - only one. Probably I will extend the driver later
> to support also the second master on 8096.
>
That's perfectly fine, as long as there's a plan of how to add the
second master that is backwards compatible (DT wise).
[..]
> >> +static const struct resources res_v1_0_8 = {
> >> + .clock = { "camss_top_ahb",
> >> + "cci_ahb",
> >> + "camss_ahb",
> >> + "cci" },
> >
> > The code consuming this will read until NULL, so please add terminator.
>
> The fields which are not explicitely initialized are set to NULL, right?
> I may add a comment that a space in the array for the terminator must be left.
>
Right, I didn't think of this list being a statically sized array, then
there are implicit NULLs here.
> > It happens to work as the first clock_rate is 0 in both cases.
>
> I think that it works because it reaches the terminator.
>
Adding a NULL after the list will make this more obvious and continue to
work as intended.
[..]
> >> + if (len > cci->adap.quirks->max_read_len)
> >> + return -EOPNOTSUPP;
> >> +
> >
> > The core already checks each entry against the max length quirks.
> >
> > But are these actually the max amount of data you can read in one
> > operation? Generally one has to drain the fifo but the actual transfers
> > can be larger...
>
> Yes, the maximum data which you can read in one operation. And this is
> the meaning of quirks->max_read_len, right? Not the i2c transfer size.
> So the check is correct but I'll remove it as it is already done in
> i2c_check_for_quirks(), as you have pointed out.
>
AFAICT you're doing it correct. I just find it surprising that these
limits are so low (in the hardware) - in the qup driver people
complained that the max is 255.
[..]
> >> + ret = devm_request_irq(dev, cci->irq, cci_isr,
> >> + IRQF_TRIGGER_RISING, cci->irq_name, cci);
> >> + if (ret < 0) {
> >> + dev_err(dev, "request_irq failed, ret: %d\n", ret);
> >> + return ret;
> >> + }
> >> +
> >> + disable_irq(cci->irq);
> >
> > The time between devm_request_irq() and disable_irq() is still long
> > enough for cci_isr() to be called, before irq_complete is initialized.
> >
> > Don't request irqs until you're ready to receive the interrupts.
>
> This makes sense however at this point the clocks to the device are
> still not enabled, doesn't this avoid any problems?
>
You're probably right, but unless it's too much hassle it's better to
be on the safe side - if nothing else for the times when someone
copy-paste your code for a new driver that doesn't follow this premise.
> >
> >> +
> >> + /* Clocks */
> >> +
> >> + cci->nclocks = 0;
> >> + while (res->clock[cci->nclocks])
> >> + cci->nclocks++;
> >> +
> >> + cci->clock = devm_kzalloc(dev, cci->nclocks *
> >> + sizeof(*cci->clock), GFP_KERNEL);
> >
> > This can max be CCI_RES_MAX (i.e. 6) so just make the array fixed size
> > and skip the kzalloc().
>
> Does it matter?
>
At the cost of making the list statically sized in the struct you can
drop this call and error check. But other than that, no.
> >
> >> + if (!cci->clock)
> >> + return -ENOMEM;
> >> +
Regards,
Bjorn
next prev parent reply other threads:[~2017-10-16 22:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-02 14:13 [PATCH 0/4] Qualcomm Camera Control Interface driver Todor Tomov
2017-10-02 14:13 ` [PATCH 1/4] dt-bindings: media: Binding document for " Todor Tomov
2017-10-06 5:29 ` Bjorn Andersson
2017-10-12 14:50 ` Todor Tomov
2017-10-02 14:13 ` [PATCH 2/4] i2c: Add " Todor Tomov
2017-10-06 5:20 ` Bjorn Andersson
2017-10-12 14:47 ` Todor Tomov
2017-10-16 22:58 ` Bjorn Andersson [this message]
2017-10-02 14:13 ` [PATCH 3/4] MAINTAINERS: " Todor Tomov
2017-10-02 14:13 ` [PATCH 4/4] arm64: dts: qcom: Add Camera Control Interface support Todor Tomov
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=20171016225811.GR1165@minitux \
--to=bjorn.andersson@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=todor.tomov@linaro.org \
--cc=wsa@the-dreams.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).