Lines Matching refs:dln2
17 #include <linux/mfd/dln2.h>
88 static int dln2_gpio_pin_cmd(struct dln2_gpio *dln2, int cmd, unsigned pin)
94 return dln2_transfer_tx(dln2->pdev, cmd, &req, sizeof(req));
97 static int dln2_gpio_pin_val(struct dln2_gpio *dln2, int cmd, unsigned int pin)
106 ret = dln2_transfer(dln2->pdev, cmd, &req, sizeof(req), &rsp, &len);
115 static int dln2_gpio_pin_get_in_val(struct dln2_gpio *dln2, unsigned int pin)
119 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_VAL, pin);
125 static int dln2_gpio_pin_get_out_val(struct dln2_gpio *dln2, unsigned int pin)
129 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_OUT_VAL, pin);
135 static int dln2_gpio_pin_set_out_val(struct dln2_gpio *dln2,
143 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_OUT_VAL, &req,
152 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
160 ret = dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_ENABLE, offset);
165 ret = dln2_transfer(dln2->pdev, DLN2_GPIO_PIN_GET_DIRECTION,
176 clear_bit(offset, dln2->output_enabled);
179 set_bit(offset, dln2->output_enabled);
187 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset);
193 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
195 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset);
200 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
202 if (test_bit(offset, dln2->output_enabled))
210 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
218 return dln2_gpio_pin_get_in_val(dln2, offset);
220 return dln2_gpio_pin_get_out_val(dln2, offset);
225 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
227 dln2_gpio_pin_set_out_val(dln2, offset, value);
233 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
240 ret = dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_DIRECTION,
246 set_bit(offset, dln2->output_enabled);
248 clear_bit(offset, dln2->output_enabled);
261 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
264 ret = dln2_gpio_pin_set_out_val(dln2, offset, value);
274 struct dln2_gpio *dln2 = gpiochip_get_data(chip);
281 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_SET_DEBOUNCE,
285 static int dln2_gpio_set_event_cfg(struct dln2_gpio *dln2, unsigned pin,
298 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_EVENT_CFG,
305 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);
325 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
330 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_HIGH;
333 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_LOW;
336 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE;
339 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_RISING;
342 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_FALLING;
354 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
356 mutex_lock(&dln2->irq_lock);
362 struct dln2_gpio *dln2 = gpiochip_get_data(gc);
368 enabled = test_bit(pin, dln2->enabled_irqs);
369 unmasked = test_bit(pin, dln2->unmasked_irqs);
373 type = dln2->irq_type[pin] & DLN2_GPIO_EVENT_MASK;
374 set_bit(pin, dln2->enabled_irqs);
377 clear_bit(pin, dln2->enabled_irqs);
380 ret = dln2_gpio_set_event_cfg(dln2, pin, type, 0);
382 dev_err(dln2->gpio.parent, "failed to set event\n");
385 mutex_unlock(&dln2->irq_lock);
389 .name = "dln2-irq",
410 struct dln2_gpio *dln2 = platform_get_drvdata(pdev);
413 dev_err(dln2->gpio.parent, "short event message\n");
418 if (pin >= dln2->gpio.ngpio) {
419 dev_err(dln2->gpio.parent, "out of bounds pin %d\n", pin);
423 switch (dln2->irq_type[pin]) {
434 ret = generic_handle_domain_irq(dln2->gpio.irq.domain, pin);
436 dev_err(dln2->gpio.parent, "pin %d not mapped to IRQ\n", pin);
441 struct dln2_gpio *dln2;
457 dln2 = devm_kzalloc(&pdev->dev, sizeof(*dln2), GFP_KERNEL);
458 if (!dln2)
461 mutex_init(&dln2->irq_lock);
463 dln2->pdev = pdev;
465 dln2->gpio.label = "dln2";
466 dln2->gpio.parent = dev;
467 dln2->gpio.owner = THIS_MODULE;
468 dln2->gpio.base = -1;
469 dln2->gpio.ngpio = pins;
470 dln2->gpio.can_sleep = true;
471 dln2->gpio.set = dln2_gpio_set;
472 dln2->gpio.get = dln2_gpio_get;
473 dln2->gpio.request = dln2_gpio_request;
474 dln2->gpio.free = dln2_gpio_free;
475 dln2->gpio.get_direction = dln2_gpio_get_direction;
476 dln2->gpio.direction_input = dln2_gpio_direction_input;
477 dln2->gpio.direction_output = dln2_gpio_direction_output;
478 dln2->gpio.set_config = dln2_gpio_set_config;
480 girq = &dln2->gpio.irq;
489 platform_set_drvdata(pdev, dln2);
491 ret = devm_gpiochip_add_data(dev, &dln2->gpio, dln2);
515 .driver.name = "dln2-gpio",
525 MODULE_ALIAS("platform:dln2-gpio");