linux-uconsole/include/linux/mfd
Hubert Streidl 14c7e3f5be mfd: da9063: Support SMBus and I2C mode
[ Upstream commit 586478bfc9 ]

By default the PMIC DA9063 2-wire interface is SMBus compliant. This
means the PMIC will automatically reset the interface when the clock
signal ceases for more than the SMBus timeout of 35 ms.

If the I2C driver / device is not capable of creating atomic I2C
transactions, a context change can cause a ceasing of the clock signal.
This can happen if for example a real-time thread is scheduled. Then
the DA9063 in SMBus mode will reset the 2-wire interface. Subsequently
a write message could end up in the wrong register. This could cause
unpredictable system behavior.

The DA9063 PMIC also supports an I2C compliant mode for the 2-wire
interface. This mode does not reset the interface when the clock
signal ceases. Thus the problem depicted above does not occur.

This patch tests for the bus functionality "I2C_FUNC_I2C". It can
reasonably be assumed that the bus cannot obey SMBus timings if
this functionality is set. SMBus commands most probably are emulated
in this case which is prone to the latency issue described above.

This patch enables the I2C bus mode if I2C_FUNC_I2C is set or
otherwise keeps the default SMBus mode.

Signed-off-by: Hubert Streidl <hubert.streidl@de.bosch.com>
Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-05-11 14:47:31 +02:00
..
abx500 mfd: Switch the AB8500 GPADC to IIO 2019-10-18 19:37:45 +01:00
arizona mfd: wm8998: Remove some unused registers 2019-11-11 08:45:02 +00:00
da9052 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
da9055 mfd: da9055: pdata.h: Drop a duplicated word 2020-08-13 07:49:59 +01:00
da9062 regulator: da9061/62: Adjust LDO voltage selection minimum value 2019-06-20 13:07:19 +01:00
da9063 mfd: da9063: Support SMBus and I2C mode 2021-05-11 14:47:31 +02:00
da9150 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
madera mfd: madera: Remove unused forward declaration of madera_codec_pdata 2020-06-18 11:23:15 +01:00
mt6323 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mt6358 mfd: Add support for the MediaTek MT6358 PMIC 2020-05-21 08:55:29 +01:00
mt6397 rtc: mt6397: Remove unused member dev 2020-10-15 12:01:29 +02:00
pcf50633 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
samsung Merge branch 'regulator-5.3' into regulator-next 2019-07-04 17:34:32 +01:00
syscon memory: atmel-ebi: move NUM_CS definition inside EBI driver 2019-11-07 22:33:09 +01:00
wcd934x mfd: wcd934x: Add support to wcd9340/wcd9341 codec 2020-01-29 11:18:40 +00:00
wm831x watchdog: wm831x_wdt: Remove GPIO handling 2020-03-18 11:15:24 +01:00
wm8350 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
wm8994 mfd: wm8994: Fix comment spelling 2020-03-17 20:48:41 +01:00
88pm80x.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
88pm860x.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
aat2870.h mfd: aat2870: No need to check return value of debugfs_create functions 2019-08-12 07:27:40 +01:00
ab3100.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
abx500.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
ac100.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
adp5520.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 149 2019-05-30 11:25:18 -07:00
altera-a10sr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
altera-sysmgr.h mfd: altera-sysmgr: Add SOCFPGA System Manager 2019-04-02 07:37:45 +01:00
as3711.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 312 2019-06-05 17:37:04 +02:00
as3722.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
asic3.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
atmel-hlcdc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
axp20x.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
bcm590xx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
bcm2835-pm.h soc: bcm: bcm2835-pm: Add support for power domains under a new binding. 2019-01-09 16:55:09 +01:00
bd9571mwv.h
core.h mfd: mfd-core: Add mechanism for removal of a subset of children 2020-08-13 07:50:50 +01:00
da8xx-cfgchip.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
da903x.h
davinci_voicecodec.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
db8500-prcmu.h mfd: dbx500-prcmu: Drop DSI pll clock functions 2020-01-24 07:33:58 +00:00
dbx500-prcmu.h mfd: dbx500-prcmu: Drop DSI pll clock functions 2020-01-24 07:33:58 +00:00
dln2.h
dm355evm_msp.h
ds1wm.h
ezx-pcap.h
gsc.h mfd: Add Gateworks System Controller core driver 2020-05-20 10:28:57 +01:00
hi655x-pmic.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
hi6421-pmic.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
hi6421-spmi-pmic.h staging: mfd: hi6421-spmi-pmic: get rid of interrupt properties 2020-08-18 17:05:14 +02:00
htc-pasic3.h
imx25-tsadc.h
ingenic-tcu.h mfd: ingenic-tcu: Fix bit field description in header 2019-01-03 08:32:42 +00:00
intel-m10-bmc.h mfd: intel-m10-bmc: Fix the register access range 2021-05-11 14:47:31 +02:00
intel_msic.h mfd: Convert Intel PMIC drivers to use SPDX identifier 2018-10-23 08:58:34 +01:00
intel_pmc_bxt.h platform/x86: intel_pmc_ipc: Convert to MFD 2020-04-24 11:18:44 +01:00
intel_soc_pmic.h mfd: intel_soc_pmic: Add SCU IPC member to struct intel_soc_pmic 2020-04-24 11:17:52 +01:00
intel_soc_pmic_bxtwc.h mfd: Convert Intel PMIC drivers to use SPDX identifier 2018-10-23 08:58:34 +01:00
intel_soc_pmic_mrfld.h mfd: Add support for Merrifield Basin Cove PMIC 2019-09-02 11:09:03 +01:00
ipaq-micro.h
iqs62x.h mfd: Add support for Azoteq IQS620A/621/622/624/625 2020-03-27 08:25:37 +00:00
janz.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
kempld.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 424 2019-06-05 17:37:15 +02:00
khadas-mcu.h mfd: Add support for the Khadas System control Microcontroller 2020-06-18 11:23:16 +01:00
lm3533.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
lochnagar.h mfd: lochnagar: Add support for the Cirrus Logic Lochnagar 2019-02-07 10:44:00 +00:00
lochnagar1_regs.h mfd: lochnagar: Add support for the Cirrus Logic Lochnagar 2019-02-07 10:44:00 +00:00
lochnagar2_regs.h mfd: lochnagar: Add support for the Cirrus Logic Lochnagar 2019-02-07 10:44:00 +00:00
lp873x.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
lp3943.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
lp8788-isink.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
lp8788.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
lp87565.h mfd: lp87565: Add LP87524-Q1 variant 2020-09-30 16:25:29 +01:00
lpc_ich.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 300 2019-06-05 17:37:00 +02:00
max8907.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
max8925.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
max8997-private.h
max8997.h mfd: max8997: Enale irq-wakeup unconditionally 2018-10-23 08:58:34 +01:00
max8998-private.h
max8998.h regulator: max8998: Add charger regulator 2020-05-22 13:11:05 +01:00
max14577-private.h
max14577.h
max77620.h mfd: max77620: Do not allocate IRQs upfront 2019-11-11 08:45:02 +00:00
max77650.h mfd: Add new driver for MAX77650 PMIC 2019-05-08 12:06:21 +01:00
max77686-private.h
max77686.h
max77693-common.h
max77693-private.h mfd: max77693-private: Drop a duplicated word 2020-08-13 07:50:01 +01:00
max77693.h
max77843-private.h
mc13xxx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mc13783.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mc13892.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mcp.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 178 2019-05-30 11:29:19 -07:00
menelaus.h
motorola-cpcap.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mp2629.h iio: adc: mp2629: Add support for mp2629 ADC driver 2020-05-26 10:41:47 +01:00
mt6360.h mfd: Add support for PMIC MT6360 2020-05-27 07:46:18 +01:00
mxs-lradc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
palmas.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
qcom_rpm.h
rave-sp.h
rc5t583.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
rdc321x.h
retu.h
rk808.h mfd: rk808: Convert RK805 to shutdown/suspend hooks 2020-03-30 07:35:28 +01:00
rn5t618.h mfd: rn5t618: Add RTC related registers 2020-03-27 09:42:18 +00:00
rohm-bd718x7.h clk: bd718x7: Support ROHM BD71828 clk block 2020-01-24 07:22:47 +00:00
rohm-bd70528.h rtc: bd70528: add BD71828 support 2020-01-24 07:23:06 +00:00
rohm-bd71828.h rtc: bd70528: add BD71828 support 2020-01-24 07:23:06 +00:00
rohm-generic.h regulator: bd718x7, bd71828, Fix dvs voltage levels 2021-03-04 11:38:07 +01:00
rohm-shared.h rtc: bd70528: add BD71828 support 2020-01-24 07:23:06 +00:00
rt5033-private.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 450 2019-06-05 17:37:18 +02:00
rt5033.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 450 2019-06-05 17:37:18 +02:00
sc27xx-pmic.h mfd: sc27xx: Add USB charger type detection support 2020-03-30 07:35:28 +01:00
si476x-core.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285 2019-06-05 17:36:37 +02:00
si476x-platform.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285 2019-06-05 17:36:37 +02:00
si476x-reports.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285 2019-06-05 17:36:37 +02:00
sky81452.h backlight: sky81452: Privatize platform data 2020-07-01 10:40:11 +01:00
sta2x11-mfd.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
stm32-lptimer.h mfd: stm32: Add defines to be used for clkevent purpose 2020-06-18 11:19:42 +01:00
stm32-timers.h pwm: stm32: Remove clutter from ternary operator 2019-10-21 16:50:05 +02:00
stmfx.h mfd: stmfx: Disable IRQ in suspend to avoid spurious interrupt 2020-05-26 10:51:21 +01:00
stmpe.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 464 2019-06-19 17:09:10 +02:00
stpmic1.h mfd: stpmic1: Add STPMIC1 driver 2019-01-16 13:59:34 +00:00
stw481x.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
sun4i-gpadc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
syscon.h mfd: syscon: Fix syscon_regmap_lookup_by_phandle_args() dummy 2020-02-03 08:39:49 +00:00
t7l66xb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
tc3589x.h gpio: tc35894: Disable Direct KBD interrupts to enable gpio irq 2020-09-09 11:33:07 +02:00
tc6387xb.h
tc6393xb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ti-lmu-register.h LED updates for 5.3-rc1 2019-07-09 08:59:39 -07:00
ti-lmu.h LED updates for 5.3-rc1 2019-07-09 08:59:39 -07:00
ti_am335x_tscadc.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
tmio.h mmc: renesas_sdhi: remove 4taps as a TMIO flag 2019-12-16 12:29:36 +01:00
tps6105x.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
tps6507x.h
tps6586x.h
tps65010.h
tps65086.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
tps65090.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 2019-05-21 11:28:39 +02:00
tps65217.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
tps65218.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
tps65910.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
tps65912.h mfd: Replace HTTP links with HTTPS ones 2020-08-13 07:50:59 +01:00
tps68470.h
tps80031.h
twl.h mfd: twl: Endian fixups in i2c write and read wrappers 2019-11-11 08:45:02 +00:00
twl4030-audio.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336 2019-06-05 17:37:07 +02:00
twl6040.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336 2019-06-05 17:37:07 +02:00
ucb1x00.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 178 2019-05-30 11:29:19 -07:00
viperboard.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
wl1273-core.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336 2019-06-05 17:37:07 +02:00
wm97xx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
wm8400-audio.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
wm8400-private.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
wm8400.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00