MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / spi_bus_scan_devices

Function spi_bus_scan_devices

components/drivers/spi/dev_spi_bus.c:21–76  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19static struct rt_bus spi_bus;
20
21void spi_bus_scan_devices(struct rt_spi_bus *bus)
22{
23#ifdef RT_USING_OFW
24 if (bus->parent.ofw_node)
25 {
26 struct rt_ofw_node *np = bus->parent.ofw_node, *spi_dev_np;
27
28 rt_ofw_foreach_available_child_node(np, spi_dev_np)
29 {
30 struct rt_spi_device *spi_dev;
31
32 if (!rt_ofw_prop_read_bool(spi_dev_np, "compatible"))
33 {
34 continue;
35 }
36
37 if ((bus->mode & RT_SPI_BUS_MODE_SPI) == RT_SPI_BUS_MODE_SPI)
38 {
39 spi_dev = rt_calloc(1, sizeof(struct rt_spi_device));
40 }
41 else if ((bus->mode & RT_SPI_BUS_MODE_QSPI) == RT_SPI_BUS_MODE_QSPI)
42 {
43 spi_dev = rt_calloc(1, sizeof(struct rt_qspi_device));
44 }
45 else
46 {
47 LOG_E("Unknown bus mode = %x", bus->mode);
48 RT_ASSERT(0);
49 }
50
51 if (!spi_dev)
52 {
53 rt_ofw_node_put(spi_dev_np);
54 LOG_E("Not memory to create spi device: %s",
55 rt_ofw_node_full_name(spi_dev_np));
56
57 return;
58 }
59
60 spi_dev->parent.ofw_node = spi_dev_np;
61 spi_dev->parent.type = RT_Device_Class_Unknown;
62 spi_dev->name = rt_ofw_node_name(spi_dev_np);
63 spi_dev->bus = bus;
64
65 rt_dm_dev_set_name(&spi_dev->parent, rt_ofw_node_full_name(spi_dev_np));
66
67 if (spi_device_ofw_parse(spi_dev))
68 {
69 continue;
70 }
71
72 rt_spi_device_register(spi_dev);
73 }
74 }
75#endif /* RT_USING_OFW */
76}
77
78rt_err_t rt_spi_driver_register(struct rt_spi_driver *driver)

Callers 1

spi_bus_registerFunction · 0.85

Calls 8

rt_ofw_prop_read_boolFunction · 0.85
rt_callocFunction · 0.85
rt_ofw_node_putFunction · 0.85
rt_ofw_node_full_nameFunction · 0.85
rt_ofw_node_nameFunction · 0.85
rt_dm_dev_set_nameFunction · 0.85
rt_spi_device_registerFunction · 0.85
spi_device_ofw_parseFunction · 0.70

Tested by

no test coverage detected