static int gp_ext_rtc_set_alarm_int(unsigned int enable)
{
	int ret = 0;
	if(!gp_ext_rtc_info){
		return (-EPERM);
	}
	if(enable == 1){
		ret = s35390a_set_alarm(1, 0, &gp_ext_rtc_info->rtc_alarm);
	}else{
		ret = s35390a_set_alarm_int(0);
	}
	if(ret != SP_OK)
		ret = -(EIO);
	
	return ret;
}
static int gp_ext_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
{
	int ret = 0;
	DEBUG0("[%s]: Enter !\n", __FUNCTION__);	
	if(!gp_ext_rtc_info){
		return (-EPERM);
	}
		
	if(alrm->time.tm_year >= 1900)	
		alrm->time.tm_year -= 1900;

	if(alrm->time.tm_year < 100)	/*Base on 2000*/
		return (-EPERM);

	alrm->time.tm_mon += 1;	/*upper layer:0~11; s35390a: 1~12*/
	
	spin_lock_irq(&gp_ext_rtc_info->lock);
	ret = s35390a_set_alarm(alrm->enabled, alrm->pending, &alrm->time);	
	if(ret != SP_OK){
		spin_unlock_irq(&gp_ext_rtc_info->lock);  
		return (-EIO);
	}

	/*Backup to gp_ext_rtc_info*/
	gp_ext_rtc_info->rtc_alarm.tm_year = alrm->time.tm_year;
	gp_ext_rtc_info->rtc_alarm.tm_mon = alrm->time.tm_mon;
	gp_ext_rtc_info->rtc_alarm.tm_mday = alrm->time.tm_mday;
	gp_ext_rtc_info->rtc_alarm.tm_wday = alrm->time.tm_wday;
	gp_ext_rtc_info->rtc_alarm.tm_hour = alrm->time.tm_hour;
	gp_ext_rtc_info->rtc_alarm.tm_min = alrm->time.tm_min;
	gp_ext_rtc_info->rtc_alarm.tm_sec = alrm->time.tm_sec;
	
	spin_unlock_irq(&gp_ext_rtc_info->lock);  
	
	return ret;
}
Exemple #3
0
static int s35390a_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
{
	return s35390a_set_alarm(to_i2c_client(dev), alm);
}