Lines Matching refs:cyapa

22 #include "cyapa.h"
75 static bool cyapa_sort_pip_hid_descriptor_data(struct cyapa *cyapa,
88 static int cyapa_get_pip_fixed_info(struct cyapa *cyapa,
99 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
116 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
136 int cyapa_pip_state_parse(struct cyapa *cyapa, u8 *reg_data, int len)
145 cyapa->state = CYAPA_STATE_NO_DEVICE;
148 cyapa_pip_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_ON);
151 cyapa_empty_pip_output_data(cyapa, NULL, NULL, NULL);
158 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
176 error = cyapa_get_pip_fixed_info(cyapa, &pip_info, is_bootloader);
181 cyapa->gen = CYAPA_GEN6;
182 cyapa->state = is_bootloader ? CYAPA_STATE_GEN6_BL
186 cyapa->gen = CYAPA_GEN5;
187 cyapa->state = is_bootloader ? CYAPA_STATE_GEN5_BL
194 static int cyapa_gen6_read_sys_info(struct cyapa *cyapa)
204 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
216 cyapa->platform_ver = (resp_data[67] >> PIP_BL_PLATFORM_VER_SHIFT) &
218 cyapa->fw_maj_ver = resp_data[9];
219 cyapa->fw_min_ver = resp_data[10];
221 cyapa->electrodes_x = resp_data[33];
222 cyapa->electrodes_y = resp_data[34];
224 cyapa->physical_size_x = get_unaligned_le16(&resp_data[35]) / 100;
225 cyapa->physical_size_y = get_unaligned_le16(&resp_data[37]) / 100;
227 cyapa->max_abs_x = get_unaligned_le16(&resp_data[39]);
228 cyapa->max_abs_y = get_unaligned_le16(&resp_data[41]);
230 cyapa->max_z = get_unaligned_le16(&resp_data[43]);
232 cyapa->x_origin = resp_data[45] & 0x01;
233 cyapa->y_origin = resp_data[46] & 0x01;
235 cyapa->btn_capability = (resp_data[70] << 3) & CAPABILITY_BTN_MASK;
237 memcpy(&cyapa->product_id[0], &resp_data[51], 5);
238 cyapa->product_id[5] = '-';
239 memcpy(&cyapa->product_id[6], &resp_data[56], 6);
240 cyapa->product_id[12] = '-';
241 memcpy(&cyapa->product_id[13], &resp_data[62], 2);
242 cyapa->product_id[15] = '\0';
246 cyapa->electrodes_rx =
247 rotat_align ? cyapa->electrodes_y : cyapa->electrodes_x;
248 cyapa->aligned_electrodes_rx = (cyapa->electrodes_rx + 3) & ~3u;
250 if (!cyapa->electrodes_x || !cyapa->electrodes_y ||
251 !cyapa->physical_size_x || !cyapa->physical_size_y ||
252 !cyapa->max_abs_x || !cyapa->max_abs_y || !cyapa->max_z)
258 static int cyapa_gen6_bl_read_app_info(struct cyapa *cyapa)
265 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
273 cyapa->fw_maj_ver = resp_data[8];
274 cyapa->fw_min_ver = resp_data[9];
276 cyapa->platform_ver = (resp_data[12] >> PIP_BL_PLATFORM_VER_SHIFT) &
279 memcpy(&cyapa->product_id[0], &resp_data[13], 5);
280 cyapa->product_id[5] = '-';
281 memcpy(&cyapa->product_id[6], &resp_data[18], 6);
282 cyapa->product_id[12] = '-';
283 memcpy(&cyapa->product_id[13], &resp_data[24], 2);
284 cyapa->product_id[15] = '\0';
290 static int cyapa_gen6_config_dev_irq(struct cyapa *cyapa, u8 cmd_code)
298 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd),
309 static int cyapa_gen6_set_proximity(struct cyapa *cyapa, bool enable)
313 cyapa_gen6_config_dev_irq(cyapa, GEN6_DISABLE_CMD_IRQ);
314 error = cyapa_pip_set_proximity(cyapa, enable);
315 cyapa_gen6_config_dev_irq(cyapa, GEN6_ENABLE_CMD_IRQ);
320 static int cyapa_gen6_change_power_state(struct cyapa *cyapa, u8 power_mode)
328 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd),
341 static int cyapa_gen6_set_interval_setting(struct cyapa *cyapa,
372 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
388 static int cyapa_gen6_get_interval_setting(struct cyapa *cyapa,
398 error = cyapa_i2c_pip_cmd_irq_sync(cyapa, cmd, sizeof(cmd),
412 static int cyapa_gen6_deep_sleep(struct cyapa *cyapa, u8 state)
422 cyapa_i2c_pip_write(cyapa, ping, sizeof(ping));
424 return cyapa_pip_deep_sleep(cyapa, state);
427 static int cyapa_gen6_set_power_mode(struct cyapa *cyapa,
430 struct device *dev = &cyapa->client->dev;
432 &cyapa->gen6_interval_setting;
436 if (cyapa->state != CYAPA_STATE_GEN6_APP)
439 if (PIP_DEV_GET_PWR_STATE(cyapa) == UNINIT_PWR_MODE) {
445 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF);
448 if (PIP_DEV_UNINIT_SLEEP_TIME(cyapa) &&
449 PIP_DEV_GET_PWR_STATE(cyapa) != PWR_MODE_OFF)
450 PIP_DEV_SET_SLEEP_TIME(cyapa, UNINIT_SLEEP_TIME);
452 if (PIP_DEV_GET_PWR_STATE(cyapa) == power_mode) {
456 PIP_DEV_GET_SLEEP_TIME(cyapa) == sleep_time) {
463 cyapa_gen6_config_dev_irq(cyapa, GEN6_DISABLE_CMD_IRQ);
465 error = cyapa_gen6_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_OFF);
471 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_OFF);
480 if (PIP_DEV_GET_PWR_STATE(cyapa) == PWR_MODE_OFF) {
481 error = cyapa_gen6_deep_sleep(cyapa, PIP_DEEP_SLEEP_STATE_ON);
492 cyapa_gen6_config_dev_irq(cyapa, GEN6_DISABLE_CMD_IRQ);
495 error = cyapa_gen6_change_power_state(cyapa,
502 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_FULL_ACTIVE);
505 cyapa_gen6_get_interval_setting(cyapa, interval_setting);
508 error = cyapa_gen6_change_power_state(cyapa,
515 PIP_DEV_SET_PWR_STATE(cyapa, PWR_MODE_BTN_ONLY);
534 cyapa_gen6_set_interval_setting(cyapa,
538 error = cyapa_gen6_change_power_state(cyapa, lp_mode);
545 PIP_DEV_SET_SLEEP_TIME(cyapa, sleep_time);
546 PIP_DEV_SET_PWR_STATE(cyapa,
551 cyapa_gen6_config_dev_irq(cyapa, GEN6_ENABLE_CMD_IRQ);
555 static int cyapa_gen6_initialize(struct cyapa *cyapa)
560 static int cyapa_pip_retrieve_data_structure(struct cyapa *cyapa,
584 error = cyapa_i2c_pip_cmd_irq_sync(cyapa,
608 struct cyapa *cyapa = dev_get_drvdata(dev);
616 if (!cyapa_is_pip_app_mode(cyapa))
620 error = cyapa_pip_suspend_scanning(cyapa);
626 error = cyapa_pip_retrieve_data_structure(cyapa, 0, data_len,
643 error = cyapa_pip_retrieve_data_structure(cyapa, 0, data_len,
656 resume_error = cyapa_pip_resume_scanning(cyapa);
665 static int cyapa_gen6_operational_check(struct cyapa *cyapa)
667 struct device *dev = &cyapa->client->dev;
670 if (cyapa->gen != CYAPA_GEN6)
673 switch (cyapa->state) {
675 error = cyapa_pip_bl_exit(cyapa);
678 cyapa_gen6_bl_read_app_info(cyapa);
682 cyapa->state = CYAPA_STATE_GEN6_APP;
692 error = cyapa_gen6_set_power_mode(cyapa,
699 error = cyapa_pip_set_proximity(cyapa, true);
705 error = cyapa_gen6_read_sys_info(cyapa);
709 if (memcmp(cyapa->product_id, product_id,
712 __func__, cyapa->product_id);