linux/drivers/staging/board/board.c
<<
>>
Prefs
   1#include <linux/init.h>
   2#include <linux/device.h>
   3#include <linux/kernel.h>
   4#include <linux/of.h>
   5#include <linux/of_address.h>
   6#include "board.h"
   7
   8static bool find_by_address(u64 base_address)
   9{
  10        struct device_node *dn = of_find_all_nodes(NULL);
  11        struct resource res;
  12
  13        while (dn) {
  14                if (of_can_translate_address(dn)
  15                    && !of_address_to_resource(dn, 0, &res)) {
  16                        if (res.start == base_address) {
  17                                of_node_put(dn);
  18                                return true;
  19                        }
  20                }
  21                dn = of_find_all_nodes(dn);
  22        }
  23
  24        return false;
  25}
  26
  27bool __init board_staging_dt_node_available(const struct resource *resource,
  28                                            unsigned int num_resources)
  29{
  30        unsigned int i;
  31
  32        for (i = 0; i < num_resources; i++) {
  33                const struct resource *r = resource + i;
  34
  35                if (resource_type(r) == IORESOURCE_MEM)
  36                        if (find_by_address(r->start))
  37                                return true; /* DT node available */
  38        }
  39
  40        return false; /* Nothing found */
  41}
  42