mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
i2c: designware: add reset ctrl to driver
Add code to look for a reset manager property. Specifically, look for the reset-names of 'i2c'. A reset property is an optional feature, so only print out a warning and do not fail if a reset property is not present. If a reset property is discovered, then use it to deassert, thus bringing the IP out of reset. Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
This commit is contained in:
parent
449ff9c431
commit
622597dee4
1 changed files with 10 additions and 0 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <pci.h>
|
#include <pci.h>
|
||||||
|
#include <reset.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include "designware_i2c.h"
|
#include "designware_i2c.h"
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ static struct dw_scl_sda_cfg byt_config = {
|
||||||
struct dw_i2c {
|
struct dw_i2c {
|
||||||
struct i2c_regs *regs;
|
struct i2c_regs *regs;
|
||||||
struct dw_scl_sda_cfg *scl_sda_cfg;
|
struct dw_scl_sda_cfg *scl_sda_cfg;
|
||||||
|
struct reset_ctl reset_ctl;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_I2C_DW_ENABLE_STATUS_UNSUPPORTED
|
#ifdef CONFIG_SYS_I2C_DW_ENABLE_STATUS_UNSUPPORTED
|
||||||
|
@ -534,6 +536,7 @@ static int designware_i2c_probe_chip(struct udevice *bus, uint chip_addr,
|
||||||
static int designware_i2c_probe(struct udevice *bus)
|
static int designware_i2c_probe(struct udevice *bus)
|
||||||
{
|
{
|
||||||
struct dw_i2c *priv = dev_get_priv(bus);
|
struct dw_i2c *priv = dev_get_priv(bus);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (device_is_on_pci_bus(bus)) {
|
if (device_is_on_pci_bus(bus)) {
|
||||||
#ifdef CONFIG_DM_PCI
|
#ifdef CONFIG_DM_PCI
|
||||||
|
@ -549,6 +552,13 @@ static int designware_i2c_probe(struct udevice *bus)
|
||||||
priv->regs = (struct i2c_regs *)devfdt_get_addr_ptr(bus);
|
priv->regs = (struct i2c_regs *)devfdt_get_addr_ptr(bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = reset_get_by_name(bus, "i2c", &priv->reset_ctl);
|
||||||
|
if (ret)
|
||||||
|
pr_info("reset_get_by_name() failed: %d\n", ret);
|
||||||
|
|
||||||
|
if (&priv->reset_ctl)
|
||||||
|
reset_deassert(&priv->reset_ctl);
|
||||||
|
|
||||||
__dw_i2c_init(priv->regs, 0, 0);
|
__dw_i2c_init(priv->regs, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue