Lines Matching refs:ts

80 static int ttsp_read_block_data(struct cyttsp *ts, u8 command,  in ttsp_read_block_data()  argument
87 error = ts->bus_ops->read(ts->dev, ts->xfer_buf, command, in ttsp_read_block_data()
98 static int ttsp_write_block_data(struct cyttsp *ts, u8 command, in ttsp_write_block_data() argument
105 error = ts->bus_ops->write(ts->dev, ts->xfer_buf, command, in ttsp_write_block_data()
116 static int ttsp_send_command(struct cyttsp *ts, u8 cmd) in ttsp_send_command() argument
118 return ttsp_write_block_data(ts, CY_REG_BASE, sizeof(cmd), &cmd); in ttsp_send_command()
121 static int cyttsp_handshake(struct cyttsp *ts) in cyttsp_handshake() argument
123 if (ts->pdata->use_hndshk) in cyttsp_handshake()
124 return ttsp_send_command(ts, in cyttsp_handshake()
125 ts->xy_data.hst_mode ^ CY_HNDSHK_BIT); in cyttsp_handshake()
130 static int cyttsp_load_bl_regs(struct cyttsp *ts) in cyttsp_load_bl_regs() argument
132 memset(&ts->bl_data, 0, sizeof(ts->bl_data)); in cyttsp_load_bl_regs()
133 ts->bl_data.bl_status = 0x10; in cyttsp_load_bl_regs()
135 return ttsp_read_block_data(ts, CY_REG_BASE, in cyttsp_load_bl_regs()
136 sizeof(ts->bl_data), &ts->bl_data); in cyttsp_load_bl_regs()
139 static int cyttsp_exit_bl_mode(struct cyttsp *ts) in cyttsp_exit_bl_mode() argument
145 if (ts->pdata->bl_keys) in cyttsp_exit_bl_mode()
147 ts->pdata->bl_keys, CY_NUM_BL_KEYS); in cyttsp_exit_bl_mode()
149 error = ttsp_write_block_data(ts, CY_REG_BASE, in cyttsp_exit_bl_mode()
157 error = cyttsp_load_bl_regs(ts); in cyttsp_exit_bl_mode()
161 if (GET_BOOTLOADERMODE(ts->bl_data.bl_status)) in cyttsp_exit_bl_mode()
167 static int cyttsp_set_operational_mode(struct cyttsp *ts) in cyttsp_set_operational_mode() argument
171 error = ttsp_send_command(ts, CY_OPERATE_MODE); in cyttsp_set_operational_mode()
176 error = ttsp_read_block_data(ts, CY_REG_BASE, in cyttsp_set_operational_mode()
177 sizeof(ts->xy_data), &ts->xy_data); in cyttsp_set_operational_mode()
181 error = cyttsp_handshake(ts); in cyttsp_set_operational_mode()
185 return ts->xy_data.act_dist == CY_ACT_DIST_DFLT ? -EIO : 0; in cyttsp_set_operational_mode()
188 static int cyttsp_set_sysinfo_mode(struct cyttsp *ts) in cyttsp_set_sysinfo_mode() argument
192 memset(&ts->sysinfo_data, 0, sizeof(ts->sysinfo_data)); in cyttsp_set_sysinfo_mode()
195 error = ttsp_send_command(ts, CY_SYSINFO_MODE); in cyttsp_set_sysinfo_mode()
201 error = ttsp_read_block_data(ts, CY_REG_BASE, sizeof(ts->sysinfo_data), in cyttsp_set_sysinfo_mode()
202 &ts->sysinfo_data); in cyttsp_set_sysinfo_mode()
206 error = cyttsp_handshake(ts); in cyttsp_set_sysinfo_mode()
210 if (!ts->sysinfo_data.tts_verh && !ts->sysinfo_data.tts_verl) in cyttsp_set_sysinfo_mode()
216 static int cyttsp_set_sysinfo_regs(struct cyttsp *ts) in cyttsp_set_sysinfo_regs() argument
220 if (ts->pdata->act_intrvl != CY_ACT_INTRVL_DFLT || in cyttsp_set_sysinfo_regs()
221 ts->pdata->tch_tmout != CY_TCH_TMOUT_DFLT || in cyttsp_set_sysinfo_regs()
222 ts->pdata->lp_intrvl != CY_LP_INTRVL_DFLT) { in cyttsp_set_sysinfo_regs()
225 ts->pdata->act_intrvl, in cyttsp_set_sysinfo_regs()
226 ts->pdata->tch_tmout, in cyttsp_set_sysinfo_regs()
227 ts->pdata->lp_intrvl in cyttsp_set_sysinfo_regs()
231 retval = ttsp_write_block_data(ts, CY_REG_ACT_INTRVL, in cyttsp_set_sysinfo_regs()
239 static int cyttsp_soft_reset(struct cyttsp *ts) in cyttsp_soft_reset() argument
245 reinit_completion(&ts->bl_ready); in cyttsp_soft_reset()
246 ts->state = CY_BL_STATE; in cyttsp_soft_reset()
248 enable_irq(ts->irq); in cyttsp_soft_reset()
250 retval = ttsp_send_command(ts, CY_SOFT_RESET_MODE); in cyttsp_soft_reset()
254 timeout = wait_for_completion_timeout(&ts->bl_ready, in cyttsp_soft_reset()
259 ts->state = CY_IDLE_STATE; in cyttsp_soft_reset()
260 disable_irq(ts->irq); in cyttsp_soft_reset()
264 static int cyttsp_act_dist_setup(struct cyttsp *ts) in cyttsp_act_dist_setup() argument
266 u8 act_dist_setup = ts->pdata->act_dist; in cyttsp_act_dist_setup()
269 return ttsp_write_block_data(ts, CY_REG_ACT_DIST, in cyttsp_act_dist_setup()
298 static void cyttsp_report_tchdata(struct cyttsp *ts) in cyttsp_report_tchdata() argument
300 struct cyttsp_xydata *xy_data = &ts->xy_data; in cyttsp_report_tchdata()
301 struct input_dev *input = ts->input; in cyttsp_report_tchdata()
311 dev_dbg(ts->dev, "%s: Large area detected\n", __func__); in cyttsp_report_tchdata()
315 dev_dbg(ts->dev, "%s: Num touch error detected\n", __func__); in cyttsp_report_tchdata()
319 dev_dbg(ts->dev, "%s: Invalid buffer detected\n", __func__); in cyttsp_report_tchdata()
351 struct cyttsp *ts = handle; in cyttsp_irq() local
354 if (unlikely(ts->state == CY_BL_STATE)) { in cyttsp_irq()
355 complete(&ts->bl_ready); in cyttsp_irq()
360 error = ttsp_read_block_data(ts, CY_REG_BASE, in cyttsp_irq()
361 sizeof(struct cyttsp_xydata), &ts->xy_data); in cyttsp_irq()
366 error = cyttsp_handshake(ts); in cyttsp_irq()
370 if (unlikely(ts->state == CY_IDLE_STATE)) in cyttsp_irq()
373 if (GET_BOOTLOADERMODE(ts->xy_data.tt_mode)) { in cyttsp_irq()
378 error = cyttsp_exit_bl_mode(ts); in cyttsp_irq()
380 dev_err(ts->dev, in cyttsp_irq()
383 ts->state = CY_IDLE_STATE; in cyttsp_irq()
386 cyttsp_report_tchdata(ts); in cyttsp_irq()
393 static int cyttsp_power_on(struct cyttsp *ts) in cyttsp_power_on() argument
397 error = cyttsp_soft_reset(ts); in cyttsp_power_on()
401 error = cyttsp_load_bl_regs(ts); in cyttsp_power_on()
405 if (GET_BOOTLOADERMODE(ts->bl_data.bl_status) && in cyttsp_power_on()
406 IS_VALID_APP(ts->bl_data.bl_status)) { in cyttsp_power_on()
407 error = cyttsp_exit_bl_mode(ts); in cyttsp_power_on()
412 if (GET_HSTMODE(ts->bl_data.bl_file) != CY_OPERATE_MODE || in cyttsp_power_on()
413 IS_OPERATIONAL_ERR(ts->bl_data.bl_status)) { in cyttsp_power_on()
417 error = cyttsp_set_sysinfo_mode(ts); in cyttsp_power_on()
421 error = cyttsp_set_sysinfo_regs(ts); in cyttsp_power_on()
425 error = cyttsp_set_operational_mode(ts); in cyttsp_power_on()
430 error = cyttsp_act_dist_setup(ts); in cyttsp_power_on()
434 ts->state = CY_ACTIVE_STATE; in cyttsp_power_on()
439 static int cyttsp_enable(struct cyttsp *ts) in cyttsp_enable() argument
449 error = ttsp_read_block_data(ts, CY_REG_BASE, in cyttsp_enable()
450 sizeof(ts->xy_data), &ts->xy_data); in cyttsp_enable()
454 if (GET_HSTMODE(ts->xy_data.hst_mode)) in cyttsp_enable()
457 enable_irq(ts->irq); in cyttsp_enable()
462 static int cyttsp_disable(struct cyttsp *ts) in cyttsp_disable() argument
466 error = ttsp_send_command(ts, CY_LOW_POWER_MODE); in cyttsp_disable()
470 disable_irq(ts->irq); in cyttsp_disable()
477 struct cyttsp *ts = dev_get_drvdata(dev); in cyttsp_suspend() local
480 mutex_lock(&ts->input->mutex); in cyttsp_suspend()
482 if (ts->input->users) { in cyttsp_suspend()
483 retval = cyttsp_disable(ts); in cyttsp_suspend()
485 ts->suspended = true; in cyttsp_suspend()
488 mutex_unlock(&ts->input->mutex); in cyttsp_suspend()
495 struct cyttsp *ts = dev_get_drvdata(dev); in cyttsp_resume() local
497 mutex_lock(&ts->input->mutex); in cyttsp_resume()
499 if (ts->input->users) in cyttsp_resume()
500 cyttsp_enable(ts); in cyttsp_resume()
502 ts->suspended = false; in cyttsp_resume()
504 mutex_unlock(&ts->input->mutex); in cyttsp_resume()
514 struct cyttsp *ts = input_get_drvdata(dev); in cyttsp_open() local
517 if (!ts->suspended) in cyttsp_open()
518 retval = cyttsp_enable(ts); in cyttsp_open()
525 struct cyttsp *ts = input_get_drvdata(dev); in cyttsp_close() local
527 if (!ts->suspended) in cyttsp_close()
528 cyttsp_disable(ts); in cyttsp_close()
535 struct cyttsp *ts; in cyttsp_probe() local
544 ts = kzalloc(sizeof(*ts) + xfer_buf_size, GFP_KERNEL); in cyttsp_probe()
546 if (!ts || !input_dev) { in cyttsp_probe()
551 ts->dev = dev; in cyttsp_probe()
552 ts->input = input_dev; in cyttsp_probe()
553 ts->pdata = dev_get_platdata(dev); in cyttsp_probe()
554 ts->bus_ops = bus_ops; in cyttsp_probe()
555 ts->irq = irq; in cyttsp_probe()
557 init_completion(&ts->bl_ready); in cyttsp_probe()
558 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(dev)); in cyttsp_probe()
563 dev_err(ts->dev, "platform init failed, err: %d\n", in cyttsp_probe()
570 input_dev->phys = ts->phys; in cyttsp_probe()
572 input_dev->dev.parent = ts->dev; in cyttsp_probe()
577 input_set_drvdata(input_dev, ts); in cyttsp_probe()
589 error = request_threaded_irq(ts->irq, NULL, cyttsp_irq, in cyttsp_probe()
591 pdata->name, ts); in cyttsp_probe()
593 dev_err(ts->dev, "failed to request IRQ %d, err: %d\n", in cyttsp_probe()
594 ts->irq, error); in cyttsp_probe()
598 disable_irq(ts->irq); in cyttsp_probe()
600 error = cyttsp_power_on(ts); in cyttsp_probe()
606 dev_err(ts->dev, "failed to register input device: %d\n", in cyttsp_probe()
611 return ts; in cyttsp_probe()
614 free_irq(ts->irq, ts); in cyttsp_probe()
620 kfree(ts); in cyttsp_probe()
626 void cyttsp_remove(struct cyttsp *ts) in cyttsp_remove() argument
628 free_irq(ts->irq, ts); in cyttsp_remove()
629 input_unregister_device(ts->input); in cyttsp_remove()
630 if (ts->pdata->exit) in cyttsp_remove()
631 ts->pdata->exit(); in cyttsp_remove()
632 kfree(ts); in cyttsp_remove()