> > > > - (dynaddr_parity(address) ? DAT_0_DYNADDR_PARITY : 0); > > > > + (parity8(address) ? 0 : DAT_0_DYNADDR_PARITY); ... > The old code is: > > -static inline bool dynaddr_parity(unsigned int addr) > > -{ > > - addr |= 1 << 7; > > - addr += addr >> 4; > > - addr += addr >> 2; > > - addr += addr >> 1; > > - return (addr & 1); > > -} > > So: > 1) it always sets 0x80. Right, this is why the arguments of the ternary operator above are exchanged. The old function was basically 'is_odd'. > 2) it uses addition not exclusive or. True, but it will work nonetheless because we are only interested in bit 0 of the result. For one bit, XOR and addition are interchangable. The overflow to other bits is not important. > So just not the same definition of 'parity'. I think it is. I mean, I3C wants odd parity, otherwise it will not work. And Jarkko kindly confirmed it still works.
Attachment:
signature.asc
Description: PGP signature