コード例 #1
0
/*
 * module init function
 */
static int __init hps_init(void)
{
    int r = 0;

    hps_warn("hps_init\n");

    //hps_cpu_init() must before hps_core_init()
    r = hps_cpu_init();
    if (r)
        hps_error("hps_cpu_init fail(%d)\n", r);

    r = hps_core_init();
    if (r)
        hps_error("hps_core_init fail(%d)\n", r);

    r = hps_procfs_init();
    if (r)
        hps_error("hps_procfs_init fail(%d)\n", r);

#ifdef CONFIG_HAS_EARLYSUSPEND
    register_early_suspend(&hps_ctxt.es_handler);
#endif //#ifdef CONFIG_HAS_EARLYSUSPEND

    r = platform_device_register(&hotplug_strategy_pdev);
    if (r)
        hps_error("platform_device_register fail(%d)\n", r);

    r = platform_driver_register(&hps_ctxt.pdrv);
    if (r)
        hps_error("platform_driver_register fail(%d)\n", r);

    hps_ctxt.init_state = INIT_STATE_DONE;

    return r;
}
コード例 #2
0
/*
 * init
 */
int hps_core_init(void)
{
	int r = 0;

	hps_warn("hps_core_init\n");
	if (hps_ctxt.periodical_by == HPS_PERIODICAL_BY_TIMER) {
		/*init timer */
		init_timer(&hps_ctxt.tmr_list);
		/*init_timer_deferrable(&hps_ctxt.tmr_list); */
		hps_ctxt.tmr_list.function = (void *)&_hps_timer_callback;
		hps_ctxt.tmr_list.data = (unsigned long)&hps_ctxt;
		hps_ctxt.tmr_list.expires = jiffies + msecs_to_jiffies(HPS_TIMER_INTERVAL_MS);
		add_timer(&hps_ctxt.tmr_list);
	} else if (hps_ctxt.periodical_by == HPS_PERIODICAL_BY_HR_TIMER) {
		ktime = ktime_set(0, MS_TO_NS(HPS_TIMER_INTERVAL_MS));
		/*init Hrtimer */
		hrtimer_init(&hps_ctxt.hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
		hps_ctxt.hr_timer.function = (void *)&_hps_timer_callback;
		hrtimer_start(&hps_ctxt.hr_timer, ktime, HRTIMER_MODE_REL);

	}
	/* init and start task */
	r = hps_task_start();
	if (r)
		hps_error("hps_task_start fail(%d)\n", r);

	return r;
}
コード例 #3
0
/*
 * module exit function
 */
static void __exit hps_exit(void)
{
    int r = 0;

    hps_warn("hps_exit\n");

    hps_ctxt.init_state = INIT_STATE_NOT_READY;

    r = hps_core_deinit();
    if (r)
        hps_error("hps_core_deinit fail(%d)\n", r);
}
コード例 #4
0
/*
 * deinit
 */
int hps_core_deinit(void)
{
	int r = 0;

	hps_warn("hps_core_deinit\n");
	if (hps_ctxt.periodical_by == HPS_PERIODICAL_BY_TIMER) {
		/*deinit timer */
		del_timer_sync(&hps_ctxt.tmr_list);
	} else if (hps_ctxt.periodical_by == HPS_PERIODICAL_BY_HR_TIMER) {
		/*deinit timer */
		r = hrtimer_cancel(&hps_ctxt.hr_timer);
		if (r)
			hps_error("hps hr timer delete error!\n");
	}

	hps_task_stop();

	return r;
}