Esempio n. 1
0
static int max8998_rtc_i2c_set_time(struct i2c_client *client, struct rtc_time *tm)
{
	int ret;
	u8 regs[MAX8998_RTC_LEN + 1], temp_reg = 0;

#ifdef CONFIG_RTC_DRV_S3C
	tm->tm_year += 2000;
#else
	tm->tm_year += 1900;
#endif

	regs[MAX8998_REG_SECOND + 1] = bin2bcd(tm->tm_sec);
	regs[MAX8998_REG_MIN + 1] = bin2bcd(tm->tm_min);
	regs[MAX8998_REG_HOUR + 1] = bin2bcd(tm->tm_hour);
	regs[MAX8998_REG_WEEKDAY + 1] = bin2bcd(tm->tm_wday);
	regs[MAX8998_REG_DATE + 1] = bin2bcd(tm->tm_mday);
	regs[MAX8998_REG_MONTH + 1] = bin2bcd(tm->tm_mon + 1);
	regs[MAX8998_REG_YEAR0 + 1] = bin2bcd(tm->tm_year % 100);
	regs[MAX8998_REG_YEAR1 + 1] = bin2bcd((tm->tm_year / 100));

	do {
		ret = max8998_rtc_i2c_write(client, MAX8998_RTC_TIME_ADDR, regs, MAX8998_RTC_LEN + 1);
		max8998_rtc_i2c_read(client, MAX8998_RTC_TIME_ADDR, &temp_reg, 1);
		max8998_dbg("%s : 1st %x, 2nd %x\n", __func__, regs[MAX8998_REG_SECOND + 1], temp_reg);
	} while (regs[MAX8998_REG_SECOND + 1] > temp_reg);

	return ret;
}
static int max8998_rtc_i2c_set_time(struct i2c_client *client, struct rtc_time *tm)
{
        int ret;
        u8 regs[MAX8998_RTC_LEN + 1];

	tm->tm_year += 1900;

	regs[MAX8998_REG_SECOND + 1] = bin2bcd(tm->tm_sec);
	regs[MAX8998_REG_MIN + 1] = bin2bcd(tm->tm_min);
	regs[MAX8998_REG_HOUR + 1] = bin2bcd(tm->tm_hour);
	regs[MAX8998_REG_WEEKDAY + 1] = bin2bcd(tm->tm_wday);
	regs[MAX8998_REG_DATE + 1] = bin2bcd(tm->tm_mday);
	regs[MAX8998_REG_MONTH + 1] = bin2bcd(tm->tm_mon + 1);
	regs[MAX8998_REG_YEAR0 + 1] = bin2bcd(tm->tm_year % 100);
	regs[MAX8998_REG_YEAR1 + 1] = bin2bcd((tm->tm_year /100) );

        ret = max8998_rtc_i2c_write(client, MAX8998_RTC_TIME_ADDR,regs,MAX8998_RTC_LEN +1);

	return ret;
}