30 May, 2018
3 commits
-
The I2C spec UM10204 Rev. 6 specifies the following timings.
Standard Fast Mode Fast Mode Plus
SCL low 4.7us 1.3us 0.5us
SCL high 4.0us 0.6us 0.26usThis results in a 33%/66% duty cycle as opposed to the 50%/50% duty cycle
used for Standard-mode.Add High Time Divider settings to correct duty cycle for FM(400kHz) and
FM+(1MHz).Signed-off-by: Austin Christ
Reviewed-by: Sricharan R
Reviewed-by: Andy Gross
Signed-off-by: Wolfram Sang -
Previously the QUP driver limited operation mode to I2C Fast Mode. Add
Fast Mode Plus functionality by raising SCL limit from 400kHz to 1MHz.Signed-off-by: Austin Christ
Reviewed-by: Sricharan R
Reviewed-by: Andy Gross
Signed-off-by: Wolfram Sang -
Add support for Qualcomm Centriq devices that are qup-v2 compatible but
do not support DMA, so nodma needs to be set.Signed-off-by: Austin Christ
Reviewed-by: Sricharan R
Reviewed-by: Andy Gross
Signed-off-by: Wolfram Sang
25 May, 2018
6 commits
-
In the for-loop test, ret will be either 0 or 1. So, the
comparison is pointless. Drop it, and drop the initializer
which is then also pointless.Signed-off-by: Peter Rosin
Signed-off-by: Wolfram Sang -
Just use the value directly instead of assigning it to a
variable first. And then drop the unused variable.Signed-off-by: Peter Rosin
Signed-off-by: Wolfram Sang -
Now %p doesn't print visible pointer address unless the user
really want it. According to Documentation/core-api/printk-formats.rst,
%px should be used instead, otherwise we could see:rk3x-i2c ff110000.i2c: Initialized RK3xxx I2C bus at (____ptrval____)
rk3x-i2c ff130000.i2c: Initialized RK3xxx I2C bus at (____ptrval____)
rk3x-i2c ff3c0000.i2c: Initialized RK3xxx I2C bus at (____ptrval____)
rk3x-i2c ff3d0000.i2c: Initialized RK3xxx I2C bus at (____ptrval____)But I don't really understand why we need dump it in the first place!
Let's remove the whole pointless log.Signed-off-by: Shawn Lin
Reviewed-by: Heiko Stuebner
Signed-off-by: Wolfram Sang -
Since commit 1eace8344c02 ("i2c: add param sanity check to
i2c_transfer()") and b7f625840267 ("i2c: add quirk checks to core"), the
I2C core does this check now. We can remove it here.Signed-off-by: Wolfram Sang
Reviewed-by: Peter Rosin -
Since commit 1eace8344c02 ("i2c: add param sanity check to
i2c_transfer()"), the I2C core does this check now. We can remove it
from drivers.Signed-off-by: Wolfram Sang
Reviewed-by: Peter Rosin -
Adopt the SPDX license identifier headers to ease license compliance
management.Signed-off-by: Fabio Estevam
Signed-off-by: Wolfram Sang
22 May, 2018
6 commits
-
For SMBus transactions the max permissible transfer size is
I2C_SMBUS_BLOCK_SIZE. It is possible that some clients might
not follow it strictly occasionally.
This would lead to stack corruption if the driver copies more than
I2C_SMBUS_BLOCK_SIZE bytes. Add a check to avoid such conditions.Signed-off-by: Jayachandran C
Signed-off-by: George Cherian
Signed-off-by: Wolfram Sang -
The hardware does not handle updates to the length register gracefully
if the new value is less than the number of bytes received so far. If
this happens, the i2c controller will not stop the receive transaction
properly.Fix this by ensuring that the updated length is ok. This is done by
making sure that the new length written to hardware is at least few
bytes more than the bytes received so far.While at that refactor the length updation to a new function.
Signed-off-by: Jayachandran C
Signed-off-by: George Cherian
Signed-off-by: Wolfram Sang -
Add support for SMBus alert mechanism to i2c-xlp9xx driver.
The second interrupt is parsed to use for SMBus alert.
The first interrupt is the i2c controller main interrupt.Signed-off-by: Kamlakant Patel
Signed-off-by: George Cherian
Reviewed-by: Jan Glauber
Signed-off-by: Wolfram Sang -
…kernel/git/brgl/linux into i2c/for-4.18
Minor improvements to the at24 driver:
- use devm_nvmem_register()
- provide and use a helper for releasing dummy i2c clients
- provide a separate routine for creating dummy i2c clients -
I3C busses have to know about all I2C devices connected on the I3C bus
to properly initialize the I3C master, and I2C frames can't be sent on
the bus until this initialization is done.We can't let the I2C core parse the DT and instantiate I2C devices as
part of its i2c_add_adapter() procedure because, when done this way,
I2C devices are directly registered to the device-model and might be
attached to drivers which could in turn start sending frames on the bus,
which won't work since, as said above, the bus is not yet initialized.Export of_i2c_register_device() in order to let the I3C core parse the
I2C device nodes by itself and initialize the bus.Signed-off-by: Boris Brezillon
Signed-off-by: Wolfram Sang -
Currently, of_i2c_register_devices() is responsible for retaining
info->of_node, but we're about to expose a function to parse I2C board
info without registering the I2C device.We could possibly let this function retain ->of_node, but this approach
is prone to reference leak since people will have to remember to call
of_node_put() if something goes wrong between the OF node parsing and
the registration step.
Let's just retain the ->of_node in i2c_new_register() instead.Signed-off-by: Boris Brezillon
Signed-off-by: Wolfram Sang
17 May, 2018
13 commits
-
There are no platform_data users anymore. Move the structs into the
driver.Signed-off-by: Wolfram Sang
Acked-by: Vladimir Zapolskiy -
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
Acked-by: Lee Jones -
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
-
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
Acked-by: Tony Lindgren -
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
Acked-by: Lee Jones -
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
Acked-by: Peter Korsgaard -
This header only contains platform_data. Move it to the proper directory.
Signed-off-by: Wolfram Sang
Acked-by: Tony Lindgren
Acked-by: Lee Jones
Acked-by: Robert Jarzmik
Acked-by: Mauro Carvalho Chehab
Acked-by: James Hogan
Acked-by: Greg Ungerer -
Some data structure members were either misspelled or missing.
Fixes: aeb068c572 ("i2c: i2c-stm32f7: add driver")
Fixes: 380b8a85e7 ("i2c: i2c-stm32f7: Add initial SMBus protocols support")
Signed-off-by: Pierre-Yves MORDRET
Signed-off-by: Wolfram Sang -
With CONFIG_PM, we get a harmless build warning:
drivers/i2c/busses/i2c-i801.c:1723:12: warning: ‘i801_resume’ defined but not used [-Wunused-function]
static int i801_resume(struct device *dev)
^~~~~~~~~~~
drivers/i2c/busses/i2c-i801.c:1714:12: warning: ‘i801_suspend’ defined but not used [-Wunused-function]
static int i801_suspend(struct device *dev)
^~~~~~~~~~~~Follow design pattern from other drivers like i2c-brcmstb, i2c-mpc,
i2c-ocores, i2c-pnx, i2c-puv3, i2c-st, i2c-stu300 and i2c-mux-pca954x
and changing the ifdef CONFIG_PM to CONFIG_PM_SLEEP.Fixes: a9c8088c7988 ("i2c: i801: Don't restore config registers on runtime PM")
Signed-off-by: Anders Roxell
Reviewed-by: Jean Delvare
Signed-off-by: Wolfram Sang -
Trivial fix to spelling mistakes in dev_dbg messages
Signed-off-by: Colin Ian King
Signed-off-by: Wolfram Sang -
There is a difference between attempts and retries.
Signed-off-by: Peter Rosin
Acked-by: Ard Biesheuvel
Signed-off-by: Wolfram Sang -
In i2c_smbus_xfer_emulated(), the function i2c_transfer() is invoked to
transfer i2c messages. The number of actual transferred messages is
returned and saved to 'status'. If 'status' is negative, that means an
error occurred during the transfer process. In that case, the value of
'status' is an error code to indicate the reason of the transfer failure.
In most cases, i2c_transfer() can transfer 'num' messages with no error.
And so 'status' == 'num'. However, due to unexpected errors, it is probable
that only partial messages are transferred by i2c_transfer(). As a result,
'status' != 'num'. This special case is not checked after the invocation of
i2c_transfer() and can potentially lead to unexpected issues in the
following execution since it is expected that 'status' == 'num'.This patch checks the return value of i2c_transfer() and returns an error
code -EIO if the number of actual transferred messages 'status' is not
equal to 'num'.Signed-off-by: Wenwen Wang
Signed-off-by: Wolfram Sang
16 May, 2018
4 commits
-
Move the code responsible for creating the dummy i2c clients used by
chips taking multiple slave addresses to a separate function.Signed-off-by: Bartosz Golaszewski
Reviewed-by: Peter Rosin -
This allows us to drop two opencoded for loops. We also don't need to
check if the i2c client is NULL before calling i2c_unregister_device().Signed-off-by: Bartosz Golaszewski
Reviewed-by: Peter Rosin -
We now have a managed variant of nvmem_register(). Use it
in at24_probe().Signed-off-by: Bartosz Golaszewski
Reviewed-by: Peter Rosin -
Commit feb2f19b1e8f ("eeprom: at24: move platform data processing into
a separate routine") introduced a bug where we incorrectly retireve the
at24_chip_data structure. Remove the unnecessary ampersand operator.Fixes: feb2f19b1e8f ("eeprom: at24: move platform data processing into a separate routine")
Reported-by: Vadim Pasternak
Signed-off-by: Bartosz Golaszewski
15 May, 2018
8 commits
-
The else branch cannot be taken as i will always equal num.
Get rid of the whole construct.Signed-off-by: Peter Rosin
Signed-off-by: Wolfram Sang -
exynos5_i2c_xfer contains lots of dead code, let's remove it and simplify
the rest. The patch should not introduce functional changes.Signed-off-by: Andrzej Hajda
Suggested-by: Peter Rosin
Reviewed-by: Andi Shyti
Reviewed-by: Peter Rosin
Signed-off-by: Wolfram Sang -
The only user of i2c_board_info->archdata is the OF parsing code and it
just pass a zero-initialized object which has the same effect as leaving
->archdata to NULL since the client object is allocated with kzalloc().Get rid of this useless field.
Signed-off-by: Boris Brezillon
Signed-off-by: Wolfram Sang -
Signed-off-by: Wolfram Sang
Signed-off-by: Wolfram Sang -
Low-level controller enable function __i2c_dw_enable is overloaded to
also handle disabling. What's worse, even though the documentation
requires polling the IC_ENABLE_STATUS register when disabling, this
is not done: polling needs to be requested specifically by calling
__i2c_dw_enable_and_wait, which can also poll on enabling, but that
doesn't work if the IC_ENABLE_STATUS register is not implemented.
This is quite confusing if not in fact backwards.Especially since the documentation says that disabling should be
followed by polling, the driver should be using a separate function
where it does one-shot disables to make the optimization stand out.This refactors the two functions so that requested status is given
in the name rather than in a boolean argument. Specifically:- __i2c_dw_enable: enable without polling (in accordance with docs)
- __i2c_dw_disable: disable and do poll (also as suggested by docs)
- __i2c_dw_disable_nowait: disable without polling (Linux-specific)No functional change.
Signed-off-by: Alexander Monakov
Acked-by: Jarkko Nikula
[wsa: fixed blank lines in header file]
Signed-off-by: Wolfram Sang -
Returning zero is wrong in this case.
Signed-off-by: Peter Rosin
Signed-off-by: Wolfram Sang
Fixes: 174a13aa8669 ("i2c: Add viperboard i2c master driver") -
Returning -1 (-EPERM) is not appropriate here, go with -EIO.
Signed-off-by: Peter Rosin
Signed-off-by: Wolfram Sang
Fixes: 1b144df1d7d6 ("i2c: New PMC MSP71xx TWI bus driver")