Lines Matching refs:phy
114 static int st21nfca_hci_platform_init(struct st21nfca_i2c_phy *phy) in st21nfca_hci_platform_init() argument
122 r = i2c_master_send(phy->i2c_dev, reboot_cmd, in st21nfca_hci_platform_init()
134 r = i2c_master_recv(phy->i2c_dev, tmp, in st21nfca_hci_platform_init()
155 struct st21nfca_i2c_phy *phy = phy_id; in st21nfca_hci_i2c_enable() local
157 gpio_set_value(phy->gpio_ena, 1); in st21nfca_hci_i2c_enable()
158 phy->powered = 1; in st21nfca_hci_i2c_enable()
159 phy->run_mode = ST21NFCA_HCI_MODE; in st21nfca_hci_i2c_enable()
168 struct st21nfca_i2c_phy *phy = phy_id; in st21nfca_hci_i2c_disable() local
171 gpio_set_value(phy->gpio_ena, 0); in st21nfca_hci_i2c_disable()
173 phy->powered = 0; in st21nfca_hci_i2c_disable()
207 struct st21nfca_i2c_phy *phy = phy_id; in st21nfca_hci_i2c_write() local
208 struct i2c_client *client = phy->i2c_dev; in st21nfca_hci_i2c_write()
214 if (phy->hard_fault != 0) in st21nfca_hci_i2c_write()
215 return phy->hard_fault; in st21nfca_hci_i2c_write()
253 mutex_lock(&phy->phy_lock); in st21nfca_hci_i2c_write()
259 mutex_unlock(&phy->phy_lock); in st21nfca_hci_i2c_write()
370 static int st21nfca_hci_i2c_read(struct st21nfca_i2c_phy *phy, in st21nfca_hci_i2c_read() argument
376 struct i2c_client *client = phy->i2c_dev; in st21nfca_hci_i2c_read()
378 if (phy->current_read_len < ARRAY_SIZE(len_seq)) { in st21nfca_hci_i2c_read()
379 len = len_seq[phy->current_read_len]; in st21nfca_hci_i2c_read()
387 mutex_lock(&phy->phy_lock); in st21nfca_hci_i2c_read()
393 mutex_unlock(&phy->phy_lock); in st21nfca_hci_i2c_read()
396 phy->current_read_len = 0; in st21nfca_hci_i2c_read()
404 if (!phy->current_read_len && !IS_START_OF_FRAME(buf)) { in st21nfca_hci_i2c_read()
406 phy->current_read_len = 0; in st21nfca_hci_i2c_read()
408 } else if (phy->current_read_len && IS_START_OF_FRAME(buf)) { in st21nfca_hci_i2c_read()
415 phy->current_read_len = 0; in st21nfca_hci_i2c_read()
421 phy->current_read_len = 0; in st21nfca_hci_i2c_read()
424 phy->current_read_len++; in st21nfca_hci_i2c_read()
446 struct st21nfca_i2c_phy *phy = phy_id; in st21nfca_hci_irq_thread_fn() local
451 if (!phy || irq != phy->i2c_dev->irq) { in st21nfca_hci_irq_thread_fn()
456 client = phy->i2c_dev; in st21nfca_hci_irq_thread_fn()
459 if (phy->hard_fault != 0) in st21nfca_hci_irq_thread_fn()
462 r = st21nfca_hci_i2c_read(phy, phy->pending_skb); in st21nfca_hci_irq_thread_fn()
464 phy->hard_fault = r; in st21nfca_hci_irq_thread_fn()
466 nfc_hci_recv_frame(phy->hdev, NULL); in st21nfca_hci_irq_thread_fn()
471 } else if (r == -EBADMSG && phy->crc_trials < ARRAY_SIZE(wait_tab)) { in st21nfca_hci_irq_thread_fn()
481 msleep(wait_tab[phy->crc_trials]); in st21nfca_hci_irq_thread_fn()
482 phy->crc_trials++; in st21nfca_hci_irq_thread_fn()
483 phy->current_read_len = 0; in st21nfca_hci_irq_thread_fn()
484 kfree_skb(phy->pending_skb); in st21nfca_hci_irq_thread_fn()
491 nfc_hci_recv_frame(phy->hdev, phy->pending_skb); in st21nfca_hci_irq_thread_fn()
492 phy->crc_trials = 0; in st21nfca_hci_irq_thread_fn()
494 kfree_skb(phy->pending_skb); in st21nfca_hci_irq_thread_fn()
497 phy->pending_skb = alloc_skb(ST21NFCA_HCI_LLC_MAX_SIZE * 2, GFP_KERNEL); in st21nfca_hci_irq_thread_fn()
498 if (phy->pending_skb == NULL) { in st21nfca_hci_irq_thread_fn()
499 phy->hard_fault = -ENOMEM; in st21nfca_hci_irq_thread_fn()
500 nfc_hci_recv_frame(phy->hdev, NULL); in st21nfca_hci_irq_thread_fn()
515 struct st21nfca_i2c_phy *phy = i2c_get_clientdata(client); in st21nfca_hci_i2c_of_request_resources() local
539 phy->gpio_ena = gpio; in st21nfca_hci_i2c_of_request_resources()
541 phy->irq_polarity = irq_get_trigger_type(client->irq); in st21nfca_hci_i2c_of_request_resources()
543 phy->se_status.is_ese_present = in st21nfca_hci_i2c_of_request_resources()
545 phy->se_status.is_uicc_present = in st21nfca_hci_i2c_of_request_resources()
560 struct st21nfca_i2c_phy *phy = i2c_get_clientdata(client); in st21nfca_hci_i2c_request_resources() local
570 phy->gpio_ena = pdata->gpio_ena; in st21nfca_hci_i2c_request_resources()
571 phy->irq_polarity = pdata->irq_polarity; in st21nfca_hci_i2c_request_resources()
573 if (phy->gpio_ena > 0) { in st21nfca_hci_i2c_request_resources()
574 r = devm_gpio_request_one(&client->dev, phy->gpio_ena, in st21nfca_hci_i2c_request_resources()
582 phy->se_status.is_ese_present = pdata->is_ese_present; in st21nfca_hci_i2c_request_resources()
583 phy->se_status.is_uicc_present = pdata->is_uicc_present; in st21nfca_hci_i2c_request_resources()
591 struct st21nfca_i2c_phy *phy; in st21nfca_hci_i2c_probe() local
603 phy = devm_kzalloc(&client->dev, sizeof(struct st21nfca_i2c_phy), in st21nfca_hci_i2c_probe()
605 if (!phy) in st21nfca_hci_i2c_probe()
608 phy->i2c_dev = client; in st21nfca_hci_i2c_probe()
609 phy->pending_skb = alloc_skb(ST21NFCA_HCI_LLC_MAX_SIZE * 2, GFP_KERNEL); in st21nfca_hci_i2c_probe()
610 if (phy->pending_skb == NULL) in st21nfca_hci_i2c_probe()
613 phy->current_read_len = 0; in st21nfca_hci_i2c_probe()
614 phy->crc_trials = 0; in st21nfca_hci_i2c_probe()
615 mutex_init(&phy->phy_lock); in st21nfca_hci_i2c_probe()
616 i2c_set_clientdata(client, phy); in st21nfca_hci_i2c_probe()
636 r = st21nfca_hci_platform_init(phy); in st21nfca_hci_i2c_probe()
644 phy->irq_polarity | IRQF_ONESHOT, in st21nfca_hci_i2c_probe()
645 ST21NFCA_HCI_DRIVER_NAME, phy); in st21nfca_hci_i2c_probe()
651 return st21nfca_hci_probe(phy, &i2c_phy_ops, LLC_SHDLC_NAME, in st21nfca_hci_i2c_probe()
655 &phy->hdev, in st21nfca_hci_i2c_probe()
656 &phy->se_status); in st21nfca_hci_i2c_probe()
661 struct st21nfca_i2c_phy *phy = i2c_get_clientdata(client); in st21nfca_hci_i2c_remove() local
665 st21nfca_hci_remove(phy->hdev); in st21nfca_hci_i2c_remove()
667 if (phy->powered) in st21nfca_hci_i2c_remove()
668 st21nfca_hci_i2c_disable(phy); in st21nfca_hci_i2c_remove()