summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c
diff options
context:
space:
mode:
authorLorenzo Bianconi2018-09-09 23:58:04 +0200
committerFelix Fietkau2018-09-19 12:31:41 +0200
commitedaa580bc830e5197272c80cf12c98cf16e48bb7 (patch)
treea092a28f9a4e0aa77cc8d7ba89bcf1facee58674 /drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c
parentmt76x2: move mt76x2 mcu shared code in mt76x2_mcu_common.c (diff)
downloadkernel-qcow2-linux-edaa580bc830e5197272c80cf12c98cf16e48bb7.tar.gz
kernel-qcow2-linux-edaa580bc830e5197272c80cf12c98cf16e48bb7.tar.xz
kernel-qcow2-linux-edaa580bc830e5197272c80cf12c98cf16e48bb7.zip
mt76: move shared mcu_calibrate routine in mt76x02-lib module
Move mcu_calibrate routine in mt76x02-lib module since it is shared between USB and PCI code. Moreover remove duplicated code Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c')
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c
index 3dc36ace91da..5a2fba3462fd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mcu.c
@@ -168,6 +168,36 @@ int mt76x02_mcu_set_radio_state(struct mt76_dev *dev, bool on,
}
EXPORT_SYMBOL_GPL(mt76x02_mcu_set_radio_state);
+int mt76x02_mcu_calibrate(struct mt76_dev *dev, int type,
+ u32 param, bool wait)
+{
+ struct sk_buff *skb;
+ struct {
+ __le32 id;
+ __le32 value;
+ } __packed __aligned(4) msg = {
+ .id = cpu_to_le32(type),
+ .value = cpu_to_le32(param),
+ };
+ int ret;
+
+ if (wait)
+ dev->bus->rmw(dev, MT_MCU_COM_REG0, BIT(31), 0);
+
+ skb = dev->mcu_ops->mcu_msg_alloc(&msg, sizeof(msg));
+ ret = dev->mcu_ops->mcu_send_msg(dev, skb, CMD_CALIBRATION_OP, true);
+ if (ret)
+ return ret;
+
+ if (wait &&
+ WARN_ON(!__mt76_poll_msec(dev, MT_MCU_COM_REG0,
+ BIT(31), BIT(31), 100)))
+ return -ETIMEDOUT;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(mt76x02_mcu_calibrate);
+
int mt76x02_mcu_cleanup(struct mt76_dev *dev)
{
struct sk_buff *skb;