Lines Matching refs:ljca_gpio

75 static int gpio_config(struct ljca_gpio_dev *ljca_gpio, u8 gpio_id, u8 config)
77 struct gpio_packet *packet = (struct gpio_packet *)ljca_gpio->obuf;
80 mutex_lock(&ljca_gpio->trans_lock);
82 packet->item[0].value = config | ljca_gpio->connect_mode[gpio_id];
85 ret = ljca_transfer(ljca_gpio->gpio_info->ljca, LJCA_GPIO_CONFIG, packet,
87 mutex_unlock(&ljca_gpio->trans_lock);
91 static int ljca_gpio_read(struct ljca_gpio_dev *ljca_gpio, u8 gpio_id)
93 struct gpio_packet *packet = (struct gpio_packet *)ljca_gpio->obuf;
94 struct gpio_packet *ack_packet = (struct gpio_packet *)ljca_gpio->ibuf;
98 mutex_lock(&ljca_gpio->trans_lock);
101 ret = ljca_transfer(ljca_gpio->gpio_info->ljca, LJCA_GPIO_READ, packet,
102 struct_size(packet, item, packet->num), ljca_gpio->ibuf, &ibuf_len);
107 dev_err(&ljca_gpio->pdev->dev, "failed gpio_id:%u %u", gpio_id, ack_packet->num);
112 mutex_unlock(&ljca_gpio->trans_lock);
118 static int ljca_gpio_write(struct ljca_gpio_dev *ljca_gpio, u8 gpio_id,
121 struct gpio_packet *packet = (struct gpio_packet *)ljca_gpio->obuf;
124 mutex_lock(&ljca_gpio->trans_lock);
129 ret = ljca_transfer(ljca_gpio->gpio_info->ljca, LJCA_GPIO_WRITE, packet,
131 mutex_unlock(&ljca_gpio->trans_lock);
137 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
139 return ljca_gpio_read(ljca_gpio, offset);
145 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
148 ret = ljca_gpio_write(ljca_gpio, offset, val);
156 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
159 return gpio_config(ljca_gpio, offset, config);
165 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
169 ret = gpio_config(ljca_gpio, offset, config);
180 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
182 ljca_gpio->connect_mode[offset] = 0;
185 ljca_gpio->connect_mode[offset] |= LJCA_GPIO_CONF_PULLUP;
188 ljca_gpio->connect_mode[offset] |= LJCA_GPIO_CONF_PULLDOWN;
203 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(chip);
205 WARN_ON_ONCE(ngpios != ljca_gpio->gpio_info->num);
206 bitmap_copy(valid_mask, ljca_gpio->gpio_info->valid_pin_map, ngpios);
217 static int ljca_enable_irq(struct ljca_gpio_dev *ljca_gpio, int gpio_id, bool enable)
219 struct gpio_packet *packet = (struct gpio_packet *)ljca_gpio->obuf;
222 mutex_lock(&ljca_gpio->trans_lock);
227 ret = ljca_transfer(ljca_gpio->gpio_info->ljca,
230 mutex_unlock(&ljca_gpio->trans_lock);
236 struct ljca_gpio_dev *ljca_gpio = container_of(work, struct ljca_gpio_dev, work);
240 for_each_set_bit(gpio_id, ljca_gpio->reenable_irqs, ljca_gpio->gc.ngpio) {
241 clear_bit(gpio_id, ljca_gpio->reenable_irqs);
242 unmasked = test_bit(gpio_id, ljca_gpio->unmasked_irqs);
244 ljca_enable_irq(ljca_gpio, gpio_id, true);
251 struct ljca_gpio_dev *ljca_gpio = context;
259 irq = irq_find_mapping(ljca_gpio->gc.irq.domain, packet->item[i].index);
261 dev_err(ljca_gpio->gc.parent, "gpio_id %u does not mapped to IRQ yet\n",
266 generic_handle_domain_irq(ljca_gpio->gc.irq.domain, irq);
267 set_bit(packet->item[i].index, ljca_gpio->reenable_irqs);
270 schedule_work(&ljca_gpio->work);
276 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(gc);
280 set_bit(gpio_id, ljca_gpio->unmasked_irqs);
286 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(gc);
289 clear_bit(gpio_id, ljca_gpio->unmasked_irqs);
296 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(gc);
299 ljca_gpio->connect_mode[gpio_id] = LJCA_GPIO_CONF_INTERRUPT;
302 ljca_gpio->connect_mode[gpio_id] |= (LJCA_GPIO_CONF_LEVEL | LJCA_GPIO_CONF_PULLUP);
305 ljca_gpio->connect_mode[gpio_id] |= (LJCA_GPIO_CONF_LEVEL | LJCA_GPIO_CONF_PULLDOWN);
310 ljca_gpio->connect_mode[gpio_id] |= (LJCA_GPIO_CONF_EDGE | LJCA_GPIO_CONF_PULLUP);
313 ljca_gpio->connect_mode[gpio_id] |= (LJCA_GPIO_CONF_EDGE | LJCA_GPIO_CONF_PULLDOWN);
325 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(gc);
327 mutex_lock(&ljca_gpio->irq_lock);
333 struct ljca_gpio_dev *ljca_gpio = gpiochip_get_data(gc);
338 enabled = test_bit(gpio_id, ljca_gpio->enabled_irqs);
339 unmasked = test_bit(gpio_id, ljca_gpio->unmasked_irqs);
343 gpio_config(ljca_gpio, gpio_id, 0);
344 ljca_enable_irq(ljca_gpio, gpio_id, true);
345 set_bit(gpio_id, ljca_gpio->enabled_irqs);
347 ljca_enable_irq(ljca_gpio, gpio_id, false);
348 clear_bit(gpio_id, ljca_gpio->enabled_irqs);
352 mutex_unlock(&ljca_gpio->irq_lock);
368 struct ljca_gpio_dev *ljca_gpio;
372 ljca_gpio = devm_kzalloc(&pdev->dev, sizeof(*ljca_gpio), GFP_KERNEL);
373 if (!ljca_gpio)
376 ljca_gpio->gpio_info = dev_get_platdata(&pdev->dev);
377 ljca_gpio->connect_mode = devm_kcalloc(&pdev->dev, ljca_gpio->gpio_info->num,
378 sizeof(*ljca_gpio->connect_mode), GFP_KERNEL);
379 if (!ljca_gpio->connect_mode)
382 mutex_init(&ljca_gpio->irq_lock);
383 mutex_init(&ljca_gpio->trans_lock);
384 ljca_gpio->pdev = pdev;
385 ljca_gpio->gc.direction_input = ljca_gpio_direction_input;
386 ljca_gpio->gc.direction_output = ljca_gpio_direction_output;
387 ljca_gpio->gc.get = ljca_gpio_get_value;
388 ljca_gpio->gc.set = ljca_gpio_set_value;
389 ljca_gpio->gc.set_config = ljca_gpio_set_config;
390 ljca_gpio->gc.init_valid_mask = ljca_gpio_init_valid_mask;
391 ljca_gpio->gc.can_sleep = true;
392 ljca_gpio->gc.parent = &pdev->dev;
394 ljca_gpio->gc.base = -1;
395 ljca_gpio->gc.ngpio = ljca_gpio->gpio_info->num;
396 ljca_gpio->gc.label = ACPI_COMPANION(&pdev->dev) ?
399 ljca_gpio->gc.owner = THIS_MODULE;
401 platform_set_drvdata(pdev, ljca_gpio);
402 ljca_register_event_cb(ljca_gpio->gpio_info->ljca, ljca_gpio_event_cb, ljca_gpio);
404 girq = &ljca_gpio->gc.irq;
413 INIT_WORK(&ljca_gpio->work, ljca_gpio_async);
414 ret = gpiochip_add_data(&ljca_gpio->gc, ljca_gpio);
416 ljca_unregister_event_cb(ljca_gpio->gpio_info->ljca);
417 mutex_destroy(&ljca_gpio->irq_lock);
418 mutex_destroy(&ljca_gpio->trans_lock);
426 struct ljca_gpio_dev *ljca_gpio = platform_get_drvdata(pdev);
428 gpiochip_remove(&ljca_gpio->gc);
429 ljca_unregister_event_cb(ljca_gpio->gpio_info->ljca);
430 mutex_destroy(&ljca_gpio->irq_lock);
431 mutex_destroy(&ljca_gpio->trans_lock);