Hi Stefano,

Thanks for the reply.

> > 
> > In my opinion following issues needs discussion:
> > 1. In proposed 
> > int struct pmic *p, u32 *val) the val is returned by
> > pointer.
> 
> And the register to be read/write is embedded in the structure. For
> readness I will let it as separate parameter, but this is my personal
> taste.
For the first version of the pmic_core.c driver we might stick to this
proposition.


> Who is responsible to allocate the pmic structure ? It could be (there
> is no use case at the moment) that the pmic can be programmed before
> the relocation, when malloc() is not available.

In my opinion on the beginning we should focus on basic scenarios. 
Therefore the pmic struct is defined static at pmic_core.c as
follows:
static struct pmic pmic;

It is simple and efficient (since it's scope is limited to the
translation unit). We shall NOT use malloc() allocation for the first
version of the driver.

> > Now at fsl_pmic.c read value is returned by return clause.
> 
> Yes, we can change - of course, we need to update in one-shot also the
> boards already using a pmic.

Some work for the iMX target boards (e.g. MX51evk) need to be done to
comply with new framework.

As fair as I looked into the code, only iMX power_init methods need
to be fixed. 

> > I think, that passing pointer is a better approach,since errors
> > from i2c_read/spi_read can be caught in upper layers.
> 
> Using a pointer is the common way to implement a read routine, so I
> cannot argue. The side effect is that the calling code will be filled
> with the same and boring check:
> 
>       ret = pmic_read_reg(....);
>       if (ret) {
>               <...error handling, most case only print>
>       }
>       ret = pmic_read_reg(....);
>       if (ret) {
>               <...error handling, most case only print>
>       }
> 
I think, that error checking is always welcome :-).

> > 2. Since I haven't got a chance to test SPI part of the fsl_pmic.c
> > driver, I've focused mainly on I2C and place stubs for SPI.
> 
> Ok, right - this is a RFC. I will do no not review the details in your
> sample code, we are discussing the interface ;-).
> 
> For the "real" patch, I think we should merge this new code with
> fsl_pmic.c, too.
> 
In my opinion we shall reuse fsl_pmic.c code as much as possible 
(especially the SPI code - since I cannot test it). 

> > 
> > 3. Suggestions for struct pmic's additional fields for SPI are more
> > than welcome :-) 
> 
> We should have the parameters to setup a SPUI connection:
>       - SPI chipselect
>       - SPI frequency
>       - SPI mode
>       - SPI bus
> 

OK.


> > 4. Now the pmic_core.c file consist of
> >    #ifdef PMIC_I2C
> >    {Code for handling I2C}
> >    #else
> >    {Code for handling SPI}
> >    #endif
> > 
> > The same approach is used at fsl_pmic.c   
> > 
> > I'm wondering if this approach shouldn't be replaced with on-time
> > checking if SPI or I2C interface is available.
> > This check can be performed by:
> > 
> > struct pmic *p;
> > if (p->interface == PMIC_I2C) {
> > 
> > } else {
> > 
> > }
> > 
> > It would allow to remove obscure #ifdefs, but on the other hand it
> > will reduce execution speed of the driver.
> 
> Well, I do not worry about time execution. The time to execute the if
> branch is maybe negligible compared to the time to make a I2C/SPI
> transfer.
> 
> However, we increase the footprint, and surely only one mechanism is
> required on the same board.
> 
So I will try to use switch-case construct.

switch (p->interface) {
        case PMIC_I2C:

        case PMIC_SPI:

}


> Best regards,
> Stefano Babic
> 

-- 
Best regards,

Lukasz Majewski

Samsung Poland R&D Center
Platform Group
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to