108dbd0f8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 24065d1e7SJavier Martinez Canillas /* 34065d1e7SJavier Martinez Canillas * Header file for: 44065d1e7SJavier Martinez Canillas * Cypress TrueTouch(TM) Standard Product (TTSP) touchscreen drivers. 54065d1e7SJavier Martinez Canillas * For use with Cypress Txx3xx parts. 64065d1e7SJavier Martinez Canillas * Supported parts include: 74065d1e7SJavier Martinez Canillas * CY8CTST341 84065d1e7SJavier Martinez Canillas * CY8CTMA340 94065d1e7SJavier Martinez Canillas * 104065d1e7SJavier Martinez Canillas * Copyright (C) 2009, 2010, 2011 Cypress Semiconductor, Inc. 114065d1e7SJavier Martinez Canillas * Copyright (C) 2012 Javier Martinez Canillas <javier@dowhile0.org> 124065d1e7SJavier Martinez Canillas * 134065d1e7SJavier Martinez Canillas * Contact Cypress Semiconductor at www.cypress.com <kev@cypress.com> 144065d1e7SJavier Martinez Canillas */ 154065d1e7SJavier Martinez Canillas 164065d1e7SJavier Martinez Canillas 174065d1e7SJavier Martinez Canillas #ifndef __CYTTSP_CORE_H__ 184065d1e7SJavier Martinez Canillas #define __CYTTSP_CORE_H__ 194065d1e7SJavier Martinez Canillas 204065d1e7SJavier Martinez Canillas #include <linux/kernel.h> 214065d1e7SJavier Martinez Canillas #include <linux/err.h> 224065d1e7SJavier Martinez Canillas #include <linux/module.h> 234065d1e7SJavier Martinez Canillas #include <linux/types.h> 244065d1e7SJavier Martinez Canillas #include <linux/device.h> 254065d1e7SJavier Martinez Canillas #include <linux/input/cyttsp.h> 26*6cf3b3abSLinus Walleij #include <linux/regulator/consumer.h> 274065d1e7SJavier Martinez Canillas 284065d1e7SJavier Martinez Canillas #define CY_NUM_RETRY 16 /* max number of retries for read ops */ 294065d1e7SJavier Martinez Canillas 304065d1e7SJavier Martinez Canillas struct cyttsp_tch { 314065d1e7SJavier Martinez Canillas __be16 x, y; 324065d1e7SJavier Martinez Canillas u8 z; 334065d1e7SJavier Martinez Canillas } __packed; 344065d1e7SJavier Martinez Canillas 354065d1e7SJavier Martinez Canillas /* TrueTouch Standard Product Gen3 interface definition */ 364065d1e7SJavier Martinez Canillas struct cyttsp_xydata { 374065d1e7SJavier Martinez Canillas u8 hst_mode; 384065d1e7SJavier Martinez Canillas u8 tt_mode; 394065d1e7SJavier Martinez Canillas u8 tt_stat; 404065d1e7SJavier Martinez Canillas struct cyttsp_tch tch1; 414065d1e7SJavier Martinez Canillas u8 touch12_id; 424065d1e7SJavier Martinez Canillas struct cyttsp_tch tch2; 434065d1e7SJavier Martinez Canillas u8 gest_cnt; 444065d1e7SJavier Martinez Canillas u8 gest_id; 454065d1e7SJavier Martinez Canillas struct cyttsp_tch tch3; 464065d1e7SJavier Martinez Canillas u8 touch34_id; 474065d1e7SJavier Martinez Canillas struct cyttsp_tch tch4; 484065d1e7SJavier Martinez Canillas u8 tt_undef[3]; 494065d1e7SJavier Martinez Canillas u8 act_dist; 504065d1e7SJavier Martinez Canillas u8 tt_reserved; 514065d1e7SJavier Martinez Canillas } __packed; 524065d1e7SJavier Martinez Canillas 534065d1e7SJavier Martinez Canillas 544065d1e7SJavier Martinez Canillas /* TTSP System Information interface definition */ 554065d1e7SJavier Martinez Canillas struct cyttsp_sysinfo_data { 564065d1e7SJavier Martinez Canillas u8 hst_mode; 574065d1e7SJavier Martinez Canillas u8 mfg_stat; 58d3bf073aSMatthias Kaehlcke u8 mfg_cmd; 594065d1e7SJavier Martinez Canillas u8 cid[3]; 604065d1e7SJavier Martinez Canillas u8 tt_undef1; 614065d1e7SJavier Martinez Canillas u8 uid[8]; 624065d1e7SJavier Martinez Canillas u8 bl_verh; 634065d1e7SJavier Martinez Canillas u8 bl_verl; 644065d1e7SJavier Martinez Canillas u8 tts_verh; 654065d1e7SJavier Martinez Canillas u8 tts_verl; 664065d1e7SJavier Martinez Canillas u8 app_idh; 674065d1e7SJavier Martinez Canillas u8 app_idl; 684065d1e7SJavier Martinez Canillas u8 app_verh; 694065d1e7SJavier Martinez Canillas u8 app_verl; 704065d1e7SJavier Martinez Canillas u8 tt_undef[5]; 714065d1e7SJavier Martinez Canillas u8 scn_typ; 724065d1e7SJavier Martinez Canillas u8 act_intrvl; 734065d1e7SJavier Martinez Canillas u8 tch_tmout; 744065d1e7SJavier Martinez Canillas u8 lp_intrvl; 754065d1e7SJavier Martinez Canillas }; 764065d1e7SJavier Martinez Canillas 774065d1e7SJavier Martinez Canillas /* TTSP Bootloader Register Map interface definition */ 784065d1e7SJavier Martinez Canillas #define CY_BL_CHKSUM_OK 0x01 794065d1e7SJavier Martinez Canillas struct cyttsp_bootloader_data { 804065d1e7SJavier Martinez Canillas u8 bl_file; 814065d1e7SJavier Martinez Canillas u8 bl_status; 824065d1e7SJavier Martinez Canillas u8 bl_error; 834065d1e7SJavier Martinez Canillas u8 blver_hi; 844065d1e7SJavier Martinez Canillas u8 blver_lo; 854065d1e7SJavier Martinez Canillas u8 bld_blver_hi; 864065d1e7SJavier Martinez Canillas u8 bld_blver_lo; 874065d1e7SJavier Martinez Canillas u8 ttspver_hi; 884065d1e7SJavier Martinez Canillas u8 ttspver_lo; 894065d1e7SJavier Martinez Canillas u8 appid_hi; 904065d1e7SJavier Martinez Canillas u8 appid_lo; 914065d1e7SJavier Martinez Canillas u8 appver_hi; 924065d1e7SJavier Martinez Canillas u8 appver_lo; 934065d1e7SJavier Martinez Canillas u8 cid_0; 944065d1e7SJavier Martinez Canillas u8 cid_1; 954065d1e7SJavier Martinez Canillas u8 cid_2; 964065d1e7SJavier Martinez Canillas }; 974065d1e7SJavier Martinez Canillas 984065d1e7SJavier Martinez Canillas struct cyttsp; 994065d1e7SJavier Martinez Canillas 1004065d1e7SJavier Martinez Canillas struct cyttsp_bus_ops { 1014065d1e7SJavier Martinez Canillas u16 bustype; 10262f548d0SFerruh Yigit int (*write)(struct device *dev, u8 *xfer_buf, u16 addr, u8 length, 1039664877eSFerruh Yigit const void *values); 10462f548d0SFerruh Yigit int (*read)(struct device *dev, u8 *xfer_buf, u16 addr, u8 length, 1059664877eSFerruh Yigit void *values); 1064065d1e7SJavier Martinez Canillas }; 1074065d1e7SJavier Martinez Canillas 1084065d1e7SJavier Martinez Canillas enum cyttsp_state { 1094065d1e7SJavier Martinez Canillas CY_IDLE_STATE, 1104065d1e7SJavier Martinez Canillas CY_ACTIVE_STATE, 1114065d1e7SJavier Martinez Canillas CY_BL_STATE, 1124065d1e7SJavier Martinez Canillas }; 1134065d1e7SJavier Martinez Canillas 1144065d1e7SJavier Martinez Canillas struct cyttsp { 1154065d1e7SJavier Martinez Canillas struct device *dev; 1164065d1e7SJavier Martinez Canillas int irq; 1174065d1e7SJavier Martinez Canillas struct input_dev *input; 1184065d1e7SJavier Martinez Canillas const struct cyttsp_bus_ops *bus_ops; 1194065d1e7SJavier Martinez Canillas struct cyttsp_bootloader_data bl_data; 1204065d1e7SJavier Martinez Canillas struct cyttsp_sysinfo_data sysinfo_data; 1214065d1e7SJavier Martinez Canillas struct cyttsp_xydata xy_data; 1224065d1e7SJavier Martinez Canillas struct completion bl_ready; 1234065d1e7SJavier Martinez Canillas enum cyttsp_state state; 1244065d1e7SJavier Martinez Canillas bool suspended; 1254065d1e7SJavier Martinez Canillas 126*6cf3b3abSLinus Walleij struct regulator_bulk_data regulators[2]; 127707b61bbSOreste Salerno struct gpio_desc *reset_gpio; 128707b61bbSOreste Salerno bool use_hndshk; 129707b61bbSOreste Salerno u8 act_dist; 130707b61bbSOreste Salerno u8 act_intrvl; 131707b61bbSOreste Salerno u8 tch_tmout; 132707b61bbSOreste Salerno u8 lp_intrvl; 133707b61bbSOreste Salerno u8 *bl_keys; 134707b61bbSOreste Salerno 1354065d1e7SJavier Martinez Canillas u8 xfer_buf[] ____cacheline_aligned; 1364065d1e7SJavier Martinez Canillas }; 1374065d1e7SJavier Martinez Canillas 1384065d1e7SJavier Martinez Canillas struct cyttsp *cyttsp_probe(const struct cyttsp_bus_ops *bus_ops, 1394065d1e7SJavier Martinez Canillas struct device *dev, int irq, size_t xfer_buf_size); 1404065d1e7SJavier Martinez Canillas 14162f548d0SFerruh Yigit int cyttsp_i2c_write_block_data(struct device *dev, u8 *xfer_buf, u16 addr, 1429664877eSFerruh Yigit u8 length, const void *values); 14362f548d0SFerruh Yigit int cyttsp_i2c_read_block_data(struct device *dev, u8 *xfer_buf, u16 addr, 1449664877eSFerruh Yigit u8 length, void *values); 1454065d1e7SJavier Martinez Canillas extern const struct dev_pm_ops cyttsp_pm_ops; 1464065d1e7SJavier Martinez Canillas 1474065d1e7SJavier Martinez Canillas #endif /* __CYTTSP_CORE_H__ */ 148