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; }