Lines Matching +full:d +full:- +full:phy
86 16, 1, (skb)->data, (skb)->len, false); \
93 16, 1, (skb)->data, (skb)->len, false); \
99 pr_debug("cmd=%02d status=%d req_id=%d rsvd=%d size=%d\n", \
100 (_hdr)->cmd, (_hdr)->status, (_hdr)->req_id, \
101 (_hdr)->reserved, (_hdr)->data_size); \
104 static int mei_nfc_if_version(struct nfc_mei_phy *phy) in mei_nfc_if_version() argument
121 r = mei_cldev_send(phy->cldev, (u8 *)&cmd, sizeof(struct mei_nfc_cmd)); in mei_nfc_if_version()
133 return -ENOMEM; in mei_nfc_if_version()
135 bytes_recv = mei_cldev_recv(phy->cldev, (u8 *)reply, if_version_length); in mei_nfc_if_version()
138 r = -EIO; in mei_nfc_if_version()
142 version = (struct mei_nfc_if_version *)reply->data; in mei_nfc_if_version()
144 phy->fw_ivn = version->fw_ivn; in mei_nfc_if_version()
145 phy->vendor_id = version->vendor_id; in mei_nfc_if_version()
146 phy->radio_type = version->radio_type; in mei_nfc_if_version()
153 static int mei_nfc_connect(struct nfc_mei_phy *phy) in mei_nfc_connect() argument
171 return -ENOMEM; in mei_nfc_connect()
172 connect = (struct mei_nfc_connect *)cmd->data; in mei_nfc_connect()
177 return -ENOMEM; in mei_nfc_connect()
180 connect_resp = (struct mei_nfc_connect_resp *)reply->data; in mei_nfc_connect()
182 cmd->hdr.cmd = MEI_NFC_CMD_MAINTENANCE; in mei_nfc_connect()
183 cmd->hdr.data_size = 3; in mei_nfc_connect()
184 cmd->sub_command = MEI_NFC_SUBCMD_CONNECT; in mei_nfc_connect()
185 connect->fw_ivn = phy->fw_ivn; in mei_nfc_connect()
186 connect->vendor_id = phy->vendor_id; in mei_nfc_connect()
188 MEI_DUMP_NFC_HDR("connect request", &cmd->hdr); in mei_nfc_connect()
189 r = mei_cldev_send(phy->cldev, (u8 *)cmd, connect_length); in mei_nfc_connect()
191 pr_err("Could not send connect cmd %d\n", r); in mei_nfc_connect()
195 bytes_recv = mei_cldev_recv(phy->cldev, (u8 *)reply, in mei_nfc_connect()
199 pr_err("Could not read connect response %d\n", r); in mei_nfc_connect()
203 MEI_DUMP_NFC_HDR("connect reply", &reply->hdr); in mei_nfc_connect()
206 connect_resp->fw_ivn, connect_resp->vendor_id); in mei_nfc_connect()
208 pr_info("ME FW %d.%d.%d.%d\n", in mei_nfc_connect()
209 connect_resp->me_major, connect_resp->me_minor, in mei_nfc_connect()
210 connect_resp->me_hotfix, connect_resp->me_build); in mei_nfc_connect()
221 static int mei_nfc_send(struct nfc_mei_phy *phy, u8 *buf, size_t length) in mei_nfc_send() argument
227 err = -ENOMEM; in mei_nfc_send()
233 hdr->cmd = MEI_NFC_CMD_HCI_SEND; in mei_nfc_send()
234 hdr->status = 0; in mei_nfc_send()
235 hdr->req_id = phy->req_id; in mei_nfc_send()
236 hdr->reserved = 0; in mei_nfc_send()
237 hdr->data_size = length; in mei_nfc_send()
242 err = mei_cldev_send(phy->cldev, mei_buf, length + MEI_NFC_HEADER_SIZE); in mei_nfc_send()
246 if (!wait_event_interruptible_timeout(phy->send_wq, in mei_nfc_send()
247 phy->recv_req_id == phy->req_id, HZ)) { in mei_nfc_send()
249 err = -ETIME; in mei_nfc_send()
251 phy->req_id++; in mei_nfc_send()
265 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_write() local
270 r = mei_nfc_send(phy, skb->data, skb->len); in nfc_mei_phy_write()
277 static int mei_nfc_recv(struct nfc_mei_phy *phy, u8 *buf, size_t length) in mei_nfc_recv() argument
282 received_length = mei_cldev_recv(phy->cldev, buf, length); in mei_nfc_recv()
289 if (hdr->cmd == MEI_NFC_CMD_HCI_SEND) { in mei_nfc_recv()
290 phy->recv_req_id = hdr->req_id; in mei_nfc_recv()
291 wake_up(&phy->send_wq); in mei_nfc_recv()
302 struct nfc_mei_phy *phy = mei_cldev_get_drvdata(cldev); in nfc_mei_rx_cb() local
306 if (!phy) in nfc_mei_rx_cb()
309 if (phy->hard_fault != 0) in nfc_mei_rx_cb()
316 reply_size = mei_nfc_recv(phy, skb->data, MEI_NFC_MAX_READ); in nfc_mei_rx_cb()
327 nfc_hci_recv_frame(phy->hdev, skb); in nfc_mei_rx_cb()
333 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_enable() local
337 if (phy->powered == 1) in nfc_mei_phy_enable()
340 r = mei_cldev_enable(phy->cldev); in nfc_mei_phy_enable()
342 pr_err("Could not enable device %d\n", r); in nfc_mei_phy_enable()
346 r = mei_nfc_if_version(phy); in nfc_mei_phy_enable()
348 pr_err("Could not enable device %d\n", r); in nfc_mei_phy_enable()
352 r = mei_nfc_connect(phy); in nfc_mei_phy_enable()
354 pr_err("Could not connect to device %d\n", r); in nfc_mei_phy_enable()
358 r = mei_cldev_register_rx_cb(phy->cldev, nfc_mei_rx_cb); in nfc_mei_phy_enable()
360 pr_err("Event cb registration failed %d\n", r); in nfc_mei_phy_enable()
364 phy->powered = 1; in nfc_mei_phy_enable()
369 phy->powered = 0; in nfc_mei_phy_enable()
370 mei_cldev_disable(phy->cldev); in nfc_mei_phy_enable()
376 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_disable() local
380 mei_cldev_disable(phy->cldev); in nfc_mei_phy_disable()
382 phy->powered = 0; in nfc_mei_phy_disable()
394 struct nfc_mei_phy *phy; in nfc_mei_phy_alloc() local
396 phy = kzalloc(sizeof(struct nfc_mei_phy), GFP_KERNEL); in nfc_mei_phy_alloc()
397 if (!phy) in nfc_mei_phy_alloc()
400 phy->cldev = cldev; in nfc_mei_phy_alloc()
401 init_waitqueue_head(&phy->send_wq); in nfc_mei_phy_alloc()
402 mei_cldev_set_drvdata(cldev, phy); in nfc_mei_phy_alloc()
404 return phy; in nfc_mei_phy_alloc()
408 void nfc_mei_phy_free(struct nfc_mei_phy *phy) in nfc_mei_phy_free() argument
410 mei_cldev_disable(phy->cldev); in nfc_mei_phy_free()
411 kfree(phy); in nfc_mei_phy_free()