12 Aug, 2010
5 commits
-
Add multiplexed bus core support. I2C multiplexer and switches
like pca954x get instantiated as new adapters per port.Signed-off-by: Michael Lawnick
Acked-by: Rodolfo Giometti
Signed-off-by: Jean Delvare -
Moving userspace-instantiated clients to separate lists wasn't nearly
enough to avoid deadlocks in multiplexed bus cases. We also want to
have a dedicated mutex to protect each list.Signed-off-by: Jean Delvare
Cc: Michael Lawnick -
Uninline i2c adapter locking helper functions, move them to i2c-core,
and use them in i2c-core itself. The functions are still exported for
external users. This makes future updates to the locking model (which
will be needed for multiplexing support) possible and transparent.Signed-off-by: Jean Delvare
Cc: Michael Lawnick -
Now that i2c-core offers the possibility to provide custom probing
function for I2C devices, let's make use of it.Signed-off-by: Jean Delvare
Acked-by: Mauro Carvalho Chehab -
The probe method used by i2c_new_probed_device() may not be suitable
for all cases. Let the caller provide its own, optional probe
function.Signed-off-by: Jean Delvare
Acked-by: Mauro Carvalho Chehab
11 Aug, 2010
1 commit
-
Fix kernel-doc warnings in linux/i2c.h:
Warning(include/linux/i2c.h:176): No description found for parameter 'alert'
Warning(include/linux/i2c.h:259): No description found for parameter 'of_node'Signed-off-by: Randy Dunlap
Signed-off-by: Linus Torvalds
22 May, 2010
1 commit
-
Merging in current state of Linus' tree to deal with merge conflicts and
build failures in vio.c after merge.Conflicts:
drivers/i2c/busses/i2c-cpm.c
drivers/i2c/busses/i2c-mpc.c
drivers/net/gianfar.cAlso fixed up one line in arch/powerpc/kernel/vio.c to use the
correct node pointer.Signed-off-by: Grant Likely
04 May, 2010
1 commit
-
Using a single list for all userspace devices leads to a dead lock
on multiplexed buses in some circumstances (mux chip instantiated
from userspace). This is solved by using a separate list for each
bus segment.Signed-off-by: Jean Delvare
Acked-by: Michael Lawnick
29 Apr, 2010
1 commit
-
The struct device_node *of_node pointer is moving out of dev->archdata
and into the struct device proper. of_i2c.c needs to set the of_node
pointer before the device is registered. Since the i2c subsystem
doesn't allow 2 stage allocation and registration of i2c devices, the
of_node pointer needs to be passed via the i2c_board_info structure
so that it is set prior to registration.This patch adds of_node to struct i2c_board_info (conditional on
CONFIG_OF), sets of_node in i2c_new_device(), and modifies of_i2c.c
to use the new parameter. The calling of dev_archdata_set_node()
from of_i2c will be removed in a subsequent patch when of_node is
removed from archdata and all users are converted over.Signed-off-by: Grant Likely
02 Mar, 2010
2 commits
-
i2c_master_send & i2c_master_recv do not support more than 64 kb
transfer, since msg.len is u16.Signed-off-by: Zhangfei Gao
Signed-off-by: Jean Delvare -
SMBus alert support. The SMBus alert protocol allows several SMBus
slave devices to share a single interrupt pin on the SMBus master,
while still allowing the master to know which slave triggered the
interrupt.This is based on preliminary work by David Brownell. The key
difference between David's implementation and mine is that his was
part of i2c-core, while mine is split into a separate, standalone
module named i2c-smbus. The i2c-smbus module is meant to include
support for all SMBus extensions to the I2C protocol in the future.The benefit of this approach is a zero cost for I2C bus segments which
do not need SMBus alert support. Where David's implementation
increased the size of struct i2c_adapter by 7% (40 bytes on i386),
mine doesn't touch it. Where David's implementation added over 150
lines of code to i2c-core (+10%), mine doesn't touch it. The only
change that touches all the users of the i2c subsystem is a new
callback in struct i2c_driver (common to both implementations.) I seem
to remember Trent was worried about the footprint of David'd
implementation, hopefully mine addresses the issue.Signed-off-by: Jean Delvare
Acked-by: Jonathan Cameron
Cc: David Brownell
Cc: Trent Piepho
15 Dec, 2009
5 commits
-
There is no user left of I2C_CLIENT_MODULE_PARM, so we can finally
get rid of this ugly macro.Signed-off-by: Jean Delvare
Tested-by: Wolfram Sang -
These macros simply declare an enum, so drivers might as well declare
it themselves. This puts an end to the arbitrary limit of 8 chip types
per i2c driver.Signed-off-by: Jean Delvare
Tested-by: Wolfram Sang -
This macro simply declares an enum, so drivers might as well declare
it themselves.Signed-off-by: Jean Delvare
Tested-by: Wolfram Sang -
Struct i2c_client_address_data only contains one field at this point,
which makes its usefulness questionable. Get rid of it and pass simple
address lists around instead.Signed-off-by: Jean Delvare
Tested-by: Wolfram Sang -
The "kind" parameter always has value -1, and nobody is using it any
longer, so we can remove it.Signed-off-by: Jean Delvare
Tested-by: Wolfram Sang
07 Dec, 2009
2 commits
-
The legacy probe and force module parameters are obsolete now, the
same can be achieved using the new_device sysfs interface, which is
both more flexible and cheaper (it is implemented by i2c-core rather
than replicated in every driver module.)The legacy ignore module parameters can be dropped as well. Ignoring
can be done by instantiating a "dummy" device at the problematic
address.This is the first step of a huge cleanup to i2c-core's i2c_detect
function, i2c.h's I2C_CLIENT_INSMOD* macros, and all drivers that made
use of them.Signed-off-by: Jean Delvare
-
Low priority thread holding the i2c bus mutex could block higher
priority threads to access the bus resulting in unacceptable
latencies. Change the mutex type to rt_mutex preventing priority
inversion.Tested-by: Peter Ujfalusi
Signed-off-by: Mika Kuoppala
Signed-off-by: Jean Delvare
07 Nov, 2009
1 commit
-
Some drivers need to be able to prevent access to an I2C bus segment
for a specific period of time. Add an interface for them to do so
without twiddling with i2c-core internals.Signed-off-by: Jean Delvare
Acked-by: Ben Hutchings
19 Sep, 2009
1 commit
-
Nobody is using i2c_driver.id any longer, so we can drop that field.
Signed-off-by: Jean Delvare
19 Jun, 2009
8 commits
-
For video4linux we sometimes need to probe for a single i2c address.
Normally you would do it like this:static const unsigned short addrs[] = {
addr, I2C_CLIENT_END
};client = i2c_new_probed_device(adapter, &info, addrs);
This is a bit awkward and I came up with this macro:
#define V4L2_I2C_ADDRS(addr, addrs...) \
((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })This can construct a list of one or more i2c addresses on the fly. But
this is something that really belongs in i2c.h, renamed to I2C_ADDRS.With this macro we can just do:
client = i2c_new_probed_device(adapter, &info, I2C_ADDRS(addr));
Note that this can also be used to initialize an array:
static const unsigned short addrs[] = I2C_ADDRS(0x2a, 0x2c);
Whether you want to is another matter, but it works. This functionality is
also available in the oldest supported gcc (3.2).Signed-off-by: Hans Verkuil
Signed-off-by: Jean Delvare -
Surround i2c function declarations with ifdefs, so that they aren't
advertised when i2c-core isn't actually built. That way, drivers using
these functions unconditionally will result in an immediate build
failure, rather than a late linking failure which is harder to figure
out.Signed-off-by: Jean Delvare
Cc: Mark Brown
Cc: Paul Mundt -
Add a sysfs interface to instantiate and delete I2C devices. This is
primarily a replacement of the force_* module parameters implemented
by some i2c drivers. These module parameters were implemented
internally by the I2C_CLIENT_INSMOD* macros, which don't scale well.This can also be used when developing a driver on a self-soldered
board which doesn't yet have proper I2C device declaration at the
platform level, and presumably for various debugging situations.Signed-off-by: Jean Delvare
Cc: David Brownell -
We used to maintain our own per-adapter list of i2c clients, but this
is redundant with what the driver core does, and no longer needed.
Just drop the redundant list.Signed-off-by: Jean Delvare
Cc: David Brownell -
Legacy i2c drivers are gone, all drivers are new-style now, so there
is no point to check.Signed-off-by: Jean Delvare
Cc: David Brownell -
The legacy i2c_probe() function has no users left, get rid of it.
Signed-off-by: Jean Delvare
Cc: David Brownell -
We converted all the legacy i2c drivers so we can finally get rid of
the legacy binding model. Hooray!Signed-off-by: Jean Delvare
Cc: David Brownell -
These methods were useful in the legacy binding model but no longer in
the new (standard) binding model. There are no users left so we can
drop them.Signed-off-by: Jean Delvare
Cc: David Brownell
13 Apr, 2009
1 commit
-
Since the first argument to I2C_BOARD_INFO() must be a string constant,
there is no need to parenthesise it, and adding parentheses results in
an invalid initialiser for char[]. gcc obviously accepts this syntax as
an extension, but sparse complains, e.g.:drivers/net/sfc/boards.c:173:2: warning: array initialized from parenthesized string constant
Therefore, remove the parentheses.
Signed-off-by: Ben Hutchings
Signed-off-by: Jean Delvare
07 Apr, 2009
1 commit
-
The new i2c binding model makes the client_register and
client_unregister methods of struct i2c_adapter useless, so we can
remove them with the rest of the legacy model.Signed-off-by: Jean Delvare
25 Feb, 2009
1 commit
-
The unit in which user-space can set the bus timeout value is jiffies
for historical reasons (back when HZ was always 100.) This is however
not good because user-space doesn't know how long a jiffy lasts. The
timeout value should instead be set in a fixed time unit. Given the
original value of HZ, this unit should be 10 ms, for compatibility.Signed-off-by: Jean Delvare
Acked-by: Wolfram Sang
27 Jan, 2009
1 commit
-
Let the kernel developers know that i2c_attach_client() and
i2c_detach_client() are deprecated and should no longer be used.
Drivers using these should be converted to the standard device
driver binding model (probe and remove methods.)Signed-off-by: Jean Delvare
Acked-by: Ben Dooks
07 Jan, 2009
3 commits
-
There are a number of drivers which set their i2c bus class to
I2C_CLASS_CAM_DIGITAL, however no chip driver actually checks for this
flag, so we might as well drop it now.Signed-off-by: Jean Delvare
-
There are no users left of these two i2c probe class flags so we can
drop the now.Signed-off-by: Jean Delvare
-
I2C_CLASS_ALL is almost never what bus driver authors really want.
These i2c classes are really only about which devices must be probed,
not what devices can be present. As device drivers get converted to the
new i2c device driver model, only a few device types will keep relying
on probing.Signed-off-by: Jean Delvare
Acked-by: Sonic Zhang
23 Oct, 2008
5 commits
-
If present the info->archdata is copied into the dev->archdata.
Some (OpenFirmware) platforms need it.Signed-off-by: Anton Vorontsov
Signed-off-by: Jean Delvare -
Fix most checkpatch.pl errors and warnings. This includes replacing
spaces with tabs in many places, adding and removing spaces, and
folding long lines.Also complete a couple prototypes to make it clearer what the
parameters represent.Signed-off-by: Jean Delvare
-
We have no users and no implementers for these transfer types so it
makes little sense to define functionality bits for them.Signed-off-by: Jean Delvare
-
i2c_get_clientdata doesn't change the i2c_client it is passed as a
parameter, so it can be constified. Same for i2c_get_adapdata.Signed-off-by: Jean Delvare
-
Make clear what the class field of i2c_adapter is good for.
Signed-off-by: Wolfram Sang
Signed-off-by: Jean Delvare