Lines Matching refs:ts

58 static int imagis_i2c_read_reg(struct imagis_ts *ts,
65 .addr = ts->client->addr,
70 .addr = ts->client->addr,
81 ret = i2c_transfer(ts->client->adapter, msg, ARRAY_SIZE(msg));
88 dev_err(&ts->client->dev,
98 struct imagis_ts *ts = dev_id;
104 error = imagis_i2c_read_reg(ts, ts->tdata->interrupt_msg_cmd, &intr_message);
106 dev_err(&ts->client->dev,
113 dev_err(&ts->client->dev,
122 if (ts->tdata->protocol_b)
123 error = imagis_i2c_read_reg(ts,
124 ts->tdata->touch_coord_cmd, &finger_status);
126 error = imagis_i2c_read_reg(ts,
127 ts->tdata->touch_coord_cmd + (i * 4),
130 dev_err(&ts->client->dev,
136 input_mt_slot(ts->input_dev, i);
137 input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER,
139 touchscreen_report_pos(ts->input_dev, &ts->prop,
143 input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
149 for (int i = 0; i < ts->num_keycodes; i++)
150 input_report_key(ts->input_dev, ts->keycodes[i],
153 input_mt_sync_frame(ts->input_dev);
154 input_sync(ts->input_dev);
162 struct imagis_ts *ts = _ts;
164 regulator_bulk_disable(ARRAY_SIZE(ts->supplies), ts->supplies);
167 static int imagis_power_on(struct imagis_ts *ts)
171 error = regulator_bulk_enable(ARRAY_SIZE(ts->supplies), ts->supplies);
180 static int imagis_start(struct imagis_ts *ts)
184 error = imagis_power_on(ts);
188 enable_irq(ts->client->irq);
193 static int imagis_stop(struct imagis_ts *ts)
195 disable_irq(ts->client->irq);
197 imagis_power_off(ts);
204 struct imagis_ts *ts = input_get_drvdata(dev);
206 return imagis_start(ts);
211 struct imagis_ts *ts = input_get_drvdata(dev);
213 imagis_stop(ts);
216 static int imagis_init_input_dev(struct imagis_ts *ts)
221 input_dev = devm_input_allocate_device(&ts->client->dev);
225 ts->input_dev = input_dev;
228 input_dev->phys = "input/ts";
233 input_set_drvdata(input_dev, ts);
238 if (ts->tdata->touch_keys_supported) {
239 ts->num_keycodes = of_property_read_variable_u32_array(
240 ts->client->dev.of_node, "linux,keycodes",
241 ts->keycodes, 0, ARRAY_SIZE(ts->keycodes));
242 if (ts->num_keycodes <= 0) {
243 ts->keycodes[0] = KEY_APPSELECT;
244 ts->keycodes[1] = KEY_BACK;
245 ts->num_keycodes = 2;
248 input_dev->keycodemax = ts->num_keycodes;
249 input_dev->keycodesize = sizeof(ts->keycodes[0]);
250 input_dev->keycode = ts->keycodes;
253 for (int i = 0; i < ts->num_keycodes; i++)
254 input_set_capability(input_dev, EV_KEY, ts->keycodes[i]);
256 touchscreen_parse_properties(input_dev, true, &ts->prop);
257 if (!ts->prop.max_x || !ts->prop.max_y) {
258 dev_err(&ts->client->dev,
267 dev_err(&ts->client->dev,
274 dev_err(&ts->client->dev,
282 static int imagis_init_regulators(struct imagis_ts *ts)
284 struct i2c_client *client = ts->client;
286 ts->supplies[0].supply = "vdd";
287 ts->supplies[1].supply = "vddio";
289 ARRAY_SIZE(ts->supplies),
290 ts->supplies);
296 struct imagis_ts *ts;
299 ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
300 if (!ts)
303 ts->client = i2c;
305 ts->tdata = device_get_match_data(dev);
306 if (!ts->tdata) {
311 error = imagis_init_regulators(ts);
317 error = imagis_power_on(ts);
323 error = devm_add_action_or_reset(dev, imagis_power_off, ts);
329 error = imagis_i2c_read_reg(ts, ts->tdata->whoami_cmd, &chip_id);
335 if (chip_id != ts->tdata->whoami_val) {
343 "imagis-touchscreen", ts);
350 error = imagis_init_input_dev(ts);
360 struct imagis_ts *ts = i2c_get_clientdata(client);
363 mutex_lock(&ts->input_dev->mutex);
365 if (input_device_enabled(ts->input_dev))
366 retval = imagis_stop(ts);
368 mutex_unlock(&ts->input_dev->mutex);
376 struct imagis_ts *ts = i2c_get_clientdata(client);
379 mutex_lock(&ts->input_dev->mutex);
381 if (input_device_enabled(ts->input_dev))
382 retval = imagis_start(ts);
384 mutex_unlock(&ts->input_dev->mutex);