mirror of
https://xff.cz/git/u-boot/
synced 2025-09-30 15:01:27 +02:00
Merge tag 'i2c-bugfixes-for-v2020.10' of https://gitlab.denx.de/u-boot/custodians/u-boot-i2c
i2c bugfixes for v2020.10 - fix some issues with octeon_i2c driver on ARM Octeon TX2 - fix link failure with CONFIG_SPL and CONFIG_I2C_MUX_PCA954x
This commit is contained in:
@@ -46,4 +46,4 @@ obj-$(CONFIG_SYS_I2C_VERSATILE) += i2c-versatile.o
|
|||||||
obj-$(CONFIG_SYS_I2C_XILINX_XIIC) += xilinx_xiic.o
|
obj-$(CONFIG_SYS_I2C_XILINX_XIIC) += xilinx_xiic.o
|
||||||
obj-$(CONFIG_TEGRA186_BPMP_I2C) += tegra186_bpmp_i2c.o
|
obj-$(CONFIG_TEGRA186_BPMP_I2C) += tegra186_bpmp_i2c.o
|
||||||
|
|
||||||
obj-$(CONFIG_I2C_MUX) += muxes/
|
obj-$(CONFIG_$(SPL_)I2C_MUX) += muxes/
|
||||||
|
@@ -2,6 +2,6 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015 Google, Inc
|
# Copyright (c) 2015 Google, Inc
|
||||||
obj-$(CONFIG_I2C_ARB_GPIO_CHALLENGE) += i2c-arb-gpio-challenge.o
|
obj-$(CONFIG_I2C_ARB_GPIO_CHALLENGE) += i2c-arb-gpio-challenge.o
|
||||||
obj-$(CONFIG_$(SPL_)I2C_MUX) += i2c-mux-uclass.o
|
obj-$(CONFIG_I2C_MUX) += i2c-mux-uclass.o
|
||||||
obj-$(CONFIG_I2C_MUX_PCA954x) += pca954x.o
|
obj-$(CONFIG_I2C_MUX_PCA954x) += pca954x.o
|
||||||
obj-$(CONFIG_I2C_MUX_GPIO) += i2c-mux-gpio.o
|
obj-$(CONFIG_I2C_MUX_GPIO) += i2c-mux-gpio.o
|
||||||
|
@@ -3,11 +3,10 @@
|
|||||||
* Copyright (C) 2018 Marvell International Ltd.
|
* Copyright (C) 2018 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <clk.h>
|
#include <clk.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <pci_ids.h>
|
#include <time.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <linux/bitfield.h>
|
#include <linux/bitfield.h>
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
@@ -749,6 +748,27 @@ static int octeon_i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct octeon_i2c_data i2c_octeon_data = {
|
||||||
|
.probe = PROBE_DT,
|
||||||
|
.reg_offs = 0x0000,
|
||||||
|
.thp = 3,
|
||||||
|
.clk_method = CLK_METHOD_OCTEON,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct octeon_i2c_data i2c_octeontx_data = {
|
||||||
|
.probe = PROBE_PCI,
|
||||||
|
.reg_offs = 0x1000,
|
||||||
|
.thp = 24,
|
||||||
|
.clk_method = CLK_METHOD_OCTEON,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct octeon_i2c_data i2c_octeontx2_data = {
|
||||||
|
.probe = PROBE_PCI,
|
||||||
|
.reg_offs = 0x1000,
|
||||||
|
.thp = 3,
|
||||||
|
.clk_method = CLK_METHOD_OCTEONTX2,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Driver probe function
|
* Driver probe function
|
||||||
*
|
*
|
||||||
@@ -761,6 +781,10 @@ static int octeon_i2c_probe(struct udevice *dev)
|
|||||||
u32 i2c_slave_addr;
|
u32 i2c_slave_addr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/* Octeon TX2 needs a different data struct */
|
||||||
|
if (device_is_compatible(dev, "cavium,thunderx-i2c"))
|
||||||
|
dev->driver_data = (long)&i2c_octeontx2_data;
|
||||||
|
|
||||||
twsi->data = (const struct octeon_i2c_data *)dev_get_driver_data(dev);
|
twsi->data = (const struct octeon_i2c_data *)dev_get_driver_data(dev);
|
||||||
|
|
||||||
if (twsi->data->probe == PROBE_PCI) {
|
if (twsi->data->probe == PROBE_PCI) {
|
||||||
@@ -798,34 +822,11 @@ static const struct dm_i2c_ops octeon_i2c_ops = {
|
|||||||
.set_bus_speed = octeon_i2c_set_bus_speed,
|
.set_bus_speed = octeon_i2c_set_bus_speed,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct octeon_i2c_data i2c_octeon_data = {
|
|
||||||
.probe = PROBE_DT,
|
|
||||||
.reg_offs = 0x0000,
|
|
||||||
.thp = 3,
|
|
||||||
.clk_method = CLK_METHOD_OCTEON,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct octeon_i2c_data i2c_octeontx_data = {
|
|
||||||
.probe = PROBE_PCI,
|
|
||||||
.reg_offs = 0x8000,
|
|
||||||
.thp = 3,
|
|
||||||
.clk_method = CLK_METHOD_OCTEON,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct octeon_i2c_data i2c_octeontx2_data = {
|
|
||||||
.probe = PROBE_PCI,
|
|
||||||
.reg_offs = 0x8000,
|
|
||||||
.thp = 24,
|
|
||||||
.clk_method = CLK_METHOD_OCTEONTX2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct udevice_id octeon_i2c_ids[] = {
|
static const struct udevice_id octeon_i2c_ids[] = {
|
||||||
{ .compatible = "cavium,octeon-7890-twsi",
|
{ .compatible = "cavium,octeon-7890-twsi",
|
||||||
.data = (ulong)&i2c_octeon_data },
|
.data = (ulong)&i2c_octeon_data },
|
||||||
{ .compatible = "cavium,thunder-8890-twsi",
|
{ .compatible = "cavium,thunder-8890-twsi",
|
||||||
.data = (ulong)&i2c_octeontx_data },
|
.data = (ulong)&i2c_octeontx_data },
|
||||||
{ .compatible = "cavium,thunder2-99xx-twsi",
|
|
||||||
.data = (ulong)&i2c_octeontx2_data },
|
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -837,11 +838,3 @@ U_BOOT_DRIVER(octeon_pci_twsi) = {
|
|||||||
.priv_auto_alloc_size = sizeof(struct octeon_twsi),
|
.priv_auto_alloc_size = sizeof(struct octeon_twsi),
|
||||||
.ops = &octeon_i2c_ops,
|
.ops = &octeon_i2c_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_device_id octeon_twsi_supported[] = {
|
|
||||||
{ PCI_VDEVICE(CAVIUM, PCI_DEVICE_ID_CAVIUM_TWSI),
|
|
||||||
.driver_data = (ulong)&i2c_octeontx2_data },
|
|
||||||
{ },
|
|
||||||
};
|
|
||||||
|
|
||||||
U_BOOT_PCI_DEVICE(octeon_pci_twsi, octeon_twsi_supported);
|
|
||||||
|
Reference in New Issue
Block a user