Lines Matching refs:ts

189 static int goodix_firmware_upload(struct goodix_ts_data *ts)
196 snprintf(fw_name, sizeof(fw_name), "goodix/%s", ts->firmware_name);
198 error = request_firmware(&fw, fw_name, &ts->client->dev);
200 dev_err(&ts->client->dev, "Firmware request error %d\n", error);
204 error = goodix_firmware_verify(&ts->client->dev, fw);
208 error = goodix_reset_no_int_sync(ts);
212 error = goodix_enter_upload_mode(ts->client);
217 error = goodix_i2c_write_u8(ts->client,
223 error = goodix_i2c_write(ts->client, GOODIX_FW_UPLOAD_ADDRESS,
229 error = goodix_i2c_write_u8(ts->client,
235 error = goodix_i2c_write(ts->client, GOODIX_FW_UPLOAD_ADDRESS,
241 error = goodix_i2c_write_u8(ts->client,
247 error = goodix_i2c_write(ts->client, GOODIX_FW_UPLOAD_ADDRESS,
252 error = goodix_start_firmware(ts->client);
256 error = goodix_int_sync(ts);
262 static int goodix_prepare_bak_ref(struct goodix_ts_data *ts)
266 if (ts->bak_ref)
269 have_key = (ts->config[GOODIX_CFG_LOC_HAVE_KEY] & 0x01);
271 driver_num = (ts->config[GOODIX_CFG_LOC_DRVA_NUM] & 0x1f) +
272 (ts->config[GOODIX_CFG_LOC_DRVB_NUM] & 0x1f);
276 sensor_num = (ts->config[GOODIX_CFG_LOC_SENS_NUM] & 0x0f) +
277 ((ts->config[GOODIX_CFG_LOC_SENS_NUM] >> 4) & 0x0f);
279 dev_dbg(&ts->client->dev, "Drv %d Sen %d Key %d\n",
282 ts->bak_ref_len = (driver_num * (sensor_num - 2) + 2) * 2;
284 ts->bak_ref = devm_kzalloc(&ts->client->dev,
285 ts->bak_ref_len, GFP_KERNEL);
286 if (!ts->bak_ref)
304 ts->bak_ref[ts->bak_ref_len - 1] = 1;
309 static int goodix_send_main_clock(struct goodix_ts_data *ts)
315 device_property_read_u32(&ts->client->dev,
319 ts->main_clk[i] = main_clk;
324 ts->main_clk[GOODIX_MAIN_CLK_LEN - 1] = 256 - checksum;
326 return goodix_i2c_write(ts->client, GOODIX_REG_MAIN_CLK,
327 ts->main_clk, GOODIX_MAIN_CLK_LEN);
330 int goodix_firmware_check(struct goodix_ts_data *ts)
332 device_property_read_string(&ts->client->dev,
333 "firmware-name", &ts->firmware_name);
334 if (!ts->firmware_name)
337 if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
338 dev_err(&ts->client->dev, "Error no IRQ-pin access method, cannot upload fw.\n");
342 dev_info(&ts->client->dev, "Touchscreen controller needs fw-upload\n");
343 ts->load_cfg_from_disk = true;
345 return goodix_firmware_upload(ts);
348 bool goodix_handle_fw_request(struct goodix_ts_data *ts)
353 error = goodix_i2c_read(ts->client, GOODIX_REG_REQUEST, &val, 1);
365 error = goodix_send_cfg(ts, ts->config, ts->chip->config_len);
371 error = goodix_prepare_bak_ref(ts);
375 error = goodix_i2c_write(ts->client, GOODIX_REG_BAK_REF,
376 ts->bak_ref, ts->bak_ref_len);
382 error = goodix_firmware_upload(ts);
388 error = goodix_send_main_clock(ts);
397 dev_err_ratelimited(&ts->client->dev, "Unknown Request: 0x%02x\n", val);
401 goodix_i2c_write_u8(ts->client,
406 void goodix_save_bak_ref(struct goodix_ts_data *ts)
411 if (!ts->firmware_name)
414 error = goodix_i2c_read(ts->client, GOODIX_REG_STATUS, &val, 1);
421 error = goodix_i2c_read(ts->client, GOODIX_REG_BAK_REF,
422 ts->bak_ref, ts->bak_ref_len);
424 memset(ts->bak_ref, 0, ts->bak_ref_len);
425 ts->bak_ref[ts->bak_ref_len - 1] = 1;