Linux Audio

Check our new training course

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 */