Lines Matching refs:data

54 	int (*set_kbd_backlight)(struct yogabook_data *data, uint8_t level);
65 struct yogabook_data *data = container_of(work, struct yogabook_data, work);
69 if (test_bit(YB_SUSPENDED, &data->flags))
72 if (test_bit(YB_TABLET_MODE, &data->flags)) {
75 } else if (test_bit(YB_DIGITIZER_MODE, &data->flags)) {
83 if (!kbd_on && test_bit(YB_KBD_IS_ON, &data->flags)) {
88 data->set_kbd_backlight(data, 0);
89 device_release_driver(data->kbd_dev);
90 clear_bit(YB_KBD_IS_ON, &data->flags);
93 if (!digitizer_on && test_bit(YB_DIGITIZER_IS_ON, &data->flags)) {
94 led_set_brightness(data->pen_led, LED_OFF);
95 device_release_driver(data->dig_dev);
96 clear_bit(YB_DIGITIZER_IS_ON, &data->flags);
99 if (kbd_on && !test_bit(YB_KBD_IS_ON, &data->flags)) {
100 r = device_reprobe(data->kbd_dev);
102 dev_warn(data->dev, "Reprobe of keyboard touchscreen failed: %d\n", r);
104 data->set_kbd_backlight(data, data->brightness);
105 set_bit(YB_KBD_IS_ON, &data->flags);
108 if (digitizer_on && !test_bit(YB_DIGITIZER_IS_ON, &data->flags)) {
109 r = device_reprobe(data->dig_dev);
111 dev_warn(data->dev, "Reprobe of digitizer failed: %d\n", r);
113 led_set_brightness(data->pen_led, LED_FULL);
114 set_bit(YB_DIGITIZER_IS_ON, &data->flags);
118 static void yogabook_toggle_digitizer_mode(struct yogabook_data *data)
120 if (test_bit(YB_SUSPENDED, &data->flags))
123 if (test_bit(YB_DIGITIZER_MODE, &data->flags))
124 clear_bit(YB_DIGITIZER_MODE, &data->flags);
126 set_bit(YB_DIGITIZER_MODE, &data->flags);
132 schedule_work(&data->work);
137 struct yogabook_data *data = _data;
139 if (gpiod_get_value(data->backside_hall_gpio))
140 set_bit(YB_TABLET_MODE, &data->flags);
142 clear_bit(YB_TABLET_MODE, &data->flags);
144 schedule_work(&data->work);
153 struct yogabook_data *data = kbd_led_to_yogabook(cdev);
155 return data->brightness;
161 struct yogabook_data *data = kbd_led_to_yogabook(cdev);
166 data->brightness = value;
168 if (!test_bit(YB_KBD_IS_ON, &data->flags))
171 return data->set_kbd_backlight(data, data->brightness);
186 static int yogabook_probe(struct device *dev, struct yogabook_data *data,
191 data->dev = dev;
192 data->brightness = YB_KBD_BL_DEFAULT;
193 set_bit(YB_KBD_IS_ON, &data->flags);
194 set_bit(YB_DIGITIZER_IS_ON, &data->flags);
195 INIT_WORK(&data->work, yogabook_work);
199 data->pen_led = devm_led_get(dev, "pen-icon-led");
202 if (IS_ERR(data->pen_led))
203 return dev_err_probe(dev, PTR_ERR(data->pen_led), "Getting pen icon LED\n");
207 data->backside_hall_gpio = devm_gpiod_get(dev, "backside_hall_sw", GPIOD_IN);
210 if (IS_ERR(data->backside_hall_gpio))
211 return dev_err_probe(dev, PTR_ERR(data->backside_hall_gpio),
214 r = gpiod_to_irq(data->backside_hall_gpio);
218 data->backside_hall_irq = r;
221 data->set_kbd_backlight(data, YB_KBD_BL_DEFAULT);
223 r = request_irq(data->backside_hall_irq, yogabook_backside_hall_irq,
225 "backside_hall_sw", data);
229 schedule_work(&data->work);
231 data->kbd_bl_led.name = kbd_bl_led_name;
232 data->kbd_bl_led.brightness_set_blocking = kbd_brightness_set;
233 data->kbd_bl_led.brightness_get = kbd_brightness_get;
234 data->kbd_bl_led.max_brightness = YB_KBD_BL_MAX;
236 r = devm_led_classdev_register(dev, &data->kbd_bl_led);
242 dev_set_drvdata(dev, data);
246 free_irq(data->backside_hall_irq, data);
247 cancel_work_sync(&data->work);
251 static void yogabook_remove(struct yogabook_data *data)
255 free_irq(data->backside_hall_irq, data);
256 cancel_work_sync(&data->work);
258 if (!test_bit(YB_KBD_IS_ON, &data->flags))
259 r |= device_reprobe(data->kbd_dev);
261 if (!test_bit(YB_DIGITIZER_IS_ON, &data->flags))
262 r |= device_reprobe(data->dig_dev);
265 dev_warn(data->dev, "Reprobe of devices failed\n");
270 struct yogabook_data *data = dev_get_drvdata(dev);
272 set_bit(YB_SUSPENDED, &data->flags);
273 flush_work(&data->work);
275 if (test_bit(YB_KBD_IS_ON, &data->flags))
276 data->set_kbd_backlight(data, 0);
283 struct yogabook_data *data = dev_get_drvdata(dev);
285 if (test_bit(YB_KBD_IS_ON, &data->flags))
286 data->set_kbd_backlight(data, data->brightness);
288 clear_bit(YB_SUSPENDED, &data->flags);
291 schedule_work(&data->work);
304 static int yogabook_wmi_set_kbd_backlight(struct yogabook_data *data,
312 dev_dbg(data->dev, "Set KBLC level to %u\n", level);
315 acpi_device_set_power(data->kbd_adev, ACPI_STATE_D0);
323 status = acpi_evaluate_object(acpi_device_handle(data->kbd_adev), "KBLC",
326 dev_err(data->dev, "Failed to call KBLC method: 0x%x\n", status);
337 struct yogabook_data *data;
340 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
341 if (data == NULL)
344 data->kbd_adev = acpi_dev_get_first_match_dev("GDIX1001", NULL, -1);
345 if (!data->kbd_adev)
348 data->dig_adev = acpi_dev_get_first_match_dev("WCOM0019", NULL, -1);
349 if (!data->dig_adev) {
354 data->kbd_dev = get_device(acpi_get_first_physical_node(data->kbd_adev));
355 if (!data->kbd_dev || !data->kbd_dev->driver) {
360 data->dig_dev = get_device(acpi_get_first_physical_node(data->dig_adev));
361 if (!data->dig_dev || !data->dig_dev->driver) {
366 data->set_kbd_backlight = yogabook_wmi_set_kbd_backlight;
368 r = yogabook_probe(dev, data, "ybwmi::kbd_backlight");
375 put_device(data->dig_dev);
376 put_device(data->kbd_dev);
377 acpi_dev_put(data->dig_adev);
378 acpi_dev_put(data->kbd_adev);
384 struct yogabook_data *data = dev_get_drvdata(&wdev->dev);
386 yogabook_remove(data);
388 put_device(data->dig_dev);
389 put_device(data->kbd_dev);
390 acpi_dev_put(data->dig_adev);
391 acpi_dev_put(data->kbd_adev);
430 static int yogabook_pdev_set_kbd_backlight(struct yogabook_data *data, u8 level)
438 pwm_apply_state(data->kbd_bl_pwm, &state);
439 gpiod_set_value(data->kbd_bl_led_enable, level ? 1 : 0);
443 static irqreturn_t yogabook_pen_touch_irq(int irq, void *data)
445 yogabook_toggle_digitizer_mode(data);
452 struct yogabook_data *data;
455 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
456 if (data == NULL)
459 data->kbd_dev = bus_find_device_by_name(&i2c_bus_type, NULL, "i2c-goodix_ts");
460 if (!data->kbd_dev || !data->kbd_dev->driver) {
465 data->dig_dev = bus_find_device_by_name(&i2c_bus_type, NULL, "i2c-wacom");
466 if (!data->dig_dev || !data->dig_dev->driver) {
472 data->pen_touch_event = devm_gpiod_get(dev, "pen_touch_event", GPIOD_IN);
473 data->kbd_bl_led_enable = devm_gpiod_get(dev, "enable_keyboard_led", GPIOD_OUT_HIGH);
476 if (IS_ERR(data->pen_touch_event)) {
477 r = dev_err_probe(dev, PTR_ERR(data->pen_touch_event),
482 if (IS_ERR(data->kbd_bl_led_enable)) {
483 r = dev_err_probe(dev, PTR_ERR(data->kbd_bl_led_enable),
488 data->kbd_bl_pwm = devm_pwm_get(dev, "pwm_soc_lpss_2");
489 if (IS_ERR(data->kbd_bl_pwm)) {
490 r = dev_err_probe(dev, PTR_ERR(data->kbd_bl_pwm),
495 r = gpiod_to_irq(data->pen_touch_event);
500 data->pen_touch_irq = r;
502 r = request_irq(data->pen_touch_irq, yogabook_pen_touch_irq, IRQF_TRIGGER_FALLING,
503 "pen_touch_event", data);
509 data->set_kbd_backlight = yogabook_pdev_set_kbd_backlight;
511 r = yogabook_probe(dev, data, "yogabook::kbd_backlight");
518 free_irq(data->pen_touch_irq, data);
519 cancel_work_sync(&data->work);
521 put_device(data->dig_dev);
522 put_device(data->kbd_dev);
528 struct yogabook_data *data = platform_get_drvdata(pdev);
530 yogabook_remove(data);
531 free_irq(data->pen_touch_irq, data);
532 cancel_work_sync(&data->work);
533 put_device(data->dig_dev);
534 put_device(data->kbd_dev);