2 * Copyright (C) 2013 Realtek Semiconductor Corp.
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
11 * $Date: 2017-03-08 15:13:58 +0800 (週三, 08 三月 2017) $
13 * Purpose : RTK switch high-level API for RTL8367/RTL8367C
14 * Feature : Here is a list of all functions and variables in LED module.
18 #include <rtk_switch.h>
19 #include <rtk_error.h>
23 #include <rtl8367c_asicdrv.h>
24 #include <rtl8367c_asicdrv_led.h>
30 * Set Led enable congiuration
32 * group - LED group id.
33 * pPortmask - LED enable port mask.
38 * RT_ERR_FAILED - Failed
39 * RT_ERR_SMI - SMI access error
40 * RT_ERR_INPUT - Invalid input parameters.
41 * RT_ERR_PORT_MASK - Error portmask
43 * The API can be used to enable LED per port per group.
45 rtk_api_ret_t
rtk_led_enable_set(rtk_led_group_t group
, rtk_portmask_t
*pPortmask
)
51 /* Check initialization state */
54 if (group
>= LED_GROUP_END
)
57 RTK_CHK_PORTMASK_VALID(pPortmask
);
59 RTK_PORTMASK_SCAN((*pPortmask
), port
)
61 if(rtk_switch_isCPUPort(port
) == RT_ERR_OK
)
62 return RT_ERR_PORT_MASK
;
65 if((retVal
= rtk_switch_portmask_L2P_get(pPortmask
, &pmask
)) != RT_ERR_OK
)
68 if ((retVal
= rtl8367c_setAsicLedGroupEnable(group
, pmask
)) != RT_ERR_OK
)
77 * Get Led enable congiuration
79 * group - LED group id.
81 * pPortmask - LED enable port mask.
84 * RT_ERR_FAILED - Failed
85 * RT_ERR_SMI - SMI access error
86 * RT_ERR_INPUT - Invalid input parameters.
88 * The API can be used to get LED enable status.
90 rtk_api_ret_t
rtk_led_enable_get(rtk_led_group_t group
, rtk_portmask_t
*pPortmask
)
95 /* Check initialization state */
98 if (group
>= LED_GROUP_END
)
101 if ((retVal
= rtl8367c_getAsicLedGroupEnable(group
, &pmask
)) != RT_ERR_OK
)
104 if((retVal
= rtk_switch_portmask_P2L_get(pmask
, pPortmask
)) != RT_ERR_OK
)
112 * rtk_led_operation_set
114 * Set Led operation mode
116 * mode - LED operation mode.
121 * RT_ERR_FAILED - Failed
122 * RT_ERR_SMI - SMI access error
123 * RT_ERR_INPUT - Invalid input parameters.
125 * The API can set Led operation mode.
126 * The modes that can be set are as following:
131 rtk_api_ret_t
rtk_led_operation_set(rtk_led_operation_t mode
)
133 rtk_api_ret_t retVal
;
136 /* Check initialization state */
137 RTK_CHK_INIT_STATE();
139 if ( mode
>= LED_OP_END
)
144 case LED_OP_PARALLEL
:
145 regData
= LEDOP_PARALLEL
;
148 regData
= LEDOP_SERIAL
;
151 return RT_ERR_CHIP_NOT_SUPPORTED
;
155 if ((retVal
= rtl8367c_setAsicLedOperationMode(regData
)) != RT_ERR_OK
)
162 * rtk_led_operation_get
164 * Get Led operation mode
168 * pMode - Support LED operation mode.
171 * RT_ERR_FAILED - Failed
172 * RT_ERR_SMI - SMI access error
173 * RT_ERR_INPUT - Invalid input parameters.
175 * The API can get Led operation mode.
176 * The modes that can be set are as following:
181 rtk_api_ret_t
rtk_led_operation_get(rtk_led_operation_t
*pMode
)
183 rtk_api_ret_t retVal
;
186 /* Check initialization state */
187 RTK_CHK_INIT_STATE();
190 return RT_ERR_NULL_POINTER
;
192 if ((retVal
= rtl8367c_getAsicLedOperationMode(®Data
)) != RT_ERR_OK
)
195 if (regData
== LEDOP_SERIAL
)
196 *pMode
= LED_OP_SERIAL
;
197 else if (regData
==LEDOP_PARALLEL
)
198 *pMode
= LED_OP_PARALLEL
;
200 return RT_ERR_FAILED
;
206 * rtk_led_modeForce_set
208 * Set Led group to congiuration force mode
211 * group - Support LED group id.
212 * mode - Support LED force mode.
217 * RT_ERR_FAILED - Failed
218 * RT_ERR_SMI - SMI access error
219 * RT_ERR_INPUT - Invalid input parameters.
220 * RT_ERR_PORT_ID - Error Port ID
222 * The API can force to one force mode.
223 * The force modes that can be set are as following:
224 * - LED_FORCE_NORMAL,
229 rtk_api_ret_t
rtk_led_modeForce_set(rtk_port_t port
, rtk_led_group_t group
, rtk_led_force_mode_t mode
)
231 rtk_api_ret_t retVal
;
233 /* Check initialization state */
234 RTK_CHK_INIT_STATE();
236 /* Check Port Valid */
237 RTK_CHK_PORT_VALID(port
);
239 /* No LED for CPU port */
240 if(rtk_switch_isCPUPort(port
) == RT_ERR_OK
)
241 return RT_ERR_PORT_ID
;
243 if (group
>= LED_GROUP_END
)
246 if (mode
>= LED_FORCE_END
)
247 return RT_ERR_NOT_ALLOWED
;
249 if ((retVal
= rtl8367c_setAsicForceLed(rtk_switch_port_L2P_get(port
), group
, mode
)) != RT_ERR_OK
)
256 * rtk_led_modeForce_get
258 * Get Led group to congiuration force mode
261 * group - Support LED group id.
262 * pMode - Support LED force mode.
267 * RT_ERR_FAILED - Failed
268 * RT_ERR_SMI - SMI access error
269 * RT_ERR_INPUT - Invalid input parameters.
270 * RT_ERR_PORT_ID - Error Port ID
272 * The API can get forced Led group mode.
273 * The force modes that can be set are as following:
274 * - LED_FORCE_NORMAL,
279 rtk_api_ret_t
rtk_led_modeForce_get(rtk_port_t port
, rtk_led_group_t group
, rtk_led_force_mode_t
*pMode
)
281 rtk_api_ret_t retVal
;
283 /* Check initialization state */
284 RTK_CHK_INIT_STATE();
286 /* Check Port Valid */
287 RTK_CHK_PORT_VALID(port
);
289 /* No LED for CPU port */
290 if(rtk_switch_isCPUPort(port
) == RT_ERR_OK
)
291 return RT_ERR_PORT_ID
;
293 if (group
>= LED_GROUP_END
)
297 return RT_ERR_NULL_POINTER
;
299 if ((retVal
= rtl8367c_getAsicForceLed(rtk_switch_port_L2P_get(port
), group
, pMode
)) != RT_ERR_OK
)
306 * rtk_led_blinkRate_set
308 * Set LED blinking rate
310 * blinkRate - blinking rate.
315 * RT_ERR_FAILED - Failed
316 * RT_ERR_SMI - SMI access error
317 * RT_ERR_INPUT - Invalid input parameters.
319 * ASIC support 6 types of LED blinking rates at 43ms, 84ms, 120ms, 170ms, 340ms and 670ms.
321 rtk_api_ret_t
rtk_led_blinkRate_set(rtk_led_blink_rate_t blinkRate
)
323 rtk_api_ret_t retVal
;
325 /* Check initialization state */
326 RTK_CHK_INIT_STATE();
328 if (blinkRate
>= LED_BLINKRATE_END
)
329 return RT_ERR_FAILED
;
331 if ((retVal
= rtl8367c_setAsicLedBlinkRate(blinkRate
)) != RT_ERR_OK
)
338 * rtk_led_blinkRate_get
340 * Get LED blinking rate at mode 0 to mode 3
344 * pBlinkRate - blinking rate.
347 * RT_ERR_FAILED - Failed
348 * RT_ERR_SMI - SMI access error
349 * RT_ERR_INPUT - Invalid input parameters.
351 * There are 6 types of LED blinking rates at 43ms, 84ms, 120ms, 170ms, 340ms and 670ms.
353 rtk_api_ret_t
rtk_led_blinkRate_get(rtk_led_blink_rate_t
*pBlinkRate
)
355 rtk_api_ret_t retVal
;
357 /* Check initialization state */
358 RTK_CHK_INIT_STATE();
360 if(NULL
== pBlinkRate
)
361 return RT_ERR_NULL_POINTER
;
363 if ((retVal
= rtl8367c_getAsicLedBlinkRate(pBlinkRate
)) != RT_ERR_OK
)
370 * rtk_led_groupConfig_set
372 * Set per group Led to congiuration mode
375 * config - LED configuration
380 * RT_ERR_FAILED - Failed
381 * RT_ERR_SMI - SMI access error
382 * RT_ERR_INPUT - Invalid input parameters.
384 * The API can set LED indicated information configuration for each LED group with 1 to 1 led mapping to each port.
385 * - Definition LED Statuses Description
386 * - 0000 LED_Off LED pin Tri-State.
387 * - 0001 Dup/Col Collision, Full duplex Indicator.
388 * - 0010 Link/Act Link, Activity Indicator.
389 * - 0011 Spd1000 1000Mb/s Speed Indicator.
390 * - 0100 Spd100 100Mb/s Speed Indicator.
391 * - 0101 Spd10 10Mb/s Speed Indicator.
392 * - 0110 Spd1000/Act 1000Mb/s Speed/Activity Indicator.
393 * - 0111 Spd100/Act 100Mb/s Speed/Activity Indicator.
394 * - 1000 Spd10/Act 10Mb/s Speed/Activity Indicator.
395 * - 1001 Spd100 (10)/Act 10/100Mb/s Speed/Activity Indicator.
396 * - 1010 LoopDetect LoopDetect Indicator.
397 * - 1011 EEE EEE Indicator.
398 * - 1100 Link/Rx Link, Activity Indicator.
399 * - 1101 Link/Tx Link, Activity Indicator.
400 * - 1110 Master Link on Master Indicator.
401 * - 1111 Act Activity Indicator. Low for link established.
403 rtk_api_ret_t
rtk_led_groupConfig_set(rtk_led_group_t group
, rtk_led_congig_t config
)
405 rtk_api_ret_t retVal
;
407 /* Check initialization state */
408 RTK_CHK_INIT_STATE();
410 if (LED_GROUP_END
<= group
)
411 return RT_ERR_FAILED
;
413 if (LED_CONFIG_END
<= config
)
414 return RT_ERR_FAILED
;
416 if ((retVal
= rtl8367c_setAsicLedIndicateInfoConfig(group
, config
)) != RT_ERR_OK
)
423 * rtk_led_groupConfig_get
425 * Get Led group congiuration mode
429 * pConfig - LED configuration.
432 * RT_ERR_FAILED - Failed
433 * RT_ERR_SMI - SMI access error
434 * RT_ERR_INPUT - Invalid input parameters.
436 * The API can get LED indicated information configuration for each LED group.
438 rtk_api_ret_t
rtk_led_groupConfig_get(rtk_led_group_t group
, rtk_led_congig_t
*pConfig
)
440 rtk_api_ret_t retVal
;
442 /* Check initialization state */
443 RTK_CHK_INIT_STATE();
445 if (LED_GROUP_END
<= group
)
446 return RT_ERR_FAILED
;
449 return RT_ERR_NULL_POINTER
;
451 if ((retVal
= rtl8367c_getAsicLedIndicateInfoConfig(group
, pConfig
)) != RT_ERR_OK
)
458 * rtk_led_groupAbility_set
460 * Configure per group Led ability
463 * pAbility - LED ability
468 * RT_ERR_FAILED - Failed
469 * RT_ERR_SMI - SMI access error
470 * RT_ERR_INPUT - Invalid input parameters.
475 rtk_api_ret_t
rtk_led_groupAbility_set(rtk_led_group_t group
, rtk_led_ability_t
*pAbility
)
477 rtk_api_ret_t retVal
;
480 /* Check initialization state */
481 RTK_CHK_INIT_STATE();
483 if (LED_GROUP_END
<= group
)
484 return RT_ERR_FAILED
;
487 return RT_ERR_NULL_POINTER
;
489 if( (pAbility
->link_10m
>= RTK_ENABLE_END
) || (pAbility
->link_100m
>= RTK_ENABLE_END
)||
490 (pAbility
->link_500m
>= RTK_ENABLE_END
) || (pAbility
->link_1000m
>= RTK_ENABLE_END
)||
491 (pAbility
->act_rx
>= RTK_ENABLE_END
) || (pAbility
->act_tx
>= RTK_ENABLE_END
) )
496 if ((retVal
= rtl8367c_getAsicReg(RTL8367C_REG_LED0_DATA_CTRL
+ (rtk_uint32
)group
, ®Data
)) != RT_ERR_OK
)
499 if(pAbility
->link_10m
== ENABLED
)
504 if(pAbility
->link_100m
== ENABLED
)
509 if(pAbility
->link_500m
== ENABLED
)
514 if(pAbility
->link_1000m
== ENABLED
)
519 if(pAbility
->act_rx
== ENABLED
)
524 if(pAbility
->act_tx
== ENABLED
)
529 regData
|= (0x0001 << 6);
531 if ((retVal
= rtl8367c_setAsicReg(RTL8367C_REG_LED0_DATA_CTRL
+ (rtk_uint32
)group
, regData
)) != RT_ERR_OK
)
538 * rtk_led_groupAbility_get
540 * Get per group Led ability
543 * pAbility - LED ability
548 * RT_ERR_FAILED - Failed
549 * RT_ERR_SMI - SMI access error
550 * RT_ERR_INPUT - Invalid input parameters.
555 rtk_api_ret_t
rtk_led_groupAbility_get(rtk_led_group_t group
, rtk_led_ability_t
*pAbility
)
557 rtk_api_ret_t retVal
;
560 /* Check initialization state */
561 RTK_CHK_INIT_STATE();
563 if (LED_GROUP_END
<= group
)
564 return RT_ERR_FAILED
;
567 return RT_ERR_NULL_POINTER
;
569 if ((retVal
= rtl8367c_getAsicReg(RTL8367C_REG_LED0_DATA_CTRL
+ (rtk_uint32
)group
, ®Data
)) != RT_ERR_OK
)
572 pAbility
->link_10m
= (regData
& 0x0001) ? ENABLED
: DISABLED
;
573 pAbility
->link_100m
= (regData
& 0x0002) ? ENABLED
: DISABLED
;
574 pAbility
->link_500m
= (regData
& 0x0004) ? ENABLED
: DISABLED
;
575 pAbility
->link_1000m
= (regData
& 0x0008) ? ENABLED
: DISABLED
;
576 pAbility
->act_rx
= (regData
& 0x0010) ? ENABLED
: DISABLED
;
577 pAbility
->act_tx
= (regData
& 0x0020) ? ENABLED
: DISABLED
;
584 * rtk_led_serialMode_set
586 * Set Led serial mode active congiuration
588 * active - LED group.
593 * RT_ERR_FAILED - Failed
594 * RT_ERR_SMI - SMI access error
595 * RT_ERR_INPUT - Invalid input parameters.
597 * The API can set LED serial mode active congiuration.
599 rtk_api_ret_t
rtk_led_serialMode_set(rtk_led_active_t active
)
601 rtk_api_ret_t retVal
;
603 /* Check initialization state */
604 RTK_CHK_INIT_STATE();
606 if ( active
>= LED_ACTIVE_END
)
609 if ((retVal
= rtl8367c_setAsicLedSerialModeConfig(active
,1))!=RT_ERR_OK
)
616 * rtk_led_serialMode_get
618 * Get Led group congiuration mode
622 * pConfig - LED configuration.
625 * RT_ERR_FAILED - Failed
626 * RT_ERR_SMI - SMI access error
627 * RT_ERR_INPUT - Invalid input parameters.
629 * The API can get LED serial mode active configuration.
631 rtk_api_ret_t
rtk_led_serialMode_get(rtk_led_active_t
*pActive
)
633 rtk_api_ret_t retVal
;
636 /* Check initialization state */
637 RTK_CHK_INIT_STATE();
640 return RT_ERR_NULL_POINTER
;
642 if ((retVal
= rtl8367c_getAsicLedSerialModeConfig(pActive
,®Data
))!=RT_ERR_OK
)
649 * rtk_led_OutputEnable_set
651 * This API set LED I/O state.
653 * enabled - LED I/O state
658 * RT_ERR_FAILED - Failed
659 * RT_ERR_SMI - SMI access error
660 * RT_ERR_INPUT - Error parameter
662 * This API set LED I/O state.
664 rtk_api_ret_t
rtk_led_OutputEnable_set(rtk_enable_t state
)
666 rtk_api_ret_t retVal
;
668 /* Check initialization state */
669 RTK_CHK_INIT_STATE();
671 if (state
>= RTK_ENABLE_END
)
674 if ((retVal
= rtl8367c_setAsicLedOutputEnable(state
))!=RT_ERR_OK
)
681 * rtk_led_OutputEnable_get
683 * This API get LED I/O state.
687 * pEnabled - LED I/O state
690 * RT_ERR_FAILED - Failed
691 * RT_ERR_SMI - SMI access error
692 * RT_ERR_INPUT - Error parameter
694 * This API set current LED I/O state.
696 rtk_api_ret_t
rtk_led_OutputEnable_get(rtk_enable_t
*pState
)
698 rtk_api_ret_t retVal
;
700 /* Check initialization state */
701 RTK_CHK_INIT_STATE();
704 return RT_ERR_NULL_POINTER
;
706 if ((retVal
= rtl8367c_getAsicLedOutputEnable(pState
))!=RT_ERR_OK
)
714 * rtk_led_serialModePortmask_set
716 * This API configure Serial LED output Group and portmask
718 * output - output group
719 * pPortmask - output portmask
724 * RT_ERR_FAILED - Failed
725 * RT_ERR_SMI - SMI access error
726 * RT_ERR_INPUT - Error parameter
730 rtk_api_ret_t
rtk_led_serialModePortmask_set(rtk_led_serialOutput_t output
, rtk_portmask_t
*pPortmask
)
732 rtk_api_ret_t retVal
;
735 /* Check initialization state */
736 RTK_CHK_INIT_STATE();
738 if(output
>= SERIAL_LED_END
)
741 if(pPortmask
== NULL
)
742 return RT_ERR_NULL_POINTER
;
744 if ((retVal
= rtk_switch_portmask_L2P_get(pPortmask
, &pmask
)) != RT_ERR_OK
)
747 if ((retVal
= rtl8367c_setAsicLedSerialOutput((rtk_uint32
)output
, pmask
))!=RT_ERR_OK
)
754 * rtk_led_serialModePortmask_get
756 * This API get Serial LED output Group and portmask
760 * pOutput - output group
761 * pPortmask - output portmask
764 * RT_ERR_FAILED - Failed
765 * RT_ERR_SMI - SMI access error
766 * RT_ERR_INPUT - Error parameter
770 rtk_api_ret_t
rtk_led_serialModePortmask_get(rtk_led_serialOutput_t
*pOutput
, rtk_portmask_t
*pPortmask
)
772 rtk_api_ret_t retVal
;
775 /* Check initialization state */
776 RTK_CHK_INIT_STATE();
779 return RT_ERR_NULL_POINTER
;
781 if(pPortmask
== NULL
)
782 return RT_ERR_NULL_POINTER
;
784 if ((retVal
= rtl8367c_getAsicLedSerialOutput((rtk_uint32
*)pOutput
, &pmask
))!=RT_ERR_OK
)
787 if((retVal
= rtk_switch_portmask_P2L_get(pmask
, pPortmask
)) != RT_ERR_OK
)