public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch] add i2c_clients_command()
@ 2003-04-02 17:06 Gerd Knorr
  2003-04-02 18:08 ` Christoph Hellwig
  0 siblings, 1 reply; 3+ messages in thread
From: Gerd Knorr @ 2003-04-02 17:06 UTC (permalink / raw)
  To: Kernel List, Greg KH, Frank Davis

  Hi,

This patch adds a function which loops over all i2c clients attached
to some i2c adapter and calls the ->command function of the driver.

Currently the bttv and saa7134 drivers have simliar functions, but
(currently) without sane locking and module handling.  Newer versions
will switch to this function.  Updates for the two drivers which are
actually using this new function are available from
http://bytesex.org/patches/wip/

  Gerd

diff -u linux-2.5.66/drivers/i2c/i2c-core.c linux/drivers/i2c/i2c-core.c
--- linux-2.5.66/drivers/i2c/i2c-core.c	2003-04-02 11:42:18.357220889 +0200
+++ linux/drivers/i2c/i2c-core.c	2003-04-02 16:17:47.127702160 +0200
@@ -494,6 +494,27 @@
 	return 0;
 }
 
+void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
+{
+	int i;
+
+	down(&adap->list);
+	for (i = 0; i < I2C_CLIENT_MAX; i++) {
+		if (NULL == adap->clients[i])
+			continue;
+		if (!try_module_get(adap->clients[i]->driver->owner))
+			continue;
+		if (NULL == adap->clients[i]->driver->command)
+			continue;
+		
+		up(&adap->list);
+		adap->clients[i]->driver->command(adap->clients[i],cmd,arg);
+		module_put(adap->clients[i]->driver->owner);
+		down(&adap->list);
+	}
+	up(&adap->list);
+}
+
 #ifdef CONFIG_PROC_FS
 /* This function generates the output for /proc/bus/i2c-? */
 static ssize_t i2cproc_bus_read(struct file *file, char *buf,
@@ -1417,6 +1438,7 @@
 EXPORT_SYMBOL(i2c_use_client);
 EXPORT_SYMBOL(i2c_release_client);
 EXPORT_SYMBOL(i2c_check_addr);
+EXPORT_SYMBOL(i2c_clients_command);
 
 EXPORT_SYMBOL(i2c_master_send);
 EXPORT_SYMBOL(i2c_master_recv);
diff -u linux-2.5.66/include/linux/i2c.h linux/include/linux/i2c.h
--- linux-2.5.66/include/linux/i2c.h	2003-04-02 11:49:36.479533709 +0200
+++ linux/include/linux/i2c.h	2003-04-02 11:49:36.727492916 +0200
@@ -329,6 +329,11 @@
 extern int i2c_use_client(struct i2c_client *);
 extern int i2c_release_client(struct i2c_client *);
 
+/* call the i2c_client->command() of all attached clients with
+ * the given arguments */
+extern void i2c_clients_command(struct i2c_adapter *adap,
+				unsigned int cmd, void *arg);
+
 /* returns -EBUSY if address has been taken, 0 if not. Note that the only
    other place at which this is called is within i2c_attach_client; so
    you can cheat by simply not registering. Not recommended, of course! */

-- 
Michael Moore for president!

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-04-03  9:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-04-02 17:06 [patch] add i2c_clients_command() Gerd Knorr
2003-04-02 18:08 ` Christoph Hellwig
2003-04-03  8:49   ` Gerd Knorr

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox