Я нашел способ.Я объясняю это кратко, может быть, это может быть полезно.Метод, который мы могли бы использовать - device_find_child
.В качестве третьего параметра метод принимает указатель на функцию, которая реализует логику сравнения.Если функция возвращается не ноль при вызове с конкретным устройством в качестве первого параметра, device_find_child
вернет этот указатель.
#include <linux/device.h>
#include <linux/of_platform.h>
static int custom_match_dev(struct device *dev, void *data)
{
/* this function implements the comaparison logic. Return not zero if device
pointed by dev is the device you are searching for.
*/
}
static struct device *find_dev()
{
struct device *ofdev = bus_find_device_by_name(&of_platform_bus_type,
NULL, "OF_device_name");
if (ofdev)
{
/* of device is the parent of device we are interested in */
struct device *real_dev = device_find_child(ofdev,
NULL, /* passed in the second param to custom_match_dev */
custom_match_dev);
if (real_dev)
return real_dev;
}
return NULL;
}