static ssize_t sfh7225_sense_light(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	u8 lightvalue, auto_control, man_control, man_control_orig;
	int status = -EINVAL;
	/*ensure ADC is enabled*/
	micco_read(MICCO_ADC_MAN_CONTROL, &man_control_orig);
	if (!(man_control_orig & 0x10)) {
		man_control = man_control_orig | 0x10;
		if (micco_write(MICCO_ADC_MAN_CONTROL, man_control))
			goto cleanup;
	}
	/*ensure AUTO5 is enabled*/
	micco_read(MICCO_ADC_AUTO_CONTROL_2, &auto_control);
	if (!(auto_control & 0x02)) {
		auto_control |= 0x02;
		if (micco_write(MICCO_ADC_AUTO_CONTROL_2, auto_control))
			goto cleanup;
	}
	if (micco_read(MICCO_AUTO5_RES, &lightvalue))
		goto cleanup;
	status = sprintf(buf, "%u\n", lightvalue);
	if (!(man_control_orig & 0x10))
		micco_write(MICCO_ADC_MAN_CONTROL, man_control_orig);
cleanup:
	if (status < 0)
		printk(KERN_WARNING "sfh7225_sense_light failed\n");
	return status;

}
static void micco_init(void)
{
	u8 value;

	/* Mask interrupts that are not needed */
	micco_write(MICCO_IRQ_MASK_A, 0xFE);
	micco_write(MICCO_IRQ_MASK_B, 0xFF);
	micco_write(MICCO_IRQ_MASK_C, 0xFF);
	micco_write(MICCO_IRQ_MASK_D, 0xFF);

	/* avoid SRAM power off during sleep*/
	micco_write(0x10, 0x07);
	micco_write(0x11, 0xff);
	//micco_write(0x12, 0xbf);/*never enable LDO4: CP controls it via COMM_OVER3 reg (0x22)*/

	/* Enable the ONKEY power down functionality */
	micco_write(MICCO_SYSCTRL_B, 0x20);
	micco_write(MICCO_SYSCTRL_A, 0x60);

	/* IRQ is masked during the power-up sequence and will not be released
	 * until they have been read for the first time */
	micco_read(MICCO_EVENT_A, &value);
	micco_read(MICCO_EVENT_B, &value);
	micco_read(MICCO_EVENT_C, &value);
	micco_read(MICCO_EVENT_D, &value);
}
static int lt_ts_suspend(struct platform_device *pdev, pm_message_t state)
{
	struct lt_touch_data *p_lt_touch = (struct lt_touch_data *)platform_get_drvdata(pdev);	
	p_lt_touch->suspended = 1; 
	lt_touch_enable_stage(TSI_STAGE_OFF);
	micco_write(MICCO_ADC_AUTO_CONTROL_2, 0);
	return 0;
}
static int lt_ts_resume(struct platform_device *pdev)
{	
	struct lt_touch_data *p_lt_touch = (struct lt_touch_data *)platform_get_drvdata(pdev);
	micco_write(MICCO_ADC_AUTO_CONTROL_2, MICCO_ADC_AUTO_2_PENDET_EN);
	lt_touch_enable_stage(TSI_STAGE_DETECT);
	p_lt_touch->suspended = 0;
	mod_timer(&p_lt_touch->lt_touch_timer, jiffies+HZ);/* timer for read to trigger irq */
	return 0;
}
static int micco_enable_rtc_alarm_irq(int enable)
{
	int ret;
	u8 val;

	ret = micco_read(MICCO_IRQ_MASK_A, &val);
	if (enable) {	/* enable Alarm IRQ */
		val &= ~(IRQ_MASK_A_EXTON);
	} else {	/* disable Alarm IRQ */
		val |= (IRQ_MASK_A_EXTON);
	}
	ret += micco_write(MICCO_IRQ_MASK_A, val);
	
	return ret;
}