Building driver for Silicon Labs CP2200 Ethernet chip
Arnout Vandecappelle
arnout at mind.be
Wed Apr 30 12:08:41 UTC 2008
Chris Johns wrote:
> Arnout Vandecappelle wrote:
>> Chris Johns wrote:
>>> Many thanks for this driver. I have a couple of questions, one of
>>> which is more generic than specific to this driver.
>>>
>>> When does a user need to use CP220X_DO_SHUTDOWN ? I cannot see any
>>> documentation about this define.
>> Oops, indeed I forgot to document that.
>>
>> The board I was using had a hardware bug, due to which it was unable to
>> issue a reset of the CP2200 chip. Therefore, once the chip was shut
>> down it was impossible to start it again. I therefore had to remove the
>> shutdown from the driver.
>>
>> Probably a better option would be to record this in the driver
>> configuration, so it can be set from the BSP or from the
application... However, I discovered this problem only at the last
minute, so I didn't
>> implement it that way.
>>
>> Actually, perhaps it's best to simply remove the #ifdefs: on any
>> working board, they shouldn't be needed and shutdown should always be
>> used. Of course, I never tested that code...
>>
>
> Is the shutdown needed ?
It saves 200mW; this is significant.
> Can the device be reinitialised with the driver if it needs to be ?
Yes, on condition that the board and bsp provide the possibility to
trigger the reset pin (which is not the case on my board).
> If do I would leave the the defines and add a comment at the top to
OK.
Can you add this comment?
/*
* CP220X_DO_SHUTDOWN
*
* This option is inserted into the code because the board on which this
driver
* was developed does not allow a reset of the chip. Resetting is the
only way
* to exit from shutdown mode...
*
* Since this feature has never been tested, it remains disabled for
now. If you'd
* like to try it, enable this define in the header and make sure the bsp's
* cp220x_do_reset_hard() is properly implemented (pulling the nRST pin
low).
*
* Note: without this define, the driver powers the chip down to "memory
mode"
* when the interface is brought down. Exit from memory mode is possible by
* resetting PHY, which is done when the interface is brought up.
*/
>>> I see the driver has printf and being based on the cs8900 I am the
>>> source of this. Should we have these driver use printf or should they
>>> use printk now it exists ?
>>
>> I'm not sure what exactly the difference is between printf and printk,
>> except that printk can be called from interrupt context. Since none of
>> the prints are from interrupt context, and since with printk my terminal
>> tended to drop newlines, I went for printf... I'm sure these are not
>> good reasons :-)
>>
>
> I used printf because printk did not exist then. The reason is to
support a tiny RTEMS for small memory targets. On targets that support
printf the printk call should map to stdout.
Sounds like printk should be used then... I'm afraid I did use some
formatters which are not supported by printk, like %hhx, %*s, %<length>s.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286540
Mind Embedded Development (an Essensium division)
More information about the users
mailing list