[U-Boot] [RFC 0/2] Generic PMIC driver
Stefano Babic
sbabic at denx.de
Tue Sep 20 16:08:57 CEST 2011
On 09/20/2011 02:38 PM, Lukasz Majewski wrote:
>> 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.
Agree, we must not use malloc.
>
>>> 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.
Yes, of course - but if we improve our code, this is not a drawback ;-)
Do not miss the RTC inside the PMIC (drivers/rtc/mc13783-rtc.c)
> As fair as I looked into the code, only iMX power_init methods need
> to be fixed.
This depends on the board code. There are 6 boards using the PMIC, plus
the RTC driver. For this reason and to avoid to change all boards, maybe
it is not bad to have a compatibility way.
>
>>> 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 :-).
Nothing against checking. We can also
>
>>> 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).
Agree.
>> 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:
>
> }
There is probably a drawback, that is you must link code you do not need
(for example, a board has no I2C at all, but we call and link i2c_write
or another i2 function. The same if a board has only SPI. But I wait for
your proposal !
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
More information about the U-Boot
mailing list