Re: Work plan on ad2s90

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

 



Hi Jonathan,

thanks a lot for the detailed explanation. As I was browsing the
Documentation/devicetree/bindings/iio dir, I realized that ad2s1200,
which is already in the main tree, doesn't have a binding
documentation (nor any of the resolver drivers at staging). Should I
write a documentation for ad2s90 or just add the of_device_id section
in the driver's code? Also, if it should be written, it has to go
under Documentation/devicetree/bindings/staging/iio/resolver, right?

Matheus.

On Sun, Oct 28, 2018 at 11:12 AM Jonathan Cameron
<jic23@xxxxxxxxxxxxxxxxxxxxx> wrote:
>
> On Fri, 26 Oct 2018 03:35:34 -0300
> Victor Colombo <victorcolombo@xxxxxxxxx> wrote:
>
> > Hi Jonathan,
> >
> > Thank you for the insights! We have sent a patch set addressing the points
> > you brought up, except the device tree one.
> >
> > We didn't quite get what needs to be done on the device tree. Do you have
> > some pointers to help us with that?
> Sure.
>
> Take a look at driver that has a table of type
> struct of_device_id.
>
> These ID's are very similar to the spi_device_id table that is already there
> in the driver, just used to describe in the devices presence in device tree
> tables.  For examples of those look in arch/arm/boot/dts/
>
> Now except for a somewhat nasty hack in the spi and i2c subsystems the
> intent is that we actually have 3 common ways of describing the presence
> and connectivity of a device on a bus that cannot be enumerated (buses
> like USB where you can query what is there don't need this magic - mostly.. :)
>
> 1) struct spi_device_id - original method used to instantiate a device from a
>    description provided by a 'board_file'.  Examples that are still in tree
>    include arch/arm/mach-pxa/stargate2.c which includes:
>
> static struct spi_board_info spi_board_info[] __initdata = {
>         {
>                 .modalias = "lis3l02dq",
>                 .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
>                 .bus_num = 1,
>                 .chip_select = 0,
>                 .controller_data = &staccel_chip_info,
>                 .irq = PXA_GPIO_TO_IRQ(96),
>         }, {
>                 .modalias = "cc2420",
>                 .max_speed_hz = 6500000,
>                 .bus_num = 3,
>                 .chip_select = 0,
>                 .controller_data = &cc2420_info,
>         },
> };
> ..
>         spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
> ..
>
> The problem was that we had a very rapid growth in the number of board files
> which was becoming totally unmanageable.  There were lots of subtle variations
> in how things were done and it was a complete mess.
> Linus (and others) threw up their hands in horror and said this needed sorting.
> As a lot of embedded platforms had few discoverable busses, a description had
> to come from somewhere.  Devicetree is about moving that description out of
> the kernel source and standardising it.
>
> 2) Devicetree bindings.  These are documented in Documentation/devicetree/bindings/
> and the uses can be found in arch/arm/boot/dts/
> They actually do a very similar job to the above board files, but in a format that
> is purely descriptive, not a random mixture of descriptive structures and code.
> From a practical point of view the other change was that they are always supposed
> to be given in the form manufacturer,partnumber rather than simply the part number
> you see above.  This is due to the fact we were starting to see naming clashes
> across manufacturers.
>
> Now the 'hack' that I think is sometimes regretted now, but was very useful at
> the time, is that for spi and i2c there is some glue logic that, having failed
> to match against a specfic devicetree binding provided by of_device_id, it
> falls back to stripping off the naming before the comma and trying to match
> against the version in spi_device_id.    Whilst this works, it gets rid of
> that naming clash prevention that we got from the devicetree ID.  As such
> there are never ending plans to get rid of spi_device_id entirely.  Not sure
> it'll ever actually happen, but we certainly want to prepare for it!
>
> 3) ACPI.  This is the approach used on nearly all x86 machines and arm servers.
> It's kind of like devicetree in the sense that the description is separate
> from the code (no board files), but with some nasty corners such as the DSDT
> table which provides this information actually containing code and using a
> complex parser to handle all the weird corners.
> For ACPI ids, the formats are only 8 characters consisting of a manufacturer
> ID and a hex number that identifies the part.   As got pointed out in a
> different thread there are numerous ACPI IDs that don't obey the naming
> laid out in the spec.  Generally we just support the ones seen in the wild
> for a particular part.   There are various ways of providing a DSDT table
> other than getting it from a bios (which most people can't change - sadly
> only a few manufacturers use an open source (ish) BIOS like EDK2) but they
> are all meant for testing only, not for production systems.
>
> For this device, it's unlikely to turn up on an
> ACPI platform in the near future, so we don't need the ACPI binding.
> The devicetree binding however is the most likely way the OS will discover
> the device is there so that one should definitely be on our list before
> we move it out of staging.
>
> Jonathan
>
> >
> > Best,
> > Victor
> >
> > Em ter, 23 de out de 2018 às 06:45, Jonathan Cameron <
> > jic23@xxxxxxxxxxxxxxxxxxxxx> escreveu:
> >
> > > On Fri, 19 Oct 2018 23:49:06 -0300
> > > Matheus Tavares Bernardino <matheus.bernardino@xxxxxx> wrote:
> > >
> > > > Hello everyone.
> > > Hi Matheus.
> > > >
> > > > I'm looking at the code and datasheet of ad2s90, trying to understand
> > > > what is needed to move it to the main tree. I and my study group
> > > > intend to work on it.
> > >
> > > Great,
> > >
> > > >
> > > > I do not understand all the necessary steps yet, but I will present
> > > > here some brief items for discussion. I'd like to ask if I'm on the
> > > > right track. All feedback will be much appreciated.
> > > >
> > > > Some of the things that I think need to be done:
> > > > - The IIO_CHAN_INFO_SCALE information mask is not set yet
> > > Good point, that should be possible to establish for a resolver.
> > >
> > > > - The read_raw function does not return the error code returned by
> > > > spi_read on failure
> > > Good spot (I missed that one at first glance ;)
> > >
> > > > - There is no channel for velocity yet
> > >
> > > I'm fairly sure that's because the device doesn't allow you to read that
> > > via the serial bus.  There is an analog velocity outlook so you could
> > > read it via an ADC and do the appropriate chaining of IIO devices
> > > to provide that in this driver, but I wouldn't necessarily suggest doing
> > > that without some hardware to test it.
> > >
> > > > - There are two minor codestyle corrections to be made
> > > > - Maybe it's possible to change the bit operations at the read_raw for
> > > > a bitops.h function call
> > > Not really.  It is a weird form of shifted endian conversion, so you
> > > 'could' do it that way and in theory make it a single shift in once case
> > > and swap and shift in the other.  Probably not worth it though.
> > >
> > > a few additions.
> > > * Devicetree support with standard devicetree id table.
> > >
> > > * The spi setup at the end of probe occurs 'after' the device is ready
> > > for use.  A definite race condition that needs fixing.
> > >
> > > * Some pointless variable initial assignments that are always overwritten.
> > >
> > > >
> > > > Best regards,
> > > > Matheus
> > >
> > > Thanks,
> > >
> > > Jonathan
> > >
>




[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