Lines Matching +full:emc +full:- +full:mode +full:- +full:reset
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Elan I2C/SMBus Touchpad driver - SMBus interface
7 * Author: 林政維 (Duson Lin) <dusonlin@emc.com.tw>
10 * copyright (c) 2011-2012 Cypress Semiconductor, Inc.
11 * copyright (c) 2011-2012 Google, Inc.
63 dev_err(&client->dev, "hello packet length fail: %d\n", len); in elan_smbus_initialize()
64 error = len < 0 ? len : -EIO; in elan_smbus_initialize()
70 dev_err(&client->dev, "hello packet fail [%*ph]\n", in elan_smbus_initialize()
72 return -ENXIO; in elan_smbus_initialize()
78 dev_err(&client->dev, "failed to enable touchpad: %d\n", error); in elan_smbus_initialize()
85 static int elan_smbus_set_mode(struct i2c_client *client, u8 mode) in elan_smbus_set_mode() argument
87 u8 cmd[4] = { 0x00, 0x07, 0x00, mode }; in elan_smbus_set_mode()
103 return 0; /* A no-op */ in elan_smbus_power_control()
160 dev_err(&client->dev, "failed to get %s version: %d\n", in elan_smbus_get_version()
178 dev_err(&client->dev, "failed to get SM version: %d\n", error); in elan_smbus_get_sm_version()
196 dev_err(&client->dev, "failed to get product ID: %d\n", error); in elan_smbus_get_product_id()
215 dev_err(&client->dev, "failed to get %s checksum: %d\n", in elan_smbus_get_checksum()
233 error = ret < 0 ? ret : -EIO; in elan_smbus_get_max()
234 dev_err(&client->dev, "failed to get dimensions: %d\n", error); in elan_smbus_get_max()
253 error = ret < 0 ? ret : -EIO; in elan_smbus_get_resolution()
254 dev_err(&client->dev, "failed to get resolution: %d\n", error); in elan_smbus_get_resolution()
274 error = ret < 0 ? ret : -EIO; in elan_smbus_get_num_traces()
275 dev_err(&client->dev, "failed to get trace info: %d\n", error); in elan_smbus_get_num_traces()
293 enum tp_mode *mode) in elan_smbus_iap_get_mode() argument
301 dev_err(&client->dev, "failed to read iap ctrol register: %d\n", in elan_smbus_iap_get_mode()
307 dev_dbg(&client->dev, "iap control reg: 0x%04x.\n", constant); in elan_smbus_iap_get_mode()
309 *mode = (constant & ETP_SMBUS_IAP_MODE_ON) ? IAP_MODE : MAIN_MODE; in elan_smbus_iap_get_mode()
320 dev_err(&client->dev, "cannot reset IC: %d\n", error); in elan_smbus_iap_reset()
335 dev_err(&client->dev, "cannot set flash key: %d\n", error); in elan_smbus_set_flash_key()
345 struct device *dev = &client->dev; in elan_smbus_prepare_fw_update()
348 enum tp_mode mode; in elan_smbus_prepare_fw_update() local
353 /* Get FW in which mode (IAP_MODE/MAIN_MODE) */ in elan_smbus_prepare_fw_update()
354 error = elan_smbus_iap_get_mode(client, &mode); in elan_smbus_prepare_fw_update()
358 if (mode == MAIN_MODE) { in elan_smbus_prepare_fw_update()
369 return -EIO; in elan_smbus_prepare_fw_update()
388 error = len < 0 ? len : -EIO; in elan_smbus_prepare_fw_update()
397 return -EIO; in elan_smbus_prepare_fw_update()
408 /* Reset IC */ in elan_smbus_prepare_fw_update()
420 struct device *dev = &client->dev; in elan_smbus_write_fw_block()
466 return -EIO; in elan_smbus_write_fw_block()
478 * high-precision packets use that space for coordinates. in elan_smbus_get_report_features()
496 dev_err(&client->dev, "failed to read report data: %d\n", len); in elan_smbus_get_report()
501 dev_err(&client->dev, in elan_smbus_get_report()
504 return -EIO; in elan_smbus_get_report()