Lines Matching +full:bank +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
3 * 74Hx164 - Generic serial-in/parallel-out 8-bits shift register GPIO driver
38 return spi_write(to_spi_device(chip->gpio_chip.parent), chip->buffer, in __gen_74x164_write_config()
39 chip->registers); in __gen_74x164_write_config()
45 u8 bank = chip->registers - 1 - offset / 8; in gen_74x164_get_value() local
48 guard(mutex)(&chip->lock); in gen_74x164_get_value()
50 return !!(chip->buffer[bank] & BIT(pin)); in gen_74x164_get_value()
57 u8 bank = chip->registers - 1 - offset / 8; in gen_74x164_set_value() local
60 guard(mutex)(&chip->lock); in gen_74x164_set_value()
63 chip->buffer[bank] |= BIT(pin); in gen_74x164_set_value()
65 chip->buffer[bank] &= ~BIT(pin); in gen_74x164_set_value()
76 size_t bank; in gen_74x164_set_multiple() local
79 guard(mutex)(&chip->lock); in gen_74x164_set_multiple()
81 for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) { in gen_74x164_set_multiple()
82 bank = chip->registers - 1 - offset / 8; in gen_74x164_set_multiple()
85 chip->buffer[bank] &= ~bankmask; in gen_74x164_set_multiple()
86 chip->buffer[bank] |= bitmask; in gen_74x164_set_multiple()
102 gpiod_set_value_cansleep(chip->gpiod_oe, 0); in gen_74x164_deactivate()
107 gpiod_set_value_cansleep(chip->gpiod_oe, 1); in gen_74x164_activate()
113 struct device *dev = &spi->dev; in gen_74x164_probe()
121 spi->bits_per_word = 8; in gen_74x164_probe()
127 ret = device_property_read_u32(dev, "registers-number", &nregs); in gen_74x164_probe()
129 return dev_err_probe(dev, ret, "Missing 'registers-number' property.\n"); in gen_74x164_probe()
133 return -ENOMEM; in gen_74x164_probe()
135 chip->registers = nregs; in gen_74x164_probe()
137 chip->gpiod_oe = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW); in gen_74x164_probe()
138 if (IS_ERR(chip->gpiod_oe)) in gen_74x164_probe()
139 return PTR_ERR(chip->gpiod_oe); in gen_74x164_probe()
141 chip->gpio_chip.label = spi->modalias; in gen_74x164_probe()
142 chip->gpio_chip.direction_output = gen_74x164_direction_output; in gen_74x164_probe()
143 chip->gpio_chip.get = gen_74x164_get_value; in gen_74x164_probe()
144 chip->gpio_chip.set = gen_74x164_set_value; in gen_74x164_probe()
145 chip->gpio_chip.set_multiple = gen_74x164_set_multiple; in gen_74x164_probe()
146 chip->gpio_chip.base = -1; in gen_74x164_probe()
147 chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers; in gen_74x164_probe()
148 chip->gpio_chip.can_sleep = true; in gen_74x164_probe()
149 chip->gpio_chip.parent = dev; in gen_74x164_probe()
150 chip->gpio_chip.owner = THIS_MODULE; in gen_74x164_probe()
152 ret = devm_mutex_init(dev, &chip->lock); in gen_74x164_probe()
164 return devm_gpiochip_add_data(dev, &chip->gpio_chip, chip); in gen_74x164_probe()
168 { .name = "74hc595" },
169 { .name = "74lvc594" },
183 .name = "74x164",
193 MODULE_DESCRIPTION("GPIO expander driver for 74X164 8-bits shift register");