Lines Matching +full:d +full:- +full:phy

1 // SPDX-License-Identifier: GPL-2.0
74 16, 1, (skb)->data, (skb)->len, false); \
81 16, 1, (skb)->data, (skb)->len, false); \
87 pr_debug("cmd=%02d status=%d req_id=%d rsvd=%d size=%d\n", \
88 (_hdr)->cmd, (_hdr)->status, (_hdr)->req_id, \
89 (_hdr)->reserved, (_hdr)->data_size); \
92 static int mei_nfc_if_version(struct nfc_mei_phy *phy) in mei_nfc_if_version() argument
107 r = mei_cldev_send(phy->cldev, (u8 *)&cmd, sizeof(struct mei_nfc_cmd)); in mei_nfc_if_version()
119 return -ENOMEM; in mei_nfc_if_version()
121 bytes_recv = mei_cldev_recv(phy->cldev, (u8 *)reply, if_version_length); in mei_nfc_if_version()
124 r = -EIO; in mei_nfc_if_version()
128 version = (struct mei_nfc_if_version *)reply->data; in mei_nfc_if_version()
130 phy->fw_ivn = version->fw_ivn; in mei_nfc_if_version()
131 phy->vendor_id = version->vendor_id; in mei_nfc_if_version()
132 phy->radio_type = version->radio_type; in mei_nfc_if_version()
139 static int mei_nfc_connect(struct nfc_mei_phy *phy) in mei_nfc_connect() argument
155 return -ENOMEM; in mei_nfc_connect()
156 connect = (struct mei_nfc_connect *)cmd->data; in mei_nfc_connect()
161 return -ENOMEM; in mei_nfc_connect()
164 connect_resp = (struct mei_nfc_connect_resp *)reply->data; in mei_nfc_connect()
166 cmd->hdr.cmd = MEI_NFC_CMD_MAINTENANCE; in mei_nfc_connect()
167 cmd->hdr.data_size = 3; in mei_nfc_connect()
168 cmd->sub_command = MEI_NFC_SUBCMD_CONNECT; in mei_nfc_connect()
169 connect->fw_ivn = phy->fw_ivn; in mei_nfc_connect()
170 connect->vendor_id = phy->vendor_id; in mei_nfc_connect()
172 MEI_DUMP_NFC_HDR("connect request", &cmd->hdr); in mei_nfc_connect()
173 r = mei_cldev_send(phy->cldev, (u8 *)cmd, connect_length); in mei_nfc_connect()
175 pr_err("Could not send connect cmd %d\n", r); in mei_nfc_connect()
179 bytes_recv = mei_cldev_recv(phy->cldev, (u8 *)reply, in mei_nfc_connect()
183 pr_err("Could not read connect response %d\n", r); in mei_nfc_connect()
187 MEI_DUMP_NFC_HDR("connect reply", &reply->hdr); in mei_nfc_connect()
190 connect_resp->fw_ivn, connect_resp->vendor_id); in mei_nfc_connect()
192 pr_info("ME FW %d.%d.%d.%d\n", in mei_nfc_connect()
193 connect_resp->me_major, connect_resp->me_minor, in mei_nfc_connect()
194 connect_resp->me_hotfix, connect_resp->me_build); in mei_nfc_connect()
205 static int mei_nfc_send(struct nfc_mei_phy *phy, const u8 *buf, size_t length) in mei_nfc_send() argument
211 err = -ENOMEM; in mei_nfc_send()
217 hdr->cmd = MEI_NFC_CMD_HCI_SEND; in mei_nfc_send()
218 hdr->status = 0; in mei_nfc_send()
219 hdr->req_id = phy->req_id; in mei_nfc_send()
220 hdr->reserved = 0; in mei_nfc_send()
221 hdr->data_size = length; in mei_nfc_send()
226 err = mei_cldev_send(phy->cldev, mei_buf, length + MEI_NFC_HEADER_SIZE); in mei_nfc_send()
230 if (!wait_event_interruptible_timeout(phy->send_wq, in mei_nfc_send()
231 phy->recv_req_id == phy->req_id, HZ)) { in mei_nfc_send()
233 err = -ETIME; in mei_nfc_send()
235 phy->req_id++; in mei_nfc_send()
249 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_write() local
254 r = mei_nfc_send(phy, skb->data, skb->len); in nfc_mei_phy_write()
261 static int mei_nfc_recv(struct nfc_mei_phy *phy, u8 *buf, size_t length) in mei_nfc_recv() argument
266 received_length = mei_cldev_recv(phy->cldev, buf, length); in mei_nfc_recv()
273 if (hdr->cmd == MEI_NFC_CMD_HCI_SEND) { in mei_nfc_recv()
274 phy->recv_req_id = hdr->req_id; in mei_nfc_recv()
275 wake_up(&phy->send_wq); in mei_nfc_recv()
286 struct nfc_mei_phy *phy = mei_cldev_get_drvdata(cldev); in nfc_mei_rx_cb() local
290 if (!phy) in nfc_mei_rx_cb()
293 if (phy->hard_fault != 0) in nfc_mei_rx_cb()
300 reply_size = mei_nfc_recv(phy, skb->data, MEI_NFC_MAX_READ); in nfc_mei_rx_cb()
311 nfc_hci_recv_frame(phy->hdev, skb); in nfc_mei_rx_cb()
317 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_enable() local
319 if (phy->powered == 1) in nfc_mei_phy_enable()
322 r = mei_cldev_enable(phy->cldev); in nfc_mei_phy_enable()
324 pr_err("Could not enable device %d\n", r); in nfc_mei_phy_enable()
328 r = mei_nfc_if_version(phy); in nfc_mei_phy_enable()
330 pr_err("Could not enable device %d\n", r); in nfc_mei_phy_enable()
334 r = mei_nfc_connect(phy); in nfc_mei_phy_enable()
336 pr_err("Could not connect to device %d\n", r); in nfc_mei_phy_enable()
340 r = mei_cldev_register_rx_cb(phy->cldev, nfc_mei_rx_cb); in nfc_mei_phy_enable()
342 pr_err("Event cb registration failed %d\n", r); in nfc_mei_phy_enable()
346 phy->powered = 1; in nfc_mei_phy_enable()
351 phy->powered = 0; in nfc_mei_phy_enable()
352 mei_cldev_disable(phy->cldev); in nfc_mei_phy_enable()
358 struct nfc_mei_phy *phy = phy_id; in nfc_mei_phy_disable() local
360 mei_cldev_disable(phy->cldev); in nfc_mei_phy_disable()
362 phy->powered = 0; in nfc_mei_phy_disable()
374 struct nfc_mei_phy *phy; in nfc_mei_phy_alloc() local
376 phy = kzalloc(sizeof(struct nfc_mei_phy), GFP_KERNEL); in nfc_mei_phy_alloc()
377 if (!phy) in nfc_mei_phy_alloc()
380 phy->cldev = cldev; in nfc_mei_phy_alloc()
381 init_waitqueue_head(&phy->send_wq); in nfc_mei_phy_alloc()
382 mei_cldev_set_drvdata(cldev, phy); in nfc_mei_phy_alloc()
384 return phy; in nfc_mei_phy_alloc()
388 void nfc_mei_phy_free(struct nfc_mei_phy *phy) in nfc_mei_phy_free() argument
390 mei_cldev_disable(phy->cldev); in nfc_mei_phy_free()
391 kfree(phy); in nfc_mei_phy_free()