android_kernel_xiaomi_sm8350/drivers/i2c/busses
Lars-Peter Clausen 6d9f3128c0 i2c: cadence: Support PEC for SMBus block read
[ Upstream commit 9fdf6d97f03035ad5298e2d1635036c74c2090ed ]

SMBus packet error checking (PEC) is implemented by appending one
additional byte of checksum data at the end of the message. This provides
additional protection and allows to detect data corruption on the I2C bus.

SMBus block reads support variable length reads. The first byte in the read
message is the number of available data bytes.

The combination of PEC and block read is currently not supported by the
Cadence I2C driver.
 * When PEC is enabled the maximum transfer length for block reads
   increases from 33 to 34 bytes.
 * The I2C core smbus emulation layer relies on the driver updating the
   `i2c_msg` `len` field with the number of received bytes. The updated
   length is used when checking the PEC.

Add support to the Cadence I2C driver for handling SMBus block reads with
PEC. To determine the maximum transfer length uses the initial `len` value
of the `i2c_msg`. When PEC is enabled this will be 2, when it is disabled
it will be 1.

Once a read transfer is done also increment the `len` field by the amount
of received data bytes.

This change has been tested with a UCM90320 PMBus power monitor, which
requires block reads to access certain data fields, but also has PEC
enabled by default.

Fixes: df8eb5691c ("i2c: Add driver for Cadence I2C controller")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Shubhrajyoti Datta <Shubhrajyoti.datta@amd.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-08-25 11:17:47 +02:00
..
i2c-acorn.c
i2c-ali15x3.c
i2c-ali1535.c
i2c-ali1563.c
i2c-altera.c
i2c-amd756-s4882.c
i2c-amd756.c
i2c-amd8111.c
i2c-amd-mp2-pci.c
i2c-amd-mp2-plat.c
i2c-amd-mp2.h
i2c-aspeed.c
i2c-at91-core.c
i2c-at91-master.c i2c: at91: Initialize dma_buf in at91_twi_xfer() 2022-06-14 18:11:43 +02:00
i2c-at91-slave.c
i2c-at91.h
i2c-au1550.c
i2c-axxia.c
i2c-bcm2835.c i2c: bcm2835: Avoid clock stretching timeouts 2022-03-08 19:07:45 +01:00
i2c-bcm-iproc.c i2c: iproc: handle master read request 2021-03-04 10:26:27 +01:00
i2c-bcm-kona.c
i2c-brcmstb.c i2c: brcmstb: fix support for DSL and CM variants 2022-02-23 12:00:00 +01:00
i2c-cadence.c i2c: cadence: Support PEC for SMBus block read 2022-08-25 11:17:47 +02:00
i2c-cbus-gpio.c i2c: cbus-gpio: set atomic transfer callback 2021-12-08 09:01:11 +01:00
i2c-cht-wc.c
i2c-cpm.c
i2c-cros-ec-tunnel.c
i2c-davinci.c
i2c-designware-baytrail.c
i2c-designware-common.c i2c: designware: Use standard optional ref clock implementation 2022-06-22 14:11:22 +02:00
i2c-designware-core.h
i2c-designware-master.c
i2c-designware-pcidrv.c i2c: designware-pci: Fix to change data types of hcnt and lcnt parameters 2022-01-27 09:19:48 +01:00
i2c-designware-platdrv.c i2c: designware: Use standard optional ref clock implementation 2022-06-22 14:11:22 +02:00
i2c-designware-slave.c
i2c-digicolor.c
i2c-diolan-u2c.c
i2c-dln2.c
i2c-efm32.c
i2c-eg20t.c
i2c-elektor.c
i2c-emev2.c i2c: emev2: add IRQ check 2021-05-14 09:44:29 +02:00
i2c-exynos5.c
i2c-fsi.c
i2c-gpio.c
i2c-highlander.c i2c: highlander: add IRQ check 2021-09-15 09:47:32 +02:00
i2c-hix5hd2.c
i2c-hydra.c
i2c-i801.c i2c: i801: Don't silently correct invalid transfer size 2022-01-27 09:19:47 +01:00
i2c-ibm_iic.c
i2c-ibm_iic.h
i2c-icy.c
i2c-img-scb.c i2c: img-scb: fix reference leak when pm_runtime_get_sync fails 2021-05-14 09:44:29 +02:00
i2c-imx-lpi2c.c i2c: imx-lpi2c: fix reference leak when pm_runtime_get_sync fails 2021-05-14 09:44:29 +02:00
i2c-imx.c i2c: imx: Check for I2SR_IAL after every byte 2020-12-11 13:23:31 +01:00
i2c-iop3xx.c i2c: iop3xx: fix deferred probing 2021-09-15 09:47:35 +02:00
i2c-iop3xx.h
i2c-isch.c
i2c-ismt.c i2c: ismt: Provide a DMA buffer for Interrupt Cause Logging 2022-06-06 08:33:49 +02:00
i2c-jz4780.c i2c: jz4780: add IRQ check 2021-05-14 09:44:29 +02:00
i2c-kempld.c
i2c-lpc2k.c
i2c-meson.c
i2c-mlxcpld.c
i2c-mpc.c i2c: mpc: Correct I2C reset procedure 2022-01-27 09:19:47 +01:00
i2c-mt65xx.c i2c: mt65xx: fix IRQ check 2021-09-15 09:47:36 +02:00
i2c-mt7621.c i2c: mt7621: fix missing clk_disable_unprepare() on error in mtk_i2c_probe() 2022-05-25 09:14:38 +02:00
i2c-mv64xxx.c
i2c-mxs.c
i2c-nforce2-s4985.c
i2c-nforce2.c
i2c-nomadik.c
i2c-nvidia-gpu.c
i2c-ocores.c
i2c-octeon-core.c i2c: octeon: check correct size of maximum RECV_LEN packet 2021-01-27 11:47:47 +01:00
i2c-octeon-core.h
i2c-octeon-platdrv.c
i2c-omap.c i2c: omap: fix reference leak when pm_runtime_get_sync fails 2021-05-14 09:44:29 +02:00
i2c-opal.c
i2c-owl.c
i2c-parport-light.c
i2c-parport.c
i2c-parport.h
i2c-pasemi.c i2c: pasemi: Wait for write xfers to finish 2022-04-20 09:19:39 +02:00
i2c-pca-isa.c
i2c-pca-platform.c
i2c-piix4.c
i2c-pmcmsp.c
i2c-pnx.c
i2c-powermac.c
i2c-puv3.c
i2c-pxa-pci.c
i2c-pxa.c
i2c-qcom-geni.c i2c: qcom-geni: Suspend and resume the bus during SYSTEM_SLEEP_PM ops 2021-06-10 13:37:16 +02:00
i2c-qup.c i2c: qup: Fix error return code in qup_i2c_bam_schedule_desc() 2020-12-11 13:23:33 +01:00
i2c-rcar.c i2c: rcar: optimize cacheline to minimize HW race condition 2021-03-17 17:03:41 +01:00
i2c-riic.c
i2c-rk3x.c i2c: rk3x: Handle a spurious start completion interrupt flag 2021-12-17 10:12:23 +01:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: fix control-request directions 2021-06-30 08:47:50 -04:00
i2c-s3c2410.c i2c: s3c2410: fix IRQ check 2021-09-15 09:47:35 +02:00
i2c-scmi.c
i2c-sh7760.c i2c: sh7760: fix IRQ error path 2021-05-14 09:44:30 +02:00
i2c-sh_mobile.c i2c: sh_mobile: Use new clock calculation formulas for RZ/G2E 2021-06-03 08:59:08 +02:00
i2c-sibyte.c
i2c-simtec.c
i2c-sirf.c
i2c-sis96x.c
i2c-sis630.c
i2c-sis5595.c
i2c-sprd.c i2c: sprd: fix reference leak when pm_runtime_get_sync fails 2021-05-14 09:44:29 +02:00
i2c-st.c
i2c-stm32.c
i2c-stm32.h
i2c-stm32f4.c
i2c-stm32f7.c i2c: stm32f7: stop dma transfer in case of NACK 2021-12-08 09:01:11 +01:00
i2c-stu300.c
i2c-sun6i-p2wi.c
i2c-synquacer.c
i2c-taos-evm.c
i2c-tegra-bpmp.c i2c: bpmp-tegra: Ignore unknown I2C_M flags 2021-01-27 11:47:39 +01:00
i2c-tegra.c
i2c-thunderx-pcidrv.c drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers 2022-06-06 08:33:49 +02:00
i2c-tiny-usb.c
i2c-uniphier-f.c
i2c-uniphier.c
i2c-versatile.c
i2c-via.c
i2c-viapro.c
i2c-viperboard.c
i2c-wmt.c
i2c-xgene-slimpro.c
i2c-xiic.c i2c: xiic: Make bus names unique 2022-04-15 14:18:15 +02:00
i2c-xlp9xx.c
i2c-xlr.c i2c: xlr: Fix a resource leak in the error handling path of 'xlr_i2c_probe()' 2021-11-17 09:48:46 +01:00
i2c-zx2967.c
Kconfig i2c: qup: allow COMPILE_TEST 2022-03-08 19:07:46 +01:00
Makefile
scx200_acb.c