Commit 084f1f55 authored by Dmitry Antipov's avatar Dmitry Antipov Committed by Kalle Valo
Browse files

wifi: rtlwifi: simplify LED management



Introduce 'rtl_init_sw_leds()' to replace per-chip LED
initialization code (and so drop 'struct rtl_led' as no
longer used), drop 'init_sw_leds' and 'deinit_sw_leds'
fields from 'struct rtl_hal_ops', adjust related code.

Signed-off-by: default avatarDmitry Antipov <dmantipov@yandex.ru>
Acked-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230614061832.40882-1-dmantipov@yandex.ru
parent d8aa2123
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1908,6 +1908,16 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
	return true;
}
EXPORT_SYMBOL(rtl_cmd_send_packet);

void rtl_init_sw_leds(struct ieee80211_hw *hw)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);

	rtlpriv->ledctl.sw_led0 = LED_PIN_LED0;
	rtlpriv->ledctl.sw_led1 = LED_PIN_LED1;
}
EXPORT_SYMBOL(rtl_init_sw_leds);

const struct ieee80211_ops rtl_ops = {
	.start = rtl_op_start,
	.stop = rtl_op_stop,
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ enum dm_dig_connect_e {
};

extern const struct ieee80211_ops rtl_ops;

void rtl_init_sw_leds(struct ieee80211_hw *hw);
void rtl_fw_cb(const struct firmware *firmware, void *context);
void rtl_wowlan_fw_cb(const struct firmware *firmware, void *context);
void rtl_addr_delay(u32 addr);
+1 −1
Original line number Diff line number Diff line
@@ -2260,7 +2260,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
		err = -ENODEV;
		goto fail3;
	}
	rtlpriv->cfg->ops->init_sw_leds(hw);
	rtl_init_sw_leds(hw);

	/*aspm */
	rtl_pci_init_aspm(hw);
+4 −4
Original line number Diff line number Diff line
@@ -803,17 +803,17 @@ static void _rtl88ee_gen_refresh_led_state(struct ieee80211_hw *hw)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);
	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
	struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
	enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;

	if (rtlpriv->rtlhal.up_first_time)
		return;

	if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
		rtl88ee_sw_led_on(hw, pled0);
		rtl88ee_sw_led_on(hw, pin0);
	else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
		rtl88ee_sw_led_on(hw, pled0);
		rtl88ee_sw_led_on(hw, pin0);
	else
		rtl88ee_sw_led_off(hw, pled0);
		rtl88ee_sw_led_off(hw, pin0);
}

static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
+11 −29
Original line number Diff line number Diff line
@@ -6,23 +6,15 @@
#include "reg.h"
#include "led.h"

static void _rtl88ee_init_led(struct ieee80211_hw *hw,
			      struct rtl_led *pled, enum rtl_led_pin ledpin)
{
	pled->hw = hw;
	pled->ledpin = ledpin;
	pled->ledon = false;
}

void rtl88ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
void rtl88ee_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
{
	u8 ledcfg;
	struct rtl_priv *rtlpriv = rtl_priv(hw);

	rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
		"LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
		"LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);

	switch (pled->ledpin) {
	switch (pin) {
	case LED_PIN_GPIO0:
		break;
	case LED_PIN_LED0:
@@ -36,21 +28,20 @@ void rtl88ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
		break;
	default:
		rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
			"switch case %#x not processed\n", pled->ledpin);
			"switch case %#x not processed\n", pin);
		break;
	}
	pled->ledon = true;
}

void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
void rtl88ee_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);
	u8 ledcfg;

	rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
		"LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
		"LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);

	switch (pled->ledpin) {
	switch (pin) {
	case LED_PIN_GPIO0:
		break;
	case LED_PIN_LED0:
@@ -73,34 +64,25 @@ void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
		break;
	default:
		rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
			"switch case %#x not processed\n", pled->ledpin);
			"switch case %#x not processed\n", pin);
		break;
	}
	pled->ledon = false;
}

void rtl88ee_init_sw_leds(struct ieee80211_hw *hw)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);

	_rtl88ee_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
	_rtl88ee_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
}

static void _rtl88ee_sw_led_control(struct ieee80211_hw *hw,
				    enum led_ctl_mode ledaction)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);
	struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
	enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;

	switch (ledaction) {
	case LED_CTL_POWER_ON:
	case LED_CTL_LINK:
	case LED_CTL_NO_LINK:
		rtl88ee_sw_led_on(hw, pled0);
		rtl88ee_sw_led_on(hw, pin0);
		break;
	case LED_CTL_POWER_OFF:
		rtl88ee_sw_led_off(hw, pled0);
		rtl88ee_sw_led_off(hw, pin0);
		break;
	default:
		break;
Loading