Lines Matching defs:dln2
17 #include <linux/mfd/dln2.h>
89 static int dln2_gpio_pin_cmd(struct dln2_gpio *dln2, int cmd, unsigned pin)
95 return dln2_transfer_tx(dln2->pdev, cmd, &req, sizeof(req));
98 static int dln2_gpio_pin_val(struct dln2_gpio *dln2, int cmd, unsigned int pin)
107 ret = dln2_transfer(dln2->pdev, cmd, &req, sizeof(req), &rsp, &len);
116 static int dln2_gpio_pin_get_in_val(struct dln2_gpio *dln2, unsigned int pin)
120 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_VAL, pin);
126 static int dln2_gpio_pin_get_out_val(struct dln2_gpio *dln2, unsigned int pin)
130 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_OUT_VAL, pin);
136 static int dln2_gpio_pin_set_out_val(struct dln2_gpio *dln2,
144 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_OUT_VAL, &req,
153 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
161 ret = dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_ENABLE, offset);
166 ret = dln2_transfer(dln2->pdev, DLN2_GPIO_PIN_GET_DIRECTION,
177 clear_bit(offset, dln2->output_enabled);
180 set_bit(offset, dln2->output_enabled);
188 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset);
194 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
196 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset);
201 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
203 if (test_bit(offset, dln2->output_enabled))
211 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
219 return dln2_gpio_pin_get_in_val(dln2, offset);
221 return dln2_gpio_pin_get_out_val(dln2, offset);
226 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
228 dln2_gpio_pin_set_out_val(dln2, offset, value);
234 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
241 ret = dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_DIRECTION,
247 set_bit(offset, dln2->output_enabled);
249 clear_bit(offset, dln2->output_enabled);
262 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
265 ret = dln2_gpio_pin_set_out_val(dln2, offset, value);
275 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
282 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_SET_DEBOUNCE,
286 static int dln2_gpio_set_event_cfg(struct dln2_gpio *dln2, unsigned pin,
299 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_EVENT_CFG,
306 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
309 set_bit(pin, dln2->unmasked_irqs);
315 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
318 clear_bit(pin, dln2->unmasked_irqs);
324 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
329 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_HIGH;
332 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_LOW;
335 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE;
338 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_RISING;
341 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_FALLING;
353 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
355 mutex_lock(&dln2->irq_lock);
361 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
367 enabled = test_bit(pin, dln2->enabled_irqs);
368 unmasked = test_bit(pin, dln2->unmasked_irqs);
372 type = dln2->irq_type[pin] & DLN2_GPIO_EVENT_MASK;
373 set_bit(pin, dln2->enabled_irqs);
376 clear_bit(pin, dln2->enabled_irqs);
379 ret = dln2_gpio_set_event_cfg(dln2, pin, type, 0);
381 dev_err(dln2->gpio.parent, "failed to set event\n");
384 mutex_unlock(&dln2->irq_lock);
398 struct dln2_gpio *dln2 = platform_get_drvdata(pdev);
401 dev_err(dln2->gpio.parent, "short event message\n");
406 if (pin >= dln2->gpio.ngpio) {
407 dev_err(dln2->gpio.parent, "out of bounds pin %d\n", pin);
411 irq = irq_find_mapping(dln2->gpio.irq.domain, pin);
413 dev_err(dln2->gpio.parent, "pin %d not mapped to IRQ\n", pin);
417 switch (dln2->irq_type[pin]) {
433 struct dln2_gpio *dln2;
449 dln2 = devm_kzalloc(&pdev->dev, sizeof(*dln2), GFP_KERNEL);
450 if (!dln2)
453 mutex_init(&dln2->irq_lock);
455 dln2->pdev = pdev;
457 dln2->gpio.label = "dln2";
458 dln2->gpio.parent = dev;
459 dln2->gpio.owner = THIS_MODULE;
460 dln2->gpio.base = -1;
461 dln2->gpio.ngpio = pins;
462 dln2->gpio.can_sleep = true;
463 dln2->gpio.set = dln2_gpio_set;
464 dln2->gpio.get = dln2_gpio_get;
465 dln2->gpio.request = dln2_gpio_request;
466 dln2->gpio.free = dln2_gpio_free;
467 dln2->gpio.get_direction = dln2_gpio_get_direction;
468 dln2->gpio.direction_input = dln2_gpio_direction_input;
469 dln2->gpio.direction_output = dln2_gpio_direction_output;
470 dln2->gpio.set_config = dln2_gpio_set_config;
472 dln2->irqchip.name = "dln2-irq",
473 dln2->irqchip.irq_mask = dln2_irq_mask,
474 dln2->irqchip.irq_unmask = dln2_irq_unmask,
475 dln2->irqchip.irq_set_type = dln2_irq_set_type,
476 dln2->irqchip.irq_bus_lock = dln2_irq_bus_lock,
477 dln2->irqchip.irq_bus_sync_unlock = dln2_irq_bus_unlock,
479 girq = &dln2->gpio.irq;
480 girq->chip = &dln2->irqchip;
488 platform_set_drvdata(pdev, dln2);
490 ret = devm_gpiochip_add_data(dev, &dln2->gpio, dln2);
514 .driver.name = "dln2-gpio",
524 MODULE_ALIAS("platform:dln2-gpio");