.. | .. |
---|
65 | 65 | unsigned offset) |
---|
66 | 66 | { |
---|
67 | 67 | /* This device always input */ |
---|
68 | | - return 1; |
---|
| 68 | + return GPIO_LINE_DIRECTION_IN; |
---|
69 | 69 | } |
---|
70 | 70 | |
---|
71 | 71 | static int pisosr_gpio_direction_input(struct gpio_chip *chip, |
---|
.. | .. |
---|
96 | 96 | unsigned long *mask, unsigned long *bits) |
---|
97 | 97 | { |
---|
98 | 98 | struct pisosr_gpio *gpio = gpiochip_get_data(chip); |
---|
99 | | - unsigned int nbytes = DIV_ROUND_UP(chip->ngpio, 8); |
---|
100 | | - unsigned int i, j; |
---|
| 99 | + unsigned long offset; |
---|
| 100 | + unsigned long gpio_mask; |
---|
| 101 | + unsigned long buffer_state; |
---|
101 | 102 | |
---|
102 | 103 | pisosr_gpio_refresh(gpio); |
---|
103 | 104 | |
---|
104 | 105 | bitmap_zero(bits, chip->ngpio); |
---|
105 | | - for (i = 0; i < nbytes; i++) { |
---|
106 | | - j = i / sizeof(unsigned long); |
---|
107 | | - bits[j] |= ((unsigned long) gpio->buffer[i]) |
---|
108 | | - << (8 * (i % sizeof(unsigned long))); |
---|
| 106 | + for_each_set_clump8(offset, gpio_mask, mask, chip->ngpio) { |
---|
| 107 | + buffer_state = gpio->buffer[offset / 8] & gpio_mask; |
---|
| 108 | + bitmap_set_value8(bits, buffer_state, offset); |
---|
109 | 109 | } |
---|
110 | 110 | |
---|
111 | 111 | return 0; |
---|
.. | .. |
---|
148 | 148 | return -ENOMEM; |
---|
149 | 149 | |
---|
150 | 150 | gpio->load_gpio = devm_gpiod_get_optional(dev, "load", GPIOD_OUT_LOW); |
---|
151 | | - if (IS_ERR(gpio->load_gpio)) { |
---|
152 | | - ret = PTR_ERR(gpio->load_gpio); |
---|
153 | | - if (ret != -EPROBE_DEFER) |
---|
154 | | - dev_err(dev, "Unable to allocate load GPIO\n"); |
---|
155 | | - return ret; |
---|
156 | | - } |
---|
| 151 | + if (IS_ERR(gpio->load_gpio)) |
---|
| 152 | + return dev_err_probe(dev, PTR_ERR(gpio->load_gpio), |
---|
| 153 | + "Unable to allocate load GPIO\n"); |
---|
157 | 154 | |
---|
158 | 155 | mutex_init(&gpio->lock); |
---|
159 | 156 | |
---|