Source
139
139
word_mask = mask[word_index] & (port_mask << word_offset);
140
140
if (!word_mask) {
141
141
/* no get bits in this port so skip to next one */
142
142
continue;
143
143
}
144
144
145
145
/* read bits from current gpio port */
146
146
port_state = ioread8(ports[i]);
147
147
148
148
/* store acquired bits at respective bits array offset */
149
-
bits[word_index] |= port_state << word_offset;
149
+
bits[word_index] |= (port_state << word_offset) & word_mask;
150
150
}
151
151
152
152
return 0;
153
153
}
154
154
155
155
static void idio_16_gpio_set(struct gpio_chip *chip, unsigned int offset,
156
156
int value)
157
157
{
158
158
struct idio_16_gpio *const idio16gpio = gpiochip_get_data(chip);
159
159
unsigned int mask = BIT(offset);