Lines Matching +full:usb +full:- +full:cal

1 // SPDX-License-Identifier: GPL-2.0-only
3 * (c) Copyright 2002-2010, Ralink Technology, Inc.
11 #include <linux/usb.h>
17 #include "usb.h"
47 for (i = 0; i < skb->len / 4; i++) in trace_mt_mcu_msg_send_cs()
48 csum ^= get_unaligned_le32(skb->data + i * 4); in trace_mt_mcu_msg_send_cs()
70 struct urb *urb = dev->mcu.resp.urb; in mt7601u_mcu_wait_resp()
74 while (i--) { in mt7601u_mcu_wait_resp()
75 if (!wait_for_completion_timeout(&dev->mcu.resp_cmpl, in mt7601u_mcu_wait_resp()
77 dev_warn(dev->dev, "Warning: %s retrying\n", __func__); in mt7601u_mcu_wait_resp()
82 rxfce = get_unaligned_le32(dev->mcu.resp.buf); in mt7601u_mcu_wait_resp()
83 urb_status = urb->status * mt7601u_urb_has_error(urb); in mt7601u_mcu_wait_resp()
86 &dev->mcu.resp, GFP_KERNEL, in mt7601u_mcu_wait_resp()
88 &dev->mcu.resp_cmpl); in mt7601u_mcu_wait_resp()
93 dev_err(dev->dev, "Error: MCU resp urb failed:%d\n", in mt7601u_mcu_wait_resp()
100 dev_err(dev->dev, "Error: MCU resp evt:%lx seq:%hhx-%lx!\n", in mt7601u_mcu_wait_resp()
105 dev_err(dev->dev, "Error: %s timed out\n", __func__); in mt7601u_mcu_wait_resp()
106 return -ETIMEDOUT; in mt7601u_mcu_wait_resp()
115 dev->out_eps[MT_EP_OUT_INBAND_CMD]); in mt7601u_mcu_msg_send()
119 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) { in mt7601u_mcu_msg_send()
124 mutex_lock(&dev->mcu.mutex); in mt7601u_mcu_msg_send()
128 seq = ++dev->mcu.msg_seq & 0xf; in mt7601u_mcu_msg_send()
132 if (dev->mcu.resp_cmpl.done) in mt7601u_mcu_msg_send()
133 dev_err(dev->dev, "Error: MCU response pre-completed!\n"); in mt7601u_mcu_msg_send()
136 trace_mt_submit_urb_sync(dev, cmd_pipe, skb->len); in mt7601u_mcu_msg_send()
137 ret = usb_bulk_msg(usb_dev, cmd_pipe, skb->data, skb->len, &sent, 500); in mt7601u_mcu_msg_send()
139 dev_err(dev->dev, "Error: send MCU cmd failed:%d\n", ret); in mt7601u_mcu_msg_send()
142 if (sent != skb->len) in mt7601u_mcu_msg_send()
143 dev_err(dev->dev, "Error: %s sent != skb->len\n", __func__); in mt7601u_mcu_msg_send()
148 mutex_unlock(&dev->mcu.mutex); in mt7601u_mcu_msg_send()
169 return -ENOMEM; in mt7601u_mcu_function_select()
177 if (!test_bit(MT7601U_STATE_MCU_RUNNING, &dev->state)) in mt7601u_mcu_tssi_read_kick()
183 dev_warn(dev->dev, "Warning: MCU TSSI read kick failed\n"); in mt7601u_mcu_tssi_read_kick()
187 dev->tssi_read_trig = true; in mt7601u_mcu_tssi_read_kick()
193 mt7601u_mcu_calibrate(struct mt7601u_dev *dev, enum mcu_calibrate cal, u32 val) in mt7601u_mcu_calibrate() argument
200 .id = cpu_to_le32(cal), in mt7601u_mcu_calibrate()
206 return -ENOMEM; in mt7601u_mcu_calibrate()
224 return -ENOMEM; in mt7601u_write_reg_pairs()
236 return mt7601u_write_reg_pairs(dev, base, data + cnt, n - cnt); in mt7601u_write_reg_pairs()
242 const int max_regs_per_cmd = INBAND_PACKET_MAX_LEN / 4 - 1; in mt7601u_burst_write_regs()
253 return -ENOMEM; in mt7601u_burst_write_regs()
265 data + cnt, n - cnt); in mt7601u_burst_write_regs()
318 dev_err(dev->dev, "Error: firmware upload timed out\n"); in __mt7601u_dma_fw()
320 return -ETIMEDOUT; in __mt7601u_dma_fw()
323 dev_err(dev->dev, "Error: firmware upload urb failed:%d\n", in __mt7601u_dma_fw()
324 buf.urb->status); in __mt7601u_dma_fw()
325 return buf.urb->status; in __mt7601u_dma_fw()
350 return -ETIMEDOUT; in mt7601u_dma_fw()
352 return mt7601u_dma_fw(dev, dma_buf, data + n, len - n, dst_addr + n); in mt7601u_dma_fw()
363 ivb = kmemdup(fw->ivb, sizeof(fw->ivb), GFP_KERNEL); in mt7601u_upload_firmware()
365 return -ENOMEM; in mt7601u_upload_firmware()
367 ret = -ENOMEM; in mt7601u_upload_firmware()
371 ilm_len = le32_to_cpu(fw->hdr.ilm_len) - sizeof(fw->ivb); in mt7601u_upload_firmware()
372 dev_dbg(dev->dev, "loading FW - ILM %u + IVB %zu\n", in mt7601u_upload_firmware()
373 ilm_len, sizeof(fw->ivb)); in mt7601u_upload_firmware()
374 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm, ilm_len, sizeof(fw->ivb)); in mt7601u_upload_firmware()
378 dlm_len = le32_to_cpu(fw->hdr.dlm_len); in mt7601u_upload_firmware()
379 dev_dbg(dev->dev, "loading FW - DLM %u\n", dlm_len); in mt7601u_upload_firmware()
380 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm + ilm_len, in mt7601u_upload_firmware()
386 0x12, 0, ivb, sizeof(fw->ivb)); in mt7601u_upload_firmware()
391 for (i = 100; i && !firmware_running(dev); i--) in mt7601u_upload_firmware()
394 ret = -ETIMEDOUT; in mt7601u_upload_firmware()
398 dev_dbg(dev->dev, "Firmware running!\n"); in mt7601u_upload_firmware()
417 return firmware_request_cache(dev->dev, MT7601U_FIRMWARE); in mt7601u_load_firmware()
419 ret = request_firmware(&fw, MT7601U_FIRMWARE, dev->dev); in mt7601u_load_firmware()
423 if (!fw || !fw->data || fw->size < sizeof(*hdr)) in mt7601u_load_firmware()
426 hdr = (const struct mt76_fw_header *) fw->data; in mt7601u_load_firmware()
428 if (le32_to_cpu(hdr->ilm_len) <= MT_MCU_IVB_SIZE) in mt7601u_load_firmware()
432 len += le32_to_cpu(hdr->ilm_len); in mt7601u_load_firmware()
433 len += le32_to_cpu(hdr->dlm_len); in mt7601u_load_firmware()
435 if (fw->size != len) in mt7601u_load_firmware()
438 val = le16_to_cpu(hdr->fw_ver); in mt7601u_load_firmware()
439 dev_info(dev->dev, in mt7601u_load_firmware()
442 le16_to_cpu(hdr->build_ver), hdr->build_time); in mt7601u_load_firmware()
444 len = le32_to_cpu(hdr->ilm_len); in mt7601u_load_firmware()
479 ret = mt7601u_upload_firmware(dev, (const struct mt76_fw *)fw->data); in mt7601u_load_firmware()
486 dev_err(dev->dev, "Invalid firmware image\n"); in mt7601u_load_firmware()
488 return -ENOENT; in mt7601u_load_firmware()
495 mutex_init(&dev->mcu.mutex); in mt7601u_mcu_init()
501 set_bit(MT7601U_STATE_MCU_RUNNING, &dev->state); in mt7601u_mcu_init()
514 init_completion(&dev->mcu.resp_cmpl); in mt7601u_mcu_cmd_init()
515 if (mt7601u_usb_alloc_buf(dev, MCU_RESP_URB_SIZE, &dev->mcu.resp)) { in mt7601u_mcu_cmd_init()
516 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_init()
517 return -ENOMEM; in mt7601u_mcu_cmd_init()
521 &dev->mcu.resp, GFP_KERNEL, in mt7601u_mcu_cmd_init()
522 mt7601u_complete_urb, &dev->mcu.resp_cmpl); in mt7601u_mcu_cmd_init()
524 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_init()
533 usb_kill_urb(dev->mcu.resp.urb); in mt7601u_mcu_cmd_deinit()
534 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_deinit()