Lines Matching full:ec
72 * codes used by the EC. For example 0x16 (T14S_EC_EVT_KEY_FN_F7) is mapped
89 struct t14s_ec *ec; member
114 struct t14s_ec *ec = context; in t14s_ec_write() local
115 struct i2c_client *client = to_i2c_client(ec->dev); in t14s_ec_write()
130 struct t14s_ec *ec = context; in t14s_ec_read() local
131 struct i2c_client *client = to_i2c_client(ec->dev); in t14s_ec_read()
170 static int t14s_ec_read_evt(struct t14s_ec *ec, u8 *val) in t14s_ec_read_evt() argument
172 struct i2c_client *client = to_i2c_client(ec->dev); in t14s_ec_read_evt()
205 static int t14s_led_set_status(struct t14s_ec *ec, in t14s_led_set_status() argument
211 ret = regmap_write(ec->regmap, T14S_EC_REG_LED, in t14s_led_set_status()
234 return t14s_led_set_status(led->ec, led, new_state); in t14s_led_brightness_set()
252 return t14s_led_set_status(led->ec, led, T14S_EC_LED_BLINK); in t14s_led_blink_set()
255 static int t14s_init_led(struct t14s_ec *ec, struct t14s_ec_led_classdev *led, in t14s_init_led() argument
263 led->ec = ec; in t14s_init_led()
266 return devm_led_classdev_register(ec->dev, &led->led_classdev); in t14s_init_led()
269 static int t14s_leds_probe(struct t14s_ec *ec) in t14s_leds_probe() argument
273 ret = t14s_init_led(ec, &ec->led_pwr_btn, 0, "platform::power"); in t14s_leds_probe()
277 ret = t14s_init_led(ec, &ec->led_chrg_orange, 1, in t14s_leds_probe()
282 ret = t14s_init_led(ec, &ec->led_chrg_white, 2, in t14s_leds_probe()
287 ret = t14s_init_led(ec, &ec->led_lid_logo_dot, 10, in t14s_leds_probe()
298 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_kbd_bl_set() local
304 ret = regmap_update_bits(ec->regmap, T14S_EC_REG_KBD_BL1, in t14s_kbd_bl_set()
310 ret = regmap_update_bits(ec->regmap, T14S_EC_REG_KBD_BL2, in t14s_kbd_bl_set()
320 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_kbd_bl_get() local
325 ret = regmap_read(ec->regmap, T14S_EC_REG_KBD_BL1, &val); in t14s_kbd_bl_get()
332 static void t14s_kbd_bl_update(struct t14s_ec *ec) in t14s_kbd_bl_update() argument
334 enum led_brightness brightness = t14s_kbd_bl_get(&ec->kbd_backlight); in t14s_kbd_bl_update()
336 led_classdev_notify_brightness_hw_changed(&ec->kbd_backlight, brightness); in t14s_kbd_bl_update()
339 static int t14s_kbd_backlight_probe(struct t14s_ec *ec) in t14s_kbd_backlight_probe() argument
341 ec->kbd_backlight.name = "platform::kbd_backlight"; in t14s_kbd_backlight_probe()
342 ec->kbd_backlight.flags = LED_BRIGHT_HW_CHANGED; in t14s_kbd_backlight_probe()
343 ec->kbd_backlight.max_brightness = 2; in t14s_kbd_backlight_probe()
344 ec->kbd_backlight.brightness_set_blocking = t14s_kbd_bl_set; in t14s_kbd_backlight_probe()
345 ec->kbd_backlight.brightness_get = t14s_kbd_bl_get; in t14s_kbd_backlight_probe()
347 return devm_led_classdev_register(ec->dev, &ec->kbd_backlight); in t14s_kbd_backlight_probe()
350 static enum led_brightness t14s_audio_led_get(struct t14s_ec *ec, u8 led_bit) in t14s_audio_led_get() argument
355 ret = regmap_read(ec->regmap, T14S_EC_REG_AUD, &val); in t14s_audio_led_get()
362 static enum led_brightness t14s_audio_led_set(struct t14s_ec *ec, in t14s_audio_led_set() argument
366 return regmap_assign_bits(ec->regmap, T14S_EC_REG_AUD, led_mask, brightness > 0); in t14s_audio_led_set()
371 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_mic_mute_led_get() local
374 return t14s_audio_led_get(ec, T14S_EC_MIC_MUTE_LED); in t14s_mic_mute_led_get()
380 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_mic_mute_led_set() local
383 return t14s_audio_led_set(ec, T14S_EC_MIC_MUTE_LED, brightness); in t14s_mic_mute_led_set()
388 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_spk_mute_led_get() local
391 return t14s_audio_led_get(ec, T14S_EC_SPK_MUTE_LED); in t14s_spk_mute_led_get()
397 struct t14s_ec *ec = container_of(led_cdev, struct t14s_ec, in t14s_spk_mute_led_set() local
400 return t14s_audio_led_set(ec, T14S_EC_SPK_MUTE_LED, brightness); in t14s_spk_mute_led_set()
403 static int t14s_kbd_audio_led_probe(struct t14s_ec *ec) in t14s_kbd_audio_led_probe() argument
407 ec->led_mic_mute.name = "platform::micmute"; in t14s_kbd_audio_led_probe()
408 ec->led_mic_mute.max_brightness = 1; in t14s_kbd_audio_led_probe()
409 ec->led_mic_mute.default_trigger = "audio-micmute"; in t14s_kbd_audio_led_probe()
410 ec->led_mic_mute.brightness_set_blocking = t14s_mic_mute_led_set; in t14s_kbd_audio_led_probe()
411 ec->led_mic_mute.brightness_get = t14s_mic_mute_led_get; in t14s_kbd_audio_led_probe()
413 ec->led_spk_mute.name = "platform::mute"; in t14s_kbd_audio_led_probe()
414 ec->led_spk_mute.max_brightness = 1; in t14s_kbd_audio_led_probe()
415 ec->led_spk_mute.default_trigger = "audio-mute"; in t14s_kbd_audio_led_probe()
416 ec->led_spk_mute.brightness_set_blocking = t14s_spk_mute_led_set; in t14s_kbd_audio_led_probe()
417 ec->led_spk_mute.brightness_get = t14s_spk_mute_led_get; in t14s_kbd_audio_led_probe()
419 ret = devm_led_classdev_register(ec->dev, &ec->led_mic_mute); in t14s_kbd_audio_led_probe()
423 return devm_led_classdev_register(ec->dev, &ec->led_spk_mute); in t14s_kbd_audio_led_probe()
443 static int t14s_input_probe(struct t14s_ec *ec) in t14s_input_probe() argument
447 ec->inputdev = devm_input_allocate_device(ec->dev); in t14s_input_probe()
448 if (!ec->inputdev) in t14s_input_probe()
451 ec->inputdev->name = "ThinkPad Extra Buttons"; in t14s_input_probe()
452 ec->inputdev->phys = "thinkpad/input0"; in t14s_input_probe()
453 ec->inputdev->id.bustype = BUS_HOST; in t14s_input_probe()
454 ec->inputdev->dev.parent = ec->dev; in t14s_input_probe()
456 ret = sparse_keymap_setup(ec->inputdev, t14s_keymap, NULL); in t14s_input_probe()
460 return input_register_device(ec->inputdev); in t14s_input_probe()
465 struct t14s_ec *ec = data; in t14s_ec_irq_handler() local
469 ret = t14s_ec_read_evt(ec, &val); in t14s_ec_irq_handler()
471 dev_err(ec->dev, "Failed to read event\n"); in t14s_ec_irq_handler()
479 t14s_kbd_bl_update(ec); in t14s_ec_irq_handler()
493 sparse_keymap_report_event(ec->inputdev, in t14s_ec_irq_handler()
497 dev_dbg(ec->dev, "AC connected\n"); in t14s_ec_irq_handler()
500 dev_dbg(ec->dev, "AC disconnected\n"); in t14s_ec_irq_handler()
503 dev_dbg(ec->dev, "power button\n"); in t14s_ec_irq_handler()
506 dev_dbg(ec->dev, "LID open\n"); in t14s_ec_irq_handler()
509 dev_dbg(ec->dev, "LID closed\n"); in t14s_ec_irq_handler()
512 dev_dbg(ec->dev, "Thermal Zone 40 Status Change Event (CPU/GPU)\n"); in t14s_ec_irq_handler()
515 dev_dbg(ec->dev, "Thermal Zone 42 Status Change Event (Battery)\n"); in t14s_ec_irq_handler()
518 dev_dbg(ec->dev, "Thermal Zone 39 Status Change Event (CPU/GPU)\n"); in t14s_ec_irq_handler()
521 dev_dbg(ec->dev, "FN + G - toggle double-tapping\n"); in t14s_ec_irq_handler()
524 dev_dbg(ec->dev, "FN + L - low performance mode\n"); in t14s_ec_irq_handler()
527 dev_dbg(ec->dev, "FN + M - medium performance mode\n"); in t14s_ec_irq_handler()
530 dev_dbg(ec->dev, "FN + H - high performance mode\n"); in t14s_ec_irq_handler()
533 dev_dbg(ec->dev, "FN + T - toggle intelligent cooling mode\n"); in t14s_ec_irq_handler()
536 dev_dbg(ec->dev, "FN + D - toggle privacy guard mode\n"); in t14s_ec_irq_handler()
539 dev_info(ec->dev, "Unknown EC event: 0x%02x\n", val); in t14s_ec_irq_handler()
549 struct t14s_ec *ec; in t14s_ec_probe() local
552 ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL); in t14s_ec_probe()
553 if (!ec) in t14s_ec_probe()
556 ec->dev = dev; in t14s_ec_probe()
558 ec->regmap = devm_regmap_init(dev, &t14s_ec_regmap_bus, in t14s_ec_probe()
559 ec, &t14s_ec_regmap_config); in t14s_ec_probe()
560 if (IS_ERR(ec->regmap)) in t14s_ec_probe()
561 return dev_err_probe(dev, PTR_ERR(ec->regmap), in t14s_ec_probe()
564 ret = t14s_leds_probe(ec); in t14s_ec_probe()
568 ret = t14s_kbd_backlight_probe(ec); in t14s_ec_probe()
572 ret = t14s_kbd_audio_led_probe(ec); in t14s_ec_probe()
576 ret = t14s_input_probe(ec); in t14s_ec_probe()
582 IRQF_ONESHOT, dev_name(dev), ec); in t14s_ec_probe()
597 { .compatible = "lenovo,thinkpad-t14s-ec" },
603 { "thinkpad-t14s-ec", },
610 .name = "thinkpad-t14s-ec",