Merge branch 'u-boot-samsung/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 4 Apr 2013 13:44:57 +0000 (15:44 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 4 Apr 2013 13:44:57 +0000 (15:44 +0200)
1  2 
drivers/spi/exynos_spi.c
include/fdtdec.h
lib/fdtdec.c

diff --combined drivers/spi/exynos_spi.c
index 51b3d30538aefccda2860ec92f49beb45b3e864d,2260d59c05e0d56a7f817f4feb5d22bbbdeccc0e..607e1cdec2f9dc774693b6a23ecfe05f14aef06d
@@@ -89,13 -89,15 +89,13 @@@ struct spi_slave *spi_setup_slave(unsig
                return NULL;
        }
  
 -      spi_slave = malloc(sizeof(*spi_slave));
 +      spi_slave = spi_alloc_slave(struct exynos_spi_slave, busnum, cs);
        if (!spi_slave) {
                debug("%s: Could not allocate spi_slave\n", __func__);
                return NULL;
        }
  
        bus = &spi_bus[busnum];
 -      spi_slave->slave.bus = busnum;
 -      spi_slave->slave.cs = cs;
        spi_slave->regs = bus->regs;
        spi_slave->mode = mode;
        spi_slave->periph_id = bus->periph_id;
@@@ -358,6 -360,7 +358,7 @@@ static inline struct exynos_spi *get_sp
   * @param bus   SPI bus structure to fill with information
   * @return 0 if ok, or -FDT_ERR_NOTFOUND if something was missing
   */
+ #ifdef CONFIG_OF_CONTROL
  static int spi_get_config(const void *blob, int node, struct spi_bus *bus)
  {
        bus->node = node;
@@@ -413,6 -416,7 +414,7 @@@ static int process_nodes(const void *bl
  
        return 0;
  }
+ #endif
  
  /* Sadly there is no error return from this function */
  void spi_init(void)
diff --combined include/fdtdec.h
index e7e3ff9e0384f10157a671ff36ee153654ae34bf,a83b1608b6f2be99bda67aff0f318713e5397d0d..844991ec4e6a2d479eff40936495a97695511664
   */
  #ifdef CONFIG_PHYS_64BIT
  typedef u64 fdt_addr_t;
 +typedef u64 fdt_size_t;
  #define FDT_ADDR_T_NONE (-1ULL)
  #define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
  #define fdt_size_to_cpu(reg) be64_to_cpu(reg)
  #else
  typedef u32 fdt_addr_t;
 +typedef u32 fdt_size_t;
  #define FDT_ADDR_T_NONE (-1U)
  #define fdt_addr_to_cpu(reg) be32_to_cpu(reg)
  #define fdt_size_to_cpu(reg) be32_to_cpu(reg)
@@@ -87,8 -85,9 +87,10 @@@ enum fdt_compat_id 
        COMPAT_SAMSUNG_EXYNOS_EHCI,     /* Exynos EHCI controller */
        COMPAT_SAMSUNG_EXYNOS_USB_PHY,  /* Exynos phy controller for usb2.0 */
        COMPAT_SAMSUNG_EXYNOS_TMU,      /* Exynos TMU */
+       COMPAT_SAMSUNG_EXYNOS_FIMD,     /* Exynos Display controller */
+       COMPAT_SAMSUNG_EXYNOS5_DP,      /* Exynos Display port controller */
        COMPAT_MAXIM_MAX77686_PMIC,     /* MAX77686 PMIC */
 +      COMPAT_GENERIC_SPI_FLASH,       /* Generic SPI Flash chip */
        COMPAT_MAXIM_98095_CODEC,       /* MAX98095 Codec */
  
        COMPAT_COUNT,
@@@ -205,19 -204,6 +207,19 @@@ int fdtdec_next_compatible_subnode(cons
  fdt_addr_t fdtdec_get_addr(const void *blob, int node,
                const char *prop_name);
  
 +/**
 + * Look up an address property in a node and return it as an address.
 + * The property must hold one address with a length. This is only tested
 + * on 32-bit machines.
 + *
 + * @param blob        FDT blob
 + * @param node        node to examine
 + * @param prop_name   name of property to find
 + * @return address, if found, or FDT_ADDR_T_NONE if not
 + */
 +fdt_addr_t fdtdec_get_addr_size(const void *blob, int node,
 +              const char *prop_name, fdt_size_t *sizep);
 +
  /**
   * Look up a 32-bit integer property in a node and return it. The property
   * must have at least 4 bytes of data. The value of the first cell is
diff --combined lib/fdtdec.c
index e17dd001ca2a0c6b578c88ce76c90251e89ea0d3,0f34bdcf580a606f6ad2cf3ca9c176d21b3545ab..403babd3124cb8f8b8539a6254d9ff6dd0df1672
@@@ -60,8 -60,9 +60,10 @@@ static const char * const compat_names[
        COMPAT(SAMSUNG_EXYNOS_EHCI, "samsung,exynos-ehci"),
        COMPAT(SAMSUNG_EXYNOS_USB_PHY, "samsung,exynos-usb-phy"),
        COMPAT(SAMSUNG_EXYNOS_TMU, "samsung,exynos-tmu"),
+       COMPAT(SAMSUNG_EXYNOS_FIMD, "samsung,exynos-fimd"),
+       COMPAT(SAMSUNG_EXYNOS5_DP, "samsung,exynos5-dp"),
        COMPAT(MAXIM_MAX77686_PMIC, "maxim,max77686_pmic"),
 +      COMPAT(GENERIC_SPI_FLASH, "spi-flash"),
        COMPAT(MAXIM_98095_CODEC, "maxim,max98095-codec"),
  };
  
@@@ -72,40 -73,25 +74,40 @@@ const char *fdtdec_get_compatible(enum 
        return compat_names[id];
  }
  
 -fdt_addr_t fdtdec_get_addr(const void *blob, int node,
 -              const char *prop_name)
 +fdt_addr_t fdtdec_get_addr_size(const void *blob, int node,
 +              const char *prop_name, fdt_size_t *sizep)
  {
        const fdt_addr_t *cell;
        int len;
  
        debug("%s: %s: ", __func__, prop_name);
        cell = fdt_getprop(blob, node, prop_name, &len);
 -      if (cell && (len == sizeof(fdt_addr_t) ||
 -                      len == sizeof(fdt_addr_t) * 2)) {
 +      if (cell && ((!sizep && len == sizeof(fdt_addr_t)) ||
 +                   len == sizeof(fdt_addr_t) * 2)) {
                fdt_addr_t addr = fdt_addr_to_cpu(*cell);
 +              if (sizep) {
 +                      const fdt_size_t *size;
  
 -              debug("%p\n", (void *)addr);
 +                      size = (fdt_size_t *)((char *)cell +
 +                                      sizeof(fdt_addr_t));
 +                      *sizep = fdt_size_to_cpu(*size);
 +                      debug("addr=%p, size=%p\n", (void *)addr,
 +                            (void *)*sizep);
 +              } else {
 +                      debug("%p\n", (void *)addr);
 +              }
                return addr;
        }
        debug("(not found)\n");
        return FDT_ADDR_T_NONE;
  }
  
 +fdt_addr_t fdtdec_get_addr(const void *blob, int node,
 +              const char *prop_name)
 +{
 +      return fdtdec_get_addr_size(blob, node, prop_name, NULL);
 +}
 +
  s32 fdtdec_get_int(const void *blob, int node, const char *prop_name,
                s32 default_val)
  {