Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 00:59:25 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/include/linux: i2c.h
        src/sys/external/bsd/drm2/linux: linux_i2c.c

Log Message:
Support i2c bus lock operations.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/include/linux/i2c.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/linux/linux_i2c.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/include/linux/i2c.h
diff -u src/sys/external/bsd/drm2/include/linux/i2c.h:1.8 src/sys/external/bsd/drm2/include/linux/i2c.h:1.9
--- src/sys/external/bsd/drm2/include/linux/i2c.h:1.8	Thu Mar  5 17:29:18 2015
+++ src/sys/external/bsd/drm2/include/linux/i2c.h	Sun Dec 19 00:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i2c.h,v 1.8 2015/03/05 17:29:18 riastradh Exp $	*/
+/*	$NetBSD: i2c.h,v 1.9 2021/12/19 00:59:25 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -87,6 +87,7 @@ struct i2c_adapter {
 	char		 		name[I2C_NAME_SIZE];
 	const struct i2c_algorithm	*algo;
 	void				*algo_data;
+	const struct i2c_lock_operations *lock_ops;
 	int				retries;
 	struct module			*owner;
 	unsigned int			class; /* I2C_CLASS_* */
@@ -107,6 +108,15 @@ struct i2c_algorithm {
 };
 
 /*
+ * struct i2c_lock_operations: i2c bus lock operations.
+ */
+struct i2c_lock_operations {
+	void	(*lock_bus)(struct i2c_adapter *, unsigned);
+	int	(*trylock_bus)(struct i2c_adapter *, unsigned);
+	void	(*unlock_bus)(struct i2c_adapter *, unsigned);
+};
+
+/*
  * struct i2c_board_info: Parameters to find an i2c bus and a slave on
  * it.  type is the name of an i2c driver; addr is the slave address;
  * platform_data is an extra parameter to pass to the i2c driver.

Index: src/sys/external/bsd/drm2/linux/linux_i2c.c
diff -u src/sys/external/bsd/drm2/linux/linux_i2c.c:1.3 src/sys/external/bsd/drm2/linux/linux_i2c.c:1.4
--- src/sys/external/bsd/drm2/linux/linux_i2c.c:1.3	Thu Mar  5 17:29:18 2015
+++ src/sys/external/bsd/drm2/linux/linux_i2c.c	Sun Dec 19 00:59:25 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_i2c.c,v 1.3 2015/03/05 17:29:18 riastradh Exp $	*/
+/*	$NetBSD: linux_i2c.c,v 1.4 2021/12/19 00:59:25 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_i2c.c,v 1.3 2015/03/05 17:29:18 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_i2c.c,v 1.4 2021/12/19 00:59:25 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/errno.h>
@@ -127,8 +127,15 @@ i2c_master_recv(const struct i2c_client 
 int
 i2c_transfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int n)
 {
+	int ret;
+
+	if (adapter->lock_ops)
+		(*adapter->lock_ops->lock_bus)(adapter, 0);
+	ret = (*adapter->algo->master_xfer)(adapter, msgs, n);
+	if (adapter->lock_ops)
+		(*adapter->lock_ops->unlock_bus)(adapter, 0);
 
-	return (*adapter->algo->master_xfer)(adapter, msgs, n);
+	return ret;
 }
 
 static int

Reply via email to