mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
Merge tag 'i2c-for-6.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c fixes from Wolfram Sang: "Biggest news is that Andi Shyti steps in for maintaining the controller drivers. Thank you very much! Other than that, one new driver maintainer and the rest is usual driver bugfixes. at24 has a Kconfig dependecy fix" * tag 'i2c-for-6.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: MAINTAINERS: Add entries for Renesas RZ/V2M I2C driver eeprom: at24: also select REGMAP i2c: sprd: Delete i2c adapter in .remove's error path i2c: mv64xxx: Fix reading invalid status value in atomic mode i2c: designware: fix idx_write_cnt in read loop i2c: mchp-pci1xxxx: Avoid cast to incompatible function type i2c: img-scb: Fix spelling mistake "innacurate" -> "inaccurate" MAINTAINERS: Add myself as I2C host drivers maintainer
This commit is contained in:
11
MAINTAINERS
11
MAINTAINERS
@@ -9696,8 +9696,9 @@ F: include/uapi/linux/i2c-*.h
|
||||
F: include/uapi/linux/i2c.h
|
||||
|
||||
I2C SUBSYSTEM HOST DRIVERS
|
||||
M: Andi Shyti <andi.shyti@kernel.org>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Odd Fixes
|
||||
S: Maintained
|
||||
W: https://i2c.wiki.kernel.org/
|
||||
Q: https://patchwork.ozlabs.org/project/linux-i2c/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
|
||||
@@ -18047,6 +18048,14 @@ S: Maintained
|
||||
F: Documentation/devicetree/bindings/usb/renesas,rzn1-usbf.yaml
|
||||
F: drivers/usb/gadget/udc/renesas_usbf.c
|
||||
|
||||
RENESAS RZ/V2M I2C DRIVER
|
||||
M: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
L: linux-renesas-soc@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/i2c/renesas,rzv2m.yaml
|
||||
F: drivers/i2c/busses/i2c-rzv2m.c
|
||||
|
||||
RENESAS USB PHY DRIVER
|
||||
M: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
|
||||
L: linux-renesas-soc@vger.kernel.org
|
||||
|
@@ -40,6 +40,7 @@
|
||||
#define DW_IC_CON_BUS_CLEAR_CTRL BIT(11)
|
||||
|
||||
#define DW_IC_DATA_CMD_DAT GENMASK(7, 0)
|
||||
#define DW_IC_DATA_CMD_FIRST_DATA_BYTE BIT(11)
|
||||
|
||||
/*
|
||||
* Registers offset
|
||||
|
@@ -176,6 +176,10 @@ static irqreturn_t i2c_dw_isr_slave(int this_irq, void *dev_id)
|
||||
|
||||
do {
|
||||
regmap_read(dev->map, DW_IC_DATA_CMD, &tmp);
|
||||
if (tmp & DW_IC_DATA_CMD_FIRST_DATA_BYTE)
|
||||
i2c_slave_event(dev->slave,
|
||||
I2C_SLAVE_WRITE_REQUESTED,
|
||||
&val);
|
||||
val = tmp;
|
||||
i2c_slave_event(dev->slave, I2C_SLAVE_WRITE_RECEIVED,
|
||||
&val);
|
||||
|
@@ -257,7 +257,7 @@
|
||||
#define IMG_I2C_TIMEOUT (msecs_to_jiffies(1000))
|
||||
|
||||
/*
|
||||
* Worst incs are 1 (innacurate) and 16*256 (irregular).
|
||||
* Worst incs are 1 (inaccurate) and 16*256 (irregular).
|
||||
* So a sensible inc is the logarithmic mean: 64 (2^6), which is
|
||||
* in the middle of the valid range (0-127).
|
||||
*/
|
||||
|
@@ -1118,8 +1118,10 @@ static int pci1xxxx_i2c_resume(struct device *dev)
|
||||
static DEFINE_SIMPLE_DEV_PM_OPS(pci1xxxx_i2c_pm_ops, pci1xxxx_i2c_suspend,
|
||||
pci1xxxx_i2c_resume);
|
||||
|
||||
static void pci1xxxx_i2c_shutdown(struct pci1xxxx_i2c *i2c)
|
||||
static void pci1xxxx_i2c_shutdown(void *data)
|
||||
{
|
||||
struct pci1xxxx_i2c *i2c = data;
|
||||
|
||||
pci1xxxx_i2c_config_padctrl(i2c, false);
|
||||
pci1xxxx_i2c_configure_core_reg(i2c, false);
|
||||
}
|
||||
@@ -1156,7 +1158,7 @@ static int pci1xxxx_i2c_probe_pci(struct pci_dev *pdev,
|
||||
init_completion(&i2c->i2c_xfer_done);
|
||||
pci1xxxx_i2c_init(i2c);
|
||||
|
||||
ret = devm_add_action(dev, (void (*)(void *))pci1xxxx_i2c_shutdown, i2c);
|
||||
ret = devm_add_action(dev, pci1xxxx_i2c_shutdown, i2c);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@@ -520,6 +520,17 @@ mv64xxx_i2c_intr(int irq, void *dev_id)
|
||||
|
||||
while (readl(drv_data->reg_base + drv_data->reg_offsets.control) &
|
||||
MV64XXX_I2C_REG_CONTROL_IFLG) {
|
||||
/*
|
||||
* It seems that sometime the controller updates the status
|
||||
* register only after it asserts IFLG in control register.
|
||||
* This may result in weird bugs when in atomic mode. A delay
|
||||
* of 100 ns before reading the status register solves this
|
||||
* issue. This bug does not seem to appear when using
|
||||
* interrupts.
|
||||
*/
|
||||
if (drv_data->atomic)
|
||||
ndelay(100);
|
||||
|
||||
status = readl(drv_data->reg_base + drv_data->reg_offsets.status);
|
||||
mv64xxx_i2c_fsm(drv_data, status);
|
||||
mv64xxx_i2c_do_action(drv_data);
|
||||
|
@@ -576,12 +576,14 @@ static int sprd_i2c_remove(struct platform_device *pdev)
|
||||
struct sprd_i2c *i2c_dev = platform_get_drvdata(pdev);
|
||||
int ret;
|
||||
|
||||
ret = pm_runtime_resume_and_get(i2c_dev->dev);
|
||||
ret = pm_runtime_get_sync(i2c_dev->dev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
dev_err(&pdev->dev, "Failed to resume device (%pe)\n", ERR_PTR(ret));
|
||||
|
||||
i2c_del_adapter(&i2c_dev->adap);
|
||||
clk_disable_unprepare(i2c_dev->clk);
|
||||
|
||||
if (ret >= 0)
|
||||
clk_disable_unprepare(i2c_dev->clk);
|
||||
|
||||
pm_runtime_put_noidle(i2c_dev->dev);
|
||||
pm_runtime_disable(i2c_dev->dev);
|
||||
|
@@ -6,6 +6,7 @@ config EEPROM_AT24
|
||||
depends on I2C && SYSFS
|
||||
select NVMEM
|
||||
select NVMEM_SYSFS
|
||||
select REGMAP
|
||||
select REGMAP_I2C
|
||||
help
|
||||
Enable this driver to get read/write support to most I2C EEPROMs
|
||||
|
Reference in New Issue
Block a user