mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
i2c: uniphier: use devm_get_addr() to get base address
Currently, fdtdec_get_addr_size() does not support the address translation, so it cannot handle device trees with non-straight "ranges" properties. (This would be a problem with DTS for UniPhier ARMv8 SoCs.) Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
parent
45a3b1fd6c
commit
336399fb63
2 changed files with 10 additions and 13 deletions
|
@ -7,6 +7,7 @@
|
|||
#include <common.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/errno.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/root.h>
|
||||
|
@ -14,8 +15,6 @@
|
|||
#include <fdtdec.h>
|
||||
#include <mapmem.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct uniphier_fi2c_regs {
|
||||
u32 cr; /* control register */
|
||||
#define I2C_CR_MST (1 << 3) /* master mode */
|
||||
|
@ -112,15 +111,14 @@ static int check_device_busy(struct uniphier_fi2c_regs __iomem *regs)
|
|||
static int uniphier_fi2c_probe(struct udevice *dev)
|
||||
{
|
||||
fdt_addr_t addr;
|
||||
fdt_size_t size;
|
||||
struct uniphier_fi2c_dev *priv = dev_get_priv(dev);
|
||||
int ret;
|
||||
|
||||
addr = fdtdec_get_addr_size(gd->fdt_blob, dev->of_offset, "reg",
|
||||
&size);
|
||||
|
||||
priv->regs = map_sysmem(addr, size);
|
||||
addr = dev_get_addr(dev);
|
||||
if (addr == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
priv->regs = map_sysmem(addr, SZ_128);
|
||||
if (!priv->regs)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <common.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/errno.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/root.h>
|
||||
|
@ -14,8 +15,6 @@
|
|||
#include <fdtdec.h>
|
||||
#include <mapmem.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct uniphier_i2c_regs {
|
||||
u32 dtrm; /* data transmission */
|
||||
#define I2C_DTRM_STA (1 << 10)
|
||||
|
@ -48,13 +47,13 @@ struct uniphier_i2c_dev {
|
|||
static int uniphier_i2c_probe(struct udevice *dev)
|
||||
{
|
||||
fdt_addr_t addr;
|
||||
fdt_size_t size;
|
||||
struct uniphier_i2c_dev *priv = dev_get_priv(dev);
|
||||
|
||||
addr = fdtdec_get_addr_size(gd->fdt_blob, dev->of_offset, "reg", &size);
|
||||
|
||||
priv->regs = map_sysmem(addr, size);
|
||||
addr = dev_get_addr(dev);
|
||||
if (addr == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
priv->regs = map_sysmem(addr, SZ_64);
|
||||
if (!priv->regs)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
Loading…
Reference in a new issue