Lines Matching refs:chip
35 static int __gen_74x164_write_config(struct gen_74x164_chip *chip)
37 return spi_write(to_spi_device(chip->gpio_chip.parent), chip->buffer,
38 chip->registers);
43 struct gen_74x164_chip *chip = gpiochip_get_data(gc);
44 u8 bank = chip->registers - 1 - offset / 8;
48 mutex_lock(&chip->lock);
49 ret = (chip->buffer[bank] >> pin) & 0x1;
50 mutex_unlock(&chip->lock);
58 struct gen_74x164_chip *chip = gpiochip_get_data(gc);
59 u8 bank = chip->registers - 1 - offset / 8;
62 mutex_lock(&chip->lock);
64 chip->buffer[bank] |= (1 << pin);
66 chip->buffer[bank] &= ~(1 << pin);
68 __gen_74x164_write_config(chip);
69 mutex_unlock(&chip->lock);
75 struct gen_74x164_chip *chip = gpiochip_get_data(gc);
81 mutex_lock(&chip->lock);
82 for_each_set_clump8(offset, bankmask, mask, chip->registers * 8) {
83 bank = chip->registers - 1 - offset / 8;
86 chip->buffer[bank] &= ~bankmask;
87 chip->buffer[bank] |= bitmask;
89 __gen_74x164_write_config(chip);
90 mutex_unlock(&chip->lock);
102 struct gen_74x164_chip *chip;
121 chip = devm_kzalloc(&spi->dev, sizeof(*chip) + nregs, GFP_KERNEL);
122 if (!chip)
125 chip->gpiod_oe = devm_gpiod_get_optional(&spi->dev, "enable",
127 if (IS_ERR(chip->gpiod_oe))
128 return PTR_ERR(chip->gpiod_oe);
130 spi_set_drvdata(spi, chip);
132 chip->gpio_chip.label = spi->modalias;
133 chip->gpio_chip.direction_output = gen_74x164_direction_output;
134 chip->gpio_chip.get = gen_74x164_get_value;
135 chip->gpio_chip.set = gen_74x164_set_value;
136 chip->gpio_chip.set_multiple = gen_74x164_set_multiple;
137 chip->gpio_chip.base = -1;
139 chip->registers = nregs;
140 chip->gpio_chip.ngpio = GEN_74X164_NUMBER_GPIOS * chip->registers;
142 chip->gpio_chip.can_sleep = true;
143 chip->gpio_chip.parent = &spi->dev;
144 chip->gpio_chip.owner = THIS_MODULE;
146 mutex_init(&chip->lock);
148 ret = __gen_74x164_write_config(chip);
154 gpiod_set_value_cansleep(chip->gpiod_oe, 1);
156 ret = gpiochip_add_data(&chip->gpio_chip, chip);
161 mutex_destroy(&chip->lock);
168 struct gen_74x164_chip *chip = spi_get_drvdata(spi);
170 gpiod_set_value_cansleep(chip->gpiod_oe, 0);
171 gpiochip_remove(&chip->gpio_chip);
172 mutex_destroy(&chip->lock);