Lines Matching full:eeti
3 * Touch Screen driver for EETI's I2C connected touch screen panels
6 * See EETI's software guide for the protocol specification:
7 * http://home.eeti.com.tw/documentation.html
44 static void eeti_ts_report_event(struct eeti_ts *eeti, u8 *buf) in eeti_ts_report_event() argument
59 input_report_abs(eeti->input, ABS_PRESSURE, buf[5]); in eeti_ts_report_event()
61 touchscreen_report_pos(eeti->input, &eeti->props, x, y, false); in eeti_ts_report_event()
62 input_report_key(eeti->input, BTN_TOUCH, buf[0] & REPORT_BIT_PRESSED); in eeti_ts_report_event()
63 input_sync(eeti->input); in eeti_ts_report_event()
66 static int eeti_ts_read(struct eeti_ts *eeti) in eeti_ts_read() argument
71 len = i2c_master_recv(eeti->client, buf, sizeof(buf)); in eeti_ts_read()
74 dev_err(&eeti->client->dev, in eeti_ts_read()
82 eeti_ts_report_event(eeti, buf); in eeti_ts_read()
89 struct eeti_ts *eeti = dev_id; in eeti_ts_isr() local
92 mutex_lock(&eeti->mutex); in eeti_ts_isr()
101 if (eeti->attn_gpio && in eeti_ts_isr()
102 !gpiod_get_value_cansleep(eeti->attn_gpio)) { in eeti_ts_isr()
106 error = eeti_ts_read(eeti); in eeti_ts_isr()
110 } while (eeti->running && eeti->attn_gpio); in eeti_ts_isr()
112 mutex_unlock(&eeti->mutex); in eeti_ts_isr()
116 static void eeti_ts_start(struct eeti_ts *eeti) in eeti_ts_start() argument
118 mutex_lock(&eeti->mutex); in eeti_ts_start()
120 eeti->running = true; in eeti_ts_start()
121 enable_irq(eeti->client->irq); in eeti_ts_start()
128 if (eeti->attn_gpio && gpiod_get_value_cansleep(eeti->attn_gpio)) in eeti_ts_start()
129 eeti_ts_read(eeti); in eeti_ts_start()
131 mutex_unlock(&eeti->mutex); in eeti_ts_start()
134 static void eeti_ts_stop(struct eeti_ts *eeti) in eeti_ts_stop() argument
140 eeti->running = false; in eeti_ts_stop()
142 disable_irq(eeti->client->irq); in eeti_ts_stop()
147 struct eeti_ts *eeti = input_get_drvdata(dev); in eeti_ts_open() local
149 eeti_ts_start(eeti); in eeti_ts_open()
156 struct eeti_ts *eeti = input_get_drvdata(dev); in eeti_ts_close() local
158 eeti_ts_stop(eeti); in eeti_ts_close()
164 struct eeti_ts *eeti; in eeti_ts_probe() local
175 eeti = devm_kzalloc(dev, sizeof(*eeti), GFP_KERNEL); in eeti_ts_probe()
176 if (!eeti) { in eeti_ts_probe()
181 mutex_init(&eeti->mutex); in eeti_ts_probe()
195 touchscreen_parse_properties(input, false, &eeti->props); in eeti_ts_probe()
202 eeti->client = client; in eeti_ts_probe()
203 eeti->input = input; in eeti_ts_probe()
205 eeti->attn_gpio = devm_gpiod_get_optional(dev, "attn", GPIOD_IN); in eeti_ts_probe()
206 if (IS_ERR(eeti->attn_gpio)) in eeti_ts_probe()
207 return PTR_ERR(eeti->attn_gpio); in eeti_ts_probe()
209 i2c_set_clientdata(client, eeti); in eeti_ts_probe()
210 input_set_drvdata(input, eeti); in eeti_ts_probe()
215 client->name, eeti); in eeti_ts_probe()
226 eeti_ts_stop(eeti); in eeti_ts_probe()
238 struct eeti_ts *eeti = i2c_get_clientdata(client); in eeti_ts_suspend() local
239 struct input_dev *input_dev = eeti->input; in eeti_ts_suspend()
244 eeti_ts_stop(eeti); in eeti_ts_suspend()
257 struct eeti_ts *eeti = i2c_get_clientdata(client); in eeti_ts_resume() local
258 struct input_dev *input_dev = eeti->input; in eeti_ts_resume()
266 eeti_ts_start(eeti); in eeti_ts_resume()
283 { .compatible = "eeti,exc3000-i2c", },
300 MODULE_DESCRIPTION("EETI Touchscreen driver");