static int hx8369_cs05_disable(struct pxa168fb_info *fbi)
{
	printk("%s\n", __func__);

	/*
	 * Sperated lcd off routine multi tasking issue
	 * becasue of share of cpu0 after suspend.
	 */

#if defined(CONFIG_QUICKLOGIC_BRIDGE)
	/*sleep in*/
	Quicklogic_i2cTomipi_write(DTYPE_DCS_WRITE, QL_VX_LCD_VC,\
		sizeof(display_off),display_off);
	msleep(HX8369B_DISP_OFF_DELAY);

	Quicklogic_i2cTomipi_write(DTYPE_DCS_WRITE, QL_VX_LCD_VC,\
		sizeof(sleep_in),sleep_in);
	msleep(HX8369B_SLEEP_IN_DELAY);

	#if defined(CONFIG_SPA) || defined(CONFIG_SPA_LPM_MODE)
	if(!spa_lpm_charging_mode_get())
	#else
	if (!lpcharge)
	#endif
	i2c1_pin_changed(1);
#endif
	return 0;
}
static irqreturn_t rtc_interrupt_handler(int irq, void *dev_id)
{
	struct rtc_device *rdev = dev_id;

	pr_debug(" RTC ***** interrupt happen\n");
	//rtc_update_irq(rdev, 1, RTC_AF | RTC_IRQF);
	rtc_aie_update_irq(rdev);
	CLEAR_RTC_INT(RTC_INT_ALL_MSK);

#if defined(CONFIG_RTC_CHN_ALARM_BOOT) && defined(CONFIG_SPA)
	if(spa_lpm_charging_mode_get())
		schedule_work(&reboot_work);
#endif
	return IRQ_HANDLED;
}
static int __init cyttsp4_i2c_init(void)
{
	int rc;

#if defined(CONFIG_SPA) || defined(CONFIG_SPA_LPM_MODE)
	if(spa_lpm_charging_mode_get())
#else
	if (lpcharge)
#endif
		return 0;

#if defined(CONFIG_MACH_WILCOX) || defined(CONFIG_MACH_CT01) || defined(CONFIG_MACH_BAFFIN) || defined(CONFIG_MACH_BAFFINQ)
	if (!panel_id) {
		printk(KERN_INFO "[TSP] cyttsp4_i2c_init : lcd is not connected!!\n");
		return 0;
	}
#endif
	rc = i2c_add_driver(&cyttsp4_i2c_driver);

	pr_info("%s: Cypress TTSP I2C Touchscreen Driver (Built %s) rc=%d\n",
		 __func__, CY_DRIVER_DATE, rc);
	return rc;
}
static int sprd_rtc_probe(struct platform_device *plat_dev)
{
	int err = -ENODEV;
	struct resource *irq;

	rtc_data = kzalloc(sizeof(*rtc_data), GFP_KERNEL);
	if(IS_ERR(rtc_data)){
		err = PTR_ERR(rtc_data);
		return err;
	};

	/*ensure the rtc interrupt don't be send to Adie when there's no
	  *rtc alarm int occur.
	  */
	sci_adi_raw_write(ANA_RTC_SPG_UPD, SPRD_RTC_LOCK);
	/* disable all interrupt */
	sci_adi_clr(ANA_RTC_INT_EN, RTC_INT_ALL_MSK);
	/* enable rtc device */
	rtc_data->clk = clk_get(&plat_dev->dev, "ext_32k");
	if (IS_ERR(rtc_data->clk)) {
		err = PTR_ERR(rtc_data->clk);
		goto kfree_data;
	}

	err = clk_enable(rtc_data->clk);
	if (err < 0)
		goto put_clk;

	CLEAR_RTC_INT(RTC_INT_ALL_MSK);
	rtc_data->rtc = rtc_device_register("sprd_rtc", &plat_dev->dev,
			&sprd_rtc_ops, THIS_MODULE);
	if (IS_ERR(rtc_data->rtc)) {
		err = PTR_ERR(rtc_data->rtc);
		goto disable_clk;
	}

	irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
	if(unlikely(!irq)) {
		dev_err(&plat_dev->dev, "no irq resource specified\n");
		goto unregister_rtc;
	}
	rtc_data->irq_no = irq->start;
	platform_set_drvdata(plat_dev, rtc_data);

	err = request_irq(rtc_data->irq_no, rtc_interrupt_handler, 0, "sprd_rtc", rtc_data->rtc);
	if(err){
		printk(KERN_ERR "RTC regist irq error\n");
		goto unregister_rtc;
	}
	sprd_creat_caliberate_attr(rtc_data->rtc->dev);
#if defined(CONFIG_RTC_CHN_ALARM_BOOT) && defined(CONFIG_SPA)
	if(spa_lpm_charging_mode_get())
	{
		INIT_WORK(&reboot_work, sprd_rtc_reboot_work);
		sprd_rtc_open(&plat_dev->dev);
	}
#endif

	sprd_rtc_hwrst_set(1);
	sprd_rtc_set_bit_spg_counter(SPG_CNT_8SECS_RESET, 1);
	return 0;

unregister_rtc:
	rtc_device_unregister(rtc_data->rtc);
disable_clk:
	clk_disable(rtc_data->clk);
put_clk:
	clk_put(rtc_data->clk);
kfree_data:
	kfree(rtc_data);
	return err;
}