一、简介
适用于由RTL8111网卡控制LED指示灯的方案
参考手册:RTL8111H(S)-CG_Datasheet_1.7_WMF.pdf
驱动代码:kernel-5.10\drivers\net\ethernet\realtek\r8168\r8168_n.c
二、工作原理
1、LED这块主要是对网卡寄存器的一个读写,一共16位,从高位到低位,依次分别是:LED灯的功能控制、LED2、1、0的工作模式。
2、先说bit12~15,bit15主要是与后面配置灯的一个模式对应使用(看下面第3点),12、13、14这三位主要是对应三个LED的有效电平,这个需要看硬件原理图;
例如下面这个原理图的配置,两个网口灯分别使用了LED1和LED2,LED1要高电平,LED2要低,所以bit14到12应该是010;
3、Bit0~11对应的就是LED的一些工作模式,主要是看下面这个表格,而Bit15对应的就是选择使用这个表格的哪个的LED Option;每个LED的工作模式就4位,分为Link Bit和Active Bit,
注意,文档这个表格是从低位到高位描述的,与我们代码实际写的要反过来;
三、实际用例
现在LED1对应橙灯(高有效),LED2对应绿灯(低有效),需要配0010
希望接入百兆千兆时,绿灯常亮,需要配0111
希望有数据交互时,橙灯闪烁;需要配1000
LED3没有使用,则需要配置0000
组合一下就是0010 0111 1000 0000,也就是0x2780
四、参考配置
/*0x2780:接入百兆千兆网络LED2常亮;有数据收发LED1闪烁(具体颜色与LED对应关系要看原理图以及网口灯元器件)
2表示:0010,后三位从高到低分别对应网卡LED2、1、0,给1为高响应,0为低响应
780分别对应LED2、1、0的模式,详细信息需要查看芯片手册7.2*/
RTL_W16(tp,CustomLED,0x2780);
// printk("%s : RTL_W16(tp,CustomLED, 0x2780)",__func__);
tp->NicCustLedValue = RTL_R16(tp, CustomLED);