Re: [RFC PATCH 1/1] iio: dac: add support for ltc2688

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 11, 2021 at 4:30 PM Sa, Nuno <Nuno.Sa@xxxxxxxxxx> wrote:
> > From: Andy Shevchenko <andy.shevchenko@xxxxxxxxx>
> > Sent: Thursday, November 11, 2021 2:49 PM
> > On Thu, Nov 11, 2021 at 1:01 PM Nuno Sá <nuno.sa@xxxxxxxxxx>
> > wrote:

...

> > > +static const int ltc2688_off_tbl[LTC2688_SPAN_RANGE_MAX] = {
> > > +       [LTC2688_SPAN_RANGE_0V_5V] = 0,
> > > +       [LTC2688_SPAN_RANGE_M10V_10V] = -32768,
> > > +       [LTC2688_SPAN_RANGE_M15V_15V] = -32768,
> >
> > > +       [LTC2688_SPAN_RANGE_0V_10V] = 0,
> > > +       [LTC2688_SPAN_RANGE_M5V_5V] = -32768
> >
> > + Comma
> >
> > Isn't it more natural to move them up by two lines?
>
> There's a reason for this to be ordered like this.

I understand that for enum, but here it doesn't make any sense to me
since you are addressing them by indices.

>  Anyways,
> as I said in the cover letter I will probably remove all of these things
> used to validate scale + offset pairs. I think is a bit overdone...

> > > +};

...

> > > +                       if (off == ltc2688_off_tbl[i]) {
> > > +                               break;
> >
> > > +                       } else if (i < LTC2688_SPAN_RANGE_0V_10V) {
> >
> > Redundant 'else'.
>
> Why? Note that I really (where possible) want to make a distinction
> between the errors...

while () {
  if ()
    ...
    break;
  } else {
    ...
  }
}

Isn't it obvious?

Same with

if ()
  return
else
  ...

> > > +                       }

...

> > > +               ret = fwnode_property_read_u32(child, "reg", &reg);
> > > +               if (ret) {
> > > +                       fwnode_handle_put(child);
> >
> > > +                       return dev_err_probe(&st->spi->dev, ret,
> > > +                                            "Failed to get reg property\n");
> >
> > One line.
> >
> > > +               } else if (reg >= LTC2688_DAC_CHANNELS) {
> >
> > Redundant 'else'.
>
> Do you mean?
>
> if (ret)
>  ...
>
> if (reg >= LTC2688_DAC_CHANNELS)
>  ....

Yes.

> > > +               }

...

> > > +               chan->overrange = fwnode_property_read_bool(child,
> > > +                                                           "adi,overrange");
> >
> > One line?
>
> It will pass the 80 col limit. AFAIR, Jonathan prefers to keep it when it
> does not hurt readability...

I believe it will increase readability being located on one line.

...

> > > +       if (gpio) {
> > > +               usleep_range(1000, 1200);
> > > +               /* bring device out of reset */
> > > +               gpiod_set_value_cansleep(gpio, 0);
> >
> > > +       } else {
> >
> > I'm wondering why 'else'? Can't it be both? Why not?
>
> Well, if we have the reset pin, then we reset using it. If there's
> no pin, we use the SW reset. It's a common pattern that we already use
> for example in the ADIS devices.

Perhaps a comment in the code is needed.

> > > +               ret = regmap_update_bits(st->regmap,
> > LTC2688_CMD_CONFIG_REG,
> > > +                                        LTC2688_CONFIG_RST,
> > > +                                        LTC2688_CONFIG_RST);
> > > +               if (ret < 0)
> > > +                       return ret;
> > > +       }

...

> > > +       /* ignoring the no op command */
> > > +       .max_register = U16_MAX - 1
> >
> > Really?! Have you ever considered what burden you bring with this to
> > one who accidentally or on purpose tries to dump registers via
> > debugfs?
>
> Ups, this is completely wrong!! It should be U8_MAX...

Ah, that explains!

...

> > > +       st->regmap = devm_regmap_init(&spi->dev, NULL, st,
> > &ltc2688_regmap_config);
> >
> > I'm wondering why it's not a regmap SPI?
>
> The problem is on the read side... In the first transfer we write the command/register
> to read, then we need to release the CS pin so that the device executes the command,
> and only then we read the data. AFAIK, the regmap spi implementation won't work like
> this. I think CS is kept asserted the whole time...

I believe it's configurable, no? Like the cs_change flag somewhere.
Can you double check?

-- 
With Best Regards,
Andy Shevchenko




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux