1 /******************************************************************************
3 * Copyright(c) 2016 - 2017 Realtek Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 *****************************************************************************/
16 #include <drv_types.h> /* PADAPTER */
17 #include <hal_data.h> /* PHAL_DATA_TYPE */
18 #include <hal_com_led.h> /* PLED_PCIE */
20 #ifdef CONFIG_RTW_SW_LED
23 *==============================================================================
24 * Prototype of protected function.
25 *==============================================================================
29 *==============================================================================
30 * LED_819xUsb routines.
31 *==============================================================================
36 * Turn on LED according to LedPin specified.
38 static void SwLedOn_8821ce(PADAPTER adapter, PLED_PCIE pLed)
41 u16 LedReg = REG_LEDCFG0;
43 struct led_priv *ledpriv = adapter_to_led(adapter);
45 if (RTW_CANNOT_RUN(adapter))
48 switch (pLed->LedPin) {
50 if (ledpriv->LedStrategy == SW_LED_MODE10)
65 LedCfg = rtw_read8(adapter, LedReg);
66 LedCfg |= BIT5; /* Set 0x4c[21] */
68 /* Clear 0x4c[23:22] and 0x4c[19:16] */
69 LedCfg &= ~(BIT7 | BIT6 | BIT3 | BIT2 | BIT1 | BIT0);
71 /* SW control led0 on. */
72 rtw_write8(adapter, LedReg, LedCfg);
75 RTW_INFO("%s(%d)TODO LED\n", __func__, __LINE__);
82 * Turn off LED according to LedPin specified.
84 static void SwLedOff_8821ce(PADAPTER adapter, PLED_PCIE pLed)
87 u16 LedReg = REG_LEDCFG0;
88 PHAL_DATA_TYPE hal = GET_HAL_DATA(adapter);
89 struct led_priv *ledpriv = adapter_to_led(adapter);
91 if (RTW_CANNOT_RUN(adapter))
94 switch (pLed->LedPin) {
96 if (ledpriv->LedStrategy == SW_LED_MODE10)
103 LedReg = REG_LEDCFG2;
111 /* Open-drain arrangement for controlling the LED */
112 if (hal->bLedOpenDrain == _TRUE) {
113 u8 LedCfg = rtw_read8(adapter, LedReg);
115 LedCfg &= 0xd0; /* Set to software control. */
116 rtw_write8(adapter, LedReg, (LedCfg | BIT3));
118 /* Open-drain arrangement */
119 LedCfg = rtw_read8(adapter, REG_MAC_PINMUX_CFG);
120 LedCfg &= 0xFE;/* Set GPIO[8] to input mode */
121 rtw_write8(adapter, REG_MAC_PINMUX_CFG, LedCfg);
124 rtw_write8(adapter, LedReg, 0x28);
126 pLed->bLedOn = _FALSE;
128 RTW_INFO("%s(%d)TODO LED\n", __func__, __LINE__);
134 * Initialize all LED_871x objects.
136 void rtl8821ce_InitSwLeds(PADAPTER adapter)
138 struct led_priv *pledpriv = adapter_to_led(adapter);
140 pledpriv->LedControlHandler = LedControlPCIE;
142 pledpriv->SwLedOn = SwLedOn_8821ce;
143 pledpriv->SwLedOff = SwLedOff_8821ce;
145 InitLed(adapter, &pledpriv->SwLed0, LED_PIN_LED0);
146 InitLed(adapter, &pledpriv->SwLed1, LED_PIN_LED1);
152 * DeInitialize all LED_819xUsb objects.
154 void rtl8821ce_DeInitSwLeds(PADAPTER adapter)
156 struct led_priv *ledpriv = adapter_to_led(adapter);
158 DeInitLed(&ledpriv->SwLed0);
159 DeInitLed(&ledpriv->SwLed1);