Lines Matching refs:cd
80 static int cyttsp4_load_status_regs(struct cyttsp4 *cd) in cyttsp4_load_status_regs() argument
82 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_load_status_regs()
83 struct device *dev = cd->dev; in cyttsp4_load_status_regs()
86 rc = cyttsp4_adap_read(cd, CY_REG_BASE, si->si_ofs.mode_size, in cyttsp4_load_status_regs()
92 cyttsp4_pr_buf(dev, cd->pr_buf, si->xy_mode, in cyttsp4_load_status_regs()
98 static int cyttsp4_handshake(struct cyttsp4 *cd, u8 mode) in cyttsp4_handshake() argument
110 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(cmd), &cmd); in cyttsp4_handshake()
112 dev_err(cd->dev, "%s: bus write fail on handshake (ret=%d)\n", in cyttsp4_handshake()
118 static int cyttsp4_hw_soft_reset(struct cyttsp4 *cd) in cyttsp4_hw_soft_reset() argument
121 int rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(cmd), &cmd); in cyttsp4_hw_soft_reset()
123 dev_err(cd->dev, "%s: FAILED to execute SOFT reset\n", in cyttsp4_hw_soft_reset()
130 static int cyttsp4_hw_hard_reset(struct cyttsp4 *cd) in cyttsp4_hw_hard_reset() argument
132 if (cd->cpdata->xres) { in cyttsp4_hw_hard_reset()
133 cd->cpdata->xres(cd->cpdata, cd->dev); in cyttsp4_hw_hard_reset()
134 dev_dbg(cd->dev, "%s: execute HARD reset\n", __func__); in cyttsp4_hw_hard_reset()
137 dev_err(cd->dev, "%s: FAILED to execute HARD reset\n", __func__); in cyttsp4_hw_hard_reset()
141 static int cyttsp4_hw_reset(struct cyttsp4 *cd) in cyttsp4_hw_reset() argument
143 int rc = cyttsp4_hw_hard_reset(cd); in cyttsp4_hw_reset()
145 rc = cyttsp4_hw_soft_reset(cd); in cyttsp4_hw_reset()
160 static int cyttsp4_si_data_offsets(struct cyttsp4 *cd) in cyttsp4_si_data_offsets() argument
162 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_data_offsets()
163 int rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(si->si_data), in cyttsp4_si_data_offsets()
166 dev_err(cd->dev, "%s: fail read sysinfo data offsets r=%d\n", in cyttsp4_si_data_offsets()
172 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)&si->si_data, in cyttsp4_si_data_offsets()
196 static int cyttsp4_si_get_cydata(struct cyttsp4 *cd) in cyttsp4_si_get_cydata() argument
198 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_cydata()
205 dev_dbg(cd->dev, "%s: cydata size: %Zd\n", __func__, in cyttsp4_si_get_cydata()
210 dev_err(cd->dev, "%s: fail alloc cydata memory\n", __func__); in cyttsp4_si_get_cydata()
218 rc = cyttsp4_adap_read(cd, read_offset, in cyttsp4_si_get_cydata()
223 dev_err(cd->dev, "%s: fail read cydata r=%d\n", in cyttsp4_si_get_cydata()
232 dev_err(cd->dev, "%s: mismatch in MFGID size, reported:%d calculated:%d\n", in cyttsp4_si_get_cydata()
241 rc = cyttsp4_adap_read(cd, read_offset, si->si_ptrs.cydata->mfgid_sz, in cyttsp4_si_get_cydata()
244 dev_err(cd->dev, "%s: fail read cydata r=%d\n", in cyttsp4_si_get_cydata()
252 rc = cyttsp4_adap_read(cd, read_offset, in cyttsp4_si_get_cydata()
257 dev_err(cd->dev, "%s: fail read cydata r=%d\n", in cyttsp4_si_get_cydata()
262 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)si->si_ptrs.cydata, in cyttsp4_si_get_cydata()
267 static int cyttsp4_si_get_test_data(struct cyttsp4 *cd) in cyttsp4_si_get_test_data() argument
269 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_test_data()
277 dev_err(cd->dev, "%s: fail alloc test memory\n", __func__); in cyttsp4_si_get_test_data()
282 rc = cyttsp4_adap_read(cd, si->si_ofs.test_ofs, si->si_ofs.test_size, in cyttsp4_si_get_test_data()
285 dev_err(cd->dev, "%s: fail read test data r=%d\n", in cyttsp4_si_get_test_data()
290 cyttsp4_pr_buf(cd->dev, cd->pr_buf, in cyttsp4_si_get_test_data()
295 dev_info(cd->dev, "%s: %s codel=%02X\n", in cyttsp4_si_get_test_data()
301 dev_info(cd->dev, "%s: %s codel=%02X\n", __func__, in cyttsp4_si_get_test_data()
307 dev_info(cd->dev, "%s: %s codel=%02X\n", in cyttsp4_si_get_test_data()
311 dev_info(cd->dev, "%s: SCANNING is %s codel=%02X\n", in cyttsp4_si_get_test_data()
318 static int cyttsp4_si_get_pcfg_data(struct cyttsp4 *cd) in cyttsp4_si_get_pcfg_data() argument
320 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_pcfg_data()
329 dev_err(cd->dev, "%s: fail alloc pcfg memory r=%d\n", in cyttsp4_si_get_pcfg_data()
335 rc = cyttsp4_adap_read(cd, si->si_ofs.pcfg_ofs, si->si_ofs.pcfg_size, in cyttsp4_si_get_pcfg_data()
338 dev_err(cd->dev, "%s: fail read pcfg data r=%d\n", in cyttsp4_si_get_pcfg_data()
354 cyttsp4_pr_buf(cd->dev, cd->pr_buf, in cyttsp4_si_get_pcfg_data()
360 static int cyttsp4_si_get_opcfg_data(struct cyttsp4 *cd) in cyttsp4_si_get_opcfg_data() argument
362 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_opcfg_data()
374 dev_err(cd->dev, "%s: fail alloc opcfg memory\n", __func__); in cyttsp4_si_get_opcfg_data()
380 rc = cyttsp4_adap_read(cd, si->si_ofs.opcfg_ofs, si->si_ofs.opcfg_size, in cyttsp4_si_get_opcfg_data()
383 dev_err(cd->dev, "%s: fail read opcfg data r=%d\n", in cyttsp4_si_get_opcfg_data()
431 dev_dbg(cd->dev, "%s: tch_rec_%s\n", __func__, in cyttsp4_si_get_opcfg_data()
433 dev_dbg(cd->dev, "%s: ofs =%2Zd\n", __func__, in cyttsp4_si_get_opcfg_data()
435 dev_dbg(cd->dev, "%s: siz =%2Zd\n", __func__, in cyttsp4_si_get_opcfg_data()
437 dev_dbg(cd->dev, "%s: max =%2Zd\n", __func__, in cyttsp4_si_get_opcfg_data()
439 dev_dbg(cd->dev, "%s: bofs=%2Zd\n", __func__, in cyttsp4_si_get_opcfg_data()
447 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)si->si_ptrs.opcfg, in cyttsp4_si_get_opcfg_data()
454 static int cyttsp4_si_get_ddata(struct cyttsp4 *cd) in cyttsp4_si_get_ddata() argument
456 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_ddata()
464 dev_err(cd->dev, "%s: fail alloc ddata memory\n", __func__); in cyttsp4_si_get_ddata()
469 rc = cyttsp4_adap_read(cd, si->si_ofs.ddata_ofs, si->si_ofs.ddata_size, in cyttsp4_si_get_ddata()
472 dev_err(cd->dev, "%s: fail read ddata data r=%d\n", in cyttsp4_si_get_ddata()
475 cyttsp4_pr_buf(cd->dev, cd->pr_buf, in cyttsp4_si_get_ddata()
481 static int cyttsp4_si_get_mdata(struct cyttsp4 *cd) in cyttsp4_si_get_mdata() argument
483 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_mdata()
491 dev_err(cd->dev, "%s: fail alloc mdata memory\n", __func__); in cyttsp4_si_get_mdata()
496 rc = cyttsp4_adap_read(cd, si->si_ofs.mdata_ofs, si->si_ofs.mdata_size, in cyttsp4_si_get_mdata()
499 dev_err(cd->dev, "%s: fail read mdata data r=%d\n", in cyttsp4_si_get_mdata()
502 cyttsp4_pr_buf(cd->dev, cd->pr_buf, in cyttsp4_si_get_mdata()
508 static int cyttsp4_si_get_btn_data(struct cyttsp4 *cd) in cyttsp4_si_get_btn_data() argument
510 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_btn_data()
524 dev_err(cd->dev, "%s: %s\n", __func__, in cyttsp4_si_get_btn_data()
530 if (cd->cpdata->sett[CY_IC_GRPNUM_BTN_KEYS] == NULL) in cyttsp4_si_get_btn_data()
532 else if (cd->cpdata->sett[CY_IC_GRPNUM_BTN_KEYS]->data == NULL) in cyttsp4_si_get_btn_data()
535 num_defined_keys = cd->cpdata->sett in cyttsp4_si_get_btn_data()
540 key_table = (u16 *)cd->cpdata->sett in cyttsp4_si_get_btn_data()
561 static int cyttsp4_si_get_op_data_ptrs(struct cyttsp4 *cd) in cyttsp4_si_get_op_data_ptrs() argument
563 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_get_op_data_ptrs()
586 static void cyttsp4_si_put_log_data(struct cyttsp4 *cd) in cyttsp4_si_put_log_data() argument
588 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_si_put_log_data()
589 dev_dbg(cd->dev, "%s: cydata_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
591 dev_dbg(cd->dev, "%s: test_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
593 dev_dbg(cd->dev, "%s: pcfg_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
595 dev_dbg(cd->dev, "%s: opcfg_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
597 dev_dbg(cd->dev, "%s: ddata_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
599 dev_dbg(cd->dev, "%s: mdata_ofs =%4Zd siz=%4Zd\n", __func__, in cyttsp4_si_put_log_data()
602 dev_dbg(cd->dev, "%s: cmd_ofs =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
604 dev_dbg(cd->dev, "%s: rep_ofs =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
606 dev_dbg(cd->dev, "%s: rep_sz =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
608 dev_dbg(cd->dev, "%s: num_btns =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
610 dev_dbg(cd->dev, "%s: num_btn_regs =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
612 dev_dbg(cd->dev, "%s: tt_stat_ofs =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
614 dev_dbg(cd->dev, "%s: tch_rec_size =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
616 dev_dbg(cd->dev, "%s: max_tchs =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
618 dev_dbg(cd->dev, "%s: mode_size =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
620 dev_dbg(cd->dev, "%s: data_size =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
622 dev_dbg(cd->dev, "%s: map_sz =%4Zd\n", __func__, in cyttsp4_si_put_log_data()
625 dev_dbg(cd->dev, "%s: btn_rec_size =%2Zd\n", __func__, in cyttsp4_si_put_log_data()
627 dev_dbg(cd->dev, "%s: btn_diff_ofs =%2Zd\n", __func__, in cyttsp4_si_put_log_data()
629 dev_dbg(cd->dev, "%s: btn_diff_size =%2Zd\n", __func__, in cyttsp4_si_put_log_data()
632 dev_dbg(cd->dev, "%s: max_x = 0x%04ZX (%Zd)\n", __func__, in cyttsp4_si_put_log_data()
634 dev_dbg(cd->dev, "%s: x_origin = %Zd (%s)\n", __func__, in cyttsp4_si_put_log_data()
638 dev_dbg(cd->dev, "%s: max_y = 0x%04ZX (%Zd)\n", __func__, in cyttsp4_si_put_log_data()
640 dev_dbg(cd->dev, "%s: y_origin = %Zd (%s)\n", __func__, in cyttsp4_si_put_log_data()
644 dev_dbg(cd->dev, "%s: max_p = 0x%04ZX (%Zd)\n", __func__, in cyttsp4_si_put_log_data()
647 dev_dbg(cd->dev, "%s: xy_mode=%p xy_data=%p\n", __func__, in cyttsp4_si_put_log_data()
651 static int cyttsp4_get_sysinfo_regs(struct cyttsp4 *cd) in cyttsp4_get_sysinfo_regs() argument
653 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_get_sysinfo_regs()
656 rc = cyttsp4_si_data_offsets(cd); in cyttsp4_get_sysinfo_regs()
660 rc = cyttsp4_si_get_cydata(cd); in cyttsp4_get_sysinfo_regs()
664 rc = cyttsp4_si_get_test_data(cd); in cyttsp4_get_sysinfo_regs()
668 rc = cyttsp4_si_get_pcfg_data(cd); in cyttsp4_get_sysinfo_regs()
672 rc = cyttsp4_si_get_opcfg_data(cd); in cyttsp4_get_sysinfo_regs()
676 rc = cyttsp4_si_get_ddata(cd); in cyttsp4_get_sysinfo_regs()
680 rc = cyttsp4_si_get_mdata(cd); in cyttsp4_get_sysinfo_regs()
684 rc = cyttsp4_si_get_btn_data(cd); in cyttsp4_get_sysinfo_regs()
688 rc = cyttsp4_si_get_op_data_ptrs(cd); in cyttsp4_get_sysinfo_regs()
690 dev_err(cd->dev, "%s: failed to get_op_data\n", in cyttsp4_get_sysinfo_regs()
695 cyttsp4_si_put_log_data(cd); in cyttsp4_get_sysinfo_regs()
698 rc = cyttsp4_handshake(cd, si->si_data.hst_mode); in cyttsp4_get_sysinfo_regs()
700 dev_err(cd->dev, "%s: handshake fail on sysinfo reg\n", in cyttsp4_get_sysinfo_regs()
707 static void cyttsp4_queue_startup_(struct cyttsp4 *cd) in cyttsp4_queue_startup_() argument
709 if (cd->startup_state == STARTUP_NONE) { in cyttsp4_queue_startup_()
710 cd->startup_state = STARTUP_QUEUED; in cyttsp4_queue_startup_()
711 schedule_work(&cd->startup_work); in cyttsp4_queue_startup_()
712 dev_dbg(cd->dev, "%s: cyttsp4_startup queued\n", __func__); in cyttsp4_queue_startup_()
714 dev_dbg(cd->dev, "%s: startup_state = %d\n", __func__, in cyttsp4_queue_startup_()
715 cd->startup_state); in cyttsp4_queue_startup_()
939 static int cyttsp4_xy_worker(struct cyttsp4 *cd) in cyttsp4_xy_worker() argument
941 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_xy_worker()
981 rc = cyttsp4_adap_read(cd, si->si_ofs.tt_stat_ofs + 1, in cyttsp4_xy_worker()
992 cyttsp4_pr_buf(dev, cd->pr_buf, si->xy_data, num_cur_tch * in cyttsp4_xy_worker()
1025 static int cyttsp4_mt_attention(struct cyttsp4 *cd) in cyttsp4_mt_attention() argument
1027 struct device *dev = cd->dev; in cyttsp4_mt_attention()
1028 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_mt_attention()
1037 rc = cyttsp4_xy_worker(cd); in cyttsp4_mt_attention()
1051 struct cyttsp4 *cd = handle; in cyttsp4_irq() local
1052 struct device *dev = cd->dev; in cyttsp4_irq()
1054 u8 cmd_ofs = cd->sysinfo.si_ofs.cmd_ofs; in cyttsp4_irq()
1063 if (atomic_read(&cd->ignore_irq)) { in cyttsp4_irq()
1068 dev_dbg(dev, "%s int:0x%x\n", __func__, cd->int_status); in cyttsp4_irq()
1070 mutex_lock(&cd->system_lock); in cyttsp4_irq()
1073 if (cd->sleep_state == SS_SLEEP_ON || cd->sleep_state == SS_SLEEPING) in cyttsp4_irq()
1076 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), mode); in cyttsp4_irq()
1078 dev_err(cd->dev, "%s: Fail read adapter r=%d\n", __func__, rc); in cyttsp4_irq()
1087 if (cd->mode == CY_MODE_BOOTLOADER) { in cyttsp4_irq()
1089 wake_up(&cd->wait_q); in cyttsp4_irq()
1095 __func__, cd->mode, cur_mode); in cyttsp4_irq()
1098 if (cd->mode != CY_MODE_UNKNOWN) { in cyttsp4_irq()
1100 cd->mode = CY_MODE_UNKNOWN; in cyttsp4_irq()
1101 cyttsp4_queue_startup_(cd); in cyttsp4_irq()
1110 cd->mode = cur_mode; in cyttsp4_irq()
1136 if (cd->int_status & CY_INT_IGNORE) { in cyttsp4_irq()
1142 if (cd->int_status & CY_INT_AWAKE) { in cyttsp4_irq()
1143 cd->int_status &= ~CY_INT_AWAKE; in cyttsp4_irq()
1144 wake_up(&cd->wait_q); in cyttsp4_irq()
1150 if ((cd->int_status & CY_INT_MODE_CHANGE) in cyttsp4_irq()
1152 cd->int_status &= ~CY_INT_MODE_CHANGE; in cyttsp4_irq()
1154 __func__, cd->mode, cur_mode); in cyttsp4_irq()
1155 cd->mode = cur_mode; in cyttsp4_irq()
1156 wake_up(&cd->wait_q); in cyttsp4_irq()
1162 __func__, cd->mode, cur_mode); in cyttsp4_irq()
1163 if ((mode[0] & CY_HST_MODE_CHANGE) == 0 && cd->mode != cur_mode) { in cyttsp4_irq()
1165 dev_err(dev, "%s %d->%d 0x%x\n", __func__, cd->mode, in cyttsp4_irq()
1166 cur_mode, cd->int_status); in cyttsp4_irq()
1169 cyttsp4_queue_startup_(cd); in cyttsp4_irq()
1175 if ((cd->int_status & CY_INT_EXEC_CMD) in cyttsp4_irq()
1177 cd->int_status &= ~CY_INT_EXEC_CMD; in cyttsp4_irq()
1180 wake_up(&cd->wait_q); in cyttsp4_irq()
1189 if (cd->mode == CY_MODE_OPERATIONAL) { in cyttsp4_irq()
1191 rc = cyttsp4_load_status_regs(cd); in cyttsp4_irq()
1197 cyttsp4_mt_attention(cd); in cyttsp4_irq()
1203 rc = cyttsp4_handshake(cd, mode[0]); in cyttsp4_irq()
1213 udelay(cd->cpdata->level_irq_udelay); in cyttsp4_irq()
1216 mutex_unlock(&cd->system_lock); in cyttsp4_irq()
1220 static void cyttsp4_start_wd_timer(struct cyttsp4 *cd) in cyttsp4_start_wd_timer() argument
1225 mod_timer(&cd->watchdog_timer, jiffies + in cyttsp4_start_wd_timer()
1229 static void cyttsp4_stop_wd_timer(struct cyttsp4 *cd) in cyttsp4_stop_wd_timer() argument
1238 del_timer_sync(&cd->watchdog_timer); in cyttsp4_stop_wd_timer()
1239 cancel_work_sync(&cd->watchdog_work); in cyttsp4_stop_wd_timer()
1240 del_timer_sync(&cd->watchdog_timer); in cyttsp4_stop_wd_timer()
1245 struct cyttsp4 *cd = (struct cyttsp4 *)handle; in cyttsp4_watchdog_timer() local
1247 dev_vdbg(cd->dev, "%s: Watchdog timer triggered\n", __func__); in cyttsp4_watchdog_timer()
1249 schedule_work(&cd->watchdog_work); in cyttsp4_watchdog_timer()
1254 static int cyttsp4_request_exclusive(struct cyttsp4 *cd, void *ownptr, in cyttsp4_request_exclusive() argument
1260 mutex_lock(&cd->system_lock); in cyttsp4_request_exclusive()
1261 if (!cd->exclusive_dev && cd->exclusive_waits == 0) { in cyttsp4_request_exclusive()
1262 cd->exclusive_dev = ownptr; in cyttsp4_request_exclusive()
1266 cd->exclusive_waits++; in cyttsp4_request_exclusive()
1268 mutex_unlock(&cd->system_lock); in cyttsp4_request_exclusive()
1270 t = wait_event_timeout(cd->wait_q, !cd->exclusive_dev, t); in cyttsp4_request_exclusive()
1272 dev_err(cd->dev, "%s: tmo waiting exclusive access\n", in cyttsp4_request_exclusive()
1274 mutex_lock(&cd->system_lock); in cyttsp4_request_exclusive()
1275 cd->exclusive_waits--; in cyttsp4_request_exclusive()
1276 mutex_unlock(&cd->system_lock); in cyttsp4_request_exclusive()
1280 wait_event(cd->wait_q, !cd->exclusive_dev); in cyttsp4_request_exclusive()
1282 mutex_lock(&cd->system_lock); in cyttsp4_request_exclusive()
1283 if (cd->exclusive_dev) in cyttsp4_request_exclusive()
1285 cd->exclusive_dev = ownptr; in cyttsp4_request_exclusive()
1286 cd->exclusive_waits--; in cyttsp4_request_exclusive()
1288 mutex_unlock(&cd->system_lock); in cyttsp4_request_exclusive()
1296 static int cyttsp4_release_exclusive(struct cyttsp4 *cd, void *ownptr) in cyttsp4_release_exclusive() argument
1298 mutex_lock(&cd->system_lock); in cyttsp4_release_exclusive()
1299 if (cd->exclusive_dev != ownptr) { in cyttsp4_release_exclusive()
1300 mutex_unlock(&cd->system_lock); in cyttsp4_release_exclusive()
1304 dev_vdbg(cd->dev, "%s: exclusive_dev %p freed\n", in cyttsp4_release_exclusive()
1305 __func__, cd->exclusive_dev); in cyttsp4_release_exclusive()
1306 cd->exclusive_dev = NULL; in cyttsp4_release_exclusive()
1307 wake_up(&cd->wait_q); in cyttsp4_release_exclusive()
1308 mutex_unlock(&cd->system_lock); in cyttsp4_release_exclusive()
1312 static int cyttsp4_wait_bl_heartbeat(struct cyttsp4 *cd) in cyttsp4_wait_bl_heartbeat() argument
1318 dev_vdbg(cd->dev, "%s: wait heartbeat...\n", __func__); in cyttsp4_wait_bl_heartbeat()
1319 t = wait_event_timeout(cd->wait_q, cd->mode == CY_MODE_BOOTLOADER, in cyttsp4_wait_bl_heartbeat()
1322 dev_err(cd->dev, "%s: tmo waiting bl heartbeat cd->mode=%d\n", in cyttsp4_wait_bl_heartbeat()
1323 __func__, cd->mode); in cyttsp4_wait_bl_heartbeat()
1330 static int cyttsp4_wait_sysinfo_mode(struct cyttsp4 *cd) in cyttsp4_wait_sysinfo_mode() argument
1334 dev_vdbg(cd->dev, "%s: wait sysinfo...\n", __func__); in cyttsp4_wait_sysinfo_mode()
1336 t = wait_event_timeout(cd->wait_q, cd->mode == CY_MODE_SYSINFO, in cyttsp4_wait_sysinfo_mode()
1339 dev_err(cd->dev, "%s: tmo waiting exit bl cd->mode=%d\n", in cyttsp4_wait_sysinfo_mode()
1340 __func__, cd->mode); in cyttsp4_wait_sysinfo_mode()
1341 mutex_lock(&cd->system_lock); in cyttsp4_wait_sysinfo_mode()
1342 cd->int_status &= ~CY_INT_MODE_CHANGE; in cyttsp4_wait_sysinfo_mode()
1343 mutex_unlock(&cd->system_lock); in cyttsp4_wait_sysinfo_mode()
1350 static int cyttsp4_reset_and_wait(struct cyttsp4 *cd) in cyttsp4_reset_and_wait() argument
1355 mutex_lock(&cd->system_lock); in cyttsp4_reset_and_wait()
1356 dev_dbg(cd->dev, "%s: reset hw...\n", __func__); in cyttsp4_reset_and_wait()
1357 rc = cyttsp4_hw_reset(cd); in cyttsp4_reset_and_wait()
1358 cd->mode = CY_MODE_UNKNOWN; in cyttsp4_reset_and_wait()
1359 mutex_unlock(&cd->system_lock); in cyttsp4_reset_and_wait()
1361 dev_err(cd->dev, "%s:Fail hw reset r=%d\n", __func__, rc); in cyttsp4_reset_and_wait()
1365 return cyttsp4_wait_bl_heartbeat(cd); in cyttsp4_reset_and_wait()
1372 static int cyttsp4_set_mode(struct cyttsp4 *cd, int new_mode) in cyttsp4_set_mode() argument
1390 dev_err(cd->dev, "%s: invalid mode: %02X(%d)\n", in cyttsp4_set_mode()
1396 dev_dbg(cd->dev, "%s: %s=%p new_dev_mode=%02X new_mode=%d\n", in cyttsp4_set_mode()
1397 __func__, "have exclusive", cd->exclusive_dev, in cyttsp4_set_mode()
1400 mutex_lock(&cd->system_lock); in cyttsp4_set_mode()
1401 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode); in cyttsp4_set_mode()
1403 mutex_unlock(&cd->system_lock); in cyttsp4_set_mode()
1404 dev_err(cd->dev, "%s: Fail read mode r=%d\n", in cyttsp4_set_mode()
1413 cd->int_status |= CY_INT_MODE_CHANGE; in cyttsp4_set_mode()
1414 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(mode), &mode); in cyttsp4_set_mode()
1415 mutex_unlock(&cd->system_lock); in cyttsp4_set_mode()
1417 dev_err(cd->dev, "%s: Fail write mode change r=%d\n", in cyttsp4_set_mode()
1423 t = wait_event_timeout(cd->wait_q, in cyttsp4_set_mode()
1424 (cd->int_status & CY_INT_MODE_CHANGE) == 0, in cyttsp4_set_mode()
1426 dev_dbg(cd->dev, "%s: back from wait t=%ld cd->mode=%d\n", in cyttsp4_set_mode()
1427 __func__, t, cd->mode); in cyttsp4_set_mode()
1430 dev_err(cd->dev, "%s: %s\n", __func__, in cyttsp4_set_mode()
1432 mutex_lock(&cd->system_lock); in cyttsp4_set_mode()
1433 cd->int_status &= ~CY_INT_MODE_CHANGE; in cyttsp4_set_mode()
1434 mutex_unlock(&cd->system_lock); in cyttsp4_set_mode()
1444 struct cyttsp4 *cd = in cyttsp4_watchdog_work() local
1449 mutex_lock(&cd->system_lock); in cyttsp4_watchdog_work()
1450 retval = cyttsp4_load_status_regs(cd); in cyttsp4_watchdog_work()
1452 dev_err(cd->dev, in cyttsp4_watchdog_work()
1455 cyttsp4_queue_startup_(cd); in cyttsp4_watchdog_work()
1458 mode = &cd->sysinfo.xy_mode[CY_REG_BASE]; in cyttsp4_watchdog_work()
1460 dev_err(cd->dev, in cyttsp4_watchdog_work()
1463 cyttsp4_queue_startup_(cd); in cyttsp4_watchdog_work()
1467 cyttsp4_start_wd_timer(cd); in cyttsp4_watchdog_work()
1469 mutex_unlock(&cd->system_lock); in cyttsp4_watchdog_work()
1473 static int cyttsp4_core_sleep_(struct cyttsp4 *cd) in cyttsp4_core_sleep_() argument
1481 mutex_lock(&cd->system_lock); in cyttsp4_core_sleep_()
1482 if (cd->sleep_state == SS_SLEEP_ON) { in cyttsp4_core_sleep_()
1483 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1486 cd->sleep_state = SS_SLEEPING; in cyttsp4_core_sleep_()
1487 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1489 cyttsp4_stop_wd_timer(cd); in cyttsp4_core_sleep_()
1492 disable_irq(cd->irq); in cyttsp4_core_sleep_()
1494 dev_vdbg(cd->dev, "%s: write DEEP SLEEP...\n", __func__); in cyttsp4_core_sleep_()
1495 mutex_lock(&cd->system_lock); in cyttsp4_core_sleep_()
1496 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode); in cyttsp4_core_sleep_()
1498 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1499 dev_err(cd->dev, "%s: Fail read adapter r=%d\n", __func__, rc); in cyttsp4_core_sleep_()
1504 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1505 dev_err(cd->dev, "%s: Device in BOOTLADER mode.\n", __func__); in cyttsp4_core_sleep_()
1511 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(mode[0]), &mode[0]); in cyttsp4_core_sleep_()
1512 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1514 dev_err(cd->dev, "%s: Fail write adapter r=%d\n", __func__, rc); in cyttsp4_core_sleep_()
1517 dev_vdbg(cd->dev, "%s: write DEEP SLEEP succeeded\n", __func__); in cyttsp4_core_sleep_()
1519 if (cd->cpdata->power) { in cyttsp4_core_sleep_()
1520 dev_dbg(cd->dev, "%s: Power down HW\n", __func__); in cyttsp4_core_sleep_()
1521 rc = cd->cpdata->power(cd->cpdata, 0, cd->dev, &cd->ignore_irq); in cyttsp4_core_sleep_()
1523 dev_dbg(cd->dev, "%s: No power function\n", __func__); in cyttsp4_core_sleep_()
1527 dev_err(cd->dev, "%s: HW Power down fails r=%d\n", in cyttsp4_core_sleep_()
1540 cyttsp4_start_wd_timer(cd); in cyttsp4_core_sleep_()
1543 mutex_lock(&cd->system_lock); in cyttsp4_core_sleep_()
1544 cd->sleep_state = ss; in cyttsp4_core_sleep_()
1545 cd->int_status |= int_status; in cyttsp4_core_sleep_()
1546 mutex_unlock(&cd->system_lock); in cyttsp4_core_sleep_()
1547 enable_irq(cd->irq); in cyttsp4_core_sleep_()
1551 static int cyttsp4_startup_(struct cyttsp4 *cd) in cyttsp4_startup_() argument
1556 cyttsp4_stop_wd_timer(cd); in cyttsp4_startup_()
1560 dev_dbg(cd->dev, "%s: Retry %d\n", __func__, in cyttsp4_startup_()
1564 rc = cyttsp4_reset_and_wait(cd); in cyttsp4_startup_()
1566 dev_err(cd->dev, "%s: Error on h/w reset r=%d\n", __func__, rc); in cyttsp4_startup_()
1573 dev_vdbg(cd->dev, "%s: write exit ldr...\n", __func__); in cyttsp4_startup_()
1574 mutex_lock(&cd->system_lock); in cyttsp4_startup_()
1575 cd->int_status &= ~CY_INT_IGNORE; in cyttsp4_startup_()
1576 cd->int_status |= CY_INT_MODE_CHANGE; in cyttsp4_startup_()
1578 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(ldr_exit), in cyttsp4_startup_()
1580 mutex_unlock(&cd->system_lock); in cyttsp4_startup_()
1582 dev_err(cd->dev, "%s: Fail write r=%d\n", __func__, rc); in cyttsp4_startup_()
1588 rc = cyttsp4_wait_sysinfo_mode(cd); in cyttsp4_startup_()
1594 rc1 = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(ldr_err_app), in cyttsp4_startup_()
1597 dev_err(cd->dev, "%s: Fail read r=%d\n", __func__, rc1); in cyttsp4_startup_()
1599 dev_err(cd->dev, "%s: Error launching touch application\n", in cyttsp4_startup_()
1601 mutex_lock(&cd->system_lock); in cyttsp4_startup_()
1602 cd->invalid_touch_app = true; in cyttsp4_startup_()
1603 mutex_unlock(&cd->system_lock); in cyttsp4_startup_()
1612 mutex_lock(&cd->system_lock); in cyttsp4_startup_()
1613 cd->invalid_touch_app = false; in cyttsp4_startup_()
1614 mutex_unlock(&cd->system_lock); in cyttsp4_startup_()
1617 dev_vdbg(cd->dev, "%s: get sysinfo regs..\n", __func__); in cyttsp4_startup_()
1618 rc = cyttsp4_get_sysinfo_regs(cd); in cyttsp4_startup_()
1620 dev_err(cd->dev, "%s: failed to get sysinfo regs rc=%d\n", in cyttsp4_startup_()
1627 rc = cyttsp4_set_mode(cd, CY_MODE_OPERATIONAL); in cyttsp4_startup_()
1629 dev_err(cd->dev, "%s: failed to set mode to operational rc=%d\n", in cyttsp4_startup_()
1636 cyttsp4_lift_all(&cd->md); in cyttsp4_startup_()
1639 mutex_lock(&cd->system_lock); in cyttsp4_startup_()
1640 if (cd->sleep_state == SS_SLEEP_ON) { in cyttsp4_startup_()
1641 cd->sleep_state = SS_SLEEP_OFF; in cyttsp4_startup_()
1642 mutex_unlock(&cd->system_lock); in cyttsp4_startup_()
1643 cyttsp4_core_sleep_(cd); in cyttsp4_startup_()
1646 mutex_unlock(&cd->system_lock); in cyttsp4_startup_()
1649 cyttsp4_start_wd_timer(cd); in cyttsp4_startup_()
1654 static int cyttsp4_startup(struct cyttsp4 *cd) in cyttsp4_startup() argument
1658 mutex_lock(&cd->system_lock); in cyttsp4_startup()
1659 cd->startup_state = STARTUP_RUNNING; in cyttsp4_startup()
1660 mutex_unlock(&cd->system_lock); in cyttsp4_startup()
1662 rc = cyttsp4_request_exclusive(cd, cd->dev, in cyttsp4_startup()
1665 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n", in cyttsp4_startup()
1666 __func__, cd->exclusive_dev, cd->dev); in cyttsp4_startup()
1670 rc = cyttsp4_startup_(cd); in cyttsp4_startup()
1672 if (cyttsp4_release_exclusive(cd, cd->dev) < 0) in cyttsp4_startup()
1674 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__); in cyttsp4_startup()
1676 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__); in cyttsp4_startup()
1679 mutex_lock(&cd->system_lock); in cyttsp4_startup()
1680 cd->startup_state = STARTUP_NONE; in cyttsp4_startup()
1681 mutex_unlock(&cd->system_lock); in cyttsp4_startup()
1684 wake_up(&cd->wait_q); in cyttsp4_startup()
1691 struct cyttsp4 *cd = container_of(work, struct cyttsp4, startup_work); in cyttsp4_startup_work_function() local
1694 rc = cyttsp4_startup(cd); in cyttsp4_startup_work_function()
1696 dev_err(cd->dev, "%s: Fail queued startup r=%d\n", in cyttsp4_startup_work_function()
1700 static void cyttsp4_free_si_ptrs(struct cyttsp4 *cd) in cyttsp4_free_si_ptrs() argument
1702 struct cyttsp4_sysinfo *si = &cd->sysinfo; in cyttsp4_free_si_ptrs()
1720 static int cyttsp4_core_sleep(struct cyttsp4 *cd) in cyttsp4_core_sleep() argument
1724 rc = cyttsp4_request_exclusive(cd, cd->dev, in cyttsp4_core_sleep()
1727 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n", in cyttsp4_core_sleep()
1728 __func__, cd->exclusive_dev, cd->dev); in cyttsp4_core_sleep()
1732 rc = cyttsp4_core_sleep_(cd); in cyttsp4_core_sleep()
1734 if (cyttsp4_release_exclusive(cd, cd->dev) < 0) in cyttsp4_core_sleep()
1735 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__); in cyttsp4_core_sleep()
1737 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__); in cyttsp4_core_sleep()
1742 static int cyttsp4_core_wake_(struct cyttsp4 *cd) in cyttsp4_core_wake_() argument
1744 struct device *dev = cd->dev; in cyttsp4_core_wake_()
1750 mutex_lock(&cd->system_lock); in cyttsp4_core_wake_()
1751 if (cd->sleep_state == SS_SLEEP_OFF) { in cyttsp4_core_wake_()
1752 mutex_unlock(&cd->system_lock); in cyttsp4_core_wake_()
1755 cd->int_status &= ~CY_INT_IGNORE; in cyttsp4_core_wake_()
1756 cd->int_status |= CY_INT_AWAKE; in cyttsp4_core_wake_()
1757 cd->sleep_state = SS_WAKING; in cyttsp4_core_wake_()
1759 if (cd->cpdata->power) { in cyttsp4_core_wake_()
1761 rc = cd->cpdata->power(cd->cpdata, 1, dev, &cd->ignore_irq); in cyttsp4_core_wake_()
1771 cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode); in cyttsp4_core_wake_()
1773 dev_vdbg(cd->dev, "%s: HW power up succeeds\n", in cyttsp4_core_wake_()
1775 mutex_unlock(&cd->system_lock); in cyttsp4_core_wake_()
1777 t = wait_event_timeout(cd->wait_q, in cyttsp4_core_wake_()
1778 (cd->int_status & CY_INT_AWAKE) == 0, in cyttsp4_core_wake_()
1782 mutex_lock(&cd->system_lock); in cyttsp4_core_wake_()
1783 cd->int_status &= ~CY_INT_AWAKE; in cyttsp4_core_wake_()
1785 cyttsp4_queue_startup_(cd); in cyttsp4_core_wake_()
1786 mutex_unlock(&cd->system_lock); in cyttsp4_core_wake_()
1789 mutex_lock(&cd->system_lock); in cyttsp4_core_wake_()
1790 cd->sleep_state = SS_SLEEP_OFF; in cyttsp4_core_wake_()
1791 mutex_unlock(&cd->system_lock); in cyttsp4_core_wake_()
1793 cyttsp4_start_wd_timer(cd); in cyttsp4_core_wake_()
1798 static int cyttsp4_core_wake(struct cyttsp4 *cd) in cyttsp4_core_wake() argument
1802 rc = cyttsp4_request_exclusive(cd, cd->dev, in cyttsp4_core_wake()
1805 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n", in cyttsp4_core_wake()
1806 __func__, cd->exclusive_dev, cd->dev); in cyttsp4_core_wake()
1810 rc = cyttsp4_core_wake_(cd); in cyttsp4_core_wake()
1812 if (cyttsp4_release_exclusive(cd, cd->dev) < 0) in cyttsp4_core_wake()
1813 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__); in cyttsp4_core_wake()
1815 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__); in cyttsp4_core_wake()
1822 struct cyttsp4 *cd = dev_get_drvdata(dev); in cyttsp4_core_suspend() local
1823 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_core_suspend()
1828 rc = cyttsp4_core_sleep(cd); in cyttsp4_core_suspend()
1838 struct cyttsp4 *cd = dev_get_drvdata(dev); in cyttsp4_core_resume() local
1839 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_core_resume()
1844 rc = cyttsp4_core_wake(cd); in cyttsp4_core_resume()
1876 static int cyttsp4_setup_input_device(struct cyttsp4 *cd) in cyttsp4_setup_input_device() argument
1878 struct device *dev = cd->dev; in cyttsp4_setup_input_device()
1879 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_setup_input_device()
1947 static int cyttsp4_mt_probe(struct cyttsp4 *cd) in cyttsp4_mt_probe() argument
1949 struct device *dev = cd->dev; in cyttsp4_mt_probe()
1950 struct cyttsp4_mt_data *md = &cd->md; in cyttsp4_mt_probe()
1951 struct cyttsp4_mt_platform_data *pdata = cd->pdata->mt_pdata; in cyttsp4_mt_probe()
1970 md->input->id.bustype = cd->bus_ops->bustype; in cyttsp4_mt_probe()
1977 md->si = &cd->sysinfo; in cyttsp4_mt_probe()
1984 rc = cyttsp4_setup_input_device(cd); in cyttsp4_mt_probe()
2002 struct cyttsp4 *cd; in cyttsp4_probe() local
2013 cd = kzalloc(sizeof(*cd), GFP_KERNEL); in cyttsp4_probe()
2014 if (!cd) { in cyttsp4_probe()
2020 cd->xfer_buf = kzalloc(xfer_buf_size, GFP_KERNEL); in cyttsp4_probe()
2021 if (!cd->xfer_buf) { in cyttsp4_probe()
2028 cd->dev = dev; in cyttsp4_probe()
2029 cd->pdata = pdata; in cyttsp4_probe()
2030 cd->cpdata = pdata->core_pdata; in cyttsp4_probe()
2031 cd->bus_ops = ops; in cyttsp4_probe()
2034 mutex_init(&cd->system_lock); in cyttsp4_probe()
2035 mutex_init(&cd->adap_lock); in cyttsp4_probe()
2038 init_waitqueue_head(&cd->wait_q); in cyttsp4_probe()
2041 INIT_WORK(&cd->startup_work, cyttsp4_startup_work_function); in cyttsp4_probe()
2042 INIT_WORK(&cd->watchdog_work, cyttsp4_watchdog_work); in cyttsp4_probe()
2045 cd->irq = gpio_to_irq(cd->cpdata->irq_gpio); in cyttsp4_probe()
2046 if (cd->irq < 0) { in cyttsp4_probe()
2051 dev_set_drvdata(dev, cd); in cyttsp4_probe()
2054 if (cd->cpdata->init) { in cyttsp4_probe()
2055 dev_dbg(cd->dev, "%s: Init HW\n", __func__); in cyttsp4_probe()
2056 rc = cd->cpdata->init(cd->cpdata, 1, cd->dev); in cyttsp4_probe()
2058 dev_dbg(cd->dev, "%s: No HW INIT function\n", __func__); in cyttsp4_probe()
2062 dev_err(cd->dev, "%s: HW Init fail r=%d\n", __func__, rc); in cyttsp4_probe()
2064 dev_dbg(dev, "%s: initialize threaded irq=%d\n", __func__, cd->irq); in cyttsp4_probe()
2065 if (cd->cpdata->level_irq_udelay > 0) in cyttsp4_probe()
2072 rc = request_threaded_irq(cd->irq, NULL, cyttsp4_irq, irq_flags, in cyttsp4_probe()
2073 dev_name(dev), cd); in cyttsp4_probe()
2080 setup_timer(&cd->watchdog_timer, cyttsp4_watchdog_timer, in cyttsp4_probe()
2081 (unsigned long)cd); in cyttsp4_probe()
2087 rc = cyttsp4_startup(cd); in cyttsp4_probe()
2090 if (rc < 0 && cd->mode == CY_MODE_UNKNOWN) { in cyttsp4_probe()
2091 dev_err(cd->dev, "%s: Fail initial startup r=%d\n", in cyttsp4_probe()
2096 rc = cyttsp4_mt_probe(cd); in cyttsp4_probe()
2104 return cd; in cyttsp4_probe()
2107 cancel_work_sync(&cd->startup_work); in cyttsp4_probe()
2108 cyttsp4_stop_wd_timer(cd); in cyttsp4_probe()
2110 cyttsp4_free_si_ptrs(cd); in cyttsp4_probe()
2111 free_irq(cd->irq, cd); in cyttsp4_probe()
2113 if (cd->cpdata->init) in cyttsp4_probe()
2114 cd->cpdata->init(cd->cpdata, 0, dev); in cyttsp4_probe()
2116 kfree(cd->xfer_buf); in cyttsp4_probe()
2118 kfree(cd); in cyttsp4_probe()
2132 int cyttsp4_remove(struct cyttsp4 *cd) in cyttsp4_remove() argument
2134 struct device *dev = cd->dev; in cyttsp4_remove()
2136 cyttsp4_mt_release(&cd->md); in cyttsp4_remove()
2145 cancel_work_sync(&cd->startup_work); in cyttsp4_remove()
2147 cyttsp4_stop_wd_timer(cd); in cyttsp4_remove()
2149 free_irq(cd->irq, cd); in cyttsp4_remove()
2150 if (cd->cpdata->init) in cyttsp4_remove()
2151 cd->cpdata->init(cd->cpdata, 0, dev); in cyttsp4_remove()
2152 cyttsp4_free_si_ptrs(cd); in cyttsp4_remove()
2153 kfree(cd); in cyttsp4_remove()