Wolfgang Denk schrieb:
> Dear "Reinhard Meyer (-VC)",
> 
> In message <[email protected]> you wrote:
>> cmd_data.c codes the following:
> ...
>>                      rcode = rtc_get (&tm);
>>
>>                      if(!rcode) {
>>                              /* insert new date & time */
>>                              if (mk_date (argv[1], &tm) != 0) {
>>                                      puts ("## Bad date format\n");
>>                                      break;
>>                              }
>>                              /* and write to RTC */
>>                              rcode = rtc_set (&tm);
>>                              if(rcode)
>>                                      puts("## Set date failed\n");
>>                      } else {
>>                              puts("## Get date failed\n");
>>                      }
> ...
>> Now I have implemented rtc_get() such that it returns an error code
>> when the time is corrupt/has never been set.
> 
> It is considered kind of "normal" that a RTC may return "corrupt"
> data. This is not an error, as it will be fixed when setting the date.
> An error condition is something that really makes the RTC unusable,
> like non-functioning communication on the I2C bus (if your RTC is
> connected to that), or reading a Low Voltage error status from the RTC
> status register, etc.
> 
>> However the "if(!rcode)" then prevents the time to be set!
> 
> Well, if you cannot eliably communicate with the RTC when reading,
> there is little sense trying to write to it - on contrary, this might
> even be dangerous.
> 
>> Is that intentional and rtc_get() should never return an error ??
>> Or is it an oversight, and a patch would be welcome ?
> 
> The behaviour is intentional, but rtc_get() can of course return
> error codes - only your expectation when this is the case is
> different from mine.
>
Dear Wolfgang,

of course that depends on what is considered an error.

As well as there is a difference between read error and file not found,
there well might be a difference in clock nonfunctional and time invalid...

But alas, I will make rtc_get not return an error and zero out the tm
structure instead when the driver KNOWS the date is not correct.

And btw. a low voltage status error from the clock does not necessaryly
mean the clock cannot be set again, that status (and thats exactly what
I intended to return) just could mean that the backup voltage was too low
during a system unpowered time to guarantee a proper date but since
(in our case) the backup power comes from a GoldCap a new set of the
clock would heal that status.

And if the clock really would be defective
                                /* and write to RTC */
                                rcode = rtc_set (&tm);
                                if(rcode)
                                        puts("## Set date failed\n");
would still give a proper error message!

Reinhard

<<attachment: reinhard_meyer.vcf>>

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to