Lines Matching refs:cyapa

24 #include "cyapa.h"
229 static int cyapa_gen3_try_poll_handler(struct cyapa *cyapa);
233 * @cyapa - private data structure of the driver
244 ssize_t cyapa_smbus_read_block(struct cyapa *cyapa, u8 cmd, size_t len,
251 struct i2c_client *client = cyapa->client;
277 static s32 cyapa_read_byte(struct cyapa *cyapa, u8 cmd_idx)
281 if (cyapa->smbus) {
287 return i2c_smbus_read_byte_data(cyapa->client, cmd);
290 static s32 cyapa_write_byte(struct cyapa *cyapa, u8 cmd_idx, u8 value)
294 if (cyapa->smbus) {
300 return i2c_smbus_write_byte_data(cyapa->client, cmd, value);
303 ssize_t cyapa_i2c_reg_read_block(struct cyapa *cyapa, u8 reg, size_t len,
306 return i2c_smbus_read_i2c_block_data(cyapa->client, reg, len, values);
309 static ssize_t cyapa_i2c_reg_write_block(struct cyapa *cyapa, u8 reg,
312 return i2c_smbus_write_i2c_block_data(cyapa->client, reg, len, values);
315 ssize_t cyapa_read_block(struct cyapa *cyapa, u8 cmd_idx, u8 *values)
320 if (cyapa->smbus) {
323 return cyapa_smbus_read_block(cyapa, cmd, len, values);
327 return cyapa_i2c_reg_read_block(cyapa, cmd, len, values);
334 static int cyapa_gen3_state_parse(struct cyapa *cyapa, u8 *reg_data, int len)
336 cyapa->state = CYAPA_STATE_NO_DEVICE;
349 cyapa->gen = CYAPA_GEN3;
350 cyapa->state = CYAPA_STATE_BL_IDLE;
354 cyapa->gen = CYAPA_GEN3;
356 cyapa->state = CYAPA_STATE_BL_BUSY;
360 cyapa->state = CYAPA_STATE_BL_ACTIVE;
362 cyapa->state = CYAPA_STATE_BL_IDLE;
374 cyapa->gen = CYAPA_GEN3;
375 cyapa->state = CYAPA_STATE_OP;
380 cyapa->gen = CYAPA_GEN3;
381 cyapa->state = CYAPA_STATE_OP;
384 cyapa->gen = CYAPA_GEN3;
385 cyapa->state = CYAPA_STATE_BL_BUSY;
388 if (cyapa->gen == CYAPA_GEN3 && (cyapa->state == CYAPA_STATE_OP ||
389 cyapa->state == CYAPA_STATE_BL_IDLE ||
390 cyapa->state == CYAPA_STATE_BL_ACTIVE ||
391 cyapa->state == CYAPA_STATE_BL_BUSY))
409 static int cyapa_gen3_bl_enter(struct cyapa *cyapa)
414 error = cyapa_poll_state(cyapa, 500);
417 if (cyapa->state == CYAPA_STATE_BL_IDLE) {
422 if (cyapa->state != CYAPA_STATE_OP)
425 cyapa->operational = false;
426 cyapa->state = CYAPA_STATE_NO_DEVICE;
427 error = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET, 0x01);
434 error = cyapa_poll_state(cyapa, 500);
443 if ((cyapa->state == CYAPA_STATE_BL_IDLE) &&
444 !(cyapa->status[REG_BL_STATUS] & BL_STATUS_WATCHDOG))
451 if ((cyapa->state != CYAPA_STATE_BL_IDLE) ||
452 (cyapa->status[REG_BL_STATUS] & BL_STATUS_WATCHDOG))
458 static int cyapa_gen3_bl_activate(struct cyapa *cyapa)
462 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_activate),
469 error = cyapa_poll_state(cyapa, 11000);
472 if (cyapa->state != CYAPA_STATE_BL_ACTIVE)
478 static int cyapa_gen3_bl_deactivate(struct cyapa *cyapa)
482 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_deactivate),
489 error = cyapa_poll_state(cyapa, 500);
492 if (cyapa->state != CYAPA_STATE_BL_IDLE)
510 static int cyapa_gen3_bl_exit(struct cyapa *cyapa)
514 error = cyapa_i2c_reg_write_block(cyapa, 0, sizeof(bl_exit), bl_exit);
529 error = cyapa_poll_state(cyapa, 4000);
532 if (cyapa->state != CYAPA_STATE_OP)
564 static int cyapa_gen3_check_fw(struct cyapa *cyapa, const struct firmware *fw)
566 struct device *dev = &cyapa->client->dev;
608 static int cyapa_gen3_write_buffer(struct cyapa *cyapa,
623 error = cyapa_i2c_reg_write_block(cyapa, 0, cmd_len + 1, cmd);
646 static int cyapa_gen3_write_fw_block(struct cyapa *cyapa,
666 ret = cyapa_gen3_write_buffer(cyapa, (u8 *)&write_block_cmd,
677 ret = cyapa_i2c_reg_read_block(cyapa, BL_HEAD_OFFSET,
698 static int cyapa_gen3_write_blocks(struct cyapa *cyapa,
710 error = cyapa_gen3_write_fw_block(cyapa, block, data);
717 static int cyapa_gen3_do_fw_update(struct cyapa *cyapa,
720 struct device *dev = &cyapa->client->dev;
724 error = cyapa_gen3_write_blocks(cyapa,
733 error = cyapa_gen3_write_blocks(cyapa,
748 struct cyapa *cyapa = dev_get_drvdata(dev);
752 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
764 ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET,
781 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
802 struct cyapa *cyapa = dev_get_drvdata(dev);
807 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
819 ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET,
831 ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
847 ret = cyapa_read_byte(cyapa, CYAPA_CMD_MAX_BASELINE);
854 ret = cyapa_read_byte(cyapa, CYAPA_CMD_MIN_BASELINE);
907 static int cyapa_gen3_set_power_mode(struct cyapa *cyapa, u8 power_mode,
910 struct input_dev *input = cyapa->input;
917 if (cyapa->state != CYAPA_STATE_OP)
922 ret = cyapa_read_byte(cyapa, CYAPA_CMD_POWER_MODE);
943 ret = cyapa_write_byte(cyapa, CYAPA_CMD_POWER_MODE, power);
955 if (cyapa->operational &&
967 cyapa_gen3_try_poll_handler(cyapa);
976 static int cyapa_gen3_set_proximity(struct cyapa *cyapa, bool enable)
981 static int cyapa_gen3_get_query_data(struct cyapa *cyapa)
986 if (cyapa->state != CYAPA_STATE_OP)
989 ret = cyapa_read_block(cyapa, CYAPA_CMD_GROUP_QUERY, query_data);
993 memcpy(&cyapa->product_id[0], &query_data[0], 5);
994 cyapa->product_id[5] = '-';
995 memcpy(&cyapa->product_id[6], &query_data[5], 6);
996 cyapa->product_id[12] = '-';
997 memcpy(&cyapa->product_id[13], &query_data[11], 2);
998 cyapa->product_id[15] = '\0';
1000 cyapa->fw_maj_ver = query_data[15];
1001 cyapa->fw_min_ver = query_data[16];
1003 cyapa->btn_capability = query_data[19] & CAPABILITY_BTN_MASK;
1005 cyapa->gen = query_data[20] & 0x0f;
1007 cyapa->max_abs_x = ((query_data[21] & 0xf0) << 4) | query_data[22];
1008 cyapa->max_abs_y = ((query_data[21] & 0x0f) << 8) | query_data[23];
1010 cyapa->physical_size_x =
1012 cyapa->physical_size_y =
1015 cyapa->max_z = 255;
1020 static int cyapa_gen3_bl_query_data(struct cyapa *cyapa)
1025 ret = cyapa_i2c_reg_read_block(cyapa, 0, CYAPA_CMD_LEN, bl_data);
1037 cyapa->fw_maj_ver = bl_data[GEN3_BL_IDLE_FW_MAJ_VER_OFFSET];
1038 cyapa->fw_min_ver = bl_data[GEN3_BL_IDLE_FW_MIN_VER_OFFSET];
1058 static int cyapa_gen3_do_operational_check(struct cyapa *cyapa)
1060 struct device *dev = &cyapa->client->dev;
1063 switch (cyapa->state) {
1065 error = cyapa_gen3_bl_deactivate(cyapa);
1074 cyapa_gen3_bl_query_data(cyapa);
1076 error = cyapa_gen3_bl_exit(cyapa);
1088 error = cyapa_gen3_set_power_mode(cyapa,
1093 error = cyapa_gen3_get_query_data(cyapa);
1098 if (cyapa->gen != CYAPA_GEN3) {
1100 cyapa->gen);
1105 if (memcmp(cyapa->product_id, product_id,
1108 cyapa->product_id);
1124 static bool cyapa_gen3_irq_cmd_handler(struct cyapa *cyapa)
1127 if (cyapa->gen != CYAPA_GEN3)
1130 if (cyapa->operational)
1145 static int cyapa_gen3_event_process(struct cyapa *cyapa,
1148 struct input_dev *input = cyapa->input;
1169 if (cyapa->btn_capability & CAPABILITY_LEFT_BTN_MASK)
1172 if (cyapa->btn_capability & CAPABILITY_MIDDLE_BTN_MASK)
1175 if (cyapa->btn_capability & CAPABILITY_RIGHT_BTN_MASK)
1183 static int cyapa_gen3_irq_handler(struct cyapa *cyapa)
1185 struct device *dev = &cyapa->client->dev;
1189 ret = cyapa_read_block(cyapa, CYAPA_CMD_GROUP_DATA, (u8 *)&data);
1203 return cyapa_gen3_event_process(cyapa, &data);
1212 static int cyapa_gen3_try_poll_handler(struct cyapa *cyapa)
1217 ret = cyapa_read_block(cyapa, CYAPA_CMD_GROUP_DATA, (u8 *)&data);
1226 return cyapa_gen3_event_process(cyapa, &data);
1230 static int cyapa_gen3_initialize(struct cyapa *cyapa) { return 0; }
1231 static int cyapa_gen3_bl_initiate(struct cyapa *cyapa,
1233 static int cyapa_gen3_empty_output_data(struct cyapa *cyapa,