linux/drivers/i2c/busses
Alain Volmat c896ff2dd8 i2c: stm32f7: Fix PEC handling in case of SMBUS transfers
In case of SMBUS byte read with PEC enabled, the whole transfer
is split into two commands.  A first write command, followed by
a read command.  The write command does not have any PEC byte
and a PEC byte is appended at the end of the read command.
(cf Read byte protocol with PEC in SMBUS specification)

Within the STM32 I2C controller, handling (either sending
or receiving) of the PEC byte is done via the PECBYTE bit in
register CR2.

Currently, the PECBYTE is set at the beginning of a transfer,
which lead to sending a PEC byte at the end of the write command
(hence losing the real last byte), and also does not check the
PEC byte received during the read command.

This patch corrects the function stm32f7_i2c_smbus_xfer_msg
in order to only set the PECBYTE during the read command.

Fixes: 9e48155f6b ("i2c: i2c-stm32f7: Add initial SMBus protocols support")
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Reviewed-by: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
Acked-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
2023-10-21 20:31:04 +02:00
..
i2c-acorn.c
i2c-ali15x3.c I2C: ali15x3: Do PCI error checks on own line 2023-08-30 21:18:35 +02:00
i2c-ali1535.c i2c: ali1535: mention that the device should not be disabled 2021-07-02 09:14:46 +02:00
i2c-ali1563.c
i2c-altera.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-amd756-s4882.c
i2c-amd756.c
i2c-amd8111.c
i2c-amd-mp2-pci.c i2c: amd-mp2: use msix/msi if the hardware supports 2022-11-01 13:41:22 +01:00
i2c-amd-mp2-plat.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-amd-mp2.h i2c: amd-mp2: use msix/msi if the hardware supports 2022-11-01 13:41:22 +01:00
i2c-aspeed.c i2c: aspeed: Fix i2c bus hang in slave read 2023-10-10 21:34:02 +02:00
i2c-at91-core.c i2c: at91: Use dev_err_probe() instead of dev_err() 2023-08-30 21:19:55 +02:00
i2c-at91-master.c i2c: Make return value check more accurate and explicit for devm_pinctrl_get() 2023-08-26 00:18:39 +02:00
i2c-at91-slave.c
i2c-at91.h
i2c-au1550.c i2c: au1550: Remove #ifdef guards for PM related functions 2023-08-08 15:36:48 +02:00
i2c-axxia.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-bcm2835.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-bcm-iproc.c I2C has mainly cleanups this time and a few driver improvements. Because 2023-09-04 13:44:11 -07:00
i2c-bcm-kona.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-brcmstb.c i2c: brcmstb: Convert to devm_platform_ioremap_resource() 2023-08-14 18:09:39 +02:00
i2c-cadence.c i2c: cadence: Fix the kernel-doc warnings 2023-09-13 11:10:49 +02:00
i2c-cbus-gpio.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-ccgx-ucsi.c i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-ccgx-ucsi.h i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-cht-wc.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-cp2615.c i2c: cp2615: check for allocation failure in cp2615_i2c_recv() 2021-06-20 23:13:34 +02:00
i2c-cpm.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-cros-ec-tunnel.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-davinci.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-designware-amdpsp.c i2c: designware: Add doorbell support for Mendocino 2023-04-20 18:20:05 +08:00
i2c-designware-baytrail.c i2c: designware: Add AMD PSP I2C bus support 2022-02-11 15:38:23 +01:00
i2c-designware-common.c i2c: designware: fix __i2c_dw_disable() in case master is holding SCL low 2023-09-19 21:57:11 +02:00
i2c-designware-core.h i2c: designware: fix __i2c_dw_disable() in case master is holding SCL low 2023-09-19 21:57:11 +02:00
i2c-designware-master.c I2C has mainly cleanups this time and a few driver improvements. Because 2023-09-04 13:44:11 -07:00
i2c-designware-pcidrv.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-06-14 10:47:11 +02:00
i2c-designware-platdrv.c i2c: designware: Remove #ifdef guards for PM related functions 2023-08-08 15:36:48 +02:00
i2c-designware-slave.c i2c: designware: fix idx_write_cnt in read loop 2023-06-05 11:58:20 +02:00
i2c-digicolor.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-diolan-u2c.c
i2c-dln2.c i2c: dln2: Use dev_err_probe in probe function 2023-08-10 10:13:40 +02:00
i2c-eg20t.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-elektor.c
i2c-emev2.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-exynos5.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-fsi.c
i2c-gpio.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-gxp.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-highlander.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-hisi.c I2C has mainly cleanups this time and a few driver improvements. Because 2023-09-04 13:44:11 -07:00
i2c-hix5hd2.c i2c: hix5hd2: Remove #ifdef guards for PM related functions 2023-08-08 15:36:48 +02:00
i2c-hydra.c
i2c-i801.c i2c: i801: unregister tco_pdev in i801_probe() error path 2023-09-19 11:09:45 +02:00
i2c-ibm_iic.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-ibm_iic.h
i2c-icy.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-img-scb.c i2c: img-scb: Remove #ifdef guards for PM related functions 2023-08-08 15:36:49 +02:00
i2c-imx-lpi2c.c I2C has mainly cleanups this time and a few driver improvements. Because 2023-09-04 13:44:11 -07:00
i2c-imx.c i2c: Make return value check more accurate and explicit for devm_pinctrl_get() 2023-08-26 00:18:39 +02:00
i2c-iop3xx.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-iop3xx.h
i2c-isch.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-ismt.c i2c: ismt: Fix an out-of-bounds bug in ismt_access() 2022-12-07 21:27:08 +01:00
i2c-jz4780.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-kempld.c i2c: kempld: Convert to use regular device PM 2023-08-08 15:36:49 +02:00
i2c-lpc2k.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-ls2x.c i2c: ls2x: Add driver for Loongson-2K/LS7A I2C controller 2023-02-02 22:23:59 +01:00
i2c-mchp-pci1xxxx.c i2c: mchp-pci1xxxx: Avoid cast to incompatible function type 2023-06-05 10:43:45 +02:00
i2c-meson.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-microchip-corei2c.c i2c: remove redundant dev_err_probe() 2023-08-08 15:36:55 +02:00
i2c-mlxbf.c i2c: mlxbf: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:09:44 +02:00
i2c-mlxcpld.c i2c: mlxcpld: Add support for extended transaction length 2023-08-25 22:13:12 +02:00
i2c-mpc.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-mt65xx.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-mt7621.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-mv64xxx.c Biggest news is not a patch this time 2023-07-02 10:22:38 -07:00
i2c-mxs.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-nforce2-s4985.c
i2c-nforce2.c i2c: nforce2: Do PCI error check on own line 2023-08-25 22:11:08 +02:00
i2c-nomadik.c i2c: nomadik: Remove #ifdef guards for PM related functions 2023-08-08 15:36:49 +02:00
i2c-npcm7xx.c i2c: npcm7xx: Fix callback completion ordering 2023-09-27 21:32:06 +02:00
i2c-nvidia-gpu.c usb: typec: ucsi: Mark dGPUs as DEVICE scope 2023-06-14 10:47:11 +02:00
i2c-ocores.c i2c: ocores: Remove #ifdef guards for PM related functions 2023-08-08 15:36:49 +02:00
i2c-octeon-core.c
i2c-octeon-core.h
i2c-octeon-platdrv.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-omap.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-opal.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-owl.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-parport.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-pasemi-core.c i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pasemi-core.h i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pasemi-pci.c i2c: pasemi: Drop I2C classes from platform driver variant 2022-02-15 10:28:34 +01:00
i2c-pasemi-platform.c i2c: pasemi-platform: Use devm_clk_get_enabled() 2023-06-23 11:56:34 +02:00
i2c-pca-isa.c
i2c-pca-platform.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-piix4.c i2c: piix4: Fix adapter not be removed in piix4_remove() 2022-11-01 13:09:33 +01:00
i2c-pnx.c i2c: pnx: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:10:14 +02:00
i2c-powermac.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-pxa-pci.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-pxa.c i2c: pxa: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:10:10 +02:00
i2c-qcom-cci.c i2c: qcom-cci: Fix error checking in cci_probe() 2023-08-25 22:07:10 +02:00
i2c-qcom-geni.c i2c: qcom-geni: Convert to devm_platform_ioremap_resource() 2023-08-14 18:09:53 +02:00
i2c-qup.c i2c: qup: Remove #ifdef guards for PM related functions 2023-08-08 15:36:50 +02:00
i2c-rcar.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-riic.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-rk3x.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: fix control-request directions 2021-06-24 22:08:00 +02:00
i2c-rzv2m.c i2c: rzv2m: Disable the operation of unit in case of error 2023-06-05 12:03:35 +02:00
i2c-s3c2410.c i2c: s3c2410: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:10:05 +02:00
i2c-scmi.c More ACPI updates for 6.5-rc1 2023-07-06 22:25:06 -07:00
i2c-sh7760.c i2c: Improve size determinations 2023-06-07 14:12:11 +02:00
i2c-sh_mobile.c i2c: sh_mobile: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:10:01 +02:00
i2c-sibyte.c
i2c-simtec.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-sis96x.c
i2c-sis630.c i2c: fix spelling typos in comments 2022-10-20 23:09:10 +02:00
i2c-sis5595.c i2c: sis5595: Do PCI error checks on own line 2023-08-25 22:11:03 +02:00
i2c-sprd.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-st.c i2c: st: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:09:57 +02:00
i2c-stm32.c
i2c-stm32.h
i2c-stm32f4.c i2c: stm32f4: Use devm_platform_get_and_ioremap_resource() 2023-08-14 18:09:48 +02:00
i2c-stm32f7.c i2c: stm32f7: Fix PEC handling in case of SMBUS transfers 2023-10-21 20:31:04 +02:00
i2c-sun6i-p2wi.c i2c: sun6i-p2wi: Fix an error message in probe() 2023-08-14 17:52:58 +02:00
i2c-synquacer.c i2c: synquacer: Use dev_err_probe in probe function 2023-08-10 10:13:57 +02:00
i2c-taos-evm.c i2c: move drivers from strlcpy to strscpy 2022-08-11 23:02:51 +02:00
i2c-tegra-bpmp.c I2C: Explicitly include correct DT includes 2023-08-14 17:47:21 +02:00
i2c-tegra.c I2C has mainly cleanups this time and a few driver improvements. Because 2023-09-04 13:44:11 -07:00
i2c-thunderx-pcidrv.c drivers: i2c: thunderx: Allow driver to work with ACPI defined TWSI controllers 2022-05-21 13:41:28 +02:00
i2c-tiny-usb.c i2c: tiny-usb: check usb base class before assuming the interface on device is for this driver 2023-08-14 15:14:42 +02:00
i2c-uniphier-f.c i2c: uniphier-f: Use devm_clk_get_enabled() 2023-06-23 12:22:34 +02:00
i2c-uniphier.c i2c: uniphier: Use devm_clk_get_enabled() 2023-06-23 12:22:41 +02:00
i2c-versatile.c i2c: versatile: Use devm_platform_get_and_ioremap_resource() 2023-06-14 10:40:09 +02:00
i2c-via.c
i2c-viapro.c
i2c-viperboard.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-virtio.c i2c: virtio: Remove #ifdef guards for PM related functions 2023-08-08 15:36:53 +02:00
i2c-wmt.c i2c: wmt: Use devm_platform_get_and_ioremap_resource() 2023-06-14 10:41:17 +02:00
i2c-xgene-slimpro.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00
i2c-xiic.c i2c: xiic: Correct return value check for xiic_reinit() 2023-09-22 12:04:39 +02:00
i2c-xlp9xx.c i2c: xlp9xx: Use dev_err_probe in probe function 2023-08-10 10:12:55 +02:00
Kconfig i2c: I2C_MLXCPLD on ARM64 should depend on ACPI 2023-09-13 10:56:10 +02:00
Makefile i2c: Add GXP SoC I2C Controller 2023-02-17 23:18:20 +01:00
scx200_acb.c i2c: Convert to platform remove callback returning void 2023-06-05 09:47:37 +02:00