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