Merge tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Dec 2014 21:06:58 +0000 (13:06 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Dec 2014 21:06:58 +0000 (13:06 -0800)
Pull devicetree changes from Grant Likely:
 "Lots of activity in the devicetree code for v3.18.  Most of it is
  related to getting all of the overlay support code in place, but there
  are other important things in there.

  Highlights:

   - OF_RECONFIG notifiers for SPI, I2C and Platform devices.  Those
     subsystems can now respond to live changes to the device tree.

   - CONFIG_OF_OVERLAY method for applying live changes to the device
     tree

   - Removal of the of_allnodes list.  This used to be used to iterate
     over all the nodes in the device tree, but it is unnecessary
     because the same thing can be done by iterating over the list of
     child pointers.  Getting rid of of_allnodes saves some memory and
     avoids the possibility of of_allnodes being sorted differently from
     the child lists.

   - Support for retrieving original DTB blob via sysfs.  Needed by
     kexec.

   - More unittests

   - Documentation and minor bug fixes"

* tag 'devicetree-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux: (42 commits)
  of: Delete unnecessary check before calling "of_node_put()"
  of: Drop ->next pointer from struct device_node
  spi: Check for spi_of_notifier when CONFIG_OF_DYNAMIC=y
  of: support passing console options with stdout-path
  of: add optional options parameter to of_find_node_by_path()
  of: Add bindings for chosen node, stdout-path
  of: Remove unneeded and incorrect MODULE_DEVICE_TABLE
  ARM: dt: fix up PL011 device tree bindings
  of: base, fix of_property_read_string_helper kernel-doc
  of: remove select of non-existant OF_DEVICE config symbol
  spi/of: Add OF notifier handler
  spi/of: Create new device registration method and accessors
  i2c/of: Add OF_RECONFIG notifier handler
  i2c/of: Factor out Devicetree registration code
  of/overlay: Add overlay unittests
  of/overlay: Introduce DT overlay support
  of/reconfig: Add OF_DYNAMIC notifier for platform_bus_type
  of/reconfig: Always use the same structure for notifiers
  of/reconfig: Add debug output for OF_RECONFIG notifiers
  of/reconfig: Add empty stubs for the of_reconfig methods
  ...

1  2 
drivers/i2c/i2c-core.c
drivers/of/base.c
drivers/of/fdt.c
drivers/spi/spi.c
include/linux/of.h

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -23,7 -23,7 +23,8 @@@
  #include <linux/spinlock.h>
  #include <linux/topology.h>
  #include <linux/notifier.h>
 +#include <linux/property.h>
+ #include <linux/list.h>
  
  #include <asm/byteorder.h>
  #include <asm/errno.h>
@@@ -108,27 -110,18 +113,27 @@@ static inline struct device_node *of_no
  static inline void of_node_put(struct device_node *node) { }
  #endif /* !CONFIG_OF_DYNAMIC */
  
 -#ifdef CONFIG_OF
 -
  /* Pointer for first entry in chain of all nodes. */
- extern struct device_node *of_allnodes;
+ extern struct device_node *of_root;
  extern struct device_node *of_chosen;
  extern struct device_node *of_aliases;
  extern struct device_node *of_stdout;
  extern raw_spinlock_t devtree_lock;
  
 +#ifdef CONFIG_OF
 +static inline bool is_of_node(struct fwnode_handle *fwnode)
 +{
 +      return fwnode && fwnode->type == FWNODE_OF;
 +}
 +
 +static inline struct device_node *of_node(struct fwnode_handle *fwnode)
 +{
 +      return fwnode ? container_of(fwnode, struct device_node, fwnode) : NULL;
 +}
 +
  static inline bool of_have_populated_dt(void)
  {
-       return of_allnodes != NULL;
+       return of_root != NULL;
  }
  
  static inline bool of_node_is_root(const struct device_node *node)
@@@ -955,15 -969,34 +1002,45 @@@ static inline int of_reconfig_get_state
  /* CONFIG_OF_RESOLVE api */
  extern int of_resolve_phandles(struct device_node *tree);
  
 +/**
 + * of_device_is_system_power_controller - Tells if system-power-controller is found for device_node
 + * @np: Pointer to the given device_node
 + *
 + * return true if present false otherwise
 + */
 +static inline bool of_device_is_system_power_controller(const struct device_node *np)
 +{
 +      return of_property_read_bool(np, "system-power-controller");
 +}
 +
+ /**
+  * Overlay support
+  */
+ #ifdef CONFIG_OF_OVERLAY
+ /* ID based overlays; the API for external users */
+ int of_overlay_create(struct device_node *tree);
+ int of_overlay_destroy(int id);
+ int of_overlay_destroy_all(void);
+ #else
+ static inline int of_overlay_create(struct device_node *tree)
+ {
+       return -ENOTSUPP;
+ }
+ static inline int of_overlay_destroy(int id)
+ {
+       return -ENOTSUPP;
+ }
+ static inline int of_overlay_destroy_all(void)
+ {
+       return -ENOTSUPP;
+ }
+ #endif
  #endif /* _LINUX_OF_H */