1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 3 #ifndef _RTL8366RB_H 4 #define _RTL8366RB_H 5 6 #include "realtek.h" 7 8 #define RTL8366RB_PORT_NUM_CPU 5 9 #define RTL8366RB_NUM_PORTS 6 10 #define RTL8366RB_PHY_NO_MAX 4 11 #define RTL8366RB_NUM_LEDGROUPS 4 12 #define RTL8366RB_PHY_ADDR_MAX 31 13 14 /* LED control registers */ 15 /* The LED blink rate is global; it is used by all triggers in all groups. */ 16 #define RTL8366RB_LED_BLINKRATE_REG 0x0430 17 #define RTL8366RB_LED_BLINKRATE_MASK 0x0007 18 #define RTL8366RB_LED_BLINKRATE_28MS 0x0000 19 #define RTL8366RB_LED_BLINKRATE_56MS 0x0001 20 #define RTL8366RB_LED_BLINKRATE_84MS 0x0002 21 #define RTL8366RB_LED_BLINKRATE_111MS 0x0003 22 #define RTL8366RB_LED_BLINKRATE_222MS 0x0004 23 #define RTL8366RB_LED_BLINKRATE_446MS 0x0005 24 25 /* LED trigger event for each group */ 26 #define RTL8366RB_LED_CTRL_REG 0x0431 27 #define RTL8366RB_LED_CTRL_OFFSET(led_group) \ 28 (4 * (led_group)) 29 #define RTL8366RB_LED_CTRL_MASK(led_group) \ 30 (0xf << RTL8366RB_LED_CTRL_OFFSET(led_group)) 31 32 /* The RTL8366RB_LED_X_X registers are used to manually set the LED state only 33 * when the corresponding LED group in RTL8366RB_LED_CTRL_REG is 34 * RTL8366RB_LEDGROUP_FORCE. Otherwise, it is ignored. 35 */ 36 #define RTL8366RB_LED_0_1_CTRL_REG 0x0432 37 #define RTL8366RB_LED_2_3_CTRL_REG 0x0433 38 #define RTL8366RB_LED_X_X_CTRL_REG(led_group) \ 39 ((led_group) <= 1 ? \ 40 RTL8366RB_LED_0_1_CTRL_REG : \ 41 RTL8366RB_LED_2_3_CTRL_REG) 42 #define RTL8366RB_LED_0_X_CTRL_MASK GENMASK(5, 0) 43 #define RTL8366RB_LED_X_1_CTRL_MASK GENMASK(11, 6) 44 #define RTL8366RB_LED_2_X_CTRL_MASK GENMASK(5, 0) 45 #define RTL8366RB_LED_X_3_CTRL_MASK GENMASK(11, 6) 46 47 enum rtl8366_ledgroup_mode { 48 RTL8366RB_LEDGROUP_OFF = 0x0, 49 RTL8366RB_LEDGROUP_DUP_COL = 0x1, 50 RTL8366RB_LEDGROUP_LINK_ACT = 0x2, 51 RTL8366RB_LEDGROUP_SPD1000 = 0x3, 52 RTL8366RB_LEDGROUP_SPD100 = 0x4, 53 RTL8366RB_LEDGROUP_SPD10 = 0x5, 54 RTL8366RB_LEDGROUP_SPD1000_ACT = 0x6, 55 RTL8366RB_LEDGROUP_SPD100_ACT = 0x7, 56 RTL8366RB_LEDGROUP_SPD10_ACT = 0x8, 57 RTL8366RB_LEDGROUP_SPD100_10_ACT = 0x9, 58 RTL8366RB_LEDGROUP_FIBER = 0xa, 59 RTL8366RB_LEDGROUP_AN_FAULT = 0xb, 60 RTL8366RB_LEDGROUP_LINK_RX = 0xc, 61 RTL8366RB_LEDGROUP_LINK_TX = 0xd, 62 RTL8366RB_LEDGROUP_MASTER = 0xe, 63 RTL8366RB_LEDGROUP_FORCE = 0xf, 64 65 __RTL8366RB_LEDGROUP_MODE_MAX 66 }; 67 68 #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS) 69 70 struct rtl8366rb_led { 71 u8 port_num; 72 u8 led_group; 73 struct realtek_priv *priv; 74 struct led_classdev cdev; 75 }; 76 77 int rtl8366rb_setup_leds(struct realtek_priv *priv); 78 79 #else 80 81 static inline int rtl8366rb_setup_leds(struct realtek_priv *priv) 82 { 83 return 0; 84 } 85 86 #endif /* IS_ENABLED(CONFIG_LEDS_CLASS) */ 87 88 /** 89 * struct rtl8366rb - RTL8366RB-specific data 90 * @max_mtu: per-port max MTU setting 91 * @pvid_enabled: if PVID is set for respective port 92 * @leds: per-port and per-ledgroup led info 93 */ 94 struct rtl8366rb { 95 unsigned int max_mtu[RTL8366RB_NUM_PORTS]; 96 bool pvid_enabled[RTL8366RB_NUM_PORTS]; 97 #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS) 98 struct rtl8366rb_led leds[RTL8366RB_NUM_PORTS][RTL8366RB_NUM_LEDGROUPS]; 99 #endif 100 }; 101 102 /* This code is used also with LEDs disabled */ 103 int rb8366rb_set_ledgroup_mode(struct realtek_priv *priv, 104 u8 led_group, 105 enum rtl8366_ledgroup_mode mode); 106 107 #endif /* _RTL8366RB_H */ 108