mutex_lock(&dev->vendor_req_mutex);
ret = __mt7601u_rr(dev, offset);
mutex_unlock(&dev->vendor_req_mutex);
return ret;
}
/* should be called with vendor_req_mutex held */ staticint __mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req, const u16 offset, const u32 val)
{ int ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT,
val & 0xffff, offset, NULL, 0); if (!ret)
ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT,
val >> 16, offset + 2, NULL, 0);
trace_reg_write(dev, offset, val); return ret;
}
int mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req, const u16 offset, const u32 val)
{ int ret;
mutex_lock(&dev->vendor_req_mutex);
ret = __mt7601u_vendor_single_wr(dev, req, offset, val);
mutex_unlock(&dev->vendor_req_mutex);
for (i = 0; i < intf_desc->desc.bNumEndpoints; i++) {
ep_desc = &intf_desc->endpoint[i].desc;
if (usb_endpoint_is_bulk_in(ep_desc) &&
ep_i++ < __MT_EP_IN_MAX) {
dev->in_eps[ep_i - 1] = usb_endpoint_num(ep_desc);
dev->in_max_packet = usb_endpoint_maxp(ep_desc); /* Note: this is ignored by usb sub-system but vendor * code does it. We can drop this at some point.
*/
dev->in_eps[ep_i - 1] |= USB_DIR_IN;
} elseif (usb_endpoint_is_bulk_out(ep_desc) &&
ep_o++ < __MT_EP_OUT_MAX) {
dev->out_eps[ep_o - 1] = usb_endpoint_num(ep_desc);
dev->out_max_packet = usb_endpoint_maxp(ep_desc);
}
}
dev->vend_buf = devm_kmalloc(dev->dev, MT_VEND_BUF, GFP_KERNEL); if (!dev->vend_buf) {
ret = -ENOMEM; goto err;
}
ret = mt7601u_assign_pipes(usb_intf, dev); if (ret) goto err;
ret = mt7601u_wait_asic_ready(dev); if (ret) goto err;
asic_rev = mt7601u_rr(dev, MT_ASIC_VERSION);
mac_rev = mt7601u_rr(dev, MT_MAC_CSR0);
dev_info(dev->dev, "ASIC revision: %08x MAC revision: %08x\n",
asic_rev, mac_rev); if ((asic_rev >> 16) != 0x7601) {
ret = -ENODEV; goto err;
}
/* Note: vendor driver skips this check for MT7601U */ if (!(mt7601u_rr(dev, MT_EFUSE_CTRL) & MT_EFUSE_CTRL_SEL))
dev_warn(dev->dev, "Warning: eFUSE not present\n");
ret = mt7601u_init_hardware(dev); if (ret) goto err;
ret = mt7601u_register_device(dev); if (ret) goto err_hw;
ret = mt7601u_init_hardware(dev); if (ret) return ret;
set_bit(MT7601U_STATE_INITIALIZED, &dev->state);
return 0;
}
MODULE_DEVICE_TABLE(usb, mt7601u_device_table);
MODULE_FIRMWARE(MT7601U_FIRMWARE);
MODULE_DESCRIPTION("MediaTek MT7601U USB Wireless LAN driver");
MODULE_LICENSE("GPL");
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.