1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2007 - 2011 Realtek Corporation. */
3
4 #include "../include/osdep_service.h"
5 #include "../include/drv_types.h"
6 #include "../include/rtl8188e_hal.h"
7 #include "../include/rtl8188e_led.h"
8
9 /* LED object. */
10
11 /* LED_819xUsb routines. */
12 /* Description: */
13 /* Turn on LED according to LedPin specified. */
SwLedOn(struct adapter * padapter,struct LED_871x * pLed)14 void SwLedOn(struct adapter *padapter, struct LED_871x *pLed)
15 {
16 u8 LedCfg;
17
18 if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
19 return;
20 LedCfg = rtw_read8(padapter, REG_LEDCFG2);
21 switch (pLed->LedPin) {
22 case LED_PIN_LED0:
23 rtw_write8(padapter, REG_LEDCFG2, (LedCfg & 0xf0) | BIT(5) | BIT(6)); /* SW control led0 on. */
24 break;
25 case LED_PIN_LED1:
26 rtw_write8(padapter, REG_LEDCFG2, (LedCfg & 0x0f) | BIT(5)); /* SW control led1 on. */
27 break;
28 default:
29 break;
30 }
31 pLed->bLedOn = true;
32 }
33
34 /* Description: */
35 /* Turn off LED according to LedPin specified. */
SwLedOff(struct adapter * padapter,struct LED_871x * pLed)36 void SwLedOff(struct adapter *padapter, struct LED_871x *pLed)
37 {
38 u8 LedCfg;
39 struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
40
41 if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
42 goto exit;
43
44 LedCfg = rtw_read8(padapter, REG_LEDCFG2);/* 0x4E */
45
46 switch (pLed->LedPin) {
47 case LED_PIN_LED0:
48 if (pHalData->bLedOpenDrain) {
49 /* Open-drain arrangement for controlling the LED) */
50 LedCfg &= 0x90; /* Set to software control. */
51 rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3)));
52 LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG);
53 LedCfg &= 0xFE;
54 rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg);
55 } else {
56 rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3) | BIT(5) | BIT(6)));
57 }
58 break;
59 case LED_PIN_LED1:
60 LedCfg &= 0x0f; /* Set to software control. */
61 rtw_write8(padapter, REG_LEDCFG2, (LedCfg | BIT(3)));
62 break;
63 default:
64 break;
65 }
66 exit:
67 pLed->bLedOn = false;
68 }
69
70 /* Interface to manipulate LED objects. */
71 /* Default LED behavior. */
72
73 /* Description: */
74 /* Initialize all LED_871x objects. */
rtl8188eu_InitSwLeds(struct adapter * padapter)75 void rtl8188eu_InitSwLeds(struct adapter *padapter)
76 {
77 struct led_priv *pledpriv = &padapter->ledpriv;
78
79 pledpriv->LedControlHandler = LedControl8188eu;
80
81 InitLed871x(padapter, &pledpriv->SwLed0, LED_PIN_LED0);
82
83 InitLed871x(padapter, &pledpriv->SwLed1, LED_PIN_LED1);
84 }
85
86 /* Description: */
87 /* DeInitialize all LED_819xUsb objects. */
rtl8188eu_DeInitSwLeds(struct adapter * padapter)88 void rtl8188eu_DeInitSwLeds(struct adapter *padapter)
89 {
90 struct led_priv *ledpriv = &padapter->ledpriv;
91
92 DeInitLed871x(&ledpriv->SwLed0);
93 DeInitLed871x(&ledpriv->SwLed1);
94 }
95