rtc: pcf8563: Make century compatible with Linux
PATCH 1/1 rtc: pcf8563: Make century compatible with Linux
This driver uses the century bit of this RTC in the opposite way Linux does.
PATCH 1/1 rtc: pcf8563: Make century compatible with Linux
Quoted 46 lines · Beno?t Th?baudeau
This driver uses the century bit of this RTC in the opposite way Linux does.
From Linux'srtc-pcf8563.c:
/*
* The meaning ofMO_Cbit varies by the chip type.
* From PCF8563 datasheet: this bit is toggled when the years
* register overflows from 99 to 00
* 0 indicates the century is 20xx
* 1 indicates the century is 19xx
* From RTC8564 datasheet: this bit indicates change of
* century. When the year digit data overflows from 99 to 00,
* this bit is set. By presetting it to 0 while still in the
* 20th century, it will be set in year 2000, ...
* There seems no reliable way to know how the system use this
* bit. So let's do it heuristically, assuming we are live in
* 1970...2069.
*/As U-Boot's PCF8563 driver does not say it is supposed to support the RTC8564,
make this driver compatible with Linux's by giving the opposite meaning to the
century bit.Signed-off-by Beno?t Th?baudeau <[email protected]>Cc Wolfgang Denk <[email protected]>--- .../drivers/rtc/pcf8563.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)(quoted diff) +0
-0
u-boot-66714b1/drivers/rtc/pcf8563.c
index 339e5f6..a028533 100644drivers/rtc/pcf8563.c +1
-1@@ -72,7 +72,7 @@ int rtc_get (struct rtc_time *tmp) tmp->tm_hour =bcd2bin (hour &0x3F ); tmp->tm_mday =bcd2bin (mday &0x3F ); tmp->tm_mon =bcd2bin (mon_cent &0x1F ); - tmp->tm_year =bcd2bin (year) + ((mon_cent &0x80 ) ?2000 :1900 ); + tmp->tm_year =bcd2bin (year) + ((mon_cent &0x80 ) ?1900 :2000 ); tmp->tm_wday =bcd2bin (wday &0x07 ); tmp->tm_yday =0 ; tmp->tm_isdst=0 ;
drivers/rtc/pcf8563.c int rtc_set (struct rtc_time *tmp) · line 100
Quoted 8 lines
drivers/rtc/pcf8563.c +1
-1@@ -94,7 +94,7 @@ int rtc_set (struct rtc_time *tmp)rtc_write (0x08 ,bin2bcd (tmp->tm_year %100 )); - century = (tmp->tm_year >=2000 ) ?0x80 :0 ; + century = (tmp->tm_year >=2000 ) ?0 :0x80 ;rtc_write (0x07 ,bin2bcd (tmp->tm_mon) | century);rtc_write (0x06 ,bin2bcd (tmp->tm_wday));
Ping?
Beno?t
PATCH 1/1 rtc: pcf8563: Make century compatible with Linux
Quoted 52 lines · Beno?t Th?baudeau
Quoted 51 lines · Beno?t Th?baudeau
This driver uses the century bit of this RTC in the opposite way Linux does.
From Linux'srtc-pcf8563.c:
/*
* The meaning ofMO_Cbit varies by the chip type.
* From PCF8563 datasheet: this bit is toggled when the years
* register overflows from 99 to 00
* 0 indicates the century is 20xx
* 1 indicates the century is 19xx
* From RTC8564 datasheet: this bit indicates change of
* century. When the year digit data overflows from 99 to 00,
* this bit is set. By presetting it to 0 while still in the
* 20th century, it will be set in year 2000, ...
* There seems no reliable way to know how the system use this
* bit. So let's do it heuristically, assuming we are live in
* 1970...2069.
*/As U-Boot's PCF8563 driver does not say it is supposed to support the
RTC8564,
make this driver compatible with Linux's by giving the opposite meaning to the
century bit.Signed-off-by Beno?t Th?baudeau <[email protected]>Cc Wolfgang Denk <[email protected]>--- .../drivers/rtc/pcf8563.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)(quoted diff) +0
-0
u-boot-66714b1/drivers/rtc/pcf8563.c
index 339e5f6..a028533 100644drivers/rtc/pcf8563.c +1
-1@@ -72,7 +72,7 @@ int rtc_get (struct rtc_time *tmp) tmp->tm_hour =bcd2bin (hour &0x3F ); tmp->tm_mday =bcd2bin (mday &0x3F ); tmp->tm_mon =bcd2bin (mon_cent &0x1F ); - tmp->tm_year =bcd2bin (year) + ((mon_cent &0x80 ) ?2000 : 1900); + tmp->tm_year =bcd2bin (year) + ((mon_cent &0x80 ) ?1900 :2000 ); tmp->tm_wday =bcd2bin (wday &0x07 );drivers/rtc/pcf8563.c +0
-0tmp->tm_yday =0 ; tmp->tm_isdst=0 ;@@ -94,7 +94,7 @@ int rtc_set (struct rtc_time *tmp)rtc_write (0x08 ,bin2bcd (tmp->tm_year %100 ));
Quoted 8 lines
drivers/rtc/pcf8563.c int rtc_set (struct rtc_time *tmp) · line 100
Quoted 6 lines
drivers/rtc/pcf8563.c +1
-1- century = (tmp->tm_year >=2000 ) ?0x80 :0 ; + century = (tmp->tm_year >=2000 ) ?0 :0x80 ;rtc_write (0x07 ,bin2bcd (tmp->tm_mon) | century);rtc_write (0x06 ,bin2bcd (tmp->tm_wday));Ping?
Can someone answer, please?
Best regards,
Beno?t
Wolfgang Denk
AppliedPATCH 1/1 rtc: pcf8563: Make century compatible with Linux
In reply to Benoît ThébaudeauDear Beno?t Th?baudeau,
Quoted 21 lines · In message <[email protected]> you…
This driver uses the century bit of this RTC in the opposite way Linux does> . From Linux's
rtc-pcf8563.c:
/*
* The meaning ofMO_Cbit varies by the chip type.
* From PCF8563 datasheet: this bit is toggled when the years
* register overflows from 99 to 00
* 0 indicates the century is 20xx
* 1 indicates the century is 19xx
* From RTC8564 datasheet: this bit indicates change of
* century. When the year digit data overflows from 99 to 00,
* this bit is set. By presetting it to 0 while still in the
* 20th century, it will be set in year 2000, ...
* There seems no reliable way to know how the system use this
* bit. So let's do it heuristically, assuming we are live in
* 1970...2069.
*/As U-Boot's PCF8563 driver does not say it is supposed to support the RTC85> 64, make this driver compatible with Linux's by giving the opposite meaning to > the century bit.
Quoted 5 lines
Signed-off-by Beno?t Th?baudeau <[email protected]>Cc Wolfgang Denk <[email protected]>--- .../drivers/rtc/pcf8563.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
Signature · 6 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Shakespeare's Law of Prototyping: (Hamlet III, iv, 156-160)
O, throw away the worser part of it,
And live the purer with the other half.