Lines Matching refs:dln2

92 static int dln2_gpio_pin_cmd(struct dln2_gpio *dln2, int cmd, unsigned pin)  in dln2_gpio_pin_cmd()  argument
98 return dln2_transfer_tx(dln2->pdev, cmd, &req, sizeof(req)); in dln2_gpio_pin_cmd()
101 static int dln2_gpio_pin_val(struct dln2_gpio *dln2, int cmd, unsigned int pin) in dln2_gpio_pin_val() argument
110 ret = dln2_transfer(dln2->pdev, cmd, &req, sizeof(req), &rsp, &len); in dln2_gpio_pin_val()
119 static int dln2_gpio_pin_get_in_val(struct dln2_gpio *dln2, unsigned int pin) in dln2_gpio_pin_get_in_val() argument
123 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_VAL, pin); in dln2_gpio_pin_get_in_val()
129 static int dln2_gpio_pin_get_out_val(struct dln2_gpio *dln2, unsigned int pin) in dln2_gpio_pin_get_out_val() argument
133 ret = dln2_gpio_pin_val(dln2, DLN2_GPIO_PIN_GET_OUT_VAL, pin); in dln2_gpio_pin_get_out_val()
139 static int dln2_gpio_pin_set_out_val(struct dln2_gpio *dln2, in dln2_gpio_pin_set_out_val() argument
147 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_OUT_VAL, &req, in dln2_gpio_pin_set_out_val()
156 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_request() local
164 ret = dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_ENABLE, offset); in dln2_gpio_request()
169 ret = dln2_transfer(dln2->pdev, DLN2_GPIO_PIN_GET_DIRECTION, in dln2_gpio_request()
180 clear_bit(offset, dln2->output_enabled); in dln2_gpio_request()
183 set_bit(offset, dln2->output_enabled); in dln2_gpio_request()
191 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset); in dln2_gpio_request()
197 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_free() local
199 dln2_gpio_pin_cmd(dln2, DLN2_GPIO_PIN_DISABLE, offset); in dln2_gpio_free()
204 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_get_direction() local
206 if (test_bit(offset, dln2->output_enabled)) in dln2_gpio_get_direction()
214 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_get() local
222 return dln2_gpio_pin_get_in_val(dln2, offset); in dln2_gpio_get()
224 return dln2_gpio_pin_get_out_val(dln2, offset); in dln2_gpio_get()
229 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_set() local
231 dln2_gpio_pin_set_out_val(dln2, offset, value); in dln2_gpio_set()
237 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_set_direction() local
244 ret = dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_DIRECTION, in dln2_gpio_set_direction()
250 set_bit(offset, dln2->output_enabled); in dln2_gpio_set_direction()
252 clear_bit(offset, dln2->output_enabled); in dln2_gpio_set_direction()
265 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_direction_output() local
268 ret = dln2_gpio_pin_set_out_val(dln2, offset, value); in dln2_gpio_direction_output()
278 struct dln2_gpio *dln2 = container_of(chip, struct dln2_gpio, gpio); in dln2_gpio_set_debounce() local
281 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_SET_DEBOUNCE, in dln2_gpio_set_debounce()
285 static int dln2_gpio_set_event_cfg(struct dln2_gpio *dln2, unsigned pin, in dln2_gpio_set_event_cfg() argument
298 return dln2_transfer_tx(dln2->pdev, DLN2_GPIO_PIN_SET_EVENT_CFG, in dln2_gpio_set_event_cfg()
305 struct dln2_gpio *dln2 = container_of(gc, struct dln2_gpio, gpio); in dln2_irq_unmask() local
308 set_bit(pin, dln2->unmasked_irqs); in dln2_irq_unmask()
314 struct dln2_gpio *dln2 = container_of(gc, struct dln2_gpio, gpio); in dln2_irq_mask() local
317 clear_bit(pin, dln2->unmasked_irqs); in dln2_irq_mask()
323 struct dln2_gpio *dln2 = container_of(gc, struct dln2_gpio, gpio); in dln2_irq_set_type() local
328 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_HIGH; in dln2_irq_set_type()
331 dln2->irq_type[pin] = DLN2_GPIO_EVENT_LVL_LOW; in dln2_irq_set_type()
334 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE; in dln2_irq_set_type()
337 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_RISING; in dln2_irq_set_type()
340 dln2->irq_type[pin] = DLN2_GPIO_EVENT_CHANGE_FALLING; in dln2_irq_set_type()
352 struct dln2_gpio *dln2 = container_of(gc, struct dln2_gpio, gpio); in dln2_irq_bus_lock() local
354 mutex_lock(&dln2->irq_lock); in dln2_irq_bus_lock()
360 struct dln2_gpio *dln2 = container_of(gc, struct dln2_gpio, gpio); in dln2_irq_bus_unlock() local
366 enabled = test_bit(pin, dln2->enabled_irqs); in dln2_irq_bus_unlock()
367 unmasked = test_bit(pin, dln2->unmasked_irqs); in dln2_irq_bus_unlock()
371 type = dln2->irq_type[pin] & DLN2_GPIO_EVENT_MASK; in dln2_irq_bus_unlock()
372 set_bit(pin, dln2->enabled_irqs); in dln2_irq_bus_unlock()
375 clear_bit(pin, dln2->enabled_irqs); in dln2_irq_bus_unlock()
378 ret = dln2_gpio_set_event_cfg(dln2, pin, type, 0); in dln2_irq_bus_unlock()
380 dev_err(dln2->gpio.dev, "failed to set event\n"); in dln2_irq_bus_unlock()
383 mutex_unlock(&dln2->irq_lock); in dln2_irq_bus_unlock()
406 struct dln2_gpio *dln2 = platform_get_drvdata(pdev); in dln2_gpio_event() local
409 dev_err(dln2->gpio.dev, "short event message\n"); in dln2_gpio_event()
414 if (pin >= dln2->gpio.ngpio) { in dln2_gpio_event()
415 dev_err(dln2->gpio.dev, "out of bounds pin %d\n", pin); in dln2_gpio_event()
419 irq = irq_find_mapping(dln2->gpio.irqdomain, pin); in dln2_gpio_event()
421 dev_err(dln2->gpio.dev, "pin %d not mapped to IRQ\n", pin); in dln2_gpio_event()
425 switch (dln2->irq_type[pin]) { in dln2_gpio_event()
441 struct dln2_gpio *dln2; in dln2_gpio_probe() local
456 dln2 = devm_kzalloc(&pdev->dev, sizeof(*dln2), GFP_KERNEL); in dln2_gpio_probe()
457 if (!dln2) in dln2_gpio_probe()
460 mutex_init(&dln2->irq_lock); in dln2_gpio_probe()
462 dln2->pdev = pdev; in dln2_gpio_probe()
464 dln2->gpio.label = "dln2"; in dln2_gpio_probe()
465 dln2->gpio.dev = dev; in dln2_gpio_probe()
466 dln2->gpio.owner = THIS_MODULE; in dln2_gpio_probe()
467 dln2->gpio.base = -1; in dln2_gpio_probe()
468 dln2->gpio.ngpio = pins; in dln2_gpio_probe()
469 dln2->gpio.exported = true; in dln2_gpio_probe()
470 dln2->gpio.can_sleep = true; in dln2_gpio_probe()
471 dln2->gpio.irq_not_threaded = true; in dln2_gpio_probe()
472 dln2->gpio.set = dln2_gpio_set; in dln2_gpio_probe()
473 dln2->gpio.get = dln2_gpio_get; in dln2_gpio_probe()
474 dln2->gpio.request = dln2_gpio_request; in dln2_gpio_probe()
475 dln2->gpio.free = dln2_gpio_free; in dln2_gpio_probe()
476 dln2->gpio.get_direction = dln2_gpio_get_direction; in dln2_gpio_probe()
477 dln2->gpio.direction_input = dln2_gpio_direction_input; in dln2_gpio_probe()
478 dln2->gpio.direction_output = dln2_gpio_direction_output; in dln2_gpio_probe()
479 dln2->gpio.set_debounce = dln2_gpio_set_debounce; in dln2_gpio_probe()
481 platform_set_drvdata(pdev, dln2); in dln2_gpio_probe()
483 ret = gpiochip_add(&dln2->gpio); in dln2_gpio_probe()
489 ret = gpiochip_irqchip_add(&dln2->gpio, &dln2_gpio_irqchip, 0, in dln2_gpio_probe()
506 gpiochip_remove(&dln2->gpio); in dln2_gpio_probe()
513 struct dln2_gpio *dln2 = platform_get_drvdata(pdev); in dln2_gpio_remove() local
516 gpiochip_remove(&dln2->gpio); in dln2_gpio_remove()