Lines Matching full:msg2638
3 * Driver for MStar msg2638 touchscreens
71 struct msg2638_ts_data *msg2638 = msg2638_handler; in msg2638_ts_irq_handler() local
72 struct i2c_client *client = msg2638->client; in msg2638_ts_irq_handler()
73 struct input_dev *input = msg2638->input_dev; in msg2638_ts_irq_handler()
118 touchscreen_report_pos(input, &msg2638->prop, x, y, true); in msg2638_ts_irq_handler()
121 input_mt_sync_frame(msg2638->input_dev); in msg2638_ts_irq_handler()
122 input_sync(msg2638->input_dev); in msg2638_ts_irq_handler()
128 static void msg2638_reset(struct msg2638_ts_data *msg2638) in msg2638_reset() argument
130 gpiod_set_value_cansleep(msg2638->reset_gpiod, 1); in msg2638_reset()
132 gpiod_set_value_cansleep(msg2638->reset_gpiod, 0); in msg2638_reset()
136 static int msg2638_start(struct msg2638_ts_data *msg2638) in msg2638_start() argument
140 error = regulator_bulk_enable(ARRAY_SIZE(msg2638->supplies), in msg2638_start()
141 msg2638->supplies); in msg2638_start()
143 dev_err(&msg2638->client->dev, in msg2638_start()
150 msg2638_reset(msg2638); in msg2638_start()
152 enable_irq(msg2638->client->irq); in msg2638_start()
157 static int msg2638_stop(struct msg2638_ts_data *msg2638) in msg2638_stop() argument
161 disable_irq(msg2638->client->irq); in msg2638_stop()
163 error = regulator_bulk_disable(ARRAY_SIZE(msg2638->supplies), in msg2638_stop()
164 msg2638->supplies); in msg2638_stop()
166 dev_err(&msg2638->client->dev, in msg2638_stop()
176 struct msg2638_ts_data *msg2638 = input_get_drvdata(dev); in msg2638_input_open() local
178 return msg2638_start(msg2638); in msg2638_input_open()
183 struct msg2638_ts_data *msg2638 = input_get_drvdata(dev); in msg2638_input_close() local
185 msg2638_stop(msg2638); in msg2638_input_close()
188 static int msg2638_init_input_dev(struct msg2638_ts_data *msg2638) in msg2638_init_input_dev() argument
190 struct device *dev = &msg2638->client->dev; in msg2638_init_input_dev()
200 input_set_drvdata(input_dev, msg2638); in msg2638_init_input_dev()
201 msg2638->input_dev = input_dev; in msg2638_init_input_dev()
212 touchscreen_parse_properties(input_dev, true, &msg2638->prop); in msg2638_init_input_dev()
213 if (!msg2638->prop.max_x || !msg2638->prop.max_y) { in msg2638_init_input_dev()
237 struct msg2638_ts_data *msg2638; in msg2638_ts_probe() local
245 msg2638 = devm_kzalloc(dev, sizeof(*msg2638), GFP_KERNEL); in msg2638_ts_probe()
246 if (!msg2638) in msg2638_ts_probe()
249 msg2638->client = client; in msg2638_ts_probe()
250 i2c_set_clientdata(client, msg2638); in msg2638_ts_probe()
252 msg2638->supplies[0].supply = "vdd"; in msg2638_ts_probe()
253 msg2638->supplies[1].supply = "vddio"; in msg2638_ts_probe()
254 error = devm_regulator_bulk_get(dev, ARRAY_SIZE(msg2638->supplies), in msg2638_ts_probe()
255 msg2638->supplies); in msg2638_ts_probe()
261 msg2638->reset_gpiod = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in msg2638_ts_probe()
262 if (IS_ERR(msg2638->reset_gpiod)) { in msg2638_ts_probe()
263 error = PTR_ERR(msg2638->reset_gpiod); in msg2638_ts_probe()
268 error = msg2638_init_input_dev(msg2638); in msg2638_ts_probe()
277 client->name, msg2638); in msg2638_ts_probe()
289 struct msg2638_ts_data *msg2638 = i2c_get_clientdata(client); in msg2638_suspend() local
291 mutex_lock(&msg2638->input_dev->mutex); in msg2638_suspend()
293 if (input_device_enabled(msg2638->input_dev)) in msg2638_suspend()
294 msg2638_stop(msg2638); in msg2638_suspend()
296 mutex_unlock(&msg2638->input_dev->mutex); in msg2638_suspend()
304 struct msg2638_ts_data *msg2638 = i2c_get_clientdata(client); in msg2638_resume() local
307 mutex_lock(&msg2638->input_dev->mutex); in msg2638_resume()
309 if (input_device_enabled(msg2638->input_dev)) in msg2638_resume()
310 ret = msg2638_start(msg2638); in msg2638_resume()
312 mutex_unlock(&msg2638->input_dev->mutex); in msg2638_resume()
320 { .compatible = "mstar,msg2638" },
336 MODULE_DESCRIPTION("MStar MSG2638 touchscreen driver");