Loading...
Note: File does not exist in v3.1.
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
47enum 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
70struct rtl8366rb_led {
71 u8 port_num;
72 u8 led_group;
73 struct realtek_priv *priv;
74 struct led_classdev cdev;
75};
76
77int rtl8366rb_setup_leds(struct realtek_priv *priv);
78
79#else
80
81static 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 */
94struct 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 */
103int rb8366rb_set_ledgroup_mode(struct realtek_priv *priv,
104 u8 led_group,
105 enum rtl8366_ledgroup_mode mode);
106
107#endif /* _RTL8366RB_H */