Lines Matching +full:i2c +full:- +full:retry +full:- +full:count

1 // SPDX-License-Identifier: GPL-2.0-only
6 #include <linux/i2c.h>
46 .addr = ts->client->addr, in imagis_i2c_read_reg()
51 .addr = ts->client->addr, in imagis_i2c_read_reg()
58 int retry = IST3038C_I2C_RETRY_COUNT; in imagis_i2c_read_reg() local
60 /* Retry in case the controller fails to respond */ in imagis_i2c_read_reg()
62 ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg)); in imagis_i2c_read_reg()
68 error = ret < 0 ? ret : -EIO; in imagis_i2c_read_reg()
69 dev_err(&ts->client->dev, in imagis_i2c_read_reg()
70 "%s - i2c_transfer failed: %d (%d)\n", in imagis_i2c_read_reg()
72 } while (--retry); in imagis_i2c_read_reg()
88 dev_err(&ts->client->dev, in imagis_interrupt()
95 dev_err(&ts->client->dev, in imagis_interrupt()
96 "finger count %d is more than maximum supported\n", in imagis_interrupt()
108 dev_err(&ts->client->dev, in imagis_interrupt()
114 input_mt_slot(ts->input_dev, i); in imagis_interrupt()
115 input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, in imagis_interrupt()
117 touchscreen_report_pos(ts->input_dev, &ts->prop, in imagis_interrupt()
121 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, in imagis_interrupt()
125 input_mt_sync_frame(ts->input_dev); in imagis_interrupt()
126 input_sync(ts->input_dev); in imagis_interrupt()
136 regulator_bulk_disable(ARRAY_SIZE(ts->supplies), ts->supplies); in imagis_power_off()
143 error = regulator_bulk_enable(ARRAY_SIZE(ts->supplies), ts->supplies); in imagis_power_on()
160 enable_irq(ts->client->irq); in imagis_start()
167 disable_irq(ts->client->irq); in imagis_stop()
193 input_dev = devm_input_allocate_device(&ts->client->dev); in imagis_init_input_dev()
195 return -ENOMEM; in imagis_init_input_dev()
197 ts->input_dev = input_dev; in imagis_init_input_dev()
199 input_dev->name = "Imagis capacitive touchscreen"; in imagis_init_input_dev()
200 input_dev->phys = "input/ts"; in imagis_init_input_dev()
201 input_dev->id.bustype = BUS_I2C; in imagis_init_input_dev()
202 input_dev->open = imagis_input_open; in imagis_init_input_dev()
203 input_dev->close = imagis_input_close; in imagis_init_input_dev()
211 touchscreen_parse_properties(input_dev, true, &ts->prop); in imagis_init_input_dev()
212 if (!ts->prop.max_x || !ts->prop.max_y) { in imagis_init_input_dev()
213 dev_err(&ts->client->dev, in imagis_init_input_dev()
214 "Touchscreen-size-x and/or touchscreen-size-y not set in dts\n"); in imagis_init_input_dev()
215 return -EINVAL; in imagis_init_input_dev()
222 dev_err(&ts->client->dev, in imagis_init_input_dev()
229 dev_err(&ts->client->dev, in imagis_init_input_dev()
239 struct i2c_client *client = ts->client; in imagis_init_regulators()
241 ts->supplies[0].supply = "vdd"; in imagis_init_regulators()
242 ts->supplies[1].supply = "vddio"; in imagis_init_regulators()
243 return devm_regulator_bulk_get(&client->dev, in imagis_init_regulators()
244 ARRAY_SIZE(ts->supplies), in imagis_init_regulators()
245 ts->supplies); in imagis_init_regulators()
248 static int imagis_probe(struct i2c_client *i2c) in imagis_probe() argument
250 struct device *dev = &i2c->dev; in imagis_probe()
256 return -ENOMEM; in imagis_probe()
258 ts->client = i2c; in imagis_probe()
288 return -EINVAL; in imagis_probe()
291 error = devm_request_threaded_irq(dev, i2c->irq, in imagis_probe()
294 "imagis-touchscreen", ts); in imagis_probe()
297 i2c->irq, error); in imagis_probe()
314 mutex_lock(&ts->input_dev->mutex); in imagis_suspend()
316 if (input_device_enabled(ts->input_dev)) in imagis_suspend()
319 mutex_unlock(&ts->input_dev->mutex); in imagis_suspend()
330 mutex_lock(&ts->input_dev->mutex); in imagis_resume()
332 if (input_device_enabled(ts->input_dev)) in imagis_resume()
335 mutex_unlock(&ts->input_dev->mutex); in imagis_resume()
352 .name = "imagis-touchscreen",