Lines Matching refs:cd

84 static int cyttsp4_load_status_regs(struct cyttsp4 *cd)
86 struct cyttsp4_sysinfo *si = &cd->sysinfo;
87 struct device *dev = cd->dev;
90 rc = cyttsp4_adap_read(cd, CY_REG_BASE, si->si_ofs.mode_size,
96 cyttsp4_pr_buf(dev, cd->pr_buf, si->xy_mode,
102 static int cyttsp4_handshake(struct cyttsp4 *cd, u8 mode)
114 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(cmd), &cmd);
116 dev_err(cd->dev, "%s: bus write fail on handshake (ret=%d)\n",
122 static int cyttsp4_hw_soft_reset(struct cyttsp4 *cd)
125 int rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(cmd), &cmd);
127 dev_err(cd->dev, "%s: FAILED to execute SOFT reset\n",
134 static int cyttsp4_hw_hard_reset(struct cyttsp4 *cd)
136 if (cd->cpdata->xres) {
137 cd->cpdata->xres(cd->cpdata, cd->dev);
138 dev_dbg(cd->dev, "%s: execute HARD reset\n", __func__);
141 dev_err(cd->dev, "%s: FAILED to execute HARD reset\n", __func__);
145 static int cyttsp4_hw_reset(struct cyttsp4 *cd)
147 int rc = cyttsp4_hw_hard_reset(cd);
149 rc = cyttsp4_hw_soft_reset(cd);
164 static int cyttsp4_si_data_offsets(struct cyttsp4 *cd)
166 struct cyttsp4_sysinfo *si = &cd->sysinfo;
167 int rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(si->si_data),
170 dev_err(cd->dev, "%s: fail read sysinfo data offsets r=%d\n",
176 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)&si->si_data,
200 static int cyttsp4_si_get_cydata(struct cyttsp4 *cd)
202 struct cyttsp4_sysinfo *si = &cd->sysinfo;
209 dev_err(cd->dev,
216 dev_dbg(cd->dev, "%s: cydata size: %zd\n", __func__,
221 dev_err(cd->dev, "%s: failed to allocate cydata memory\n",
230 rc = cyttsp4_adap_read(cd, read_offset,
235 dev_err(cd->dev, "%s: fail read cydata r=%d\n",
244 dev_err(cd->dev, "%s: mismatch in MFGID size, reported:%d calculated:%d\n",
253 rc = cyttsp4_adap_read(cd, read_offset, si->si_ptrs.cydata->mfgid_sz,
256 dev_err(cd->dev, "%s: fail read cydata r=%d\n",
264 rc = cyttsp4_adap_read(cd, read_offset,
269 dev_err(cd->dev, "%s: fail read cydata r=%d\n",
274 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)si->si_ptrs.cydata,
279 static int cyttsp4_si_get_test_data(struct cyttsp4 *cd)
281 struct cyttsp4_sysinfo *si = &cd->sysinfo;
286 dev_err(cd->dev,
296 dev_err(cd->dev, "%s: failed to allocate test memory\n",
302 rc = cyttsp4_adap_read(cd, si->si_ofs.test_ofs, si->si_ofs.test_size,
305 dev_err(cd->dev, "%s: fail read test data r=%d\n",
310 cyttsp4_pr_buf(cd->dev, cd->pr_buf,
315 dev_info(cd->dev, "%s: %s codel=%02X\n",
321 dev_info(cd->dev, "%s: %s codel=%02X\n", __func__,
327 dev_info(cd->dev, "%s: %s codel=%02X\n",
331 dev_info(cd->dev, "%s: SCANNING is %s codel=%02X\n",
338 static int cyttsp4_si_get_pcfg_data(struct cyttsp4 *cd)
340 struct cyttsp4_sysinfo *si = &cd->sysinfo;
345 dev_err(cd->dev,
355 dev_err(cd->dev, "%s: failed to allocate pcfg memory\n",
361 rc = cyttsp4_adap_read(cd, si->si_ofs.pcfg_ofs, si->si_ofs.pcfg_size,
364 dev_err(cd->dev, "%s: fail read pcfg data r=%d\n",
380 cyttsp4_pr_buf(cd->dev, cd->pr_buf,
386 static int cyttsp4_si_get_opcfg_data(struct cyttsp4 *cd)
388 struct cyttsp4_sysinfo *si = &cd->sysinfo;
397 dev_err(cd->dev,
407 dev_err(cd->dev, "%s: failed to allocate opcfg memory\n",
413 rc = cyttsp4_adap_read(cd, si->si_ofs.opcfg_ofs, si->si_ofs.opcfg_size,
416 dev_err(cd->dev, "%s: fail read opcfg data r=%d\n",
464 dev_dbg(cd->dev, "%s: tch_rec_%s\n", __func__,
466 dev_dbg(cd->dev, "%s: ofs =%2zd\n", __func__,
468 dev_dbg(cd->dev, "%s: siz =%2zd\n", __func__,
470 dev_dbg(cd->dev, "%s: max =%2zd\n", __func__,
472 dev_dbg(cd->dev, "%s: bofs=%2zd\n", __func__,
480 cyttsp4_pr_buf(cd->dev, cd->pr_buf, (u8 *)si->si_ptrs.opcfg,
486 static int cyttsp4_si_get_ddata(struct cyttsp4 *cd)
488 struct cyttsp4_sysinfo *si = &cd->sysinfo;
496 dev_err(cd->dev, "%s: fail alloc ddata memory\n", __func__);
501 rc = cyttsp4_adap_read(cd, si->si_ofs.ddata_ofs, si->si_ofs.ddata_size,
504 dev_err(cd->dev, "%s: fail read ddata data r=%d\n",
507 cyttsp4_pr_buf(cd->dev, cd->pr_buf,
513 static int cyttsp4_si_get_mdata(struct cyttsp4 *cd)
515 struct cyttsp4_sysinfo *si = &cd->sysinfo;
523 dev_err(cd->dev, "%s: fail alloc mdata memory\n", __func__);
528 rc = cyttsp4_adap_read(cd, si->si_ofs.mdata_ofs, si->si_ofs.mdata_size,
531 dev_err(cd->dev, "%s: fail read mdata data r=%d\n",
534 cyttsp4_pr_buf(cd->dev, cd->pr_buf,
540 static int cyttsp4_si_get_btn_data(struct cyttsp4 *cd)
542 struct cyttsp4_sysinfo *si = &cd->sysinfo;
556 dev_err(cd->dev, "%s: %s\n", __func__,
562 if (cd->cpdata->sett[CY_IC_GRPNUM_BTN_KEYS] == NULL)
564 else if (cd->cpdata->sett[CY_IC_GRPNUM_BTN_KEYS]->data == NULL)
567 num_defined_keys = cd->cpdata->sett
572 key_table = (u16 *)cd->cpdata->sett
593 static int cyttsp4_si_get_op_data_ptrs(struct cyttsp4 *cd)
595 struct cyttsp4_sysinfo *si = &cd->sysinfo;
618 static void cyttsp4_si_put_log_data(struct cyttsp4 *cd)
620 struct cyttsp4_sysinfo *si = &cd->sysinfo;
621 dev_dbg(cd->dev, "%s: cydata_ofs =%4zd siz=%4zd\n", __func__,
623 dev_dbg(cd->dev, "%s: test_ofs =%4zd siz=%4zd\n", __func__,
625 dev_dbg(cd->dev, "%s: pcfg_ofs =%4zd siz=%4zd\n", __func__,
627 dev_dbg(cd->dev, "%s: opcfg_ofs =%4zd siz=%4zd\n", __func__,
629 dev_dbg(cd->dev, "%s: ddata_ofs =%4zd siz=%4zd\n", __func__,
631 dev_dbg(cd->dev, "%s: mdata_ofs =%4zd siz=%4zd\n", __func__,
634 dev_dbg(cd->dev, "%s: cmd_ofs =%4zd\n", __func__,
636 dev_dbg(cd->dev, "%s: rep_ofs =%4zd\n", __func__,
638 dev_dbg(cd->dev, "%s: rep_sz =%4zd\n", __func__,
640 dev_dbg(cd->dev, "%s: num_btns =%4zd\n", __func__,
642 dev_dbg(cd->dev, "%s: num_btn_regs =%4zd\n", __func__,
644 dev_dbg(cd->dev, "%s: tt_stat_ofs =%4zd\n", __func__,
646 dev_dbg(cd->dev, "%s: tch_rec_size =%4zd\n", __func__,
648 dev_dbg(cd->dev, "%s: max_tchs =%4zd\n", __func__,
650 dev_dbg(cd->dev, "%s: mode_size =%4zd\n", __func__,
652 dev_dbg(cd->dev, "%s: data_size =%4zd\n", __func__,
654 dev_dbg(cd->dev, "%s: map_sz =%4zd\n", __func__,
657 dev_dbg(cd->dev, "%s: btn_rec_size =%2zd\n", __func__,
659 dev_dbg(cd->dev, "%s: btn_diff_ofs =%2zd\n", __func__,
661 dev_dbg(cd->dev, "%s: btn_diff_size =%2zd\n", __func__,
664 dev_dbg(cd->dev, "%s: max_x = 0x%04zX (%zd)\n", __func__,
666 dev_dbg(cd->dev, "%s: x_origin = %zd (%s)\n", __func__,
670 dev_dbg(cd->dev, "%s: max_y = 0x%04zX (%zd)\n", __func__,
672 dev_dbg(cd->dev, "%s: y_origin = %zd (%s)\n", __func__,
676 dev_dbg(cd->dev, "%s: max_p = 0x%04zX (%zd)\n", __func__,
679 dev_dbg(cd->dev, "%s: xy_mode=%p xy_data=%p\n", __func__,
683 static int cyttsp4_get_sysinfo_regs(struct cyttsp4 *cd)
685 struct cyttsp4_sysinfo *si = &cd->sysinfo;
688 rc = cyttsp4_si_data_offsets(cd);
692 rc = cyttsp4_si_get_cydata(cd);
696 rc = cyttsp4_si_get_test_data(cd);
700 rc = cyttsp4_si_get_pcfg_data(cd);
704 rc = cyttsp4_si_get_opcfg_data(cd);
708 rc = cyttsp4_si_get_ddata(cd);
712 rc = cyttsp4_si_get_mdata(cd);
716 rc = cyttsp4_si_get_btn_data(cd);
720 rc = cyttsp4_si_get_op_data_ptrs(cd);
722 dev_err(cd->dev, "%s: failed to get_op_data\n",
727 cyttsp4_si_put_log_data(cd);
730 rc = cyttsp4_handshake(cd, si->si_data.hst_mode);
732 dev_err(cd->dev, "%s: handshake fail on sysinfo reg\n",
739 static void cyttsp4_queue_startup_(struct cyttsp4 *cd)
741 if (cd->startup_state == STARTUP_NONE) {
742 cd->startup_state = STARTUP_QUEUED;
743 schedule_work(&cd->startup_work);
744 dev_dbg(cd->dev, "%s: cyttsp4_startup queued\n", __func__);
746 dev_dbg(cd->dev, "%s: startup_state = %d\n", __func__,
747 cd->startup_state);
967 static int cyttsp4_xy_worker(struct cyttsp4 *cd)
969 struct cyttsp4_mt_data *md = &cd->md;
1009 rc = cyttsp4_adap_read(cd, si->si_ofs.tt_stat_ofs + 1,
1020 cyttsp4_pr_buf(dev, cd->pr_buf, si->xy_data, num_cur_tch *
1053 static int cyttsp4_mt_attention(struct cyttsp4 *cd)
1055 struct device *dev = cd->dev;
1056 struct cyttsp4_mt_data *md = &cd->md;
1065 rc = cyttsp4_xy_worker(cd);
1079 struct cyttsp4 *cd = handle;
1080 struct device *dev = cd->dev;
1082 u8 cmd_ofs = cd->sysinfo.si_ofs.cmd_ofs;
1091 if (atomic_read(&cd->ignore_irq)) {
1096 dev_dbg(dev, "%s int:0x%x\n", __func__, cd->int_status);
1098 mutex_lock(&cd->system_lock);
1101 if (cd->sleep_state == SS_SLEEP_ON || cd->sleep_state == SS_SLEEPING)
1104 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), mode);
1106 dev_err(cd->dev, "%s: Fail read adapter r=%d\n", __func__, rc);
1115 if (cd->mode == CY_MODE_BOOTLOADER) {
1117 wake_up(&cd->wait_q);
1123 __func__, cd->mode, cur_mode);
1126 if (cd->mode != CY_MODE_UNKNOWN) {
1128 cd->mode = CY_MODE_UNKNOWN;
1129 cyttsp4_queue_startup_(cd);
1138 cd->mode = cur_mode;
1164 if (cd->int_status & CY_INT_IGNORE) {
1170 if (cd->int_status & CY_INT_AWAKE) {
1171 cd->int_status &= ~CY_INT_AWAKE;
1172 wake_up(&cd->wait_q);
1178 if ((cd->int_status & CY_INT_MODE_CHANGE)
1180 cd->int_status &= ~CY_INT_MODE_CHANGE;
1182 __func__, cd->mode, cur_mode);
1183 cd->mode = cur_mode;
1184 wake_up(&cd->wait_q);
1189 dev_vdbg(dev, "%s: cd->mode=%d cur_mode=%d\n",
1190 __func__, cd->mode, cur_mode);
1191 if ((mode[0] & CY_HST_MODE_CHANGE) == 0 && cd->mode != cur_mode) {
1193 dev_err(dev, "%s %d->%d 0x%x\n", __func__, cd->mode,
1194 cur_mode, cd->int_status);
1197 cyttsp4_queue_startup_(cd);
1203 if ((cd->int_status & CY_INT_EXEC_CMD)
1205 cd->int_status &= ~CY_INT_EXEC_CMD;
1208 wake_up(&cd->wait_q);
1217 if (cd->mode == CY_MODE_OPERATIONAL) {
1219 rc = cyttsp4_load_status_regs(cd);
1225 cyttsp4_mt_attention(cd);
1231 rc = cyttsp4_handshake(cd, mode[0]);
1241 udelay(cd->cpdata->level_irq_udelay);
1244 mutex_unlock(&cd->system_lock);
1248 static void cyttsp4_start_wd_timer(struct cyttsp4 *cd)
1253 mod_timer(&cd->watchdog_timer, jiffies +
1257 static void cyttsp4_stop_wd_timer(struct cyttsp4 *cd)
1266 timer_shutdown_sync(&cd->watchdog_timer);
1267 cancel_work_sync(&cd->watchdog_work);
1272 struct cyttsp4 *cd = from_timer(cd, t, watchdog_timer);
1274 dev_vdbg(cd->dev, "%s: Watchdog timer triggered\n", __func__);
1276 schedule_work(&cd->watchdog_work);
1281 static int cyttsp4_request_exclusive(struct cyttsp4 *cd, void *ownptr,
1287 mutex_lock(&cd->system_lock);
1288 if (!cd->exclusive_dev && cd->exclusive_waits == 0) {
1289 cd->exclusive_dev = ownptr;
1293 cd->exclusive_waits++;
1295 mutex_unlock(&cd->system_lock);
1297 t = wait_event_timeout(cd->wait_q, !cd->exclusive_dev, t);
1299 dev_err(cd->dev, "%s: tmo waiting exclusive access\n",
1301 mutex_lock(&cd->system_lock);
1302 cd->exclusive_waits--;
1303 mutex_unlock(&cd->system_lock);
1307 wait_event(cd->wait_q, !cd->exclusive_dev);
1309 mutex_lock(&cd->system_lock);
1310 if (cd->exclusive_dev)
1312 cd->exclusive_dev = ownptr;
1313 cd->exclusive_waits--;
1315 mutex_unlock(&cd->system_lock);
1323 static int cyttsp4_release_exclusive(struct cyttsp4 *cd, void *ownptr)
1325 mutex_lock(&cd->system_lock);
1326 if (cd->exclusive_dev != ownptr) {
1327 mutex_unlock(&cd->system_lock);
1331 dev_vdbg(cd->dev, "%s: exclusive_dev %p freed\n",
1332 __func__, cd->exclusive_dev);
1333 cd->exclusive_dev = NULL;
1334 wake_up(&cd->wait_q);
1335 mutex_unlock(&cd->system_lock);
1339 static int cyttsp4_wait_bl_heartbeat(struct cyttsp4 *cd)
1345 dev_vdbg(cd->dev, "%s: wait heartbeat...\n", __func__);
1346 t = wait_event_timeout(cd->wait_q, cd->mode == CY_MODE_BOOTLOADER,
1349 dev_err(cd->dev, "%s: tmo waiting bl heartbeat cd->mode=%d\n",
1350 __func__, cd->mode);
1357 static int cyttsp4_wait_sysinfo_mode(struct cyttsp4 *cd)
1361 dev_vdbg(cd->dev, "%s: wait sysinfo...\n", __func__);
1363 t = wait_event_timeout(cd->wait_q, cd->mode == CY_MODE_SYSINFO,
1366 dev_err(cd->dev, "%s: tmo waiting exit bl cd->mode=%d\n",
1367 __func__, cd->mode);
1368 mutex_lock(&cd->system_lock);
1369 cd->int_status &= ~CY_INT_MODE_CHANGE;
1370 mutex_unlock(&cd->system_lock);
1377 static int cyttsp4_reset_and_wait(struct cyttsp4 *cd)
1382 mutex_lock(&cd->system_lock);
1383 dev_dbg(cd->dev, "%s: reset hw...\n", __func__);
1384 rc = cyttsp4_hw_reset(cd);
1385 cd->mode = CY_MODE_UNKNOWN;
1386 mutex_unlock(&cd->system_lock);
1388 dev_err(cd->dev, "%s:Fail hw reset r=%d\n", __func__, rc);
1392 return cyttsp4_wait_bl_heartbeat(cd);
1399 static int cyttsp4_set_mode(struct cyttsp4 *cd, int new_mode)
1417 dev_err(cd->dev, "%s: invalid mode: %02X(%d)\n",
1423 dev_dbg(cd->dev, "%s: %s=%p new_dev_mode=%02X new_mode=%d\n",
1424 __func__, "have exclusive", cd->exclusive_dev,
1427 mutex_lock(&cd->system_lock);
1428 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode);
1430 mutex_unlock(&cd->system_lock);
1431 dev_err(cd->dev, "%s: Fail read mode r=%d\n",
1440 cd->int_status |= CY_INT_MODE_CHANGE;
1441 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(mode), &mode);
1442 mutex_unlock(&cd->system_lock);
1444 dev_err(cd->dev, "%s: Fail write mode change r=%d\n",
1450 t = wait_event_timeout(cd->wait_q,
1451 (cd->int_status & CY_INT_MODE_CHANGE) == 0,
1453 dev_dbg(cd->dev, "%s: back from wait t=%ld cd->mode=%d\n",
1454 __func__, t, cd->mode);
1457 dev_err(cd->dev, "%s: %s\n", __func__,
1459 mutex_lock(&cd->system_lock);
1460 cd->int_status &= ~CY_INT_MODE_CHANGE;
1461 mutex_unlock(&cd->system_lock);
1471 struct cyttsp4 *cd =
1476 mutex_lock(&cd->system_lock);
1477 retval = cyttsp4_load_status_regs(cd);
1479 dev_err(cd->dev,
1482 cyttsp4_queue_startup_(cd);
1485 mode = &cd->sysinfo.xy_mode[CY_REG_BASE];
1487 dev_err(cd->dev,
1490 cyttsp4_queue_startup_(cd);
1494 cyttsp4_start_wd_timer(cd);
1496 mutex_unlock(&cd->system_lock);
1500 static int cyttsp4_core_sleep_(struct cyttsp4 *cd)
1508 mutex_lock(&cd->system_lock);
1509 if (cd->sleep_state == SS_SLEEP_ON) {
1510 mutex_unlock(&cd->system_lock);
1513 cd->sleep_state = SS_SLEEPING;
1514 mutex_unlock(&cd->system_lock);
1516 cyttsp4_stop_wd_timer(cd);
1519 disable_irq(cd->irq);
1521 dev_vdbg(cd->dev, "%s: write DEEP SLEEP...\n", __func__);
1522 mutex_lock(&cd->system_lock);
1523 rc = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode);
1525 mutex_unlock(&cd->system_lock);
1526 dev_err(cd->dev, "%s: Fail read adapter r=%d\n", __func__, rc);
1531 mutex_unlock(&cd->system_lock);
1532 dev_err(cd->dev, "%s: Device in BOOTLOADER mode.\n", __func__);
1538 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(mode[0]), &mode[0]);
1539 mutex_unlock(&cd->system_lock);
1541 dev_err(cd->dev, "%s: Fail write adapter r=%d\n", __func__, rc);
1544 dev_vdbg(cd->dev, "%s: write DEEP SLEEP succeeded\n", __func__);
1546 if (cd->cpdata->power) {
1547 dev_dbg(cd->dev, "%s: Power down HW\n", __func__);
1548 rc = cd->cpdata->power(cd->cpdata, 0, cd->dev, &cd->ignore_irq);
1550 dev_dbg(cd->dev, "%s: No power function\n", __func__);
1554 dev_err(cd->dev, "%s: HW Power down fails r=%d\n",
1567 cyttsp4_start_wd_timer(cd);
1570 mutex_lock(&cd->system_lock);
1571 cd->sleep_state = ss;
1572 cd->int_status |= int_status;
1573 mutex_unlock(&cd->system_lock);
1574 enable_irq(cd->irq);
1578 static int cyttsp4_startup_(struct cyttsp4 *cd)
1583 cyttsp4_stop_wd_timer(cd);
1587 dev_dbg(cd->dev, "%s: Retry %d\n", __func__,
1591 rc = cyttsp4_reset_and_wait(cd);
1593 dev_err(cd->dev, "%s: Error on h/w reset r=%d\n", __func__, rc);
1600 dev_vdbg(cd->dev, "%s: write exit ldr...\n", __func__);
1601 mutex_lock(&cd->system_lock);
1602 cd->int_status &= ~CY_INT_IGNORE;
1603 cd->int_status |= CY_INT_MODE_CHANGE;
1605 rc = cyttsp4_adap_write(cd, CY_REG_BASE, sizeof(ldr_exit),
1607 mutex_unlock(&cd->system_lock);
1609 dev_err(cd->dev, "%s: Fail write r=%d\n", __func__, rc);
1615 rc = cyttsp4_wait_sysinfo_mode(cd);
1621 rc1 = cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(ldr_err_app),
1624 dev_err(cd->dev, "%s: Fail read r=%d\n", __func__, rc1);
1626 dev_err(cd->dev, "%s: Error launching touch application\n",
1628 mutex_lock(&cd->system_lock);
1629 cd->invalid_touch_app = true;
1630 mutex_unlock(&cd->system_lock);
1639 mutex_lock(&cd->system_lock);
1640 cd->invalid_touch_app = false;
1641 mutex_unlock(&cd->system_lock);
1644 dev_vdbg(cd->dev, "%s: get sysinfo regs..\n", __func__);
1645 rc = cyttsp4_get_sysinfo_regs(cd);
1647 dev_err(cd->dev, "%s: failed to get sysinfo regs rc=%d\n",
1654 rc = cyttsp4_set_mode(cd, CY_MODE_OPERATIONAL);
1656 dev_err(cd->dev, "%s: failed to set mode to operational rc=%d\n",
1663 cyttsp4_lift_all(&cd->md);
1666 mutex_lock(&cd->system_lock);
1667 if (cd->sleep_state == SS_SLEEP_ON) {
1668 cd->sleep_state = SS_SLEEP_OFF;
1669 mutex_unlock(&cd->system_lock);
1670 cyttsp4_core_sleep_(cd);
1673 mutex_unlock(&cd->system_lock);
1676 cyttsp4_start_wd_timer(cd);
1681 static int cyttsp4_startup(struct cyttsp4 *cd)
1685 mutex_lock(&cd->system_lock);
1686 cd->startup_state = STARTUP_RUNNING;
1687 mutex_unlock(&cd->system_lock);
1689 rc = cyttsp4_request_exclusive(cd, cd->dev,
1692 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
1693 __func__, cd->exclusive_dev, cd->dev);
1697 rc = cyttsp4_startup_(cd);
1699 if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
1701 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
1703 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
1706 mutex_lock(&cd->system_lock);
1707 cd->startup_state = STARTUP_NONE;
1708 mutex_unlock(&cd->system_lock);
1711 wake_up(&cd->wait_q);
1718 struct cyttsp4 *cd = container_of(work, struct cyttsp4, startup_work);
1721 rc = cyttsp4_startup(cd);
1723 dev_err(cd->dev, "%s: Fail queued startup r=%d\n",
1727 static void cyttsp4_free_si_ptrs(struct cyttsp4 *cd)
1729 struct cyttsp4_sysinfo *si = &cd->sysinfo;
1746 static int cyttsp4_core_sleep(struct cyttsp4 *cd)
1750 rc = cyttsp4_request_exclusive(cd, cd->dev,
1753 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
1754 __func__, cd->exclusive_dev, cd->dev);
1758 rc = cyttsp4_core_sleep_(cd);
1760 if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
1761 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
1763 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
1768 static int cyttsp4_core_wake_(struct cyttsp4 *cd)
1770 struct device *dev = cd->dev;
1776 mutex_lock(&cd->system_lock);
1777 if (cd->sleep_state == SS_SLEEP_OFF) {
1778 mutex_unlock(&cd->system_lock);
1781 cd->int_status &= ~CY_INT_IGNORE;
1782 cd->int_status |= CY_INT_AWAKE;
1783 cd->sleep_state = SS_WAKING;
1785 if (cd->cpdata->power) {
1787 rc = cd->cpdata->power(cd->cpdata, 1, dev, &cd->ignore_irq);
1797 cyttsp4_adap_read(cd, CY_REG_BASE, sizeof(mode), &mode);
1799 dev_vdbg(cd->dev, "%s: HW power up succeeds\n",
1801 mutex_unlock(&cd->system_lock);
1803 t = wait_event_timeout(cd->wait_q,
1804 (cd->int_status & CY_INT_AWAKE) == 0,
1808 mutex_lock(&cd->system_lock);
1809 cd->int_status &= ~CY_INT_AWAKE;
1811 cyttsp4_queue_startup_(cd);
1812 mutex_unlock(&cd->system_lock);
1815 mutex_lock(&cd->system_lock);
1816 cd->sleep_state = SS_SLEEP_OFF;
1817 mutex_unlock(&cd->system_lock);
1819 cyttsp4_start_wd_timer(cd);
1824 static int cyttsp4_core_wake(struct cyttsp4 *cd)
1828 rc = cyttsp4_request_exclusive(cd, cd->dev,
1831 dev_err(cd->dev, "%s: fail get exclusive ex=%p own=%p\n",
1832 __func__, cd->exclusive_dev, cd->dev);
1836 rc = cyttsp4_core_wake_(cd);
1838 if (cyttsp4_release_exclusive(cd, cd->dev) < 0)
1839 dev_err(cd->dev, "%s: fail to release exclusive\n", __func__);
1841 dev_vdbg(cd->dev, "%s: pass release exclusive\n", __func__);
1848 struct cyttsp4 *cd = dev_get_drvdata(dev);
1849 struct cyttsp4_mt_data *md = &cd->md;
1854 rc = cyttsp4_core_sleep(cd);
1864 struct cyttsp4 *cd = dev_get_drvdata(dev);
1865 struct cyttsp4_mt_data *md = &cd->md;
1870 rc = cyttsp4_core_wake(cd);
1898 static int cyttsp4_setup_input_device(struct cyttsp4 *cd)
1900 struct device *dev = cd->dev;
1901 struct cyttsp4_mt_data *md = &cd->md;
1969 static int cyttsp4_mt_probe(struct cyttsp4 *cd)
1971 struct device *dev = cd->dev;
1972 struct cyttsp4_mt_data *md = &cd->md;
1973 struct cyttsp4_mt_platform_data *pdata = cd->pdata->mt_pdata;
1992 md->input->id.bustype = cd->bus_ops->bustype;
1999 md->si = &cd->sysinfo;
2001 rc = cyttsp4_setup_input_device(cd);
2017 struct cyttsp4 *cd;
2028 cd = kzalloc(sizeof(*cd), GFP_KERNEL);
2029 if (!cd) {
2035 cd->xfer_buf = kzalloc(xfer_buf_size, GFP_KERNEL);
2036 if (!cd->xfer_buf) {
2043 cd->dev = dev;
2044 cd->pdata = pdata;
2045 cd->cpdata = pdata->core_pdata;
2046 cd->bus_ops = ops;
2049 mutex_init(&cd->system_lock);
2050 mutex_init(&cd->adap_lock);
2053 init_waitqueue_head(&cd->wait_q);
2056 INIT_WORK(&cd->startup_work, cyttsp4_startup_work_function);
2057 INIT_WORK(&cd->watchdog_work, cyttsp4_watchdog_work);
2060 cd->irq = gpio_to_irq(cd->cpdata->irq_gpio);
2061 if (cd->irq < 0) {
2066 dev_set_drvdata(dev, cd);
2069 if (cd->cpdata->init) {
2070 dev_dbg(cd->dev, "%s: Init HW\n", __func__);
2071 rc = cd->cpdata->init(cd->cpdata, 1, cd->dev);
2073 dev_dbg(cd->dev, "%s: No HW INIT function\n", __func__);
2077 dev_err(cd->dev, "%s: HW Init fail r=%d\n", __func__, rc);
2079 dev_dbg(dev, "%s: initialize threaded irq=%d\n", __func__, cd->irq);
2080 if (cd->cpdata->level_irq_udelay > 0)
2087 rc = request_threaded_irq(cd->irq, NULL, cyttsp4_irq, irq_flags,
2088 dev_name(dev), cd);
2095 timer_setup(&cd->watchdog_timer, cyttsp4_watchdog_timer, 0);
2101 rc = cyttsp4_startup(cd);
2104 if (rc < 0 && cd->mode == CY_MODE_UNKNOWN) {
2105 dev_err(cd->dev, "%s: Fail initial startup r=%d\n",
2110 rc = cyttsp4_mt_probe(cd);
2118 return cd;
2121 cancel_work_sync(&cd->startup_work);
2122 cyttsp4_stop_wd_timer(cd);
2124 cyttsp4_free_si_ptrs(cd);
2125 free_irq(cd->irq, cd);
2127 if (cd->cpdata->init)
2128 cd->cpdata->init(cd->cpdata, 0, dev);
2130 kfree(cd->xfer_buf);
2132 kfree(cd);
2146 int cyttsp4_remove(struct cyttsp4 *cd)
2148 struct device *dev = cd->dev;
2150 cyttsp4_mt_release(&cd->md);
2159 cancel_work_sync(&cd->startup_work);
2161 cyttsp4_stop_wd_timer(cd);
2163 free_irq(cd->irq, cd);
2164 if (cd->cpdata->init)
2165 cd->cpdata->init(cd->cpdata, 0, dev);
2166 cyttsp4_free_si_ptrs(cd);
2167 kfree(cd);