r = i2c_master_send(client, skb->data, skb->len); if (r < 0) { /* Retry, chip was in standby */
msleep(110);
r = i2c_master_send(client, skb->data, skb->len);
}
if (r < 0) {
nfc_err(&client->dev, "Error %d on I2C send\n", r);
} elseif (r != skb->len) {
nfc_err(&client->dev, "Invalid length sent: %u (expected %u)\n",
r, skb->len);
r = -EREMOTEIO;
} else { /* Success but return 0 and not number of bytes */
r = 0;
}
if (!client || irq != client->irq) goto exit_irq_none;
info = nci_get_drvdata(phy->ndev);
if (!info) goto exit_irq_none;
mutex_lock(&info->info_lock);
if (phy->hard_fault != 0) goto exit_irq_handled;
switch (info->mode) { case NXP_NCI_MODE_NCI:
r = nxp_nci_i2c_nci_read(phy, &skb); break; case NXP_NCI_MODE_FW:
r = nxp_nci_i2c_fw_read(phy, &skb); break; case NXP_NCI_MODE_COLD:
r = -EREMOTEIO; break;
}
if (r == -EREMOTEIO) {
phy->hard_fault = r; if (info->mode == NXP_NCI_MODE_FW)
nxp_nci_fw_recv_frame(phy->ndev, NULL);
} if (r < 0) {
nfc_err(&client->dev, "Read failed with error %d\n", r); goto exit_irq_handled;
}
switch (info->mode) { case NXP_NCI_MODE_NCI:
nci_recv_frame(phy->ndev, skb); break; case NXP_NCI_MODE_FW:
nxp_nci_fw_recv_frame(phy->ndev, skb); break; case NXP_NCI_MODE_COLD: break;
}
r = devm_acpi_dev_add_driver_gpios(dev, acpi_nxp_nci_gpios); if (r)
dev_dbg(dev, "Unable to add GPIO mapping table\n");
phy->gpiod_en = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); if (IS_ERR(phy->gpiod_en)) {
nfc_err(dev, "Failed to get EN gpio\n"); return PTR_ERR(phy->gpiod_en);
}
phy->gpiod_fw = devm_gpiod_get_optional(dev, "firmware", GPIOD_OUT_LOW); if (IS_ERR(phy->gpiod_fw)) {
nfc_err(dev, "Failed to get FW gpio\n"); return PTR_ERR(phy->gpiod_fw);
}
r = nxp_nci_probe(phy, &client->dev, &i2c_phy_ops,
NXP_NCI_I2C_MAX_PAYLOAD, &phy->ndev); if (r < 0) return r;
r = request_threaded_irq(client->irq, NULL,
nxp_nci_i2c_irq_thread_fn,
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
NXP_NCI_I2C_DRIVER_NAME, phy); if (r < 0)
nfc_err(&client->dev, "Unable to register IRQ handler\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.