mt76: add per-phy led support
Subsystems (2)
Lorenzo Bianconi
maintainercover mt76: add per-phy led support
This series introduces per-phy led capability in order to support multiple leds connected to a device in dbdc mode (e.g. MT7986 SoC or MT7615)
Lorenzo Bianconi (4):
wifi: mt76: move leds field in leds struct
wifi: mt76: move leds struct in mt76_phy
wifi: mt76: mt7915: enable per-phy led support
wifi: mt76: mt7615: enable per-phy led support
drivers/net/wireless/mediatek/mt76/debugfs.c | 2 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 56 +++++--- drivers/net/wireless/mediatek/mt76/mt76.h | 12 +- .../net/wireless/mediatek/mt76/mt7603/init.c | 34 ++--- .../net/wireless/mediatek/mt76/mt7615/init.c | 85 ++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mmio.c | 16 --- .../wireless/mediatek/mt76/mt7615/mt7615.h | 6 + .../wireless/mediatek/mt76/mt7615/pci_init.c | 62 +-------- .../net/wireless/mediatek/mt76/mt7615/regs.h | 1 + .../net/wireless/mediatek/mt76/mt76x02_util.c | 35 +++-- .../net/wireless/mediatek/mt76/mt7915/init.c | 124 +++++++++++++----- .../net/wireless/mediatek/mt76/mt7915/regs.h | 12 +- .../net/wireless/mediatek/mt76/mt7996/init.c | 14 +- 13 files changed, 282 insertions(+), 177 deletions(-)
Signature · 1 line
2.38.1
Lorenzo Bianconi
maintainerPATCH 1/4 wifi: mt76: move leds field in leds struct
This is a preliminary patch to support per-phy leds.
--- drivers/net/wireless/mediatek/mt76/debugfs.c | 2 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 18 ++++++++--------- drivers/net/wireless/mediatek/mt76/mt76.h | 12 ++++++----- .../net/wireless/mediatek/mt76/mt7603/init.c | 20 +++++++++---------- .../wireless/mediatek/mt76/mt7615/pci_init.c | 18 ++++++++--------- .../net/wireless/mediatek/mt76/mt76x02_util.c | 20 +++++++++---------- .../net/wireless/mediatek/mt76/mt7915/init.c | 10 +++++----- .../net/wireless/mediatek/mt76/mt7996/init.c | 10 +++++----- 8 files changed, 56 insertions(+), 54 deletions(-)
drivers/net/wireless/mediatek/mt76/debugfs.c +1 -1
@@ -112,7 +112,7 @@ mt76_register_debugfs_fops(struct mt76_phy *phy,if (!dir)return NULL ; -debugfs_create_u8 ("led_pin" ,0600 , dir, &dev->led_pin); +debugfs_create_u8 ("led_pin" ,0600 , dir, &dev->leds.pin);debugfs_create_u32 ("regidx" ,0600 , dir, &dev->debugfs_reg);debugfs_create_file_unsafe ("regval" ,0600 , dir, dev, fops); debugfs_create_file_unsafe("napi_threaded", 0600, dir, dev,
drivers/net/wireless/mediatek/mt76/mac80211.c +9 -9
@@ -198,14 +198,14 @@ static int mt76_led_init(struct mt76_dev *dev)struct ieee80211_hw *hw = dev->hw;int led_pin; -if (!dev->led_cdev.brightness_set && !dev->led_cdev.blink_set) +if (!dev->leds.cdev.brightness_set && !dev->leds.cdev.blink_set)return 0 ; -snprintf (dev->led_name,sizeof (dev->led_name), +snprintf (dev->leds.name,sizeof (dev->leds.name),"mt76-%s" ,wiphy_name (hw->wiphy)); - dev->led_cdev.name = dev->led_name; - dev->led_cdev.default_trigger = + dev->leds.cdev.name = dev->leds.name; + dev->leds.cdev.default_trigger = ieee80211_create_tpt_led_trigger(hw, IEEE80211_TPT_LEDTRIG_FL_RADIO, mt76_tpt_blink,
@@ -214,20 +214,20 @@ static int mt76_led_init(struct mt76_dev *dev) np =of_get_child_by_name (np,"led" );if (np) {if (!of_property_read_u32 (np,"led-sources" , &led_pin)) - dev->led_pin = led_pin; - dev->led_al =of_property_read_bool (np,"led-active-low" ); + dev->leds.pin = led_pin; + dev->leds.al =of_property_read_bool (np,"led-active-low" );of_node_put (np); } -return led_classdev_register (dev->dev, &dev->led_cdev); +return led_classdev_register (dev->dev, &dev->leds.cdev); }static void mt76_led_cleanup (struct mt76_dev *dev) { -if (!dev->led_cdev.brightness_set && !dev->led_cdev.blink_set) +if (!dev->leds.cdev.brightness_set && !dev->leds.cdev.blink_set)return ; -led_classdev_unregister (&dev->led_cdev); +led_classdev_unregister (&dev->leds.cdev); } static void mt76_init_stream_cap(struct mt76_phy *phy,
drivers/net/wireless/mediatek/mt76/mt76.h +7 -5
@@ -812,11 +812,6 @@ struct mt76_dev {u32 debugfs_reg; -struct led_classdev led_cdev; -char led_name[32 ]; -bool led_al; -u8 led_pin; -u8 csa_complete;u32 rxfilter;
@@ -835,6 +830,13 @@ struct mt76_dev {struct mt76_usb usb;struct mt76_sdio sdio; }; + +struct { +struct led_classdev cdev; +char name[32 ]; +bool al; +u8 pin; + } leds; };struct mt76_power_limits {
drivers/net/wireless/mediatek/mt76/mt7603/init.c +10 -10
@@ -341,15 +341,15 @@ static void mt7603_led_set_config(struct mt76_dev *mt76, u8 delay_on,FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); - addr =mt7603_reg_map (dev,MT_LED_STATUS_0 (mt76->led_pin)); + addr =mt7603_reg_map (dev,MT_LED_STATUS_0 (mt76->leds.pin));mt76_wr (dev, addr, val); - addr =mt7603_reg_map (dev,MT_LED_STATUS_1 (mt76->led_pin)); + addr =mt7603_reg_map (dev,MT_LED_STATUS_1 (mt76->leds.pin));mt76_wr (dev, addr, val); - val =MT_LED_CTRL_REPLAY (mt76->led_pin) | -MT_LED_CTRL_KICK (mt76->led_pin); -if (mt76->led_al) - val |=MT_LED_CTRL_POLARITY (mt76->led_pin); + val =MT_LED_CTRL_REPLAY (mt76->leds.pin) | +MT_LED_CTRL_KICK (mt76->leds.pin); +if (mt76->leds.al) + val |=MT_LED_CTRL_POLARITY (mt76->leds.pin); addr =mt7603_reg_map (dev,MT_LED_CTRL );mt76_wr (dev, addr, val); }
@@ -359,7 +359,7 @@ static int mt7603_led_set_blink(struct led_classdev *led_cdev, unsigned long *delay_off) { struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev, - led_cdev); + leds.cdev);u8 delta_on, delta_off; delta_off =max_t (u8, *delay_off /10 ,1 );
@@ -373,7 +373,7 @@ static void mt7603_led_set_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) { struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev, - led_cdev); + leds.cdev);if (!brightness)mt7603_led_set_config (mt76,0 ,0xff );
@@ -535,8 +535,8 @@ int mt7603_register_device(struct mt7603_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.led_cdev.brightness_set = mt7603_led_set_brightness; - dev->mt76.led_cdev.blink_set = mt7603_led_set_blink; + dev->mt76.leds.cdev.brightness_set = mt7603_led_set_brightness; + dev->mt76.leds.cdev.blink_set = mt7603_led_set_blink; } wiphy->reg_notifier = mt7603_regd_notifier;
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c +9 -9
@@ -74,7 +74,7 @@ mt7615_led_set_config(struct led_classdev *led_cdev,struct mt76_dev *mt76;u32 val, addr; - mt76 = container_of(led_cdev, struct mt76_dev, led_cdev); + mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); dev = container_of(mt76, struct mt7615_dev, mt76);if (!mt76_connac_pm_ref (&dev->mphy, &dev->pm))
@@ -84,15 +84,15 @@ mt7615_led_set_config(struct led_classdev *led_cdev,FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); - addr =mt7615_reg_map (dev,MT_LED_STATUS_0 (mt76->led_pin)); + addr =mt7615_reg_map (dev,MT_LED_STATUS_0 (mt76->leds.pin));mt76_wr (dev, addr, val); - addr =mt7615_reg_map (dev,MT_LED_STATUS_1 (mt76->led_pin)); + addr =mt7615_reg_map (dev,MT_LED_STATUS_1 (mt76->leds.pin));mt76_wr (dev, addr, val); - val =MT_LED_CTRL_REPLAY (mt76->led_pin) | -MT_LED_CTRL_KICK (mt76->led_pin); -if (mt76->led_al) - val |=MT_LED_CTRL_POLARITY (mt76->led_pin); + val =MT_LED_CTRL_REPLAY (mt76->leds.pin) | +MT_LED_CTRL_KICK (mt76->leds.pin); +if (mt76->leds.al) + val |=MT_LED_CTRL_POLARITY (mt76->leds.pin); addr =mt7615_reg_map (dev,MT_LED_CTRL );mt76_wr (dev, addr, val);
@@ -133,8 +133,8 @@ int mt7615_register_device(struct mt7615_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.led_cdev.brightness_set = mt7615_led_set_brightness; - dev->mt76.led_cdev.blink_set = mt7615_led_set_blink; + dev->mt76.leds.cdev.brightness_set = mt7615_led_set_brightness; + dev->mt76.leds.cdev.blink_set = mt7615_led_set_blink; } ret =mt7622_wmac_init (dev);
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +10 -10
@@ -98,13 +98,13 @@ mt76x02_led_set_config(struct mt76_dev *mdev, u8 delay_on,FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); -mt76_wr (dev,MT_LED_S0 (mdev->led_pin), val); -mt76_wr (dev,MT_LED_S1 (mdev->led_pin), val); +mt76_wr (dev,MT_LED_S0 (mdev->leds.pin), val); +mt76_wr (dev,MT_LED_S1 (mdev->leds.pin), val); - val =MT_LED_CTRL_REPLAY (mdev->led_pin) | -MT_LED_CTRL_KICK (mdev->led_pin); -if (mdev->led_al) - val |=MT_LED_CTRL_POLARITY (mdev->led_pin); + val =MT_LED_CTRL_REPLAY (mdev->leds.pin) | +MT_LED_CTRL_KICK (mdev->leds.pin); +if (mdev->leds.al) + val |=MT_LED_CTRL_POLARITY (mdev->leds.pin);mt76_wr (dev,MT_LED_CTRL , val); }
@@ -114,7 +114,7 @@ mt76x02_led_set_blink(struct led_classdev *led_cdev, unsigned long *delay_off) { struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev, - led_cdev); + leds.cdev);u8 delta_on, delta_off; delta_off =max_t (u8, *delay_off /10 ,1 );
@@ -130,7 +130,7 @@ mt76x02_led_set_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) { struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev, - led_cdev); + leds.cdev);if (!brightness)mt76x02_led_set_config (mdev,0 ,0xff );
@@ -167,9 +167,9 @@ int mt76x02_init_device(struct mt76x02_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.led_cdev.brightness_set = + dev->mt76.leds.cdev.brightness_set = mt76x02_led_set_brightness; - dev->mt76.led_cdev.blink_set = mt76x02_led_set_blink; + dev->mt76.leds.cdev.blink_set = mt76x02_led_set_blink; } }
drivers/net/wireless/mediatek/mt76/mt7915/init.c +5 -5
@@ -212,7 +212,7 @@ static void mt7915_led_set_config(struct led_classdev *led_cdev,struct mt76_dev *mt76;u32 val; - mt76 = container_of(led_cdev, struct mt76_dev, led_cdev); + mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); dev = container_of(mt76, struct mt7915_dev, mt76);/* select TX blink mode, 2: only data frames */
@@ -228,7 +228,7 @@ static void mt7915_led_set_config(struct led_classdev *led_cdev,/* control LED */ val =MT_LED_CTRL_BLINK_MODE |MT_LED_CTRL_KICK ; -if (dev->mt76.led_al) +if (dev->mt76.leds.al) val |=MT_LED_CTRL_POLARITY ;mt76_wr (dev,MT_LED_CTRL (0 ), val);
@@ -498,7 +498,7 @@ void mt7915_mac_init(struct mt7915_dev *dev)mt7915_mac_init_band (dev, i);if (IS_ENABLED (CONFIG_MT76_LEDS )) { - i = dev->mt76.led_pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ; + i = dev->mt76.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ;mt76_rmw_field (dev, i,MT_LED_GPIO_SEL_MASK ,4 ); } }
@@ -1141,8 +1141,8 @@ int mt7915_register_device(struct mt7915_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.led_cdev.brightness_set = mt7915_led_set_brightness; - dev->mt76.led_cdev.blink_set = mt7915_led_set_blink; + dev->mt76.leds.cdev.brightness_set = mt7915_led_set_brightness; + dev->mt76.leds.cdev.blink_set = mt7915_led_set_blink; } ret = mt76_register_device(&dev->mt76, true, mt76_rates,
drivers/net/wireless/mediatek/mt76/mt7996/init.c +5 -5
@@ -49,7 +49,7 @@ static void mt7996_led_set_config(struct led_classdev *led_cdev,struct mt76_dev *mt76;u32 val; - mt76 = container_of(led_cdev, struct mt76_dev, led_cdev); + mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); dev = container_of(mt76, struct mt7996_dev, mt76);/* select TX blink mode, 2: only data frames */
@@ -65,7 +65,7 @@ static void mt7996_led_set_config(struct led_classdev *led_cdev,/* control LED */ val =MT_LED_CTRL_BLINK_MODE |MT_LED_CTRL_KICK ; -if (dev->mt76.led_al) +if (dev->mt76.leds.al) val |=MT_LED_CTRL_POLARITY ;mt76_wr (dev,MT_LED_CTRL (0 ), val);
@@ -261,7 +261,7 @@ static void mt7996_mac_init(struct mt7996_dev *dev) MT_WTBL_UPDATE_ADM_COUNT_CLEAR);if (IS_ENABLED (CONFIG_MT76_LEDS )) { - i = dev->mt76.led_pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ; + i = dev->mt76.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ;mt76_rmw_field (dev, i,MT_LED_GPIO_SEL_MASK ,4 ); }
@@ -787,8 +787,8 @@ int mt7996_register_device(struct mt7996_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.led_cdev.brightness_set = mt7996_led_set_brightness; - dev->mt76.led_cdev.blink_set = mt7996_led_set_blink; + dev->mt76.leds.cdev.brightness_set = mt7996_led_set_brightness; + dev->mt76.leds.cdev.blink_set = mt7996_led_set_blink; } ret = mt76_register_device(&dev->mt76, true, mt76_rates,
Signature · 1 line
2.38.1
Lorenzo Bianconi
maintainerPATCH 2/4 wifi: mt76: move leds struct in mt76_phy
In reply to Lorenzo BianconiMove leds struct in mt76_phy in order to have leds associated to phy (e.g. in dbdc mode) instead of per device.
--- drivers/net/wireless/mediatek/mt76/debugfs.c | 2 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 48 +++++++++++-------- drivers/net/wireless/mediatek/mt76/mt76.h | 14 +++--- .../net/wireless/mediatek/mt76/mt7603/init.c | 30 ++++++------ .../wireless/mediatek/mt76/mt7615/pci_init.c | 26 +++++----- .../net/wireless/mediatek/mt76/mt76x02_util.c | 31 ++++++------ .../net/wireless/mediatek/mt76/mt7915/init.c | 14 +++--- .../net/wireless/mediatek/mt76/mt7996/init.c | 14 +++--- 8 files changed, 92 insertions(+), 87 deletions(-)
drivers/net/wireless/mediatek/mt76/debugfs.c +1 -1
@@ -112,7 +112,7 @@ mt76_register_debugfs_fops(struct mt76_phy *phy,if (!dir)return NULL ; -debugfs_create_u8 ("led_pin" ,0600 , dir, &dev->leds.pin); +debugfs_create_u8 ("led_pin" ,0600 , dir, &phy->leds.pin);debugfs_create_u32 ("regidx" ,0600 , dir, &dev->debugfs_reg);debugfs_create_file_unsafe ("regval" ,0600 , dir, dev, fops); debugfs_create_file_unsafe("napi_threaded", 0600, dir, dev,
drivers/net/wireless/mediatek/mt76/mac80211.c +27 -21
83 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76.h +7 -7
@@ -731,6 +731,13 @@ struct mt76_phy { } rx_amsdu[__MT_RXQ_MAX];struct mt76_freq_range_power *frp; + +struct { +struct led_classdev cdev; +char name[32 ]; +bool al; +u8 pin; + } leds; };struct mt76_dev {
@@ -830,13 +837,6 @@ struct mt76_dev {struct mt76_usb usb;struct mt76_sdio sdio; }; - -struct { -struct led_classdev cdev; -char name[32 ]; -bool al; -u8 pin; - } leds; };struct mt76_power_limits {
drivers/net/wireless/mediatek/mt76/mt7603/init.c +15 -15
@@ -330,10 +330,10 @@ static const struct ieee80211_iface_combination if_comb[] = { } }; -static void mt7603_led_set_config (struct mt76_dev *mt76,u8 delay_on, +static void mt7603_led_set_config (struct mt76_phy *mphy,u8 delay_on,u8 delay_off) { - struct mt7603_dev *dev = container_of(mt76, struct mt7603_dev, + struct mt7603_dev *dev = container_of(mphy->dev, struct mt7603_dev, mt76);u32 val, addr;
@@ -341,15 +341,15 @@ static void mt7603_led_set_config(struct mt76_dev *mt76, u8 delay_on,FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); - addr =mt7603_reg_map (dev,MT_LED_STATUS_0 (mt76->leds.pin)); + addr =mt7603_reg_map (dev,MT_LED_STATUS_0 (mphy->leds.pin));mt76_wr (dev, addr, val); - addr =mt7603_reg_map (dev,MT_LED_STATUS_1 (mt76->leds.pin)); + addr =mt7603_reg_map (dev,MT_LED_STATUS_1 (mphy->leds.pin));mt76_wr (dev, addr, val); - val =MT_LED_CTRL_REPLAY (mt76->leds.pin) | -MT_LED_CTRL_KICK (mt76->leds.pin); -if (mt76->leds.al) - val |=MT_LED_CTRL_POLARITY (mt76->leds.pin); + val =MT_LED_CTRL_REPLAY (mphy->leds.pin) | +MT_LED_CTRL_KICK (mphy->leds.pin); +if (mphy->leds.al) + val |=MT_LED_CTRL_POLARITY (mphy->leds.pin); addr =mt7603_reg_map (dev,MT_LED_CTRL );mt76_wr (dev, addr, val); }
@@ -358,27 +358,27 @@ static int mt7603_led_set_blink(struct led_classdev *led_cdev,unsigned long *delay_on, unsigned long *delay_off) { - struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev, + struct mt76_phy *mphy = container_of(led_cdev, struct mt76_phy, leds.cdev);u8 delta_on, delta_off; delta_off =max_t (u8, *delay_off /10 ,1 ); delta_on =max_t (u8, *delay_on /10 ,1 ); -mt7603_led_set_config (mt76, delta_on, delta_off); +mt7603_led_set_config (mphy, delta_on, delta_off);return 0 ; }static void mt7603_led_set_brightness (struct led_classdev *led_cdev,enum led_brightness brightness) { - struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev, + struct mt76_phy *mphy = container_of(led_cdev, struct mt76_phy, leds.cdev);if (!brightness) -mt7603_led_set_config (mt76,0 ,0xff ); +mt7603_led_set_config (mphy,0 ,0xff );else -mt7603_led_set_config (mt76,0xff ,0 ); +mt7603_led_set_config (mphy,0xff ,0 ); }static u32 __mt7603_reg_addr (struct mt7603_dev *dev,u32 addr)
@@ -535,8 +535,8 @@ int mt7603_register_device(struct mt7603_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.leds.cdev.brightness_set = mt7603_led_set_brightness; - dev->mt76.leds.cdev.blink_set = mt7603_led_set_blink; + dev->mphy.leds.cdev.brightness_set = mt7603_led_set_brightness; + dev->mphy.leds.cdev.blink_set = mt7603_led_set_blink; } wiphy->reg_notifier = mt7603_regd_notifier;
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c +13 -13
@@ -71,32 +71,32 @@ mt7615_led_set_config(struct led_classdev *led_cdev, u8 delay_on, u8 delay_off) {struct mt7615_dev *dev; -struct mt76_dev *mt76; +struct mt76_phy *mphy;u32 val, addr; - mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); - dev = container_of(mt76, struct mt7615_dev, mt76); + mphy = container_of(led_cdev, struct mt76_phy, leds.cdev); + dev = container_of(mphy->dev, struct mt7615_dev, mt76); -if (!mt76_connac_pm_ref (&dev->mphy, &dev->pm)) +if (!mt76_connac_pm_ref (mphy, &dev->pm))return ; val =FIELD_PREP (MT_LED_STATUS_DURATION ,0xffff ) |FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); - addr =mt7615_reg_map (dev,MT_LED_STATUS_0 (mt76->leds.pin)); + addr =mt7615_reg_map (dev,MT_LED_STATUS_0 (mphy->leds.pin));mt76_wr (dev, addr, val); - addr =mt7615_reg_map (dev,MT_LED_STATUS_1 (mt76->leds.pin)); + addr =mt7615_reg_map (dev,MT_LED_STATUS_1 (mphy->leds.pin));mt76_wr (dev, addr, val); - val =MT_LED_CTRL_REPLAY (mt76->leds.pin) | -MT_LED_CTRL_KICK (mt76->leds.pin); -if (mt76->leds.al) - val |=MT_LED_CTRL_POLARITY (mt76->leds.pin); + val =MT_LED_CTRL_REPLAY (mphy->leds.pin) | +MT_LED_CTRL_KICK (mphy->leds.pin); +if (mphy->leds.al) + val |=MT_LED_CTRL_POLARITY (mphy->leds.pin); addr =mt7615_reg_map (dev,MT_LED_CTRL );mt76_wr (dev, addr, val); -mt76_connac_pm_unref (&dev->mphy, &dev->pm); +mt76_connac_pm_unref (mphy, &dev->pm); } static int
@@ -133,8 +133,8 @@ int mt7615_register_device(struct mt7615_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.leds.cdev.brightness_set = mt7615_led_set_brightness; - dev->mt76.leds.cdev.blink_set = mt7615_led_set_blink; + dev->mphy.leds.cdev.brightness_set = mt7615_led_set_brightness; + dev->mphy.leds.cdev.blink_set = mt7615_led_set_blink; } ret =mt7622_wmac_init (dev);
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +15 -16
@@ -87,10 +87,9 @@ static const struct ieee80211_iface_combination mt76x02u_if_comb[] = { };static void -mt76x02_led_set_config (struct mt76_dev *mdev,u8 delay_on, -u8 delay_off) +mt76x02_led_set_config (struct mt76_phy *mphy,u8 delay_on,u8 delay_off) { - struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, + struct mt76x02_dev *dev = container_of(mphy->dev, struct mt76x02_dev, mt76);u32 val;
@@ -98,13 +97,13 @@ mt76x02_led_set_config(struct mt76_dev *mdev, u8 delay_on,FIELD_PREP (MT_LED_STATUS_OFF , delay_off) |FIELD_PREP (MT_LED_STATUS_ON , delay_on); -mt76_wr (dev,MT_LED_S0 (mdev->leds.pin), val); -mt76_wr (dev,MT_LED_S1 (mdev->leds.pin), val); +mt76_wr (dev,MT_LED_S0 (mphy->leds.pin), val); +mt76_wr (dev,MT_LED_S1 (mphy->leds.pin), val); - val =MT_LED_CTRL_REPLAY (mdev->leds.pin) | -MT_LED_CTRL_KICK (mdev->leds.pin); -if (mdev->leds.al) - val |=MT_LED_CTRL_POLARITY (mdev->leds.pin); + val =MT_LED_CTRL_REPLAY (mphy->leds.pin) | +MT_LED_CTRL_KICK (mphy->leds.pin); +if (mphy->leds.al) + val |=MT_LED_CTRL_POLARITY (mphy->leds.pin);mt76_wr (dev,MT_LED_CTRL , val); }
@@ -113,14 +112,14 @@ mt76x02_led_set_blink(struct led_classdev *led_cdev,unsigned long *delay_on, unsigned long *delay_off) { - struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev, + struct mt76_phy *mphy = container_of(led_cdev, struct mt76_phy, leds.cdev);u8 delta_on, delta_off; delta_off =max_t (u8, *delay_off /10 ,1 ); delta_on =max_t (u8, *delay_on /10 ,1 ); -mt76x02_led_set_config (mdev, delta_on, delta_off); +mt76x02_led_set_config (mphy, delta_on, delta_off);return 0 ; }
@@ -129,13 +128,13 @@ static void mt76x02_led_set_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) { - struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev, + struct mt76_phy *mphy = container_of(led_cdev, struct mt76_phy, leds.cdev);if (!brightness) -mt76x02_led_set_config (mdev,0 ,0xff ); +mt76x02_led_set_config (mphy,0 ,0xff );else -mt76x02_led_set_config (mdev,0xff ,0 ); +mt76x02_led_set_config (mphy,0xff ,0 ); }int mt76x02_init_device (struct mt76x02_dev *dev)
@@ -167,9 +166,9 @@ int mt76x02_init_device(struct mt76x02_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.leds.cdev.brightness_set = + dev->mphy.leds.cdev.brightness_set = mt76x02_led_set_brightness; - dev->mt76.leds.cdev.blink_set = mt76x02_led_set_blink; + dev->mphy.leds.cdev.blink_set = mt76x02_led_set_blink; } }
drivers/net/wireless/mediatek/mt76/mt7915/init.c +7 -7
@@ -209,11 +209,11 @@ static void mt7915_led_set_config(struct led_classdev *led_cdev, u8 delay_on, u8 delay_off) {struct mt7915_dev *dev; -struct mt76_dev *mt76; +struct mt76_phy *mphy;u32 val; - mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); - dev = container_of(mt76, struct mt7915_dev, mt76); + mphy = container_of(led_cdev, struct mt76_phy, leds.cdev); + dev = container_of(mphy->dev, struct mt7915_dev, mt76);/* select TX blink mode, 2: only data frames */ mt76_rmw_field (dev,MT_TMAC_TCR0 (0 ),MT_TMAC_TCR0_TX_BLINK ,2 );
@@ -228,7 +228,7 @@ static void mt7915_led_set_config(struct led_classdev *led_cdev,/* control LED */ val =MT_LED_CTRL_BLINK_MODE |MT_LED_CTRL_KICK ; -if (dev->mt76.leds.al) +if (mphy->leds.al) val |=MT_LED_CTRL_POLARITY ;mt76_wr (dev,MT_LED_CTRL (0 ), val);
@@ -498,7 +498,7 @@ void mt7915_mac_init(struct mt7915_dev *dev)mt7915_mac_init_band (dev, i);if (IS_ENABLED (CONFIG_MT76_LEDS )) { - i = dev->mt76.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ; + i = dev->mphy.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ;mt76_rmw_field (dev, i,MT_LED_GPIO_SEL_MASK ,4 ); } }
@@ -1141,8 +1141,8 @@ int mt7915_register_device(struct mt7915_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.leds.cdev.brightness_set = mt7915_led_set_brightness; - dev->mt76.leds.cdev.blink_set = mt7915_led_set_blink; + dev->mphy.leds.cdev.brightness_set = mt7915_led_set_brightness; + dev->mphy.leds.cdev.blink_set = mt7915_led_set_blink; } ret = mt76_register_device(&dev->mt76, true, mt76_rates,
drivers/net/wireless/mediatek/mt76/mt7996/init.c +7 -7
@@ -46,11 +46,11 @@ static void mt7996_led_set_config(struct led_classdev *led_cdev, u8 delay_on, u8 delay_off) {struct mt7996_dev *dev; -struct mt76_dev *mt76; +struct mt76_phy *mphy;u32 val; - mt76 = container_of(led_cdev, struct mt76_dev, leds.cdev); - dev = container_of(mt76, struct mt7996_dev, mt76); + mphy = container_of(led_cdev, struct mt76_phy, leds.cdev); + dev = container_of(mphy->dev, struct mt7996_dev, mt76);/* select TX blink mode, 2: only data frames */ mt76_rmw_field (dev,MT_TMAC_TCR0 (0 ),MT_TMAC_TCR0_TX_BLINK ,2 );
@@ -65,7 +65,7 @@ static void mt7996_led_set_config(struct led_classdev *led_cdev,/* control LED */ val =MT_LED_CTRL_BLINK_MODE |MT_LED_CTRL_KICK ; -if (dev->mt76.leds.al) +if (mphy->leds.al) val |=MT_LED_CTRL_POLARITY ;mt76_wr (dev,MT_LED_CTRL (0 ), val);
@@ -261,7 +261,7 @@ static void mt7996_mac_init(struct mt7996_dev *dev) MT_WTBL_UPDATE_ADM_COUNT_CLEAR);if (IS_ENABLED (CONFIG_MT76_LEDS )) { - i = dev->mt76.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ; + i = dev->mphy.leds.pin ?MT_LED_GPIO_MUX3 :MT_LED_GPIO_MUX2 ;mt76_rmw_field (dev, i,MT_LED_GPIO_SEL_MASK ,4 ); }
@@ -787,8 +787,8 @@ int mt7996_register_device(struct mt7996_dev *dev)/* init led callbacks */ if (IS_ENABLED (CONFIG_MT76_LEDS )) { - dev->mt76.leds.cdev.brightness_set = mt7996_led_set_brightness; - dev->mt76.leds.cdev.blink_set = mt7996_led_set_blink; + dev->mphy.leds.cdev.brightness_set = mt7996_led_set_brightness; + dev->mphy.leds.cdev.blink_set = mt7996_led_set_blink; } ret = mt76_register_device(&dev->mt76, true, mt76_rates,
Signature · 1 line
2.38.1
Lorenzo Bianconi
maintainerPATCH 3/4 wifi: mt76: mt7915: enable per-phy led support
In reply to Lorenzo BianconiIntroduce the capability to support per-phy led blinking. This is needed for devices supporting dbdc.
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 8 ++ .../net/wireless/mediatek/mt76/mt7915/init.c | 118 ++++++++++++++---- .../net/wireless/mediatek/mt76/mt7915/regs.h | 12 +- 3 files changed, 109 insertions(+), 29 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +8 -0
@@ -523,6 +523,12 @@ int mt76_register_phy(struct mt76_phy *phy, bool vht,return ret; } +if (IS_ENABLED (CONFIG_MT76_LEDS )) { + ret =mt76_led_init (phy); +if (ret) +return ret; + } +wiphy_read_of_freq_limits (phy->hw->wiphy);mt76_check_sband (phy, &phy->sband_2g,NL80211_BAND_2GHZ );mt76_check_sband (phy, &phy->sband_5g,NL80211_BAND_5GHZ );
@@ -542,6 +548,8 @@ void mt76_unregister_phy(struct mt76_phy *phy) {struct mt76_dev *dev = phy->dev; +if (IS_ENABLED (CONFIG_MT76_LEDS )) +mt76_led_cleanup (phy);mt76_tx_status_check (dev, true);ieee80211_unregister_hw (phy->hw); dev->phys[phy->band_idx] =NULL ;
drivers/net/wireless/mediatek/mt76/mt7915/init.c +91 -27
178 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/regs.h +10 -2
@@ -1055,6 +1055,7 @@ enum offs_rev {#define MT_LED_CTRL (_n) MT_LED_PHYS(0x00 + ((_n) * 4))#define MT_LED_CTRL_KICK BIT(7) +#define MT_LED_CTRL_BAND BIT(4)#define MT_LED_CTRL_BLINK_MODE BIT(2)#define MT_LED_CTRL_POLARITY BIT(1)
@@ -1062,11 +1063,18 @@ enum offs_rev {#define MT_LED_TX_BLINK_ON_MASK GENMASK(7, 0)#define MT_LED_TX_BLINK_OFF_MASK GENMASK(15, 8) +#define MT_LED_STATUS_0 (_n) MT_LED_PHYS(0x20 + ((_n) * 8)) +#define MT_LED_STATUS_1 (_n) MT_LED_PHYS(0x24 + ((_n) * 8)) +#define MT_LED_STATUS_OFF GENMASK(31, 24) +#define MT_LED_STATUS_ON GENMASK(23, 16) +#define MT_LED_STATUS_DURATION GENMASK(15, 0) +#define MT_LED_EN (_n) MT_LED_PHYS(0x40 + ((_n) * 4)) +#define MT_LED_GPIO_MUX0 0x70005050/* GPIO 1 and GPIO 2 */ +#define MT_LED_GPIO_MUX1 0x70005054/* GPIO 14 and 15 */ #define MT_LED_GPIO_MUX2 0x70005058/* GPIO 18 */ -#define MT_LED_GPIO_MUX3 0x7000505C/* GPIO 26 */ -#define MT_LED_GPIO_SEL_MASK GENMASK(11, 8) +#define MT_LED_GPIO_MUX3 0x7000505c/* GPIO 26 */ /* MT TOP */ #define MT_TOP_BASE 0x18060000
Signature · 1 line
2.38.1
Lorenzo Bianconi
maintainerPATCH 4/4 wifi: mt76: mt7615: enable per-phy led support
In reply to Lorenzo BianconiIntroduce the capability to support per-phy led blinking. This is needed for devices supporting dbdc.
--- .../net/wireless/mediatek/mt76/mt7615/init.c | 85 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mmio.c | 16 ---- .../wireless/mediatek/mt76/mt7615/mt7615.h | 6 ++ .../wireless/mediatek/mt76/mt7615/pci_init.c | 58 ------------- .../net/wireless/mediatek/mt76/mt7615/regs.h | 1 + 5 files changed, 92 insertions(+), 74 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/init.c +85 -0
@@ -443,6 +443,85 @@ mt7615_cap_dbdc_disable(struct mt7615_dev *dev)mt76_set_stream_caps (&dev->mphy, true); } +u32 mt7615_reg_map (struct mt7615_dev *dev,u32 addr) +{ +u32 base, offset; + +if (is_mt7663 (&dev->mt76)) { + base = addr &MT7663_MCU_PCIE_REMAP_2_BASE ; + offset = addr &MT7663_MCU_PCIE_REMAP_2_OFFSET ; + }else { + base = addr &MT_MCU_PCIE_REMAP_2_BASE ; + offset = addr &MT_MCU_PCIE_REMAP_2_OFFSET ; + } +mt76_wr (dev,MT_MCU_PCIE_REMAP_2 , base); + +return MT_PCIE_REMAP_BASE_2 + offset; +} +EXPORT_SYMBOL_GPL (mt7615_reg_map); + +static void +mt7615_led_set_config (struct led_classdev *led_cdev, +u8 delay_on,u8 delay_off) +{ +struct mt7615_dev *dev; +struct mt76_phy *mphy; +u32 val, addr; +u8 index; + + mphy = container_of(led_cdev, struct mt76_phy, leds.cdev); + dev = container_of(mphy->dev, struct mt7615_dev, mt76); + +if (!mt76_connac_pm_ref (mphy, &dev->pm)) +return ; + + val =FIELD_PREP (MT_LED_STATUS_DURATION ,0xffff ) | +FIELD_PREP (MT_LED_STATUS_OFF , delay_off) | +FIELD_PREP (MT_LED_STATUS_ON , delay_on); + + index = dev->dbdc_support ? mphy->band_idx : mphy->leds.pin; + addr =mt7615_reg_map (dev,MT_LED_STATUS_0 (index)); +mt76_wr (dev, addr, val); + addr =mt7615_reg_map (dev,MT_LED_STATUS_1 (index)); +mt76_wr (dev, addr, val); + + val =MT_LED_CTRL_REPLAY (index) |MT_LED_CTRL_KICK (index); +if (dev->mphy.leds.al) + val |=MT_LED_CTRL_POLARITY (index); +if (mphy->band_idx) + val |=MT_LED_CTRL_BAND (index); + + addr =mt7615_reg_map (dev,MT_LED_CTRL ); +mt76_wr (dev, addr, val); + +mt76_connac_pm_unref (mphy, &dev->pm); +} + +int mt7615_led_set_blink (struct led_classdev *led_cdev, +unsigned long *delay_on, +unsigned long *delay_off) +{ +u8 delta_on, delta_off; + + delta_off =max_t (u8, *delay_off /10 ,1 ); + delta_on =max_t (u8, *delay_on /10 ,1 ); + +mt7615_led_set_config (led_cdev, delta_on, delta_off); + +return 0 ; +} +EXPORT_SYMBOL_GPL (mt7615_led_set_blink); + +void mt7615_led_set_brightness (struct led_classdev *led_cdev, +enum led_brightness brightness) +{ +if (!brightness) +mt7615_led_set_config (led_cdev,0 ,0xff ); +else +mt7615_led_set_config (led_cdev,0xff ,0 ); +} +EXPORT_SYMBOL_GPL (mt7615_led_set_brightness); +int mt7615_register_ext_phy (struct mt7615_dev *dev) {struct mt7615_phy *phy =mt7615_ext_phy (dev);
@@ -497,6 +576,12 @@ int mt7615_register_ext_phy(struct mt7615_dev *dev)for (i =0 ; i <=MT_TXQ_PSD ; i++) mphy->q_tx[i] = dev->mphy.q_tx[i]; +/* init led callbacks */ +if (IS_ENABLED (CONFIG_MT76_LEDS )) { + mphy->leds.cdev.brightness_set = mt7615_led_set_brightness; + mphy->leds.cdev.blink_set = mt7615_led_set_blink; + } + ret =mt76_register_phy (mphy, true, mt76_rates,ARRAY_SIZE (mt76_rates));if (ret)
drivers/net/wireless/mediatek/mt76/mt7615/mmio.c +0 -16
@@ -63,22 +63,6 @@ const u32 mt7663e_reg_map[] = { [MT_EFUSE_ADDR_BASE] = 0x78011000, }; -u32 mt7615_reg_map (struct mt7615_dev *dev,u32 addr) -{ -u32 base, offset; - -if (is_mt7663 (&dev->mt76)) { - base = addr &MT7663_MCU_PCIE_REMAP_2_BASE ; - offset = addr &MT7663_MCU_PCIE_REMAP_2_OFFSET ; - }else { - base = addr &MT_MCU_PCIE_REMAP_2_BASE ; - offset = addr &MT_MCU_PCIE_REMAP_2_OFFSET ; - } -mt76_wr (dev,MT_MCU_PCIE_REMAP_2 , base); - -return MT_PCIE_REMAP_BASE_2 + offset; -} -static void mt7615_rx_poll_complete (struct mt76_dev *mdev,enum mt76_rxq_id q) {
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +6 -0
@@ -376,6 +376,12 @@ int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base, int irq, const u32 *map);u32 mt7615_reg_map (struct mt7615_dev *dev,u32 addr); +u32 mt7615_reg_map (struct mt7615_dev *dev,u32 addr); +int mt7615_led_set_blink (struct led_classdev *led_cdev, +unsigned long *delay_on, +unsigned long *delay_off); +void mt7615_led_set_brightness (struct led_classdev *led_cdev, +enum led_brightness brightness);void mt7615_init_device (struct mt7615_dev *dev);int mt7615_register_device (struct mt7615_dev *dev);void mt7615_unregister_device (struct mt7615_dev *dev);
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c +0 -58
64 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/regs.h +1 -0
@@ -544,6 +544,7 @@ enum mt7615_reg_base {#define MT_LED_CTRL_POLARITY (_n) BIT(1 + (8 * (_n)))#define MT_LED_CTRL_TX_BLINK_MODE (_n) BIT(2 + (8 * (_n)))#define MT_LED_CTRL_TX_MANUAL_BLINK (_n) BIT(3 + (8 * (_n))) +#define MT_LED_CTRL_BAND (_n) BIT(4 + (8 * (_n)))#define MT_LED_CTRL_TX_OVER_BLINK (_n) BIT(5 + (8 * (_n)))#define MT_LED_CTRL_KICK (_n) BIT(7 + (8 * (_n)))
Signature · 1 line
2.38.1