Lines Matching refs:ts

295 static int raydium_i2c_query_ts_bootloader_info(struct raydium_data *ts)  in raydium_i2c_query_ts_bootloader_info()  argument
297 struct i2c_client *client = ts->client; in raydium_i2c_query_ts_bootloader_info()
326 ts->info.hw_ver = cpu_to_le32(hw_ver); in raydium_i2c_query_ts_bootloader_info()
327 ts->info.main_ver = 0xff; in raydium_i2c_query_ts_bootloader_info()
328 ts->info.sub_ver = 0xff; in raydium_i2c_query_ts_bootloader_info()
333 static int raydium_i2c_query_ts_info(struct raydium_data *ts) in raydium_i2c_query_ts_info() argument
335 struct i2c_client *client = ts->client; in raydium_i2c_query_ts_info()
352 if (ts->report_data && ts->pkg_size != data_info.pkg_size) { in raydium_i2c_query_ts_info()
355 ts->pkg_size, data_info.pkg_size); in raydium_i2c_query_ts_info()
357 ts->pkg_size = data_info.pkg_size; in raydium_i2c_query_ts_info()
358 ts->report_size = ts->pkg_size - RM_PACKET_CRC_SIZE; in raydium_i2c_query_ts_info()
361 ts->contact_size = data_info.tp_info_size; in raydium_i2c_query_ts_info()
362 ts->data_bank_addr = le32_to_cpu(data_info.data_bank_addr); in raydium_i2c_query_ts_info()
366 ts->data_bank_addr, ts->report_size, ts->contact_size); in raydium_i2c_query_ts_info()
375 &ts->info, sizeof(ts->info)); in raydium_i2c_query_ts_info()
386 static int raydium_i2c_check_fw_status(struct raydium_data *ts) in raydium_i2c_check_fw_status() argument
388 struct i2c_client *client = ts->client; in raydium_i2c_check_fw_status()
397 ts->boot_mode = RAYDIUM_TS_BLDR; in raydium_i2c_check_fw_status()
399 ts->boot_mode = RAYDIUM_TS_MAIN; in raydium_i2c_check_fw_status()
406 static int raydium_i2c_initialize(struct raydium_data *ts) in raydium_i2c_initialize() argument
408 struct i2c_client *client = ts->client; in raydium_i2c_initialize()
415 error = raydium_i2c_check_fw_status(ts); in raydium_i2c_initialize()
422 if (ts->boot_mode == RAYDIUM_TS_BLDR || in raydium_i2c_initialize()
423 ts->boot_mode == RAYDIUM_TS_MAIN) { in raydium_i2c_initialize()
429 ts->boot_mode = RAYDIUM_TS_BLDR; in raydium_i2c_initialize()
431 if (ts->boot_mode == RAYDIUM_TS_BLDR) in raydium_i2c_initialize()
432 raydium_i2c_query_ts_bootloader_info(ts); in raydium_i2c_initialize()
434 raydium_i2c_query_ts_info(ts); in raydium_i2c_initialize()
694 static int raydium_i2c_do_update_firmware(struct raydium_data *ts, in raydium_i2c_do_update_firmware() argument
697 struct i2c_client *client = ts->client; in raydium_i2c_do_update_firmware()
711 error = raydium_i2c_check_fw_status(ts); in raydium_i2c_do_update_firmware()
717 if (ts->boot_mode == RAYDIUM_TS_MAIN) { in raydium_i2c_do_update_firmware()
721 error = raydium_i2c_check_fw_status(ts); in raydium_i2c_do_update_firmware()
729 if (ts->boot_mode == RAYDIUM_TS_BLDR) in raydium_i2c_do_update_firmware()
734 if (ts->boot_mode == RAYDIUM_TS_MAIN) { in raydium_i2c_do_update_firmware()
785 error = raydium_i2c_check_fw_status(ts); in raydium_i2c_do_update_firmware()
793 if (ts->boot_mode != RAYDIUM_TS_MAIN) { in raydium_i2c_do_update_firmware()
815 static int raydium_i2c_fw_update(struct raydium_data *ts) in raydium_i2c_fw_update() argument
817 struct i2c_client *client = ts->client; in raydium_i2c_fw_update()
823 le32_to_cpu(ts->info.hw_ver)); in raydium_i2c_fw_update()
837 error = raydium_i2c_do_update_firmware(ts, fw); in raydium_i2c_fw_update()
840 ts->boot_mode = RAYDIUM_TS_BLDR; in raydium_i2c_fw_update()
844 error = raydium_i2c_initialize(ts); in raydium_i2c_fw_update()
849 ts->boot_mode = RAYDIUM_TS_BLDR; in raydium_i2c_fw_update()
853 ts->boot_mode = RAYDIUM_TS_MAIN; in raydium_i2c_fw_update()
867 static void raydium_mt_event(struct raydium_data *ts) in raydium_mt_event() argument
871 for (i = 0; i < ts->report_size / ts->contact_size; i++) { in raydium_mt_event()
872 u8 *contact = &ts->report_data[ts->contact_size * i]; in raydium_mt_event()
876 input_mt_slot(ts->input, i); in raydium_mt_event()
877 input_mt_report_slot_state(ts->input, MT_TOOL_FINGER, state); in raydium_mt_event()
882 input_report_abs(ts->input, ABS_MT_POSITION_X, in raydium_mt_event()
884 input_report_abs(ts->input, ABS_MT_POSITION_Y, in raydium_mt_event()
886 input_report_abs(ts->input, ABS_MT_PRESSURE, in raydium_mt_event()
892 input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, max(wx, wy)); in raydium_mt_event()
893 input_report_abs(ts->input, ABS_MT_TOUCH_MINOR, min(wx, wy)); in raydium_mt_event()
896 input_mt_sync_frame(ts->input); in raydium_mt_event()
897 input_sync(ts->input); in raydium_mt_event()
902 struct raydium_data *ts = _dev; in raydium_i2c_irq() local
907 if (ts->boot_mode != RAYDIUM_TS_MAIN) in raydium_i2c_irq()
910 error = raydium_i2c_read(ts->client, ts->data_bank_addr, in raydium_i2c_irq()
911 ts->report_data, ts->pkg_size); in raydium_i2c_irq()
915 fw_crc = get_unaligned_le16(&ts->report_data[ts->report_size]); in raydium_i2c_irq()
916 calc_crc = raydium_calc_chksum(ts->report_data, ts->report_size); in raydium_i2c_irq()
918 dev_warn(&ts->client->dev, in raydium_i2c_irq()
924 raydium_mt_event(ts); in raydium_i2c_irq()
934 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_fw_ver_show() local
936 return sprintf(buf, "%d.%d\n", ts->info.main_ver, ts->info.sub_ver); in raydium_i2c_fw_ver_show()
943 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_hw_ver_show() local
945 return sprintf(buf, "%#04x\n", le32_to_cpu(ts->info.hw_ver)); in raydium_i2c_hw_ver_show()
953 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_boot_mode_show() local
956 ts->boot_mode == RAYDIUM_TS_MAIN ? in raydium_i2c_boot_mode_show()
965 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_update_fw_store() local
968 error = mutex_lock_interruptible(&ts->sysfs_mutex); in raydium_i2c_update_fw_store()
972 error = raydium_i2c_fw_update(ts); in raydium_i2c_update_fw_store()
974 mutex_unlock(&ts->sysfs_mutex); in raydium_i2c_update_fw_store()
984 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_calibrate_store() local
988 error = mutex_lock_interruptible(&ts->sysfs_mutex); in raydium_i2c_calibrate_store()
997 mutex_unlock(&ts->sysfs_mutex); in raydium_i2c_calibrate_store()
1020 static int raydium_i2c_power_on(struct raydium_data *ts) in raydium_i2c_power_on() argument
1024 if (!ts->reset_gpio) in raydium_i2c_power_on()
1027 gpiod_set_value_cansleep(ts->reset_gpio, 1); in raydium_i2c_power_on()
1029 error = regulator_enable(ts->avdd); in raydium_i2c_power_on()
1031 dev_err(&ts->client->dev, in raydium_i2c_power_on()
1036 error = regulator_enable(ts->vccio); in raydium_i2c_power_on()
1038 regulator_disable(ts->avdd); in raydium_i2c_power_on()
1039 dev_err(&ts->client->dev, in raydium_i2c_power_on()
1047 gpiod_set_value_cansleep(ts->reset_gpio, 0); in raydium_i2c_power_on()
1059 struct raydium_data *ts = _data; in raydium_i2c_power_off() local
1061 if (ts->reset_gpio) { in raydium_i2c_power_off()
1062 gpiod_set_value_cansleep(ts->reset_gpio, 1); in raydium_i2c_power_off()
1063 regulator_disable(ts->vccio); in raydium_i2c_power_off()
1064 regulator_disable(ts->avdd); in raydium_i2c_power_off()
1071 struct raydium_data *ts; in raydium_i2c_probe() local
1080 ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL); in raydium_i2c_probe()
1081 if (!ts) in raydium_i2c_probe()
1084 mutex_init(&ts->sysfs_mutex); in raydium_i2c_probe()
1086 ts->client = client; in raydium_i2c_probe()
1087 i2c_set_clientdata(client, ts); in raydium_i2c_probe()
1089 ts->avdd = devm_regulator_get(&client->dev, "avdd"); in raydium_i2c_probe()
1090 if (IS_ERR(ts->avdd)) in raydium_i2c_probe()
1091 return dev_err_probe(&client->dev, PTR_ERR(ts->avdd), in raydium_i2c_probe()
1094 ts->vccio = devm_regulator_get(&client->dev, "vccio"); in raydium_i2c_probe()
1095 if (IS_ERR(ts->vccio)) in raydium_i2c_probe()
1096 return dev_err_probe(&client->dev, PTR_ERR(ts->vccio), in raydium_i2c_probe()
1099 ts->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in raydium_i2c_probe()
1101 if (IS_ERR(ts->reset_gpio)) in raydium_i2c_probe()
1102 return dev_err_probe(&client->dev, PTR_ERR(ts->reset_gpio), in raydium_i2c_probe()
1105 error = raydium_i2c_power_on(ts); in raydium_i2c_probe()
1110 raydium_i2c_power_off, ts); in raydium_i2c_probe()
1124 error = raydium_i2c_initialize(ts); in raydium_i2c_probe()
1130 ts->report_data = devm_kmalloc(&client->dev, in raydium_i2c_probe()
1131 ts->pkg_size, GFP_KERNEL); in raydium_i2c_probe()
1132 if (!ts->report_data) in raydium_i2c_probe()
1135 ts->input = devm_input_allocate_device(&client->dev); in raydium_i2c_probe()
1136 if (!ts->input) { in raydium_i2c_probe()
1141 ts->input->name = "Raydium Touchscreen"; in raydium_i2c_probe()
1142 ts->input->id.bustype = BUS_I2C; in raydium_i2c_probe()
1144 input_set_abs_params(ts->input, ABS_MT_POSITION_X, in raydium_i2c_probe()
1145 0, le16_to_cpu(ts->info.x_max), 0, 0); in raydium_i2c_probe()
1146 input_set_abs_params(ts->input, ABS_MT_POSITION_Y, in raydium_i2c_probe()
1147 0, le16_to_cpu(ts->info.y_max), 0, 0); in raydium_i2c_probe()
1148 input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->info.x_res); in raydium_i2c_probe()
1149 input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->info.y_res); in raydium_i2c_probe()
1151 input_set_abs_params(ts->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); in raydium_i2c_probe()
1152 input_set_abs_params(ts->input, ABS_MT_PRESSURE, 0, 255, 0, 0); in raydium_i2c_probe()
1154 error = input_mt_init_slots(ts->input, RM_MAX_TOUCH_NUM, in raydium_i2c_probe()
1162 error = input_register_device(ts->input); in raydium_i2c_probe()
1171 IRQF_ONESHOT, client->name, ts); in raydium_i2c_probe()
1203 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_suspend() local
1206 if (ts->boot_mode != RAYDIUM_TS_MAIN) in raydium_i2c_suspend()
1214 raydium_i2c_power_off(ts); in raydium_i2c_suspend()
1223 struct raydium_data *ts = i2c_get_clientdata(client); in raydium_i2c_resume() local
1228 raydium_i2c_power_on(ts); in raydium_i2c_resume()
1229 raydium_i2c_initialize(ts); in raydium_i2c_resume()