Re: [V7, 2/2] media: i2c: dw9768: Add DW9768 VCM driver

Andy Shevchenko
2020-06-09T11:15:03Z

On Tue, Jun 09, 2020 at 11:45:41AM +0800, Dongchun Zhu wrote:
> On Mon, 2020-06-08 at 16:27 +0300, Andy Shevchenko wrote:
> > On Sat, Jun 06, 2020 at 02:19:18PM +0800, Dongchun Zhu wrote:
> > > On Fri, 2020-06-05 at 15:46 +0300, Andy Shevchenko wrote:
> > > > On Fri, Jun 05, 2020 at 06:54:12PM +0800, Dongchun Zhu wrote:

...

> > > > > +#define DW9768_AAC_TIME_DEFAULT 0x20
> > > >
> > > > Hex? Why not decimal?
> > > >
> > >
> > > There is one optional property 'dongwoon,aac-timing' defined in DT.
> > > I don't know whether you have noticed that.
> > >
> > > 'DW9768_AAC_TIME_DEFAULT' is the value set to AACT[5:0] register.
> > > I thought the Hex unit should be proper as it is directly written to the
> > > Hex register.
> >
> > I see. I would rather put it like (BIT(6) / 2) to show explicitly that we
> > choose half of the resolution.
> >
>
> I knew your idea.
> '(BIT(6) / 2)' may somewhat show the meaning of 'median of the total
> range of AACT[5:0]'.
>
> But this value is still very obscure relative to '0x20'.
> As I thought that simple is the best, especially for kernel upstream
> patch.

Okay, let's wait for maintainers to speak up.

...

> > > > > + for ( ; val >= 0; val -= DW9768_MOVE_STEPS) {
> > > > > + ret = dw9768_set_dac(dw9768, val);
> > > > > + if (ret) {
> > > > > + dev_err(&client->dev, "I2C write fail: %d", ret);
> > > > > + return ret;
> > > > > + }
> > > > > + usleep_range(move_delay_us, move_delay_us + 1000);
> > > > > + }
> > > >
> > > >
> > > > It will look more naturally in the multiplier kind of value.
> > > >
> > > > unsigned int steps = DIV_ROUND_UP(...);
> > > >
> > > > while (steps--) {
> > > > ...(..., steps * ..._MOVE_STEPS);
> > > > ...
> > > > }
> > > >
> > > > but double check arithmetics.
> > >
> > > The current coding style is actually updated with reference to your
> > > previous comments on DW9768 v3:
> > > https://patchwork.linuxtv.org/patch/61856/
> >
> > I understand, but can you consider to go further and see if the proposal works?
> >
>
> In fact, your suggestion is something like one another method to set DAC
> value to actuator.
> It is like there may be several solutions to a question.
>
> Yes. I just tried the new method and it works as expected.
> u32 steps = DIV_ROUND_UP(dw9768->focus->val, DW9768_MOVE_STEPS);
> while (steps--) {
> ret = dw9768_set_dac(dw9768, steps * DW9768_MOVE_STEPS);
> if (ret)
> return ret;
> usleep_range(move_delay_us, move_delay_us + 1000);
> }
>
> But from my perspective, I may prefer to the original method.
> As here what we really care is the DAC value,
> 'dw9768_set_dac(dw9768, val)' seems more simple.

OK.

--
With Best Regards,
Andy Shevchenko