Lines Matching +full:max +full:- +full:retries

1 // SPDX-License-Identifier: GPL-2.0-or-later
35 * i.e. max size required for I2C write is 34 = addr, command, 32 bytes data
59 dev_dbg(&client->dev, in i2c_nuvoton_read_buf()
60 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__, in i2c_nuvoton_read_buf()
71 dev_dbg(&client->dev, in i2c_nuvoton_write_buf()
72 "%s(offset=%u size=%u data=%*ph) -> sts=%d\n", __func__, in i2c_nuvoton_write_buf()
91 struct i2c_client *client = to_i2c_client(chip->dev.parent); in i2c_nuvoton_read_status()
97 dev_err(&chip->dev, "%s() error return %d\n", __func__, in i2c_nuvoton_read_status()
112 for (i = 0, status = -1; i < TPM_I2C_RETRY_COUNT && status < 0; i++) { in i2c_nuvoton_write_status()
124 struct i2c_client *client = to_i2c_client(chip->dev.parent); in i2c_nuvoton_ready()
130 dev_err(&chip->dev, in i2c_nuvoton_ready()
135 * return -1 on fail to read */
139 unsigned long stop = jiffies + chip->timeout_d; in i2c_nuvoton_get_burstcount()
141 int burst_count = -1; in i2c_nuvoton_get_burstcount()
144 /* wait for burstcount to be non-zero */ in i2c_nuvoton_get_burstcount()
174 if ((chip->flags & TPM_CHIP_FLAG_IRQ) && queue) { in i2c_nuvoton_wait_for_stat()
176 struct priv_data *priv = dev_get_drvdata(&chip->dev); in i2c_nuvoton_wait_for_stat()
177 unsigned int cur_intrs = priv->intrs; in i2c_nuvoton_wait_for_stat()
179 enable_irq(priv->irq); in i2c_nuvoton_wait_for_stat()
181 cur_intrs != priv->intrs, in i2c_nuvoton_wait_for_stat()
214 dev_err(&chip->dev, "%s(%02x, %02x) -> timeout\n", __func__, mask, in i2c_nuvoton_wait_for_stat()
216 return -ETIMEDOUT; in i2c_nuvoton_wait_for_stat()
233 struct priv_data *priv = dev_get_drvdata(&chip->dev); in i2c_nuvoton_recv_data()
239 chip->timeout_c, in i2c_nuvoton_recv_data()
240 &priv->read_queue) == 0) { in i2c_nuvoton_recv_data()
243 dev_err(&chip->dev, in i2c_nuvoton_recv_data()
246 return -EIO; in i2c_nuvoton_recv_data()
248 bytes2read = min_t(size_t, burst_count, count - size); in i2c_nuvoton_recv_data()
252 dev_err(&chip->dev, in i2c_nuvoton_recv_data()
255 return -EIO; in i2c_nuvoton_recv_data()
257 dev_dbg(&chip->dev, "%s(%d):", __func__, bytes2read); in i2c_nuvoton_recv_data()
267 struct priv_data *priv = dev_get_drvdata(&chip->dev); in i2c_nuvoton_recv()
268 struct device *dev = chip->dev.parent; in i2c_nuvoton_recv()
273 int retries; in i2c_nuvoton_recv() local
280 return -EIO; in i2c_nuvoton_recv()
282 for (retries = 0; retries < TPM_I2C_RETRIES; retries++) { in i2c_nuvoton_recv()
283 if (retries > 0) { in i2c_nuvoton_recv()
293 chip, chip->timeout_c, &priv->read_queue); in i2c_nuvoton_recv()
296 size = -ETIMEDOUT; in i2c_nuvoton_recv()
302 size = -EIO; in i2c_nuvoton_recv()
309 size = -EIO; in i2c_nuvoton_recv()
319 size = -EIO; in i2c_nuvoton_recv()
323 expected - size); in i2c_nuvoton_recv()
328 size = -EIO; in i2c_nuvoton_recv()
333 TPM_STS_VALID, chip->timeout_c, in i2c_nuvoton_recv()
336 size = -ETIMEDOUT; in i2c_nuvoton_recv()
342 dev_dbg(&chip->dev, "%s() -> %d\n", __func__, size); in i2c_nuvoton_recv()
355 struct priv_data *priv = dev_get_drvdata(&chip->dev); in i2c_nuvoton_send()
356 struct device *dev = chip->dev.parent; in i2c_nuvoton_send()
361 int burst_count, bytes2write, retries, rc = -EIO; in i2c_nuvoton_send() local
363 for (retries = 0; retries < TPM_RETRY; retries++) { in i2c_nuvoton_send()
367 chip->timeout_b, NULL)) { in i2c_nuvoton_send()
370 rc = -EIO; in i2c_nuvoton_send()
374 while (count < len - 1) { in i2c_nuvoton_send()
380 rc = -EIO; in i2c_nuvoton_send()
384 len - 1 - count); in i2c_nuvoton_send()
399 chip->timeout_c, in i2c_nuvoton_send()
404 rc = -ETIMEDOUT; in i2c_nuvoton_send()
417 rc = -EIO; in i2c_nuvoton_send()
424 chip->timeout_c, NULL); in i2c_nuvoton_send()
428 rc = -ETIMEDOUT; in i2c_nuvoton_send()
434 /* retries == TPM_RETRY */ in i2c_nuvoton_send()
448 rc = i2c_nuvoton_wait_for_data_avail(chip, duration, &priv->read_queue); in i2c_nuvoton_send()
456 dev_dbg(dev, "%s() -> %zd\n", __func__, len); in i2c_nuvoton_send()
479 * the source (plus that would be slow over I2C). Run the IRQ as a one-shot,
484 struct priv_data *priv = dev_get_drvdata(&chip->dev); in i2c_nuvoton_int_handler()
486 priv->intrs++; in i2c_nuvoton_int_handler()
487 wake_up(&priv->read_queue); in i2c_nuvoton_int_handler()
488 disable_irq_nosync(priv->irq); in i2c_nuvoton_int_handler()
498 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) in get_vid()
499 return -ENODEV; in get_vid()
504 /* check WPCT301 values - ignore RID */ in get_vid()
516 /* check WPCT301 values - ignore RID */ in get_vid()
519 return -ENODEV; in get_vid()
530 struct device *dev = &client->dev; in i2c_nuvoton_probe()
547 return -ENOMEM; in i2c_nuvoton_probe()
550 chip->flags |= TPM_CHIP_FLAG_TPM2; in i2c_nuvoton_probe()
552 init_waitqueue_head(&priv->read_queue); in i2c_nuvoton_probe()
555 chip->timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
556 chip->timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT); in i2c_nuvoton_probe()
557 chip->timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
558 chip->timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
560 dev_set_drvdata(&chip->dev, priv); in i2c_nuvoton_probe()
567 priv->irq = client->irq; in i2c_nuvoton_probe()
568 if (client->irq) { in i2c_nuvoton_probe()
569 dev_dbg(dev, "%s() priv->irq\n", __func__); in i2c_nuvoton_probe()
570 rc = devm_request_irq(dev, client->irq, in i2c_nuvoton_probe()
573 dev_name(&chip->dev), in i2c_nuvoton_probe()
577 __func__, priv->irq); in i2c_nuvoton_probe()
578 priv->irq = 0; in i2c_nuvoton_probe()
580 chip->flags |= TPM_CHIP_FLAG_IRQ; in i2c_nuvoton_probe()
583 /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */ in i2c_nuvoton_probe()
587 chip->timeout_b, in i2c_nuvoton_probe()
593 * TPM_DATA_FIFO_W <- rc (0) in i2c_nuvoton_probe()
600 /* TPM_STS <- 0x40 (commandReady) */ in i2c_nuvoton_probe()
604 * timeout_b reached - command was in i2c_nuvoton_probe()
605 * aborted. TIS should now be in idle state - in i2c_nuvoton_probe()
610 return -EIO; in i2c_nuvoton_probe()