[go: nahoru, domu]

Lines Matching refs:gpio

21 #include <linux/gpio.h>
95 unsigned irq_mapped; /* mapped gpio irqs */
141 struct pcf857x *gpio = container_of(chip, struct pcf857x, chip);
144 mutex_lock(&gpio->lock);
145 gpio->out |= (1 << offset);
146 status = gpio->write(gpio->client, gpio->out);
147 mutex_unlock(&gpio->lock);
154 struct pcf857x *gpio = container_of(chip, struct pcf857x, chip);
157 value = gpio->read(gpio->client);
163 struct pcf857x *gpio = container_of(chip, struct pcf857x, chip);
167 mutex_lock(&gpio->lock);
169 gpio->out |= bit;
171 gpio->out &= ~bit;
172 status = gpio->write(gpio->client, gpio->out);
173 mutex_unlock(&gpio->lock);
187 struct pcf857x *gpio = container_of(chip, struct pcf857x, chip);
190 ret = irq_create_mapping(gpio->irq_domain, offset);
192 gpio->irq_mapped |= (1 << offset);
199 struct pcf857x *gpio = data;
202 status = gpio->read(gpio->client);
204 spin_lock_irqsave(&gpio->slock, flags);
207 * call the interrupt handler iff gpio is used as
211 change = ((gpio->status ^ status) & gpio->irq_mapped);
212 for_each_set_bit(i, &change, gpio->chip.ngpio)
213 generic_handle_irq(irq_find_mapping(gpio->irq_domain, i));
214 gpio->status = status;
216 spin_unlock_irqrestore(&gpio->slock, flags);
224 struct pcf857x *gpio = domain->host_data;
234 gpio->irq_mapped |= (1 << hw);
243 static void pcf857x_irq_domain_cleanup(struct pcf857x *gpio)
245 if (gpio->irq_domain)
246 irq_domain_remove(gpio->irq_domain);
250 static int pcf857x_irq_domain_init(struct pcf857x *gpio,
255 gpio->irq_domain = irq_domain_add_linear(client->dev.of_node,
256 gpio->chip.ngpio,
258 gpio);
259 if (!gpio->irq_domain)
266 dev_name(&client->dev), gpio);
272 gpio->chip.to_irq = pcf857x_to_irq;
277 pcf857x_irq_domain_cleanup(gpio);
288 struct pcf857x *gpio;
300 gpio = devm_kzalloc(&client->dev, sizeof(*gpio), GFP_KERNEL);
301 if (!gpio)
304 mutex_init(&gpio->lock);
305 spin_lock_init(&gpio->slock);
307 gpio->chip.base = pdata ? pdata->gpio_base : -1;
308 gpio->chip.can_sleep = true;
309 gpio->chip.dev = &client->dev;
310 gpio->chip.owner = THIS_MODULE;
311 gpio->chip.get = pcf857x_get;
312 gpio->chip.set = pcf857x_set;
313 gpio->chip.direction_input = pcf857x_input;
314 gpio->chip.direction_output = pcf857x_output;
315 gpio->chip.ngpio = id->driver_data;
319 status = pcf857x_irq_domain_init(gpio, client);
337 if (gpio->chip.ngpio == 8) {
338 gpio->write = i2c_write_le8;
339 gpio->read = i2c_read_le8;
355 } else if (gpio->chip.ngpio == 16) {
356 gpio->write = i2c_write_le16;
357 gpio->read = i2c_read_le16;
374 gpio->chip.label = client->name;
376 gpio->client = client;
377 i2c_set_clientdata(client, gpio);
394 gpio->out = ~n_latch;
395 gpio->status = gpio->out;
397 status = gpiochip_add(&gpio->chip);
406 gpio->chip.base, gpio->chip.ngpio,
418 pcf857x_irq_domain_cleanup(gpio);
430 struct pcf857x *gpio = i2c_get_clientdata(client);
435 gpio->chip.base, gpio->chip.ngpio,
445 pcf857x_irq_domain_cleanup(gpio);
447 gpiochip_remove(&gpio->chip);