mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
i2c: designware_i2c: Check if the device is powered
If the device doesn't return a version that means the device is non-functional. The dw_i2c_regs had invalid offsets for the version field. I got the correct value from the DesignWare databook. It also matches what the Picasso PPR says. Signed-off-by: Raul E Rangel <rrangel@chromium.org> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Furquan Shaikh <furquan@chromium.org> Tested on chromebook_coral: Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
bcf08503f5
commit
f6f9a01689
1 changed files with 17 additions and 0 deletions
|
@ -18,6 +18,12 @@
|
|||
#include <dm/device_compat.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
/*
|
||||
* This assigned unique hex value is constant and is derived from the two ASCII
|
||||
* letters 'DW' followed by a 16-bit unsigned number
|
||||
*/
|
||||
#define DW_I2C_COMP_TYPE 0x44570140
|
||||
|
||||
#ifdef CONFIG_SYS_I2C_DW_ENABLE_STATUS_UNSUPPORTED
|
||||
static int dw_i2c_enable(struct i2c_regs *i2c_base, bool enable)
|
||||
{
|
||||
|
@ -766,6 +772,17 @@ int designware_i2c_ofdata_to_platdata(struct udevice *bus)
|
|||
int designware_i2c_probe(struct udevice *bus)
|
||||
{
|
||||
struct dw_i2c *priv = dev_get_priv(bus);
|
||||
uint comp_type;
|
||||
|
||||
comp_type = readl(&priv->regs->comp_type);
|
||||
if (comp_type != DW_I2C_COMP_TYPE) {
|
||||
log_err("I2C bus %s has unknown type %#x\n", bus->name,
|
||||
comp_type);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
log_info("I2C bus %s version %#x\n", bus->name,
|
||||
readl(&priv->regs->comp_version));
|
||||
|
||||
return __dw_i2c_init(priv->regs, 0, 0);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue