hw/ds1338: Fix conversion between 12 hours and 24 hours modes.

The proper mapping between 24 hours and 12 hours modes is:
0       12 AM
1-11    1-11 AM
12      12 PM
13-23   1-11 PM
Fix code accordingly.

Signed-off-by: Antoine Mathys <barsamin@gmail.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Antoine Mathys 2013-02-28 18:23:12 +00:00 committed by Peter Maydell
parent a4bcea3d67
commit 5c78d6a84b

View File

@ -59,8 +59,8 @@ static void capture_current_time(DS1338State *s)
s->nvram[1] = to_bcd(now.tm_min); s->nvram[1] = to_bcd(now.tm_min);
if (s->nvram[2] & HOURS_12) { if (s->nvram[2] & HOURS_12) {
int tmp = now.tm_hour; int tmp = now.tm_hour;
if (tmp == 0) { if (tmp % 12 == 0) {
tmp = 24; tmp += 12;
} }
if (tmp <= 12) { if (tmp <= 12) {
s->nvram[2] = HOURS_12 | to_bcd(tmp); s->nvram[2] = HOURS_12 | to_bcd(tmp);
@ -145,8 +145,8 @@ static int ds1338_send(I2CSlave *i2c, uint8_t data)
if (data & HOURS_PM) { if (data & HOURS_PM) {
tmp += 12; tmp += 12;
} }
if (tmp == 24) { if (tmp % 12 == 0) {
tmp = 0; tmp -= 12;
} }
now.tm_hour = tmp; now.tm_hour = tmp;
} else { } else {