mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: add support for accessing remapped registers via ops
Add wrappers for existing register ops Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
+1
-1
@@ -81,7 +81,7 @@ u32 mt7603_reg_map(struct mt7603_dev *dev, u32 addr)
|
||||
u32 base = addr & GENMASK(31, 19);
|
||||
u32 offset = addr & GENMASK(18, 0);
|
||||
|
||||
mt76_wr(dev, MT_MCU_PCIE_REMAP_2, base);
|
||||
dev->bus_ops->wr(&dev->mt76, MT_MCU_PCIE_REMAP_2, base);
|
||||
|
||||
return MT_PCIE_REMAP_BASE_2 + offset;
|
||||
}
|
||||
|
||||
@@ -417,12 +417,56 @@ static void mt7603_led_set_brightness(struct led_classdev *led_cdev,
|
||||
mt7603_led_set_config(mt76, 0xff, 0);
|
||||
}
|
||||
|
||||
static u32 __mt7603_reg_addr(struct mt7603_dev *dev, u32 addr)
|
||||
{
|
||||
if (addr < 0x100000)
|
||||
return addr;
|
||||
|
||||
return mt7603_reg_map(dev, addr);
|
||||
}
|
||||
|
||||
static u32 mt7603_rr(struct mt76_dev *mdev, u32 offset)
|
||||
{
|
||||
struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
|
||||
u32 addr = __mt7603_reg_addr(dev, offset);
|
||||
|
||||
return dev->bus_ops->rr(mdev, addr);
|
||||
}
|
||||
|
||||
static void mt7603_wr(struct mt76_dev *mdev, u32 offset, u32 val)
|
||||
{
|
||||
struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
|
||||
u32 addr = __mt7603_reg_addr(dev, offset);
|
||||
|
||||
dev->bus_ops->wr(mdev, addr, val);
|
||||
}
|
||||
|
||||
static u32 mt7603_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
|
||||
{
|
||||
struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
|
||||
u32 addr = __mt7603_reg_addr(dev, offset);
|
||||
|
||||
return dev->bus_ops->rmw(mdev, addr, mask, val);
|
||||
}
|
||||
|
||||
int mt7603_register_device(struct mt7603_dev *dev)
|
||||
{
|
||||
struct mt76_bus_ops *bus_ops;
|
||||
struct ieee80211_hw *hw = mt76_hw(dev);
|
||||
struct wiphy *wiphy = hw->wiphy;
|
||||
int ret;
|
||||
|
||||
dev->bus_ops = dev->mt76.bus;
|
||||
bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
|
||||
GFP_KERNEL);
|
||||
if (!bus_ops)
|
||||
return -ENOMEM;
|
||||
|
||||
bus_ops->rr = mt7603_rr;
|
||||
bus_ops->wr = mt7603_wr;
|
||||
bus_ops->rmw = mt7603_rmw;
|
||||
dev->mt76.bus = bus_ops;
|
||||
|
||||
INIT_DELAYED_WORK(&dev->mac_work, mt7603_mac_work);
|
||||
tasklet_init(&dev->pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet,
|
||||
(unsigned long)dev);
|
||||
|
||||
@@ -95,6 +95,8 @@ enum mt7603_reset_cause {
|
||||
struct mt7603_dev {
|
||||
struct mt76_dev mt76; /* must be first */
|
||||
|
||||
const struct mt76_bus_ops *bus_ops;
|
||||
|
||||
u32 rxfilter;
|
||||
|
||||
u8 vif_mask;
|
||||
|
||||
Reference in New Issue
Block a user