// SPDX-License-Identifier: GPL-2.0 /* Copyright(c) 2007 - 2011 Realtek Corporation. */ #include "../include/osdep_service.h" #include "../include/drv_types.h" #include "../include/rtl8188e_hal.h" #include "../include/rtl8188e_led.h" /* LED object. */ /* LED_819xUsb routines. */ /* Description: */ /* Turn on LED according to LedPin specified. */ void SwLedOn(struct adapter *padapter, struct LED_871x *pLed) { u8 LedCfg; if (padapter->bSurpriseRemoved || padapter->bDriverStopped) return; LedCfg = rtw_read8(padapter, REG_LEDCFG2); switch (pLed->LedPin) { case LED_PIN_LED0: rtw_write8(padapter, REG_LEDCFG2, (LedCfg & 0xf0) | BIT(5) | BIT(6)); /* SW control led0 on. */ break; case LED_PIN_LED1: rtw_write8(padapter, REG_LEDCFG2, (LedCfg & 0x0f) | BIT(5)); /* SW control led1 on. */ break; default: break; } pLed->bLedOn = true; } /* Description: */ /* Turn off LED according to LedPin specified. */ void SwLedOff(struct adapter *padapter, struct LED_871x *pLed) { u8 LedCfg; struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter); if (padapter->bSurpriseRemoved || padapter->bDriverStopped) goto exit; LedCfg = rtw_read8(padapter, REG_LEDCFG2);/* 0x4E */ switch (pLed->LedPin) { case LED_PIN_LED0: if (pHalData->bLedOpenDrain) { /* Open-drain arrangement for controlling the LED) */ LedCfg &= 0x90; /* Set to software control. */ rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3))); LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG); LedCfg &= 0xFE; rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg); } else { rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3) | BIT(5) | BIT(6))); } break; case LED_PIN_LED1: LedCfg &= 0x0f; /* Set to software control. */ rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3))); break; default: break; } exit: pLed->bLedOn = false; } /* Interface to manipulate LED objects. */ /* Default LED behavior. */ /* Description: */ /* Initialize all LED_871x objects. */ void rtl8188eu_InitSwLeds(struct adapter *padapter) { struct led_priv *pledpriv = &padapter->ledpriv; pledpriv->LedControlHandler = LedControl8188eu; InitLed871x(padapter, &pledpriv->SwLed0, LED_PIN_LED0); InitLed871x(padapter, &pledpriv->SwLed1, LED_PIN_LED1); } /* Description: */ /* DeInitialize all LED_819xUsb objects. */ void rtl8188eu_DeInitSwLeds(struct adapter *padapter) { struct led_priv *ledpriv = &padapter->ledpriv; DeInitLed871x(&ledpriv->SwLed0); DeInitLed871x(&ledpriv->SwLed1); }