Lines Matching +full:emc +full:- +full:mode +full:- +full:reset

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Elan I2C/SMBus Touchpad driver - I2C interface
7 * Author: 林政維 (Duson Lin) <dusonlin@emc.com.tw>
10 * copyright (c) 2011-2012 Cypress Semiconductor, Inc.
11 * copyright (c) 2011-2012 Google, Inc.
82 .addr = client->addr, in elan_i2c_read_block()
83 .flags = client->flags & I2C_M_TEN, in elan_i2c_read_block()
88 .addr = client->addr, in elan_i2c_read_block()
89 .flags = (client->flags & I2C_M_TEN) | I2C_M_RD, in elan_i2c_read_block()
96 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in elan_i2c_read_block()
97 return ret == ARRAY_SIZE(msgs) ? 0 : (ret < 0 ? ret : -EIO); in elan_i2c_read_block()
106 dev_err(&client->dev, "reading cmd (0x%04x) fail.\n", reg); in elan_i2c_read_cmd()
120 .addr = client->addr, in elan_i2c_write_cmd()
121 .flags = client->flags & I2C_M_TEN, in elan_i2c_write_cmd()
127 ret = i2c_transfer(client->adapter, &msg, 1); in elan_i2c_write_cmd()
130 ret = -EIO; in elan_i2c_write_cmd()
131 dev_err(&client->dev, "writing cmd (0x%04x) failed: %d\n", in elan_i2c_write_cmd()
141 struct device *dev = &client->dev; in elan_i2c_initialize()
147 dev_err(dev, "device reset failed: %d\n", error); in elan_i2c_initialize()
151 /* Wait for the device to reset */ in elan_i2c_initialize()
154 /* get reset acknowledgement 0000 */ in elan_i2c_initialize()
157 dev_err(dev, "failed to read reset response: %d\n", error); in elan_i2c_initialize()
192 dev_err(&client->dev, in elan_i2c_power_control()
206 dev_err(&client->dev, in elan_i2c_power_control()
215 static int elan_i2c_set_mode(struct i2c_client *client, u8 mode) in elan_i2c_set_mode() argument
217 return elan_i2c_write_cmd(client, ETP_I2C_SET_CMD, mode); in elan_i2c_set_mode()
256 dev_err(&client->dev, "failed to get pattern: %d\n", error); in elan_i2c_get_pattern()
286 dev_err(&client->dev, "failed to get %s version: %d\n", in elan_i2c_get_version()
307 dev_err(&client->dev, "failed to get ic type: %d\n", in elan_i2c_get_sm_version()
316 dev_err(&client->dev, "failed to get SM version: %d\n", in elan_i2c_get_sm_version()
325 dev_err(&client->dev, "failed to get SM version: %d\n", in elan_i2c_get_sm_version()
333 dev_err(&client->dev, "failed to get ic type: %d\n", in elan_i2c_get_sm_version()
342 dev_err(&client->dev, "failed to get SM version: %d\n", in elan_i2c_get_sm_version()
359 dev_err(&client->dev, "failed to get product ID: %d\n", error); in elan_i2c_get_product_id()
378 dev_err(&client->dev, "failed to get %s checksum: %d\n", in elan_i2c_get_checksum()
395 dev_err(&client->dev, "failed to get X dimension: %d\n", error); in elan_i2c_get_max()
403 dev_err(&client->dev, "failed to get Y dimension: %d\n", error); in elan_i2c_get_max()
420 dev_err(&client->dev, "failed to get resolution: %d\n", error); in elan_i2c_get_resolution()
439 dev_err(&client->dev, "failed to get trace info: %d\n", error); in elan_i2c_get_num_traces()
457 dev_err(&client->dev, "failed to get pressure format: %d\n", in elan_i2c_get_pressure_adjustment()
470 static int elan_i2c_iap_get_mode(struct i2c_client *client, enum tp_mode *mode) in elan_i2c_iap_get_mode() argument
478 dev_err(&client->dev, in elan_i2c_iap_get_mode()
485 dev_dbg(&client->dev, "iap control reg: 0x%04x.\n", constant); in elan_i2c_iap_get_mode()
487 *mode = (constant & ETP_I2C_MAIN_MODE_ON) ? MAIN_MODE : IAP_MODE; in elan_i2c_iap_get_mode()
499 dev_err(&client->dev, "cannot reset IC: %d\n", error); in elan_i2c_iap_reset()
513 dev_err(&client->dev, "cannot set flash key: %d\n", error); in elan_i2c_set_flash_key()
531 dev_err(&client->dev, in elan_read_write_iap_type()
538 dev_err(&client->dev, in elan_read_write_iap_type()
544 dev_dbg(&client->dev, "iap type reg: 0x%04x\n", constant); in elan_read_write_iap_type()
549 } while (--retry > 0); in elan_read_write_iap_type()
551 dev_err(&client->dev, "cannot set iap type\n"); in elan_read_write_iap_type()
552 return -EIO; in elan_read_write_iap_type()
558 struct device *dev = &client->dev; in elan_i2c_prepare_fw_update()
560 enum tp_mode mode; in elan_i2c_prepare_fw_update() local
564 /* Get FW in which mode (IAP_MODE/MAIN_MODE) */ in elan_i2c_prepare_fw_update()
565 error = elan_i2c_iap_get_mode(client, &mode); in elan_i2c_prepare_fw_update()
569 if (mode == IAP_MODE) { in elan_i2c_prepare_fw_update()
570 /* Reset IC */ in elan_i2c_prepare_fw_update()
584 msleep(mode == MAIN_MODE ? 100 : 30); in elan_i2c_prepare_fw_update()
586 /* Check if we are in IAP mode or not */ in elan_i2c_prepare_fw_update()
587 error = elan_i2c_iap_get_mode(client, &mode); in elan_i2c_prepare_fw_update()
591 if (mode == MAIN_MODE) { in elan_i2c_prepare_fw_update()
592 dev_err(dev, "wrong mode: %d\n", mode); in elan_i2c_prepare_fw_update()
593 return -EIO; in elan_i2c_prepare_fw_update()
621 return -EIO; in elan_i2c_prepare_fw_update()
630 struct device *dev = &client->dev; in elan_i2c_write_fw_block()
638 return -ENOMEM; in elan_i2c_write_fw_block()
648 error = ret < 0 ? ret : -EIO; in elan_i2c_write_fw_block()
666 error = -EIO; in elan_i2c_write_fw_block()
678 struct device *dev = &client->dev; in elan_i2c_finish_fw_update()
685 error = len < 0 ? len : -EIO; in elan_i2c_finish_fw_update()
686 dev_warn(dev, "failed to read I2C data after FW WDT reset: %d (%d)\n", in elan_i2c_finish_fw_update()
691 enable_irq(client->irq); in elan_i2c_finish_fw_update()
695 dev_err(dev, "device reset failed: %d\n", error); in elan_i2c_finish_fw_update()
698 dev_err(dev, "timeout waiting for device reset\n"); in elan_i2c_finish_fw_update()
699 error = -ETIMEDOUT; in elan_i2c_finish_fw_update()
702 disable_irq(client->irq); in elan_i2c_finish_fw_update()
709 error = len < 0 ? len : -EIO; in elan_i2c_finish_fw_update()
735 dev_err(&client->dev, "failed to read report data: %d\n", len); in elan_i2c_get_report()
740 dev_err(&client->dev, in elan_i2c_get_report()
743 return -EIO; in elan_i2c_get_report()