Lines Matching +full:data +full:- +full:mirror
49 struct gpio_data *data; member
54 int mirror; member
66 * gpio_det_notifier_call_chain - notify clients of gpio_det_events
76 * gpio_det_register_notifier - register a client notifier
88 * gpio_det_unregister_client - unregister a client notifier
102 struct gpio_detection *gpio_det = gpiod->parent; in gpio_det_report_event()
106 event.val = gpiod->val; in gpio_det_report_event()
107 event.name = gpiod->name; in gpio_det_report_event()
109 gpiod->name, event.val ? "over" : "on"); in gpio_det_report_event()
112 wake_lock_timeout(&gpio_det->wake_lock, in gpio_det_report_event()
114 kobject_uevent_env(&gpiod->dev.kobj, KOBJ_CHANGE, envp); in gpio_det_report_event()
115 if (gpiod->notify) in gpio_det_report_event()
124 int val = gpiod_get_value(gpiod->gpio); in gpio_det_work_func()
126 if (gpiod->val != val) { in gpio_det_work_func()
127 gpiod->val = val; in gpio_det_work_func()
129 if (system_suspend && gpiod->wakeup) { in gpio_det_work_func()
139 int val = gpiod_get_raw_value(gpiod->gpio); in gpio_det_interrupt()
146 irq_set_irq_type(gpiod->irq, irqflags); in gpio_det_interrupt()
148 mod_delayed_work(system_wq, &gpiod->work, in gpio_det_interrupt()
149 msecs_to_jiffies(gpiod->debounce_ms)); in gpio_det_interrupt()
159 for (i = 0; i < gpio_det->num; i++) { in gpio_det_init_status_check()
160 gpiod = &gpio_det->data[i]; in gpio_det_init_status_check()
161 gpiod->val = gpiod_get_value(gpiod->gpio); in gpio_det_init_status_check()
162 if (gpiod->val) in gpio_det_init_status_check()
171 void *data) in gpio_det_fb_notifier_callback() argument
174 struct fb_event *evdata = data; in gpio_det_fb_notifier_callback()
181 fb_blank = *(int *)evdata->data; in gpio_det_fb_notifier_callback()
192 gpio->fb_notifier.notifier_call = gpio_det_fb_notifier_callback; in gpio_det_fb_notifier_register()
194 return fb_register_client(&gpio->fb_notifier); in gpio_det_fb_notifier_register()
205 return sprintf(buf, "%d\n", gpio_det->info); in gpio_detection_info_show()
212 unsigned int val = gpiod_get_value(gpiod->gpio); in status_show()
231 event.name = gpiod->name; in status_store()
234 gpiod->notify = 0; in status_store()
250 gpio_detection_class = class_create(THIS_MODULE, "gpio-detection"); in gpio_deteciton_class_init()
265 gpiod->dev.class = gpio_detection_class; in gpio_detection_class_register()
266 dev_set_name(&gpiod->dev, "%s", gpiod->name); in gpio_detection_class_register()
267 dev_set_drvdata(&gpiod->dev, gpio_det); in gpio_detection_class_register()
268 ret = device_register(&gpiod->dev); in gpio_detection_class_register()
269 ret = sysfs_create_groups(&gpiod->dev.kobj, gpio_detection_groups); in gpio_detection_class_register()
277 struct gpio_data *data; in gpio_det_parse_dt() local
278 struct device *dev = &pdev->dev; in gpio_det_parse_dt()
286 num = of_get_child_count(gpio_det->dev->of_node); in gpio_det_parse_dt()
289 return -ENODEV; in gpio_det_parse_dt()
290 data = devm_kzalloc(gpio_det->dev, num * sizeof(*data), GFP_KERNEL); in gpio_det_parse_dt()
291 if (!data) in gpio_det_parse_dt()
292 return -ENOMEM; in gpio_det_parse_dt()
293 of_property_read_u32(gpio_det->dev->of_node, "rockchip,camcap-type", in gpio_det_parse_dt()
294 &gpio_det->type); in gpio_det_parse_dt()
295 of_property_read_u32(gpio_det->dev->of_node, "rockchip,camcap-mirror", in gpio_det_parse_dt()
296 &gpio_det->mirror); in gpio_det_parse_dt()
297 gpio_det->info = (gpio_det->mirror << 4) | gpio_det->type; in gpio_det_parse_dt()
300 gpiod = &data[i++]; in gpio_det_parse_dt()
301 gpiod->parent = gpio_det; in gpio_det_parse_dt()
302 gpiod->notify = 1; in gpio_det_parse_dt()
303 gpiod->name = of_get_property(node, "label", NULL); in gpio_det_parse_dt()
304 gpiod->wakeup = !!of_get_property(node, "gpio,wakeup", NULL); in gpio_det_parse_dt()
305 of_property_read_u32(node, "linux,debounce-ms", in gpio_det_parse_dt()
306 &gpiod->debounce_ms); in gpio_det_parse_dt()
307 if (!strcmp(gpiod->name, "car-reverse")) in gpio_det_parse_dt()
308 gpiod->gpio = devm_get_gpiod_from_child(dev, in gpio_det_parse_dt()
309 "car-reverse", child); in gpio_det_parse_dt()
311 gpiod->gpio = devm_get_gpiod_from_child(dev, in gpio_det_parse_dt()
312 "car-acc", child); in gpio_det_parse_dt()
314 gpio_det->num = num; in gpio_det_parse_dt()
315 gpio_det->data = data; in gpio_det_parse_dt()
328 gpio_det = devm_kzalloc(&pdev->dev, sizeof(*gpio_det), GFP_KERNEL); in gpio_det_probe()
330 return -ENOMEM; in gpio_det_probe()
331 gpio_det->dev = &pdev->dev; in gpio_det_probe()
332 gpio_det->cls_attr.attr.name = "info"; in gpio_det_probe()
333 gpio_det->cls_attr.attr.mode = S_IRUGO; in gpio_det_probe()
334 gpio_det->cls_attr.show = gpio_detection_info_show; in gpio_det_probe()
335 dev_set_name(gpio_det->dev, "gpio_detection"); in gpio_det_probe()
336 if (!pdev->dev.of_node) in gpio_det_probe()
337 return -EINVAL; in gpio_det_probe()
338 gpio_det->pinctrl = devm_pinctrl_get(&pdev->dev); in gpio_det_probe()
339 if (IS_ERR(gpio_det->pinctrl)) { in gpio_det_probe()
340 dev_err(&pdev->dev, "pinctrl get failed\n"); in gpio_det_probe()
341 return PTR_ERR(gpio_det->pinctrl); in gpio_det_probe()
343 gpio_det->pins_default = pinctrl_lookup_state(gpio_det->pinctrl, in gpio_det_probe()
345 if (IS_ERR(gpio_det->pins_default)) in gpio_det_probe()
346 dev_err(gpio_det->dev, "get default pinstate failed\n"); in gpio_det_probe()
348 pinctrl_select_state(gpio_det->pinctrl, gpio_det->pins_default); in gpio_det_probe()
350 return -ENODEV; in gpio_det_probe()
351 wake_lock_init(&gpio_det->wake_lock, WAKE_LOCK_SUSPEND, in gpio_det_probe()
353 for (i = 0; i < gpio_det->num; i++) { in gpio_det_probe()
354 gpiod = &gpio_det->data[i]; in gpio_det_probe()
355 gpiod_direction_input(gpiod->gpio); in gpio_det_probe()
357 gpiod->irq = gpiod_to_irq(gpiod->gpio); in gpio_det_probe()
358 if (gpiod->irq < 0) { in gpio_det_probe()
359 dev_err(gpio_det->dev, "failed to get irq number for GPIO %s\n", in gpio_det_probe()
360 gpiod->name); in gpio_det_probe()
367 INIT_DELAYED_WORK(&gpiod->work, gpio_det_work_func); in gpio_det_probe()
368 gpiod->val = gpiod_get_raw_value(gpiod->gpio); in gpio_det_probe()
369 if (gpiod->val) in gpio_det_probe()
373 ret = devm_request_threaded_irq(gpio_det->dev, gpiod->irq, in gpio_det_probe()
376 gpiod->name, gpiod); in gpio_det_probe()
378 dev_err(gpio_det->dev, "request irq(%s) failed:%d\n", in gpio_det_probe()
379 gpiod->name, ret); in gpio_det_probe()
381 if (gpiod->wakeup) in gpio_det_probe()
382 enable_irq_wake(gpiod->irq); in gpio_det_probe()
385 if (gpio_det->info) { in gpio_det_probe()
387 &gpio_det->cls_attr); in gpio_det_probe()
389 dev_warn(gpio_det->dev, "create class file failed:%d\n", in gpio_det_probe()
396 dev_info(gpio_det->dev, "gpio detection driver probe success\n"); in gpio_det_probe()
404 .compatible = "gpio-detection"
412 .name = "gpio-detection",
427 return -1; in gpio_det_init()
441 MODULE_ALIAS("platform:gpio-detection");