Date: Sun, 10 Nov 2019 23:27:34 +0400 From: mishin@mh.san.ru To: freebsd-arm@freebsd.org Subject: Re: Can't write to IIC by I2CRDWR with two records 'struct iic_msg' Message-ID: <5b39ff7578673fd07d43525a73ebd50e@mh.san.ru> In-Reply-To: <CANCZdfqPwjodLLoPm6ggCZSHoCZrgMz4KRJDpdFFeXC35eVkwA@mail.gmail.com> References: <7ace6346d97d0bfe95cfab3cb6fa820b@mh.san.ru> <1dff42bdef54d3eca4791e5da729ee479b386731.camel@freebsd.org> <20191110162225.49afa19a8031d679e97f03bd@bidouilliste.com> <CANCZdfqPwjodLLoPm6ggCZSHoCZrgMz4KRJDpdFFeXC35eVkwA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Warner Losh писал 2019-11-10 21:22: > On Sun, Nov 10, 2019 at 8:22 AM Emmanuel Vadot <manu@bidouilliste.com> > wrote: > >> On Sun, 10 Nov 2019 08:16:03 -0700 >> Ian Lepore <ian@freebsd.org> wrote: >> >> > On Sun, 2019-11-10 at 16:55 +0400, mishin@mh.san.ru wrote: >> > > About a system: >> > > 1. FreeBSD betta 12.1-STABLE FreeBSD 12.1-STABLE r354236 >> > > OPI_ZERO arm >> > > 2. Allwinner H2+ >> > > 3. >> > > iichb0: <Allwinner Integrated I2C Bus Controller> mem >> > > 0x1c2ac00-0x1c2afff irq 35 on simplebus0 >> > > iicbus0: <OFW I2C bus> on iichb0 >> > > iic0: <I2C generic I/O> on iicbus0 >> > > >> > > >> > > I trying to send a data array following a register value to a >> > > SSD1306 >> > > display >> > > from 'Allwinner H2+' by a following method (according to `i2c.c`): >> > > >> > > char SSD1306::iic_write(uint8_t offset, uint8_t data[], uint16_t >> > > size) >> > > const { >> > > struct iic_msg msgs[2] = >> > > { >> > > {slave_addr, IIC_M_WR | IIC_M_NOSTOP, sizeof(offset), &offset}, >> > > {slave_addr, IIC_M_WR | IIC_M_NOSTART, size, data} >> > > }; >> > >> > Some i2c hardware controller drivers don't properly support the NOSTOP >> > and NOSTART flags. Sometimes it's a bug, and sometimes it's because >> > hardware limitations prevent it. In the allwinner case, I think it's a >> > bug, but manu would know for sure. >> > >> > -- Ian >> >> TWSI supports NOSTOP but I could never find the right incantation to >> support NOSTART. >> > > In the past I've had good luck "simulating" it with a single transfer > that > did the entire thing for picky hardware that doesn't like to > 'interrupt' > transactions. It's less convenient, to be sure, but works well when you > have no other choice... It's clearly used here as a means to > scatter/gather > the data... > > Warner > Thanks for all replies. I generally expected to hear something like that. So I'll revert that method back to the "simulating it with a single transfer". Thanks. P.S.: Sorry, if received that message twice. >> > > >> > > char SSD1306::iic_write(uint8_t data[], uint16_t size) const >> > > { >> > > struct iic_msg msgs[1] = >> > > { >> > > {slave_addr, IIC_M_WR, size, data} >> > > }; >> > > struct iic_rdwr_data xfer = {msgs, 1}; >> > > >> > > if ( ioctl(iic_handle, I2CRDWR, &xfer) == -1) { >> > > perror("ioctl(I2CRDWR)"); >> > > return(-1); >> > > }; >> > > return(0); >> > > } >> > > _______________________________________________ >> > > freebsd-arm@freebsd.org mailing list >> > > https://lists.freebsd.org/mailman/listinfo/freebsd-arm >> > > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org >> > > " >> > >> > _______________________________________________ >> > freebsd-arm@freebsd.org mailing list >> > https://lists.freebsd.org/mailman/listinfo/freebsd-arm >> > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org" >> >> >> -- >> Emmanuel Vadot <manu@bidouilliste.com> >> _______________________________________________ >> freebsd-arm@freebsd.org mailing list >> https://lists.freebsd.org/mailman/listinfo/freebsd-arm >> To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org" >> > _______________________________________________ > freebsd-arm@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-arm > To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5b39ff7578673fd07d43525a73ebd50e>