Skip to content

Commit 70a787c

Browse files
maass-hamburgkartben
authored andcommitted
drivers: mdio: Update shell commands to include device argument
Update shell commands to include device argument Signed-off-by: Fin Maaß <[email protected]>
1 parent d7bb10d commit 70a787c

File tree

1 file changed

+79
-95
lines changed

1 file changed

+79
-95
lines changed

drivers/mdio/mdio_shell.c

+79-95
Original file line numberDiff line numberDiff line change
@@ -15,65 +15,53 @@
1515
#include <zephyr/logging/log.h>
1616
LOG_MODULE_REGISTER(mdio_shell, CONFIG_LOG_DEFAULT_LEVEL);
1717

18-
#if DT_HAS_COMPAT_STATUS_OKAY(atmel_sam_mdio)
19-
#define DT_DRV_COMPAT atmel_sam_mdio
20-
#elif DT_HAS_COMPAT_STATUS_OKAY(espressif_esp32_mdio)
21-
#define DT_DRV_COMPAT espressif_esp32_mdio
22-
#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_imx_netc_emdio)
23-
#define DT_DRV_COMPAT nxp_imx_netc_emdio
24-
#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_s32_netc_emdio)
25-
#define DT_DRV_COMPAT nxp_s32_netc_emdio
26-
#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_s32_gmac_mdio)
27-
#define DT_DRV_COMPAT nxp_s32_gmac_mdio
28-
#elif DT_HAS_COMPAT_STATUS_OKAY(adi_adin2111_mdio)
29-
#define DT_DRV_COMPAT adi_adin2111_mdio
30-
#elif DT_HAS_COMPAT_STATUS_OKAY(smsc_lan91c111_mdio)
31-
#define DT_DRV_COMPAT smsc_lan91c111_mdio
32-
#elif DT_HAS_COMPAT_STATUS_OKAY(zephyr_mdio_gpio)
33-
#define DT_DRV_COMPAT zephyr_mdio_gpio
34-
#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_enet_mdio)
35-
#define DT_DRV_COMPAT nxp_enet_mdio
36-
#elif DT_HAS_COMPAT_STATUS_OKAY(infineon_xmc4xxx_mdio)
37-
#define DT_DRV_COMPAT infineon_xmc4xxx_mdio
38-
#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_enet_qos_mdio)
39-
#define DT_DRV_COMPAT nxp_enet_qos_mdio
40-
#elif DT_HAS_COMPAT_STATUS_OKAY(litex_liteeth_mdio)
41-
#define DT_DRV_COMPAT litex_liteeth_mdio
42-
#elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32_mdio)
43-
#define DT_DRV_COMPAT st_stm32_mdio
44-
#elif DT_HAS_COMPAT_STATUS_OKAY(snps_dwcxgmac_mdio)
45-
#define DT_DRV_COMPAT snps_dwcxgmac_mdio
46-
#elif DT_HAS_COMPAT_STATUS_OKAY(sensry_sy1xx_mdio)
47-
#define DT_DRV_COMPAT sensry_sy1xx_mdio
48-
#elif DT_HAS_COMPAT_STATUS_OKAY(xlnx_axi_ethernet_1_00_a_mdio)
49-
#define DT_DRV_COMPAT xlnx_axi_ethernet_1_00_a_mdio
50-
#else
51-
#error "No known devicetree compatible match for MDIO shell"
52-
#endif
53-
54-
#define MDIO_NODE_ID DT_COMPAT_GET_ANY_STATUS_OKAY(DT_DRV_COMPAT)
18+
static bool device_is_mdio(const struct device *dev)
19+
{
20+
return DEVICE_API_IS(mdio, dev);
21+
}
22+
23+
static void device_name_get(size_t idx, struct shell_static_entry *entry)
24+
{
25+
const struct device *dev = shell_device_filter(idx, device_is_mdio);
26+
27+
entry->syntax = (dev != NULL) ? dev->name : NULL;
28+
entry->handler = NULL;
29+
entry->help = NULL;
30+
entry->subcmd = NULL;
31+
}
32+
33+
SHELL_DYNAMIC_CMD_CREATE(dsub_device_name, device_name_get);
34+
35+
static int parse_device_arg(const struct shell *sh, char **argv, const struct device **dev)
36+
{
37+
*dev = shell_device_get_binding(argv[1]);
38+
if (!*dev) {
39+
shell_error(sh, "device %s not found", argv[1]);
40+
return -ENODEV;
41+
}
42+
return 0;
43+
}
5544

5645
/*
5746
* Scan the entire 5-bit address space of the MDIO bus
5847
*
59-
* scan [<reg_addr>]
48+
* scan <device> [<reg_addr>]
6049
*/
6150
static int cmd_mdio_scan(const struct shell *sh, size_t argc, char **argv)
6251
{
6352
const struct device *dev;
6453
int cnt;
6554
uint16_t data;
6655
uint16_t reg_addr;
56+
int ret;
6757

68-
dev = DEVICE_DT_GET(MDIO_NODE_ID);
69-
if (!device_is_ready(dev)) {
70-
shell_error(sh, "MDIO: Device driver %s is not ready.", dev->name);
71-
72-
return -ENODEV;
58+
ret = parse_device_arg(sh, argv, &dev);
59+
if (ret < 0) {
60+
return ret;
7361
}
7462

7563
if (argc >= 2) {
76-
reg_addr = strtol(argv[1], NULL, 16);
64+
reg_addr = strtol(argv[2], NULL, 16);
7765
} else {
7866
reg_addr = 0;
7967
}
@@ -101,24 +89,23 @@ static int cmd_mdio_scan(const struct shell *sh, size_t argc, char **argv)
10189
return 0;
10290
}
10391

104-
/* mdio write <port_addr> <reg_addr> <data> */
92+
/* mdio write <device> <port_addr> <reg_addr> <data> */
10593
static int cmd_mdio_write(const struct shell *sh, size_t argc, char **argv)
10694
{
10795
const struct device *dev;
10896
uint16_t data;
10997
uint16_t reg_addr;
11098
uint16_t port_addr;
99+
int ret;
111100

112-
dev = DEVICE_DT_GET(MDIO_NODE_ID);
113-
if (!device_is_ready(dev)) {
114-
shell_error(sh, "MDIO: Device driver %s is not ready.", dev->name);
115-
116-
return -ENODEV;
101+
ret = parse_device_arg(sh, argv, &dev);
102+
if (ret < 0) {
103+
return ret;
117104
}
118105

119-
port_addr = strtol(argv[1], NULL, 16);
120-
reg_addr = strtol(argv[2], NULL, 16);
121-
data = strtol(argv[3], NULL, 16);
106+
port_addr = strtol(argv[2], NULL, 16);
107+
reg_addr = strtol(argv[3], NULL, 16);
108+
data = strtol(argv[4], NULL, 16);
122109

123110
mdio_bus_enable(dev);
124111

@@ -134,23 +121,22 @@ static int cmd_mdio_write(const struct shell *sh, size_t argc, char **argv)
134121
return 0;
135122
}
136123

137-
/* mdio read <port_addr> <reg_addr> */
124+
/* mdio read <device> <port_addr> <reg_addr> */
138125
static int cmd_mdio_read(const struct shell *sh, size_t argc, char **argv)
139126
{
140127
const struct device *dev;
141128
uint16_t data;
142129
uint16_t reg_addr;
143130
uint16_t port_addr;
131+
int ret;
144132

145-
dev = DEVICE_DT_GET(MDIO_NODE_ID);
146-
if (!device_is_ready(dev)) {
147-
shell_error(sh, "MDIO: Device driver %s is not ready.", dev->name);
148-
149-
return -ENODEV;
133+
ret = parse_device_arg(sh, argv, &dev);
134+
if (ret < 0) {
135+
return ret;
150136
}
151137

152-
port_addr = strtol(argv[1], NULL, 16);
153-
reg_addr = strtol(argv[2], NULL, 16);
138+
port_addr = strtol(argv[2], NULL, 16);
139+
reg_addr = strtol(argv[3], NULL, 16);
154140

155141
mdio_bus_enable(dev);
156142

@@ -168,26 +154,25 @@ static int cmd_mdio_read(const struct shell *sh, size_t argc, char **argv)
168154
return 0;
169155
}
170156

171-
/* mdio write_c45 <port_addr> <dev_addr> <reg_addr> <value> */
157+
/* mdio write_c45 <device> <port_addr> <dev_addr> <reg_addr> <value> */
172158
static int cmd_mdio_write_45(const struct shell *sh, size_t argc, char **argv)
173159
{
174160
const struct device *dev;
175161
uint16_t data;
176162
uint16_t reg_addr;
177163
uint8_t dev_addr;
178164
uint8_t port_addr;
165+
int ret;
179166

180-
dev = DEVICE_DT_GET(MDIO_NODE_ID);
181-
if (!device_is_ready(dev)) {
182-
shell_error(sh, "MDIO: Device driver %s is not ready.", dev->name);
183-
184-
return -ENODEV;
167+
ret = parse_device_arg(sh, argv, &dev);
168+
if (ret < 0) {
169+
return ret;
185170
}
186171

187-
port_addr = strtol(argv[1], NULL, 16);
188-
dev_addr = strtol(argv[2], NULL, 16);
189-
reg_addr = strtol(argv[3], NULL, 16);
190-
data = strtol(argv[4], NULL, 16);
172+
port_addr = strtol(argv[2], NULL, 16);
173+
dev_addr = strtol(argv[3], NULL, 16);
174+
reg_addr = strtol(argv[4], NULL, 16);
175+
data = strtol(argv[5], NULL, 16);
191176

192177
mdio_bus_enable(dev);
193178

@@ -203,25 +188,24 @@ static int cmd_mdio_write_45(const struct shell *sh, size_t argc, char **argv)
203188
return 0;
204189
}
205190

206-
/* mdio read_c45 <port_addr> <dev_addr> <reg_addr> */
191+
/* mdio read_c45 <device> <port_addr> <dev_addr> <reg_addr> */
207192
static int cmd_mdio_read_c45(const struct shell *sh, size_t argc, char **argv)
208193
{
209194
const struct device *dev;
210195
uint16_t data;
211196
uint16_t reg_addr;
212197
uint8_t dev_addr;
213198
uint8_t port_addr;
199+
int ret;
214200

215-
dev = DEVICE_DT_GET(MDIO_NODE_ID);
216-
if (!device_is_ready(dev)) {
217-
shell_error(sh, "MDIO: Device driver %s is not ready.", dev->name);
218-
219-
return -ENODEV;
201+
ret = parse_device_arg(sh, argv, &dev);
202+
if (ret < 0) {
203+
return ret;
220204
}
221205

222-
port_addr = strtol(argv[1], NULL, 16);
223-
dev_addr = strtol(argv[2], NULL, 16);
224-
reg_addr = strtol(argv[3], NULL, 16);
206+
port_addr = strtol(argv[2], NULL, 16);
207+
dev_addr = strtol(argv[3], NULL, 16);
208+
reg_addr = strtol(argv[4], NULL, 16);
225209

226210
mdio_bus_enable(dev);
227211

@@ -240,23 +224,23 @@ static int cmd_mdio_read_c45(const struct shell *sh, size_t argc, char **argv)
240224
}
241225

242226
SHELL_STATIC_SUBCMD_SET_CREATE(sub_mdio_cmds,
243-
SHELL_CMD_ARG(scan, NULL,
244-
"Scan MDIO bus for devices: scan [<reg_addr>]",
245-
cmd_mdio_scan, 0, 1),
246-
SHELL_CMD_ARG(read, NULL,
247-
"Read from MDIO device: read <phy_addr> <reg_addr>",
248-
cmd_mdio_read, 3, 0),
249-
SHELL_CMD_ARG(write, NULL,
250-
"Write to MDIO device: write <phy_addr> <reg_addr> <value>",
251-
cmd_mdio_write, 4, 0),
252-
SHELL_CMD_ARG(read_c45, NULL,
227+
SHELL_CMD_ARG(scan, &dsub_device_name,
228+
"Scan MDIO bus for devices: scan <device> [<reg_addr>]",
229+
cmd_mdio_scan, 1, 1),
230+
SHELL_CMD_ARG(read, &dsub_device_name,
231+
"Read from MDIO device: read <device> <phy_addr> <reg_addr>",
232+
cmd_mdio_read, 4, 0),
233+
SHELL_CMD_ARG(write, &dsub_device_name,
234+
"Write to MDIO device: write <device> <phy_addr> <reg_addr> <value>",
235+
cmd_mdio_write, 5, 0),
236+
SHELL_CMD_ARG(read_c45, &dsub_device_name,
253237
"Read from MDIO Clause 45 device: "
254-
"read_c45 <port_addr> <dev_addr> <reg_addr>",
255-
cmd_mdio_read_c45, 4, 0),
256-
SHELL_CMD_ARG(write_c45, NULL,
238+
"read_c45 <device> <port_addr> <dev_addr> <reg_addr>",
239+
cmd_mdio_read_c45, 5, 0),
240+
SHELL_CMD_ARG(write_c45, &dsub_device_name,
257241
"Write to MDIO Clause 45 device: "
258-
"write_c45 <port_addr> <dev_addr> <reg_addr> <value>",
259-
cmd_mdio_write_45, 5, 0),
242+
"write_c45 <device> <port_addr> <dev_addr> <reg_addr> <value>",
243+
cmd_mdio_write_45, 6, 0),
260244
SHELL_SUBCMD_SET_END /* Array terminated. */
261245
);
262246

0 commit comments

Comments
 (0)