On Mon, 3 Nov 2008 15:30:25 +0100, Phil Sutter <n0-1@xxxxxxxxxxx> wrote: > The algorithm works unconditionally. If bitval is one, the first line is > a no op and the second line sets the bit at offset position. Vice versa, > if bitval is zero, the first line clears the bit at offset position and > the second line is a no op. Well, the linux gpio framework uses 0 for low, _nonzero_ for high. You should not assume the bitval is 0 or 1. val &= ~(!bitval << offset); /* unset bit if bitval == 0 */ val |= (!!bitval << offset); /* set bit if bitval != 0 */ would be safe here. Or you should ensure the bitval is 0 or 1 somewhere. --- Atsushi Nemoto