Blame view

include/linux/of_platform.h 3.63 KB
b41912ca3   Stephen Rothwell   Create linux/of_p...
1
2
3
4
5
6
7
8
9
10
11
12
  #ifndef _LINUX_OF_PLATFORM_H
  #define _LINUX_OF_PLATFORM_H
  /*
   *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp.
   *			 <benh@kernel.crashing.org>
   *
   *  This program is free software; you can redistribute it and/or
   *  modify it under the terms of the GNU General Public License
   *  as published by the Free Software Foundation; either version
   *  2 of the License, or (at your option) any later version.
   *
   */
b41912ca3   Stephen Rothwell   Create linux/of_p...
13
14
15
16
  #include <linux/device.h>
  #include <linux/mod_devicetable.h>
  #include <linux/pm.h>
  #include <linux/of_device.h>
eca393016   Grant Likely   of: Merge of_plat...
17
  #include <linux/platform_device.h>
b41912ca3   Stephen Rothwell   Create linux/of_p...
18

2dc115813   Grant Likely   of/device: Replac...
19
  /**
15c3597d6   Grant Likely   dt/platform: allo...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
   * struct of_dev_auxdata - lookup table entry for device names & platform_data
   * @compatible: compatible value of node to match against node
   * @phys_addr: Start address of registers to match against node
   * @name: Name to assign for matching nodes
   * @platform_data: platform_data to assign for matching nodes
   *
   * This lookup table allows the caller of of_platform_populate() to override
   * the names of devices when creating devices from the device tree.  The table
   * should be terminated with an empty entry.  It also allows the platform_data
   * pointer to be set.
   *
   * The reason for this functionality is that some Linux infrastructure uses
   * the device name to look up a specific device, but the Linux-specific names
   * are not encoded into the device tree, so the kernel needs to provide specific
   * values.
   *
   * Note: Using an auxdata lookup table should be considered a last resort when
   * converting a platform to use the DT.  Normally the automatically generated
   * device name will not matter, and drivers should obtain data from the device
8c1eb2532   Geert Uytterhoeven   of: Spelling s/an...
39
   * node instead of from an anonymous platform_data pointer.
15c3597d6   Grant Likely   dt/platform: allo...
40
41
42
43
44
45
46
47
48
49
50
51
   */
  struct of_dev_auxdata {
  	char *compatible;
  	resource_size_t phys_addr;
  	char *name;
  	void *platform_data;
  };
  
  /* Macro to simplify populating a lookup table */
  #define OF_DEV_AUXDATA(_compat,_phys,_name,_pdata) \
  	{ .compatible = _compat, .phys_addr = _phys, .name = _name, \
  	  .platform_data = _pdata }
cbb49c266   Grant Likely   dt: Add default m...
52
  extern const struct of_device_id of_default_bus_match_table[];
0763ed235   Grant Likely   of: make of_(un)r...
53
  /* Platform drivers register/unregister */
94a0cb1fc   Grant Likely   of/device: Replac...
54
  extern struct platform_device *of_device_alloc(struct device_node *np,
94c093198   Grant Likely   of: Merge of_devi...
55
56
  					 const char *bus_id,
  					 struct device *parent);
94a0cb1fc   Grant Likely   of/device: Replac...
57
  extern struct platform_device *of_find_device_by_node(struct device_node *np);
b41912ca3   Stephen Rothwell   Create linux/of_p...
58

5fd200f3b   Grant Likely   of/device: Merge ...
59
  /* Platform devices and busses creation */
94a0cb1fc   Grant Likely   of/device: Replac...
60
  extern struct platform_device *of_platform_device_create(struct device_node *np,
5fd200f3b   Grant Likely   of/device: Merge ...
61
62
  						   const char *bus_id,
  						   struct device *parent);
5fd200f3b   Grant Likely   of/device: Merge ...
63
64
65
  extern int of_platform_bus_probe(struct device_node *root,
  				 const struct of_device_id *matches,
  				 struct device *parent);
8a46f4f7f   Arnd Bergmann   of: remove #ifdef...
66
  #ifdef CONFIG_OF_ADDRESS
29d4f8a49   Grant Likely   dt: add of_platfo...
67
68
  extern int of_platform_populate(struct device_node *root,
  				const struct of_device_id *matches,
15c3597d6   Grant Likely   dt/platform: allo...
69
  				const struct of_dev_auxdata *lookup,
29d4f8a49   Grant Likely   dt: add of_platfo...
70
  				struct device *parent);
43443ad69   Hauke Mehrtens   of/platform: add ...
71
72
73
  extern int of_platform_default_populate(struct device_node *root,
  					const struct of_dev_auxdata *lookup,
  					struct device *parent);
75f353b61   Grant Likely   of/platform: Fix ...
74
  extern void of_platform_depopulate(struct device *parent);
8a46f4f7f   Arnd Bergmann   of: remove #ifdef...
75
  #else
964dba283   Grant Likely   devicetree: Add e...
76
77
78
79
80
81
82
  static inline int of_platform_populate(struct device_node *root,
  					const struct of_device_id *matches,
  					const struct of_dev_auxdata *lookup,
  					struct device *parent)
  {
  	return -ENODEV;
  }
43443ad69   Hauke Mehrtens   of/platform: add ...
83
84
85
86
87
88
  static inline int of_platform_default_populate(struct device_node *root,
  					       const struct of_dev_auxdata *lookup,
  					       struct device *parent)
  {
  	return -ENODEV;
  }
75f353b61   Grant Likely   of/platform: Fix ...
89
  static inline void of_platform_depopulate(struct device *parent) { }
8a46f4f7f   Arnd Bergmann   of: remove #ifdef...
90
  #endif
5fd200f3b   Grant Likely   of/device: Merge ...
91

a697c2efb   Guenter Roeck   of/platform: Fix ...
92
  #if defined(CONFIG_OF_DYNAMIC) && defined(CONFIG_OF_ADDRESS)
801d728c1   Pantelis Antoniou   of/reconfig: Add ...
93
94
95
96
  extern void of_platform_register_reconfig_notifier(void);
  #else
  static inline void of_platform_register_reconfig_notifier(void) { }
  #endif
b41912ca3   Stephen Rothwell   Create linux/of_p...
97
  #endif	/* _LINUX_OF_PLATFORM_H */