Closed valpackett closed 5 years ago
Thanks for the report. So it seems this does matter
// XXX: locked or unlocked, does it matter since we have our own lock
// and don't lock with provided lock_bus function?
#define __i2c_transfer(a, m, n) i2c_transfer(a, m, n)
Used here
if (unlocked)
ret = i2c_transfer(intel_sdvo->i2c, msgs, i+3);
else
ret = __i2c_transfer(intel_sdvo->i2c, msgs, i+3);
I'll add this to my todo list.
@myfreeweb try this
diff --git a/linuxkpi/gplv2/include/linux/i2c.h b/linuxkpi/gplv2/include/linux/i2c.h
index a31addc169d4..9bd398075144 100644
--- a/linuxkpi/gplv2/include/linux/i2c.h
+++ b/linuxkpi/gplv2/include/linux/i2c.h
@@ -225,11 +225,10 @@ extern int i2c_register_driver(struct module *, struct i2c_driver *);
extern void i2c_del_driver(struct i2c_driver *);
+extern int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
+ int num);
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
int num);
-// XXX: locked or unlocked, does it matter since we have our own lock
-// and don't lock with provided lock_bus function?
-#define __i2c_transfer(a, m, n) i2c_transfer(a, m, n)
static inline void
i2c_unregister_device(struct i2c_client *client)
diff --git a/linuxkpi/gplv2/src/linux_i2c.c b/linuxkpi/gplv2/src/linux_i2c.c
index 3db2d36d6582..2edfbf230544 100644
--- a/linuxkpi/gplv2/src/linux_i2c.c
+++ b/linuxkpi/gplv2/src/linux_i2c.c
@@ -554,6 +554,18 @@ linux_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
return (rc);
}
+int
+__i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
+{
+ int rc;
+
+ if (adap->algo->master_xfer == NULL)
+ return (-EOPNOTSUPP);
+
+ rc = linux_i2c_transfer(adap, msgs, num);
+ return (rc);
+}
+
int
i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
{
Yes, this works
graphics/drm-current-kmod and graphics/drm-fbsd12.0-kmod updated, and MFH done. https://svnweb.freebsd.org/changeset/ports/494747 https://svnweb.freebsd.org/changeset/ports/494748
(4.16)
dmesg:
Workaround:
p.s. full dmesg