Lines Matching refs:chip
97 static u8 i2c_nuvoton_read_status(struct tpm_chip *chip) in i2c_nuvoton_read_status() argument
99 struct i2c_client *client = to_i2c_client(chip->pdev); in i2c_nuvoton_read_status()
105 dev_err(chip->pdev, "%s() error return %d\n", __func__, in i2c_nuvoton_read_status()
128 static void i2c_nuvoton_ready(struct tpm_chip *chip) in i2c_nuvoton_ready() argument
130 struct i2c_client *client = to_i2c_client(chip->pdev); in i2c_nuvoton_ready()
136 dev_err(chip->pdev, in i2c_nuvoton_ready()
143 struct tpm_chip *chip) in i2c_nuvoton_get_burstcount() argument
145 unsigned long stop = jiffies + chip->vendor.timeout_d; in i2c_nuvoton_get_burstcount()
170 static bool i2c_nuvoton_check_status(struct tpm_chip *chip, u8 mask, u8 value) in i2c_nuvoton_check_status() argument
172 u8 status = i2c_nuvoton_read_status(chip); in i2c_nuvoton_check_status()
176 static int i2c_nuvoton_wait_for_stat(struct tpm_chip *chip, u8 mask, u8 value, in i2c_nuvoton_wait_for_stat() argument
179 if (chip->vendor.irq && queue) { in i2c_nuvoton_wait_for_stat()
181 struct priv_data *priv = chip->vendor.priv; in i2c_nuvoton_wait_for_stat()
184 enable_irq(chip->vendor.irq); in i2c_nuvoton_wait_for_stat()
197 status_valid = i2c_nuvoton_check_status(chip, mask, value); in i2c_nuvoton_wait_for_stat()
209 status_valid = i2c_nuvoton_check_status(chip, mask, in i2c_nuvoton_wait_for_stat()
215 dev_err(chip->pdev, "%s(%02x, %02x) -> timeout\n", __func__, mask, in i2c_nuvoton_wait_for_stat()
221 static int i2c_nuvoton_wait_for_data_avail(struct tpm_chip *chip, u32 timeout, in i2c_nuvoton_wait_for_data_avail() argument
224 return i2c_nuvoton_wait_for_stat(chip, in i2c_nuvoton_wait_for_data_avail()
232 struct tpm_chip *chip, u8 *buf, size_t count) in i2c_nuvoton_recv_data() argument
238 i2c_nuvoton_wait_for_data_avail(chip, in i2c_nuvoton_recv_data()
239 chip->vendor.timeout_c, in i2c_nuvoton_recv_data()
240 &chip->vendor.read_queue) == 0) { in i2c_nuvoton_recv_data()
241 burst_count = i2c_nuvoton_get_burstcount(client, chip); in i2c_nuvoton_recv_data()
243 dev_err(chip->pdev, in i2c_nuvoton_recv_data()
252 dev_err(chip->pdev, in i2c_nuvoton_recv_data()
257 dev_dbg(chip->pdev, "%s(%d):", __func__, bytes2read); in i2c_nuvoton_recv_data()
265 static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count) in i2c_nuvoton_recv() argument
267 struct device *dev = chip->pdev; in i2c_nuvoton_recv()
273 i2c_nuvoton_ready(chip); /* return to idle */ in i2c_nuvoton_recv()
288 chip, chip->vendor.timeout_c, &chip->vendor.read_queue); in i2c_nuvoton_recv()
294 burst_count = i2c_nuvoton_get_burstcount(client, chip); in i2c_nuvoton_recv()
300 size = i2c_nuvoton_recv_data(client, chip, buf, in i2c_nuvoton_recv()
317 rc = i2c_nuvoton_recv_data(client, chip, &buf[size], in i2c_nuvoton_recv()
327 chip, TPM_STS_VALID | TPM_STS_DATA_AVAIL, in i2c_nuvoton_recv()
328 TPM_STS_VALID, chip->vendor.timeout_c, in i2c_nuvoton_recv()
336 i2c_nuvoton_ready(chip); in i2c_nuvoton_recv()
337 dev_dbg(chip->pdev, "%s() -> %d\n", __func__, size); in i2c_nuvoton_recv()
348 static int i2c_nuvoton_send(struct tpm_chip *chip, u8 *buf, size_t len) in i2c_nuvoton_send() argument
350 struct device *dev = chip->pdev; in i2c_nuvoton_send()
357 i2c_nuvoton_ready(chip); in i2c_nuvoton_send()
358 if (i2c_nuvoton_wait_for_stat(chip, TPM_STS_COMMAND_READY, in i2c_nuvoton_send()
360 chip->vendor.timeout_b, NULL)) { in i2c_nuvoton_send()
369 chip); in i2c_nuvoton_send()
387 rc = i2c_nuvoton_wait_for_stat(chip, in i2c_nuvoton_send()
392 chip->vendor.timeout_c, in i2c_nuvoton_send()
414 rc = i2c_nuvoton_wait_for_stat(chip, in i2c_nuvoton_send()
417 chip->vendor.timeout_c, NULL); in i2c_nuvoton_send()
428 i2c_nuvoton_ready(chip); in i2c_nuvoton_send()
435 i2c_nuvoton_ready(chip); in i2c_nuvoton_send()
439 rc = i2c_nuvoton_wait_for_data_avail(chip, in i2c_nuvoton_send()
440 tpm_calc_ordinal_duration(chip, in i2c_nuvoton_send()
442 &chip->vendor.read_queue); in i2c_nuvoton_send()
445 i2c_nuvoton_ready(chip); in i2c_nuvoton_send()
453 static bool i2c_nuvoton_req_canceled(struct tpm_chip *chip, u8 status) in i2c_nuvoton_req_canceled() argument
475 struct tpm_chip *chip = dev_id; in i2c_nuvoton_int_handler() local
476 struct priv_data *priv = chip->vendor.priv; in i2c_nuvoton_int_handler()
479 wake_up(&chip->vendor.read_queue); in i2c_nuvoton_int_handler()
480 disable_irq_nosync(chip->vendor.irq); in i2c_nuvoton_int_handler()
522 struct tpm_chip *chip; in i2c_nuvoton_probe() local
533 chip = tpmm_chip_alloc(dev, &tpm_i2c); in i2c_nuvoton_probe()
534 if (IS_ERR(chip)) in i2c_nuvoton_probe()
535 return PTR_ERR(chip); in i2c_nuvoton_probe()
537 chip->vendor.priv = devm_kzalloc(dev, sizeof(struct priv_data), in i2c_nuvoton_probe()
539 if (!chip->vendor.priv) in i2c_nuvoton_probe()
542 init_waitqueue_head(&chip->vendor.read_queue); in i2c_nuvoton_probe()
543 init_waitqueue_head(&chip->vendor.int_queue); in i2c_nuvoton_probe()
546 chip->vendor.timeout_a = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
547 chip->vendor.timeout_b = msecs_to_jiffies(TPM_I2C_LONG_TIMEOUT); in i2c_nuvoton_probe()
548 chip->vendor.timeout_c = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
549 chip->vendor.timeout_d = msecs_to_jiffies(TPM_I2C_SHORT_TIMEOUT); in i2c_nuvoton_probe()
556 chip->vendor.irq = client->irq; in i2c_nuvoton_probe()
558 if (chip->vendor.irq) { in i2c_nuvoton_probe()
560 rc = devm_request_irq(dev, chip->vendor.irq, in i2c_nuvoton_probe()
563 chip->devname, in i2c_nuvoton_probe()
564 chip); in i2c_nuvoton_probe()
567 __func__, chip->vendor.irq); in i2c_nuvoton_probe()
568 chip->vendor.irq = 0; in i2c_nuvoton_probe()
571 i2c_nuvoton_ready(chip); in i2c_nuvoton_probe()
573 rc = i2c_nuvoton_wait_for_stat(chip, in i2c_nuvoton_probe()
576 chip->vendor.timeout_b, in i2c_nuvoton_probe()
590 i2c_nuvoton_ready(chip); in i2c_nuvoton_probe()
597 if (i2c_nuvoton_read_status(chip) != in i2c_nuvoton_probe()
604 if (tpm_get_timeouts(chip)) in i2c_nuvoton_probe()
607 if (tpm_do_selftest(chip)) in i2c_nuvoton_probe()
610 return tpm_chip_register(chip); in i2c_nuvoton_probe()
616 struct tpm_chip *chip = dev_get_drvdata(dev); in i2c_nuvoton_remove() local
617 tpm_chip_unregister(chip); in i2c_nuvoton_remove()