static int handle_rpc_call(struct msm_rpc_server *server, struct rpc_request_hdr *req, unsigned len) { struct timespec ts, tv; switch (req->procedure) { case RPC_TIME_REMOTE_MTOA_NULL: return 0; case RPC_TIME_TOD_SET_APPS_BASES: { struct rpc_time_tod_set_apps_bases_args *args; args = (struct rpc_time_tod_set_apps_bases_args *)(req + 1); args->tick = be32_to_cpu(args->tick); args->stamp = be64_to_cpu(args->stamp); printk(KERN_INFO "RPC_TIME_TOD_SET_APPS_BASES:\n" "\ttick = %d\n" "\tstamp = %lld\n", args->tick, args->stamp); getnstimeofday(&ts); msmrtc_updateatsuspend(&ts); rtc_hctosys(); getnstimeofday(&tv); /* Update the alarm information with the new time info. */ alarm_update_timedelta(ts, tv); #ifdef CONFIG_KYOCERA_ORIGINAL_FEATURE if(!get_usertime_setting()) { add_usertime_offset(&ts, &tv); } #endif /* CONFIG_KYOCERA_ORIGINAL_FEATURE */ return 0; } case RPC_TIME_GET_APPS_USER_TIME: return read_rtc0_time(server, req, len); default: return -ENODEV; } }
static void process_cb_request(void *buffer) { struct rtc_cb_recv *rtc_cb = buffer; struct timespec ts, tv; rtc_cb->client_cb_id = be32_to_cpu(rtc_cb->client_cb_id); rtc_cb->event = be32_to_cpu(rtc_cb->event); rtc_cb->cb_info_ptr = be32_to_cpu(rtc_cb->cb_info_ptr); if (rtc_cb->event == EVENT_TOD_CHANGE) { /* A TOD update has been received from the Modem */ rtc_cb->cb_info_data.tod_update.tick = be32_to_cpu(rtc_cb->cb_info_data.tod_update.tick); rtc_cb->cb_info_data.tod_update.stamp = be64_to_cpu(rtc_cb->cb_info_data.tod_update.stamp); rtc_cb->cb_info_data.tod_update.freq = be32_to_cpu(rtc_cb->cb_info_data.tod_update.freq); pr_info("RPC CALL -- TOD TIME UPDATE: ttick = %d\n" "stamp=%lld, freq = %d\n", rtc_cb->cb_info_data.tod_update.tick, rtc_cb->cb_info_data.tod_update.stamp, rtc_cb->cb_info_data.tod_update.freq); getnstimeofday(&ts); msmrtc_updateatsuspend(&ts); rtc_hctosys(); getnstimeofday(&tv); /* Update the alarm information with the new time info. */ alarm_update_timedelta(ts, tv); #ifdef CONFIG_KYOCERA_ORIGINAL_FEATURE if(!get_usertime_setting()) { add_usertime_offset(&ts, &tv); } #endif /* CONFIG_KYOCERA_ORIGINAL_FEATURE */ } else pr_err("%s: Unknown event EVENT=%x\n", __func__, rtc_cb->event); }
static long usertime_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int rv = 0; int utime_flg = -1; switch (cmd) { case ANDROID_ALARM_SET_USRTIME_AUTO: if (copy_from_user(&utime_flg, (void __user *)arg, sizeof(utime_flg))) { rv = -EFAULT; goto err1; } set_usertime_setting(utime_flg); alarm_clear_pending(); printk("%s SET_USRTIME_AUTO[1:auto 0:manual] %d utimeflg:%d \n",__func__,get_usertime_setting(),utime_flg); break; default: rv = -EINVAL; goto err1; } err1: return rv; }