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; }
static int s35390a_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) { return s35390a_set_alarm(to_i2c_client(dev), alm); }