Lines Matching refs:cyapa
286 ssize_t cyapa_smbus_read_block(struct cyapa *cyapa, u8 cmd, size_t len, in cyapa_smbus_read_block() argument
293 struct i2c_client *client = cyapa->client; in cyapa_smbus_read_block()
319 static s32 cyapa_read_byte(struct cyapa *cyapa, u8 cmd_idx) in cyapa_read_byte() argument
323 if (cyapa->smbus) { in cyapa_read_byte()
329 return i2c_smbus_read_byte_data(cyapa->client, cmd); in cyapa_read_byte()
332 static s32 cyapa_write_byte(struct cyapa *cyapa, u8 cmd_idx, u8 value) in cyapa_write_byte() argument
336 if (cyapa->smbus) { in cyapa_write_byte()
342 return i2c_smbus_write_byte_data(cyapa->client, cmd, value); in cyapa_write_byte()
345 ssize_t cyapa_i2c_reg_read_block(struct cyapa *cyapa, u8 reg, size_t len, in cyapa_i2c_reg_read_block() argument
348 return i2c_smbus_read_i2c_block_data(cyapa->client, reg, len, values); in cyapa_i2c_reg_read_block()
351 static ssize_t cyapa_i2c_reg_write_block(struct cyapa *cyapa, u8 reg, in cyapa_i2c_reg_write_block() argument
354 return i2c_smbus_write_i2c_block_data(cyapa->client, reg, len, values); in cyapa_i2c_reg_write_block()
357 ssize_t cyapa_read_block(struct cyapa *cyapa, u8 cmd_idx, u8 *values) in cyapa_read_block() argument
362 if (cyapa->smbus) { in cyapa_read_block()
365 return cyapa_smbus_read_block(cyapa, cmd, len, values); in cyapa_read_block()
369 return cyapa_i2c_reg_read_block(cyapa, cmd, len, values); in cyapa_read_block()
376 static int cyapa_gen3_state_parse(struct cyapa *cyapa, u8 *reg_data, int len) in cyapa_gen3_state_parse() argument
378 cyapa->state = CYAPA_STATE_NO_DEVICE; in cyapa_gen3_state_parse()
391 cyapa->gen = CYAPA_GEN3; in cyapa_gen3_state_parse()
392 cyapa->state = CYAPA_STATE_BL_IDLE; in cyapa_gen3_state_parse()
396 cyapa->gen = CYAPA_GEN3; in cyapa_gen3_state_parse()
398 cyapa->state = CYAPA_STATE_BL_BUSY; in cyapa_gen3_state_parse()
402 cyapa->state = CYAPA_STATE_BL_ACTIVE; in cyapa_gen3_state_parse()
404 cyapa->state = CYAPA_STATE_BL_IDLE; in cyapa_gen3_state_parse()
416 cyapa->gen = CYAPA_GEN3; in cyapa_gen3_state_parse()
417 cyapa->state = CYAPA_STATE_OP; in cyapa_gen3_state_parse()
422 cyapa->gen = CYAPA_GEN3; in cyapa_gen3_state_parse()
423 cyapa->state = CYAPA_STATE_OP; in cyapa_gen3_state_parse()
426 cyapa->gen = CYAPA_GEN3; in cyapa_gen3_state_parse()
427 cyapa->state = CYAPA_STATE_BL_BUSY; in cyapa_gen3_state_parse()
430 if (cyapa->gen == CYAPA_GEN3 && (cyapa->state == CYAPA_STATE_OP || in cyapa_gen3_state_parse()
431 cyapa->state == CYAPA_STATE_BL_IDLE || in cyapa_gen3_state_parse()
432 cyapa->state == CYAPA_STATE_BL_ACTIVE || in cyapa_gen3_state_parse()
433 cyapa->state == CYAPA_STATE_BL_BUSY)) in cyapa_gen3_state_parse()
451 static int cyapa_gen3_bl_enter(struct cyapa *cyapa) in cyapa_gen3_bl_enter() argument
456 error = cyapa_poll_state(cyapa, 500); in cyapa_gen3_bl_enter()
459 if (cyapa->state == CYAPA_STATE_BL_IDLE) { in cyapa_gen3_bl_enter()
464 if (cyapa->state != CYAPA_STATE_OP) in cyapa_gen3_bl_enter()
467 cyapa->operational = false; in cyapa_gen3_bl_enter()
468 cyapa->state = CYAPA_STATE_NO_DEVICE; in cyapa_gen3_bl_enter()
469 error = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET, 0x01); in cyapa_gen3_bl_enter()
476 error = cyapa_poll_state(cyapa, 500); in cyapa_gen3_bl_enter()
485 if ((cyapa->state == CYAPA_STATE_BL_IDLE) && in cyapa_gen3_bl_enter()
486 !(cyapa->status[REG_BL_STATUS] & BL_STATUS_WATCHDOG)) in cyapa_gen3_bl_enter()
493 if ((cyapa->state != CYAPA_STATE_BL_IDLE) || in cyapa_gen3_bl_enter()
494 (cyapa->status[REG_BL_STATUS] & BL_STATUS_WATCHDOG)) in cyapa_gen3_bl_enter()
500 static int cyapa_gen3_bl_activate(struct cyapa *cyapa) in cyapa_gen3_bl_activate() argument
504 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_activate), in cyapa_gen3_bl_activate()
511 error = cyapa_poll_state(cyapa, 11000); in cyapa_gen3_bl_activate()
514 if (cyapa->state != CYAPA_STATE_BL_ACTIVE) in cyapa_gen3_bl_activate()
520 static int cyapa_gen3_bl_deactivate(struct cyapa *cyapa) in cyapa_gen3_bl_deactivate() argument
524 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_deactivate), in cyapa_gen3_bl_deactivate()
531 error = cyapa_poll_state(cyapa, 500); in cyapa_gen3_bl_deactivate()
534 if (cyapa->state != CYAPA_STATE_BL_IDLE) in cyapa_gen3_bl_deactivate()
552 static int cyapa_gen3_bl_exit(struct cyapa *cyapa) in cyapa_gen3_bl_exit() argument
556 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_exit), bl_exit); in cyapa_gen3_bl_exit()
571 error = cyapa_poll_state(cyapa, 4000); in cyapa_gen3_bl_exit()
574 if (cyapa->state != CYAPA_STATE_OP) in cyapa_gen3_bl_exit()
606 static int cyapa_gen3_check_fw(struct cyapa *cyapa, const struct firmware *fw) in cyapa_gen3_check_fw() argument
608 struct device *dev = &cyapa->client->dev; in cyapa_gen3_check_fw()
650 static int cyapa_gen3_write_buffer(struct cyapa *cyapa, in cyapa_gen3_write_buffer() argument
665 error = cyapa_i2c_reg_write_block(cyapa, 0, cmd_len + 1, cmd); in cyapa_gen3_write_buffer()
688 static int cyapa_gen3_write_fw_block(struct cyapa *cyapa, in cyapa_gen3_write_fw_block() argument
708 ret = cyapa_gen3_write_buffer(cyapa, (u8 *)&write_block_cmd, in cyapa_gen3_write_fw_block()
719 ret = cyapa_i2c_reg_read_block(cyapa, BL_HEAD_OFFSET, in cyapa_gen3_write_fw_block()
740 static int cyapa_gen3_write_blocks(struct cyapa *cyapa, in cyapa_gen3_write_blocks() argument
752 error = cyapa_gen3_write_fw_block(cyapa, block, data); in cyapa_gen3_write_blocks()
759 static int cyapa_gen3_do_fw_update(struct cyapa *cyapa, in cyapa_gen3_do_fw_update() argument
762 struct device *dev = &cyapa->client->dev; in cyapa_gen3_do_fw_update()
766 error = cyapa_gen3_write_blocks(cyapa, in cyapa_gen3_do_fw_update()
775 error = cyapa_gen3_write_blocks(cyapa, in cyapa_gen3_do_fw_update()
790 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_gen3_do_calibrate() local
794 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); in cyapa_gen3_do_calibrate()
806 ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET, in cyapa_gen3_do_calibrate()
823 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); in cyapa_gen3_do_calibrate()
847 struct cyapa *cyapa = dev_get_drvdata(dev); in cyapa_gen3_show_baseline() local
852 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); in cyapa_gen3_show_baseline()
864 ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET, in cyapa_gen3_show_baseline()
876 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); in cyapa_gen3_show_baseline()
892 ret = cyapa_read_byte(cyapa, CYAPA_CMD_MAX_BASELINE); in cyapa_gen3_show_baseline()
899 ret = cyapa_read_byte(cyapa, CYAPA_CMD_MIN_BASELINE); in cyapa_gen3_show_baseline()
952 static int cyapa_gen3_set_power_mode(struct cyapa *cyapa, u8 power_mode, in cyapa_gen3_set_power_mode() argument
961 if (cyapa->state != CYAPA_STATE_OP) in cyapa_gen3_set_power_mode()
966 ret = cyapa_read_byte(cyapa, CYAPA_CMD_POWER_MODE); in cyapa_gen3_set_power_mode()
987 ret = cyapa_write_byte(cyapa, CYAPA_CMD_POWER_MODE, power); in cyapa_gen3_set_power_mode()
1003 static int cyapa_gen3_get_query_data(struct cyapa *cyapa) in cyapa_gen3_get_query_data() argument
1008 if (cyapa->state != CYAPA_STATE_OP) in cyapa_gen3_get_query_data()
1011 ret = cyapa_read_block(cyapa, CYAPA_CMD_GROUP_QUERY, query_data); in cyapa_gen3_get_query_data()
1015 memcpy(&cyapa->product_id[0], &query_data[0], 5); in cyapa_gen3_get_query_data()
1016 cyapa->product_id[5] = '-'; in cyapa_gen3_get_query_data()
1017 memcpy(&cyapa->product_id[6], &query_data[5], 6); in cyapa_gen3_get_query_data()
1018 cyapa->product_id[12] = '-'; in cyapa_gen3_get_query_data()
1019 memcpy(&cyapa->product_id[13], &query_data[11], 2); in cyapa_gen3_get_query_data()
1020 cyapa->product_id[15] = '\0'; in cyapa_gen3_get_query_data()
1022 cyapa->fw_maj_ver = query_data[15]; in cyapa_gen3_get_query_data()
1023 cyapa->fw_min_ver = query_data[16]; in cyapa_gen3_get_query_data()
1025 cyapa->btn_capability = query_data[19] & CAPABILITY_BTN_MASK; in cyapa_gen3_get_query_data()
1027 cyapa->gen = query_data[20] & 0x0f; in cyapa_gen3_get_query_data()
1029 cyapa->max_abs_x = ((query_data[21] & 0xf0) << 4) | query_data[22]; in cyapa_gen3_get_query_data()
1030 cyapa->max_abs_y = ((query_data[21] & 0x0f) << 8) | query_data[23]; in cyapa_gen3_get_query_data()
1032 cyapa->physical_size_x = in cyapa_gen3_get_query_data()
1034 cyapa->physical_size_y = in cyapa_gen3_get_query_data()
1037 cyapa->max_z = 255; in cyapa_gen3_get_query_data()
1042 static int cyapa_gen3_bl_query_data(struct cyapa *cyapa) in cyapa_gen3_bl_query_data() argument
1047 ret = cyapa_i2c_reg_read_block(cyapa, 0, CYAPA_CMD_LEN, bl_data); in cyapa_gen3_bl_query_data()
1059 cyapa->fw_maj_ver = bl_data[GEN3_BL_IDLE_FW_MAJ_VER_OFFSET]; in cyapa_gen3_bl_query_data()
1060 cyapa->fw_min_ver = bl_data[GEN3_BL_IDLE_FW_MIN_VER_OFFSET]; in cyapa_gen3_bl_query_data()
1080 static int cyapa_gen3_do_operational_check(struct cyapa *cyapa) in cyapa_gen3_do_operational_check() argument
1082 struct device *dev = &cyapa->client->dev; in cyapa_gen3_do_operational_check()
1085 switch (cyapa->state) { in cyapa_gen3_do_operational_check()
1087 error = cyapa_gen3_bl_deactivate(cyapa); in cyapa_gen3_do_operational_check()
1096 cyapa_gen3_bl_query_data(cyapa); in cyapa_gen3_do_operational_check()
1098 error = cyapa_gen3_bl_exit(cyapa); in cyapa_gen3_do_operational_check()
1110 error = cyapa_gen3_set_power_mode(cyapa, in cyapa_gen3_do_operational_check()
1115 error = cyapa_gen3_get_query_data(cyapa); in cyapa_gen3_do_operational_check()
1120 if (cyapa->gen != CYAPA_GEN3) { in cyapa_gen3_do_operational_check()
1122 cyapa->gen); in cyapa_gen3_do_operational_check()
1127 if (memcmp(cyapa->product_id, product_id, in cyapa_gen3_do_operational_check()
1130 cyapa->product_id); in cyapa_gen3_do_operational_check()
1146 static bool cyapa_gen3_irq_cmd_handler(struct cyapa *cyapa) in cyapa_gen3_irq_cmd_handler() argument
1149 if (cyapa->gen != CYAPA_GEN3) in cyapa_gen3_irq_cmd_handler()
1152 if (cyapa->operational) in cyapa_gen3_irq_cmd_handler()
1167 static int cyapa_gen3_irq_handler(struct cyapa *cyapa) in cyapa_gen3_irq_handler() argument
1169 struct input_dev *input = cyapa->input; in cyapa_gen3_irq_handler()
1170 struct device *dev = &cyapa->client->dev; in cyapa_gen3_irq_handler()
1176 ret = cyapa_read_block(cyapa, CYAPA_CMD_GROUP_DATA, (u8 *)&data); in cyapa_gen3_irq_handler()
1207 if (cyapa->btn_capability & CAPABILITY_LEFT_BTN_MASK) in cyapa_gen3_irq_handler()
1210 if (cyapa->btn_capability & CAPABILITY_MIDDLE_BTN_MASK) in cyapa_gen3_irq_handler()
1213 if (cyapa->btn_capability & CAPABILITY_RIGHT_BTN_MASK) in cyapa_gen3_irq_handler()
1221 static int cyapa_gen3_initialize(struct cyapa *cyapa) { return 0; } in cyapa_gen3_initialize() argument
1222 static int cyapa_gen3_bl_initiate(struct cyapa *cyapa, in cyapa_gen3_bl_initiate() argument
1224 static int cyapa_gen3_empty_output_data(struct cyapa *cyapa, in cyapa_gen3_empty_output_data() argument