コード例 #1
0
ファイル: rtc.c プロジェクト: canistation/coreboot
/* rtc init check */
int rtc_init(u8 recover)
{
	int ret;

	rtc_info("recovery: %d\n", recover);

	/* write powerkeys to enable rtc functions */
	if (!rtc_powerkey_init()) {
		ret = -RTC_STATUS_POWERKEY_INIT_FAIL;
		goto err;
	}

	/* write interface unlock need to be set after powerkey match */
	if (!rtc_writeif_unlock()) {
		ret = -RTC_STATUS_WRITEIF_UNLOCK_FAIL;
		goto err;
	}

	/* using dcxo 32K clock */
	if (!rtc_enable_dcxo()) {
		ret = -RTC_STATUS_OSC_SETTING_FAIL;
		goto err;
	}

	if (recover)
		mdelay(20);

	if (!rtc_gpio_init()) {
		ret = -RTC_STATUS_GPIO_INIT_FAIL;
		goto err;
	}

	if (!rtc_hw_init()) {
		ret = -RTC_STATUS_HW_INIT_FAIL;
		goto err;
	}

	if (!rtc_reg_init()) {
		ret = -RTC_STATUS_REG_INIT_FAIL;
		goto err;
	}

	if (!rtc_lpd_init()) {
		ret = -RTC_STATUS_LPD_INIT_FAIL;
		goto err;
	}

	/* After lpd init, powerkeys need to be written again to enable
	 * low power detect function.
	 */
	if (!rtc_powerkey_init()) {
		ret = -RTC_STATUS_POWERKEY_INIT_FAIL;
		goto err;
	}

	return RTC_STATUS_OK;
err:
	rtc_info("init fail: ret=%d\n", ret);
	return ret;
}
コード例 #2
0
static int __devinit sunxi_rtc_probe(struct platform_device *pdev)
{
	struct rtc_device *rtc;
	int ret;

	rtc_reg_list = (rtc_alarm_reg *)(SW_VA_TIMERC_IO_BASE + LOSC_CTRL_REG_OFF);

	/* init rtc hardware */
	ret = rtc_hw_init();
	if(ret) {
		pr_err("%s(%d) err: rtc_probe_init failed\n", __func__, __LINE__);
		return ret;
	}

	device_init_wakeup(&pdev->dev, 1);

	/* register rtc device */
	rtc = rtc_device_register("rtc", &pdev->dev, &sunxi_rtcops, THIS_MODULE);
	if(IS_ERR(rtc)) {
		dev_err(&pdev->dev, "err: cannot attach rtc\n");
		ret = PTR_ERR(rtc);
		return ret;
	}

#ifdef A20_ALARM
	/* register alarm irq */
	ret = request_irq(sunxi_rtc_alarmno, sunxi_rtc_alarmirq,
			IRQF_DISABLED,  "sunxi-rtc alarm", rtc);
	if(ret) {
		dev_err(&pdev->dev, "IRQ%d error %d\n", sunxi_rtc_alarmno, ret);
		rtc_device_unregister(rtc);
		return ret;
	}
#endif
	platform_set_drvdata(pdev, rtc);
	return 0;
}