Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/i2c enable FDT direct configuration.



details:   https://anonhg.NetBSD.org/src/rev/2ffa570d8ce6
branches:  trunk
changeset: 965979:2ffa570d8ce6
user:      kardel <kardel%NetBSD.org@localhost>
date:      Tue Oct 08 21:16:11 2019 +0000

description:
enable FDT direct configuration.
remove address test as the i2c address can be changed on this device.

diffstat:

 sys/dev/i2c/hytp14.c |  53 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 39 insertions(+), 14 deletions(-)

diffs (81 lines):

diff -r 8ad1faafc32e -r 2ffa570d8ce6 sys/dev/i2c/hytp14.c
--- a/sys/dev/i2c/hytp14.c      Tue Oct 08 20:02:44 2019 +0000
+++ b/sys/dev/i2c/hytp14.c      Tue Oct 08 21:16:11 2019 +0000
@@ -36,8 +36,32 @@
  *      $FILE/AHHYTM_E2.1.pdf
  */ 
 
+/*
+ * FDT direct configuration fragment to be added to i2cX definition in dtsi file
+ * like in bcm2835-rpi.dtsi or another specific file.
+ *
+ * &i2c1 { 
+ *         pinctrl-names = "default";
+ *         pinctrl-0 = <&i2c1_gpio2>;
+ *         status = "okay";
+ *         clock-frequency = <100000>;
+ *         #address-cells = <1>;
+ *         #size-cells = <0>;
+ *         hythygtemp@28 { 
+ *                         compatible = "ist-ag,i2c-hytp14";
+ *                         reg = <0x28>;
+ *                         status = "okay";
+ *         };
+ *         hythygtemp@29 { 
+ *                         compatible = "ist-ag,i2c-hytp14";
+ *                         reg = <0x29>;
+ *                         status = "okay";
+ *         };
+ * };
+ */
+
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hytp14.c,v 1.8 2018/06/16 21:24:36 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hytp14.c,v 1.9 2019/10/08 21:16:11 kardel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -95,29 +119,30 @@
        }
 };
 
+static const struct device_compatible_entry compat_data[] = {
+        { "i2c-hytp14",                   0 },
+        { NULL,                           0 }
+}; 
+
 static int
 hytp14_match(device_t parent, cfdata_t match, void *aux)
 {
        struct i2c_attach_args *ia = aux;
        int match_result;
 
-       if (iic_use_direct_match(ia, match, NULL, &match_result))
+       if (iic_use_direct_match(ia, match, compat_data, &match_result))
                return match_result;
 
-       if (ia->ia_addr == 0x28)
-               return I2C_MATCH_ADDRESS_ONLY;
-       
        /*
-        * XXXJRT
-        * This device is an odd-ball; the i2c address can be changed
-        * at run-time using a command sequence documented in the
-        * application note, but the timing is critical (within 10ms
-        * after power-on of the device), and the device always starts
-        * up at address 0x28.
-        *
-        * How should we handle this?
+        * This device can be reprogrammed to use a different
+        * I2C address, thus checking for specific addresses 
+        * is not helpful here.
+         * reprogramming is done via setting new values in
+         * the device EEPROM via the hytctl utility and
+        * a special GPIO setup - see hythygtemp(4) for more
+        * information.
         */
-       return 0;
+       return I2C_MATCH_ADDRESS_ONLY;
 }
 
 static void



Home | Main Index | Thread Index | Old Index