static void plugin_cal_t72_hook_t6(struct plugin_ac *p, u8 status) { const struct mxt_config *dcfg = p->dcfg; struct device *dev = dcfg->dev; struct t72_observer *obs = p->obs; if (status & (MXT_T6_STATUS_RESET|MXT_T6_STATUS_CAL)) { dev_dbg2(dev, "T72 hook T6 0x%x\n", status); if (status & MXT_T6_STATUS_CAL) { set_and_clr_flag(T72_FLAG_CAL, T72_FLAG_MASK_NORMAL,&obs->flag); } if (status & MXT_T6_STATUS_RESET) { set_and_clr_flag(T72_FLAG_RESET, T72_FLAG_MASK,&obs->flag); } }else{ if (test_flag(T72_FLAG_CAL|T72_FLAG_RESET,&obs->flag)) { dev_dbg2(dev, "T72 hook T6 end\n"); set_and_clr_flag(T72_FLAG_START_T61, 0, &obs->flag); } } dev_info2(dev, "mxt t72 flag=0x%lx\n", obs->flag); }
static long plugin_ac_t72_post_process_messages(struct plugin_ac *p, unsigned long pl_flag) { const struct mxt_config *dcfg = p->dcfg; struct device *dev = dcfg->dev; struct t72_config *cfg = p->cfg; struct t72_observer *obs = p->obs; long next_interval = MAX_SCHEDULE_TIMEOUT; int ret = 0; if (test_flag(T72_FLAG_WORKAROUND_HALT,&obs->flag)) return MAX_SCHEDULE_TIMEOUT; if (test_flag(T72_FLAG_STATE_CHANGE, &obs->flag)) { mxt_proc_noise_msg(p, pl_flag); } if (test_flag(/*T72_FLAG_CAL*/T72_FLAG_RESUME, &obs->flag)) { mxt_proc_proximity_msg(p, pl_flag); } if (test_flag(T72_FLAG_START_T61, &obs->flag)) { mxt_proc_timer_msg(p, pl_flag); } if (test_flag(T72_FLAG_MASK_LOW, &obs->flag)) { mxt_proc_hw_msg(p, pl_flag); } if (time_after_eq(jiffies,obs->time_next_st)) { if (test_flag(IRAD_FLAG_PROXIMITY_DETECTED, &obs->flag)) { mxt_proc_proximity_msg(p, pl_flag); } }else { dev_dbg2(dev, "mxt wait %lu\n", obs->time_next_st - jiffies); ret = -ETIME; } if (ret == -ETIME) next_interval = obs->time_next_st - jiffies + 1; if (ret == -EAGAIN) next_interval = cfg->interval_fast; else { next_interval = status_interval(p,obs->flag); } if (ret != -ETIME) { obs->time_next_st = jiffies; if (next_interval != MAX_SCHEDULE_TIMEOUT) obs->time_next_st = jiffies + next_interval; else obs->time_next_st = next_interval; } if (!next_interval) next_interval = MAX_SCHEDULE_TIMEOUT; //just wait interrupt if zero dev_dbg2(dev, "t72 mxt interval %lu wait %ld\n",next_interval,obs->time_next_st - jiffies); return next_interval; }
static int mxt_proc_hw_msg(struct plugin_ac *p,unsigned long pl_flag) { const struct mxt_config *dcfg = p->dcfg; struct device *dev = dcfg->dev; struct t72_observer *obs = p->obs; dev_dbg2(dev, "mxt t72 at mxt_proc_hw_msg flag 0x%lx pl_flag 0x%lx\n",obs->flag,pl_flag); clear_flag(T72_FLAG_MASK_LOW, &obs->flag); obs->time_next_st = jiffies + 1; return 0; }
long status_interval(struct plugin_ac *p, unsigned long flag) { const struct mxt_config *dcfg = p->dcfg; struct device *dev = dcfg->dev; struct t72_config *cfg = p->cfg; unsigned long interval; if (test_flag(IRAD_FLAG_PROXIMITY_DETECTED, &flag)) interval = cfg->interval_proximity_check; else interval = MAX_SCHEDULE_TIMEOUT; dev_dbg2(dev, "mxt interval %lu\n",interval); return (long)interval; }