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;
	}
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;
}