Lines Matching refs:gpiod
32 struct gpio_detect *gpiod = container_of(work, struct gpio_detect, in gpio_det_work_func() local
34 int val = gpio_get_value(gpiod->gpio); in gpio_det_work_func()
37 __func__, gpiod->val, val); in gpio_det_work_func()
39 if (gpiod->val != val) { in gpio_det_work_func()
40 gpiod->val = val; in gpio_det_work_func()
47 struct gpio_detect *gpiod = dev_id; in gpio_det_interrupt() local
48 int val = gpio_get_value(gpiod->gpio); in gpio_det_interrupt()
55 irq_set_irq_type(gpiod->irq, irqflags); in gpio_det_interrupt()
57 mod_delayed_work(system_wq, &gpiod->work, in gpio_det_interrupt()
58 msecs_to_jiffies(gpiod->debounce_ms)); in gpio_det_interrupt()
63 static int vehicle_gpio_init_check(struct gpio_detect *gpiod) in vehicle_gpio_init_check() argument
65 gpiod->val = gpio_get_value(gpiod->gpio); in vehicle_gpio_init_check()
67 dev_info(gpiod->dev, "%s: gpiod->atv_val(%d), gpiod->val(%d)\n", in vehicle_gpio_init_check()
68 __func__, gpiod->atv_val, gpiod->val); in vehicle_gpio_init_check()
70 if (gpiod->atv_val == gpiod->val) { in vehicle_gpio_init_check()
78 bool vehicle_gpio_reverse_check(struct gpio_detect *gpiod) in vehicle_gpio_reverse_check() argument
80 int val = gpiod->val ^ gpiod->atv_val; in vehicle_gpio_reverse_check()
82 if (gpiod->num == 0) in vehicle_gpio_reverse_check()
88 static int gpio_parse_dt(struct gpio_detect *gpiod, const char *ad_name) in gpio_parse_dt() argument
90 struct device *dev = gpiod->dev; in gpio_parse_dt()
102 gpiod->num = of_get_child_count(gpiod_node); in gpio_parse_dt()
103 if (gpiod->num == 0) { in gpio_parse_dt()
113 gpiod->gpio = of_get_named_gpio_flags(node, "car-reverse-gpios", 0, &flags); in gpio_parse_dt()
114 if (!gpio_is_valid(gpiod->gpio)) { in gpio_parse_dt()
118 gpiod->atv_val = !(flags & OF_GPIO_ACTIVE_LOW); in gpio_parse_dt()
120 &gpiod->debounce_ms); in gpio_parse_dt()
126 __func__, gpiod->gpio, gpiod->atv_val, gpiod->mirror, gpiod->debounce_ms); in gpio_parse_dt()
130 int vehicle_gpio_init(struct gpio_detect *gpiod, const char *ad_name) in vehicle_gpio_init() argument
136 if (gpio_parse_dt(gpiod, ad_name) < 0) { in vehicle_gpio_init()
139 gpio = gpiod->gpio; in vehicle_gpio_init()
146 dev_info(gpiod->dev, "%s: request irq gpio(%d)\n", __func__, gpio); in vehicle_gpio_init()
149 gpiod->irq = gpio_to_irq(gpio); in vehicle_gpio_init()
150 if (gpiod->irq < 0) in vehicle_gpio_init()
153 gpiod->val = gpio_get_value(gpio); in vehicle_gpio_init()
154 if (gpiod->val) in vehicle_gpio_init()
158 ret = devm_request_threaded_irq(gpiod->dev, gpiod->irq, in vehicle_gpio_init()
160 irqflags, "vehicle gpio", gpiod); in vehicle_gpio_init()
167 INIT_DELAYED_WORK(&gpiod->work, gpio_det_work_func); in vehicle_gpio_init()
169 vehicle_gpio_init_check(gpiod); in vehicle_gpio_init()
174 int vehicle_gpio_deinit(struct gpio_detect *gpiod) in vehicle_gpio_deinit() argument
176 gpio_free(gpiod->gpio); in vehicle_gpio_deinit()