2 * mdio-boardinfo - Collect pre-declarations for MDIO devices
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
10 #include <linux/kernel.h>
11 #include <linux/slab.h>
12 #include <linux/export.h>
13 #include <linux/mutex.h>
14 #include <linux/list.h>
16 #include "mdio-boardinfo.h"
18 static LIST_HEAD(mdio_board_list
);
19 static DEFINE_MUTEX(mdio_board_lock
);
22 * mdiobus_setup_mdiodev_from_board_info - create and setup MDIO devices
23 * from pre-collected board specific MDIO information
24 * @mdiodev: MDIO device pointer
27 void mdiobus_setup_mdiodev_from_board_info(struct mii_bus
*bus
,
30 struct mdio_board_info
*bi
))
32 struct mdio_board_entry
*be
;
33 struct mdio_board_info
*bi
;
36 mutex_lock(&mdio_board_lock
);
37 list_for_each_entry(be
, &mdio_board_list
, list
) {
40 if (strcmp(bus
->id
, bi
->bus_id
))
48 mutex_unlock(&mdio_board_lock
);
50 EXPORT_SYMBOL(mdiobus_setup_mdiodev_from_board_info
);
53 * mdio_register_board_info - register MDIO devices for a given board
54 * @info: array of devices descriptors
55 * @n: number of descriptors provided
58 * The board info passed can be marked with __initdata but be pointers
59 * such as platform_data etc. are copied as-is
61 int mdiobus_register_board_info(const struct mdio_board_info
*info
,
64 struct mdio_board_entry
*be
;
67 be
= kcalloc(n
, sizeof(*be
), GFP_KERNEL
);
71 for (i
= 0; i
< n
; i
++, be
++, info
++) {
72 memcpy(&be
->board_info
, info
, sizeof(*info
));
73 mutex_lock(&mdio_board_lock
);
74 list_add_tail(&be
->list
, &mdio_board_list
);
75 mutex_unlock(&mdio_board_lock
);
80 EXPORT_SYMBOL(mdiobus_register_board_info
);