Lines Matching defs:sdata
117 static int s6sy761_read_events(struct s6sy761_data *sdata, u16 n_events)
122 .addr = sdata->client->addr,
127 .addr = sdata->client->addr,
130 .buf = sdata->data + S6SY761_EVENT_SIZE,
135 ret = i2c_transfer(sdata->client->adapter, msgs, ARRAY_SIZE(msgs));
142 static void s6sy761_report_coordinates(struct s6sy761_data *sdata,
151 input_mt_slot(sdata->input, tid);
153 input_mt_report_slot_state(sdata->input, MT_TOOL_FINGER, true);
154 input_report_abs(sdata->input, ABS_MT_POSITION_X, x);
155 input_report_abs(sdata->input, ABS_MT_POSITION_Y, y);
156 input_report_abs(sdata->input, ABS_MT_TOUCH_MAJOR, major);
157 input_report_abs(sdata->input, ABS_MT_TOUCH_MINOR, minor);
158 input_report_abs(sdata->input, ABS_MT_PRESSURE, z);
160 input_sync(sdata->input);
163 static void s6sy761_report_release(struct s6sy761_data *sdata,
166 input_mt_slot(sdata->input, tid);
167 input_mt_report_slot_state(sdata->input, MT_TOOL_FINGER, false);
169 input_sync(sdata->input);
172 static void s6sy761_handle_coordinates(struct s6sy761_data *sdata, u8 *event)
188 s6sy761_report_release(sdata, event, tid);
192 s6sy761_report_coordinates(sdata, event, tid);
197 static void s6sy761_handle_events(struct s6sy761_data *sdata, u8 n_events)
202 u8 *event = &sdata->data[i * S6SY761_EVENT_SIZE];
211 s6sy761_handle_coordinates(sdata, event);
225 struct s6sy761_data *sdata = dev;
229 ret = i2c_smbus_read_i2c_block_data(sdata->client,
232 sdata->data);
234 dev_err(&sdata->client->dev, "failed to read events\n");
238 if (!sdata->data[0])
241 n_events = sdata->data[7] & S6SY761_MASK_LEFT_EVENTS;
246 ret = s6sy761_read_events(sdata, n_events);
248 dev_err(&sdata->client->dev, "failed to read events\n");
253 s6sy761_handle_events(sdata, n_events + 1);
260 struct s6sy761_data *sdata = input_get_drvdata(dev);
262 return i2c_smbus_write_byte(sdata->client, S6SY761_SENSE_ON);
267 struct s6sy761_data *sdata = input_get_drvdata(dev);
270 ret = i2c_smbus_write_byte(sdata->client, S6SY761_SENSE_OFF);
272 dev_err(&sdata->client->dev, "failed to turn off sensing\n");
278 struct s6sy761_data *sdata = dev_get_drvdata(dev);
280 return sprintf(buf, "%#x\n", sdata->devid);
294 static int s6sy761_power_on(struct s6sy761_data *sdata)
300 ret = regulator_bulk_enable(ARRAY_SIZE(sdata->regulators),
301 sdata->regulators);
308 ret = i2c_smbus_read_i2c_block_data(sdata->client,
323 ret = i2c_smbus_read_byte_data(sdata->client, S6SY761_BOOT_STATUS);
332 ret = i2c_smbus_write_word_data(sdata->client,
341 static int s6sy761_hw_init(struct s6sy761_data *sdata,
347 ret = s6sy761_power_on(sdata);
351 ret = i2c_smbus_read_i2c_block_data(sdata->client,
358 sdata->devid = get_unaligned_be16(buffer + 1);
360 ret = i2c_smbus_read_i2c_block_data(sdata->client,
371 sdata->tx_channel = max_t(u8, buffer[8], 1);
373 ret = i2c_smbus_read_byte_data(sdata->client,
385 struct s6sy761_data *sdata = data;
387 disable_irq(sdata->client->irq);
388 regulator_bulk_disable(ARRAY_SIZE(sdata->regulators),
389 sdata->regulators);
394 struct s6sy761_data *sdata;
403 sdata = devm_kzalloc(&client->dev, sizeof(*sdata), GFP_KERNEL);
404 if (!sdata)
407 i2c_set_clientdata(client, sdata);
408 sdata->client = client;
410 sdata->regulators[S6SY761_REGULATOR_VDD].supply = "vdd";
411 sdata->regulators[S6SY761_REGULATOR_AVDD].supply = "avdd";
413 ARRAY_SIZE(sdata->regulators),
414 sdata->regulators);
418 err = devm_add_action_or_reset(&client->dev, s6sy761_power_off, sdata);
422 err = s6sy761_hw_init(sdata, &max_x, &max_y);
426 sdata->input = devm_input_allocate_device(&client->dev);
427 if (!sdata->input)
430 sdata->input->name = S6SY761_DEV_NAME;
431 sdata->input->id.bustype = BUS_I2C;
432 sdata->input->open = s6sy761_input_open;
433 sdata->input->close = s6sy761_input_close;
435 input_set_abs_params(sdata->input, ABS_MT_POSITION_X, 0, max_x, 0, 0);
436 input_set_abs_params(sdata->input, ABS_MT_POSITION_Y, 0, max_y, 0, 0);
437 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
438 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MINOR, 0, 255, 0, 0);
439 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
440 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MINOR, 0, 255, 0, 0);
441 input_set_abs_params(sdata->input, ABS_MT_PRESSURE, 0, 255, 0, 0);
443 touchscreen_parse_properties(sdata->input, true, &sdata->prop);
445 if (!input_abs_get_max(sdata->input, ABS_X) ||
446 !input_abs_get_max(sdata->input, ABS_Y)) {
450 err = input_mt_init_slots(sdata->input, sdata->tx_channel,
455 input_set_drvdata(sdata->input, sdata);
457 err = input_register_device(sdata->input);
464 "s6sy761_irq", sdata);
484 struct s6sy761_data *sdata = dev_get_drvdata(dev);
486 return i2c_smbus_write_byte_data(sdata->client,
492 struct s6sy761_data *sdata = dev_get_drvdata(dev);
494 return i2c_smbus_write_byte_data(sdata->client,
500 struct s6sy761_data *sdata = dev_get_drvdata(dev);
502 s6sy761_power_off(sdata);
509 struct s6sy761_data *sdata = dev_get_drvdata(dev);
511 enable_irq(sdata->client->irq);
513 return s6sy761_power_on(sdata);