Date: Sun, 25 Feb 2018 09:48:58 -0500 From: Lee D <embaudarm@gmail.com> To: freebsd-hackers@freebsd.org Subject: Help, please, with getting a custom I2C real time clock module to load Message-ID: <CANC_bnOe1-%2BBQocKfNraJuq4UjbYe=ita=0qsy65EVMdhGQDLQ@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
Hi Everyone, I have written a new I2C driver (for the Xilinx Zynq) and a new real time clock chip driver (for the ST M41T82) to use with hardware on my custom board. This is for 11.0.1. The I2C driver works fine, but I can't seem to get my RTC driver to load. The m41t82_probe() function is never even called. Both are loaded with kldload at the moment. I think the problem is something in DRIVER_MODULE macro that is preventing the kernel from even trying to let it probe. One clue is that if I change "iicbus" to "simplebus" in the DRIVER_MODULE macro of the RTC, it will then at least call m41t82_probe(). It's like the kernel thinks that I have no iicbus driver and thus won't even try to load the RTC module. I have turned on "device iic" and "device iicbus" in my kernel config file. No messages are given when I try to load the m41t82 module. It just silently loads and does nothing. Here is a code snippet from my I2C driver: ------------------------------------------ static driver_t i2c_driver = { "i2c", i2c_methods, sizeof(struct i2c_softc), }; static devclass_t i2c_devclass; DRIVER_MODULE(iicbus, i2c, iicbus_driver, iicbus_devclass, 0, 0); DRIVER_MODULE(i2c, simplebus, i2c_driver, i2c_devclass, 0, 0); And here is a code snippet from my RTC driver: ---------------------------------------------- static device_method_t m41t82_methods[] = { DEVMETHOD(device_probe, m41t82_probe), DEVMETHOD(device_attach, m41t82_attach), DEVMETHOD(device_detach, m41t82_detach), DEVMETHOD(clock_gettime, m41t82_gettime), DEVMETHOD(clock_settime, m41t82_settime), DEVMETHOD_END }; static driver_t m41t82_driver = { "m41t82", m41t82_methods, sizeof(struct m41t82_softc), }; static devclass_t m41t82_devclass; DRIVER_MODULE(m41t82, iicbus, m41t82_driver, m41t82_devclass, NULL, NULL); MODULE_VERSION(m41t82, 1); MODULE_DEPEND(m41t82, iicbus, 1, 1, 1); This is the relevant portion of my DTS file: -------------------------------------------- ps7io@e0000000 { device_type = "soc"; compatible = "simple-bus"; #address-cells = <0x1>; #size-cells = <0x1>; ranges = <0x0 0xe0000000 0x300000>; ... Other hardware ... i2c@4000 { compatible = "xlnx,zy7_i2c"; status = "okay"; reg = <0x4000 0x1000>; #address-cells = <0x1>; #size-cells = <0x0>; rtc@d0 { status = "okay"; compatible = "st,m41t82"; reg = <0xd0>; }; }; }; Any clues about how to go about debugging this problem would be very helpful. Thanks, Lee
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANC_bnOe1-%2BBQocKfNraJuq4UjbYe=ita=0qsy65EVMdhGQDLQ>