| /* SPDX-License-Identifier: GPL-2.0+ */ | |
| #ifndef _RTL8366RB_H | |
| #define _RTL8366RB_H | |
| #include "realtek.h" | |
| #define RTL8366RB_PORT_NUM_CPU 5 | |
| #define RTL8366RB_NUM_PORTS 6 | |
| #define RTL8366RB_PHY_NO_MAX 4 | |
| #define RTL8366RB_NUM_LEDGROUPS 4 | |
| #define RTL8366RB_PHY_ADDR_MAX 31 | |
| /* LED control registers */ | |
| /* The LED blink rate is global; it is used by all triggers in all groups. */ | |
| #define RTL8366RB_LED_BLINKRATE_REG 0x0430 | |
| #define RTL8366RB_LED_BLINKRATE_MASK 0x0007 | |
| #define RTL8366RB_LED_BLINKRATE_28MS 0x0000 | |
| #define RTL8366RB_LED_BLINKRATE_56MS 0x0001 | |
| #define RTL8366RB_LED_BLINKRATE_84MS 0x0002 | |
| #define RTL8366RB_LED_BLINKRATE_111MS 0x0003 | |
| #define RTL8366RB_LED_BLINKRATE_222MS 0x0004 | |
| #define RTL8366RB_LED_BLINKRATE_446MS 0x0005 | |
| /* LED trigger event for each group */ | |
| #define RTL8366RB_LED_CTRL_REG 0x0431 | |
| #define RTL8366RB_LED_CTRL_OFFSET(led_group) \ | |
| (4 * (led_group)) | |
| #define RTL8366RB_LED_CTRL_MASK(led_group) \ | |
| (0xf << RTL8366RB_LED_CTRL_OFFSET(led_group)) | |
| /* The RTL8366RB_LED_X_X registers are used to manually set the LED state only | |
| * when the corresponding LED group in RTL8366RB_LED_CTRL_REG is | |
| * RTL8366RB_LEDGROUP_FORCE. Otherwise, it is ignored. | |
| */ | |
| #define RTL8366RB_LED_0_1_CTRL_REG 0x0432 | |
| #define RTL8366RB_LED_2_3_CTRL_REG 0x0433 | |
| #define RTL8366RB_LED_X_X_CTRL_REG(led_group) \ | |
| ((led_group) <= 1 ? \ | |
| RTL8366RB_LED_0_1_CTRL_REG : \ | |
| RTL8366RB_LED_2_3_CTRL_REG) | |
| #define RTL8366RB_LED_0_X_CTRL_MASK GENMASK(5, 0) | |
| #define RTL8366RB_LED_X_1_CTRL_MASK GENMASK(11, 6) | |
| #define RTL8366RB_LED_2_X_CTRL_MASK GENMASK(5, 0) | |
| #define RTL8366RB_LED_X_3_CTRL_MASK GENMASK(11, 6) | |
| enum rtl8366_ledgroup_mode { | |
| RTL8366RB_LEDGROUP_OFF = 0x0, | |
| RTL8366RB_LEDGROUP_DUP_COL = 0x1, | |
| RTL8366RB_LEDGROUP_LINK_ACT = 0x2, | |
| RTL8366RB_LEDGROUP_SPD1000 = 0x3, | |
| RTL8366RB_LEDGROUP_SPD100 = 0x4, | |
| RTL8366RB_LEDGROUP_SPD10 = 0x5, | |
| RTL8366RB_LEDGROUP_SPD1000_ACT = 0x6, | |
| RTL8366RB_LEDGROUP_SPD100_ACT = 0x7, | |
| RTL8366RB_LEDGROUP_SPD10_ACT = 0x8, | |
| RTL8366RB_LEDGROUP_SPD100_10_ACT = 0x9, | |
| RTL8366RB_LEDGROUP_FIBER = 0xa, | |
| RTL8366RB_LEDGROUP_AN_FAULT = 0xb, | |
| RTL8366RB_LEDGROUP_LINK_RX = 0xc, | |
| RTL8366RB_LEDGROUP_LINK_TX = 0xd, | |
| RTL8366RB_LEDGROUP_MASTER = 0xe, | |
| RTL8366RB_LEDGROUP_FORCE = 0xf, | |
| __RTL8366RB_LEDGROUP_MODE_MAX | |
| }; | |
| #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS) | |
| struct rtl8366rb_led { | |
| u8 port_num; | |
| u8 led_group; | |
| struct realtek_priv *priv; | |
| struct led_classdev cdev; | |
| }; | |
| int rtl8366rb_setup_leds(struct realtek_priv *priv); | |
| #else | |
| static inline int rtl8366rb_setup_leds(struct realtek_priv *priv) | |
| { | |
| return 0; | |
| } | |
| #endif /* IS_ENABLED(CONFIG_LEDS_CLASS) */ | |
| /** | |
| * struct rtl8366rb - RTL8366RB-specific data | |
| * @max_mtu: per-port max MTU setting | |
| * @pvid_enabled: if PVID is set for respective port | |
| * @leds: per-port and per-ledgroup led info | |
| */ | |
| struct rtl8366rb { | |
| unsigned int max_mtu[RTL8366RB_NUM_PORTS]; | |
| bool pvid_enabled[RTL8366RB_NUM_PORTS]; | |
| #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS) | |
| struct rtl8366rb_led leds[RTL8366RB_NUM_PORTS][RTL8366RB_NUM_LEDGROUPS]; | |
| #endif | |
| }; | |
| /* This code is used also with LEDs disabled */ | |
| int rb8366rb_set_ledgroup_mode(struct realtek_priv *priv, | |
| u8 led_group, | |
| enum rtl8366_ledgroup_mode mode); | |
| #endif /* _RTL8366RB_H */ |