1 // SPDX-License-Identifier: GPL-2.0+
3 * mdio-boardinfo - Collect pre-declarations for MDIO devices
6 #include <linux/kernel.h>
7 #include <linux/slab.h>
8 #include <linux/export.h>
9 #include <linux/mutex.h>
10 #include <linux/list.h>
12 #include "mdio-boardinfo.h"
14 static LIST_HEAD(mdio_board_list
);
15 static DEFINE_MUTEX(mdio_board_lock
);
18 * mdiobus_setup_mdiodev_from_board_info - create and setup MDIO devices
19 * from pre-collected board specific MDIO information
20 * @mdiodev: MDIO device pointer
23 void mdiobus_setup_mdiodev_from_board_info(struct mii_bus
*bus
,
26 struct mdio_board_info
*bi
))
28 struct mdio_board_entry
*be
;
29 struct mdio_board_entry
*tmp
;
30 struct mdio_board_info
*bi
;
33 mutex_lock(&mdio_board_lock
);
34 list_for_each_entry_safe(be
, tmp
, &mdio_board_list
, list
) {
37 if (strcmp(bus
->id
, bi
->bus_id
))
40 mutex_unlock(&mdio_board_lock
);
42 mutex_lock(&mdio_board_lock
);
47 mutex_unlock(&mdio_board_lock
);
49 EXPORT_SYMBOL(mdiobus_setup_mdiodev_from_board_info
);
52 * mdio_register_board_info - register MDIO devices for a given board
53 * @info: array of devices descriptors
54 * @n: number of descriptors provided
57 * The board info passed can be marked with __initdata but be pointers
58 * such as platform_data etc. are copied as-is
60 int mdiobus_register_board_info(const struct mdio_board_info
*info
,
63 struct mdio_board_entry
*be
;
66 be
= kcalloc(n
, sizeof(*be
), GFP_KERNEL
);
70 for (i
= 0; i
< n
; i
++, be
++, info
++) {
71 memcpy(&be
->board_info
, info
, sizeof(*info
));
72 mutex_lock(&mdio_board_lock
);
73 list_add_tail(&be
->list
, &mdio_board_list
);
74 mutex_unlock(&mdio_board_lock
);
79 EXPORT_SYMBOL(mdiobus_register_board_info
);