Lines Matching refs:applespi
539 static void applespi_setup_read_txfrs(struct applespi_data *applespi) in applespi_setup_read_txfrs() argument
541 struct spi_message *msg = &applespi->rd_m; in applespi_setup_read_txfrs()
542 struct spi_transfer *dl_t = &applespi->dl_t; in applespi_setup_read_txfrs()
543 struct spi_transfer *rd_t = &applespi->rd_t; in applespi_setup_read_txfrs()
548 dl_t->delay_usecs = applespi->spi_settings.spi_cs_delay; in applespi_setup_read_txfrs()
550 rd_t->rx_buf = applespi->rx_buffer; in applespi_setup_read_txfrs()
558 static void applespi_setup_write_txfrs(struct applespi_data *applespi) in applespi_setup_write_txfrs() argument
560 struct spi_message *msg = &applespi->wr_m; in applespi_setup_write_txfrs()
561 struct spi_transfer *wt_t = &applespi->ww_t; in applespi_setup_write_txfrs()
562 struct spi_transfer *dl_t = &applespi->wd_t; in applespi_setup_write_txfrs()
563 struct spi_transfer *wr_t = &applespi->wr_t; in applespi_setup_write_txfrs()
564 struct spi_transfer *st_t = &applespi->st_t; in applespi_setup_write_txfrs()
580 dl_t->delay_usecs = applespi->spi_settings.spi_cs_delay; in applespi_setup_write_txfrs()
582 wr_t->tx_buf = applespi->tx_buffer; in applespi_setup_write_txfrs()
586 st_t->rx_buf = applespi->tx_status; in applespi_setup_write_txfrs()
596 static int applespi_async(struct applespi_data *applespi, in applespi_async() argument
600 message->context = applespi; in applespi_async()
602 return spi_async(applespi->spi, message); in applespi_async()
605 static inline bool applespi_check_write_status(struct applespi_data *applespi, in applespi_check_write_status() argument
611 dev_warn(&applespi->spi->dev, "Error writing to device: %d\n", in applespi_check_write_status()
616 if (memcmp(applespi->tx_status, status_ok, APPLESPI_STATUS_SIZE)) { in applespi_check_write_status()
617 dev_warn(&applespi->spi->dev, "Error writing to device: %*ph\n", in applespi_check_write_status()
618 APPLESPI_STATUS_SIZE, applespi->tx_status); in applespi_check_write_status()
625 static int applespi_get_spi_settings(struct applespi_data *applespi) in applespi_get_spi_settings() argument
627 struct acpi_device *adev = ACPI_COMPANION(&applespi->spi->dev); in applespi_get_spi_settings()
629 struct spi_settings *settings = &applespi->spi_settings; in applespi_get_spi_settings()
634 dev_warn(&applespi->spi->dev, in applespi_get_spi_settings()
640 dev_warn(&applespi->spi->dev, in applespi_get_spi_settings()
646 dev_warn(&applespi->spi->dev, in applespi_get_spi_settings()
649 dev_dbg(&applespi->spi->dev, in applespi_get_spi_settings()
657 static int applespi_setup_spi(struct applespi_data *applespi) in applespi_setup_spi() argument
661 sts = applespi_get_spi_settings(applespi); in applespi_setup_spi()
665 spin_lock_init(&applespi->cmd_msg_lock); in applespi_setup_spi()
666 init_waitqueue_head(&applespi->drain_complete); in applespi_setup_spi()
671 static int applespi_enable_spi(struct applespi_data *applespi) in applespi_enable_spi() argument
677 acpi_sts = acpi_evaluate_integer(applespi->sist, NULL, NULL, in applespi_enable_spi()
683 acpi_sts = acpi_execute_simple_method(applespi->sien, NULL, 1); in applespi_enable_spi()
685 dev_err(&applespi->spi->dev, "SIEN failed: %s\n", in applespi_enable_spi()
701 static int applespi_send_cmd_msg(struct applespi_data *applespi);
703 static void applespi_msg_complete(struct applespi_data *applespi, in applespi_msg_complete() argument
708 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_msg_complete()
711 applespi->read_active = false; in applespi_msg_complete()
713 applespi->write_active = false; in applespi_msg_complete()
715 if (applespi->drain && !applespi->write_active) in applespi_msg_complete()
716 wake_up_all(&applespi->drain_complete); in applespi_msg_complete()
719 applespi->cmd_msg_queued = false; in applespi_msg_complete()
720 applespi_send_cmd_msg(applespi); in applespi_msg_complete()
723 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_msg_complete()
728 struct applespi_data *applespi = context; in applespi_async_write_complete() local
729 enum applespi_evt_type evt_type = applespi->cmd_evt_type; in applespi_async_write_complete()
732 applespi->tx_buffer, in applespi_async_write_complete()
735 applespi->tx_status, in applespi_async_write_complete()
738 if (!applespi_check_write_status(applespi, applespi->wr_m.status)) { in applespi_async_write_complete()
743 applespi_msg_complete(applespi, true, false); in applespi_async_write_complete()
747 static int applespi_send_cmd_msg(struct applespi_data *applespi) in applespi_send_cmd_msg() argument
751 struct spi_packet *packet = (struct spi_packet *)applespi->tx_buffer; in applespi_send_cmd_msg()
757 if (applespi->drain) in applespi_send_cmd_msg()
761 if (applespi->cmd_msg_queued) in applespi_send_cmd_msg()
768 if (applespi->want_tp_info_cmd) { in applespi_send_cmd_msg()
769 applespi->want_tp_info_cmd = false; in applespi_send_cmd_msg()
770 applespi->want_mt_init_cmd = true; in applespi_send_cmd_msg()
771 applespi->cmd_evt_type = ET_CMD_TP_INI; in applespi_send_cmd_msg()
782 } else if (applespi->want_mt_init_cmd) { in applespi_send_cmd_msg()
783 applespi->want_mt_init_cmd = false; in applespi_send_cmd_msg()
784 applespi->cmd_evt_type = ET_CMD_TP_INI; in applespi_send_cmd_msg()
795 } else if (applespi->want_cl_led_on != applespi->have_cl_led_on) { in applespi_send_cmd_msg()
796 applespi->have_cl_led_on = applespi->want_cl_led_on; in applespi_send_cmd_msg()
797 applespi->cmd_evt_type = ET_CMD_CL; in applespi_send_cmd_msg()
806 message->capsl_command.led = applespi->have_cl_led_on ? 2 : 0; in applespi_send_cmd_msg()
809 } else if (applespi->want_bl_level != applespi->have_bl_level) { in applespi_send_cmd_msg()
810 applespi->have_bl_level = applespi->want_bl_level; in applespi_send_cmd_msg()
811 applespi->cmd_evt_type = ET_CMD_BL; in applespi_send_cmd_msg()
821 cpu_to_le16(applespi->have_bl_level); in applespi_send_cmd_msg()
823 if (applespi->have_bl_level > 0) in applespi_send_cmd_msg()
838 message->counter = applespi->cmd_msg_cntr++ % (U8_MAX + 1); in applespi_send_cmd_msg()
851 sts = applespi_async(applespi, &applespi->wr_m, in applespi_send_cmd_msg()
854 dev_warn(&applespi->spi->dev, in applespi_send_cmd_msg()
859 applespi->cmd_msg_queued = true; in applespi_send_cmd_msg()
860 applespi->write_active = true; in applespi_send_cmd_msg()
865 static void applespi_init(struct applespi_data *applespi, bool is_resume) in applespi_init() argument
869 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_init()
872 applespi->want_mt_init_cmd = true; in applespi_init()
874 applespi->want_tp_info_cmd = true; in applespi_init()
875 applespi_send_cmd_msg(applespi); in applespi_init()
877 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_init()
880 static int applespi_set_capsl_led(struct applespi_data *applespi, in applespi_set_capsl_led() argument
886 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_set_capsl_led()
888 applespi->want_cl_led_on = capslock_on; in applespi_set_capsl_led()
889 sts = applespi_send_cmd_msg(applespi); in applespi_set_capsl_led()
891 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_set_capsl_led()
899 struct applespi_data *applespi = in applespi_set_bl_level() local
903 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_set_bl_level()
906 applespi->want_bl_level = value; in applespi_set_bl_level()
913 applespi->want_bl_level = in applespi_set_bl_level()
918 applespi_send_cmd_msg(applespi); in applespi_set_bl_level()
920 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_set_bl_level()
926 struct applespi_data *applespi = input_get_drvdata(dev); in applespi_event() local
930 applespi_set_capsl_led(applespi, !!test_bit(LED_CAPSL, dev->led)); in applespi_event()
944 static void applespi_debug_update_dimensions(struct applespi_data *applespi, in applespi_debug_update_dimensions() argument
947 applespi->tp_dim_min_x = min(applespi->tp_dim_min_x, in applespi_debug_update_dimensions()
949 applespi->tp_dim_max_x = max(applespi->tp_dim_max_x, in applespi_debug_update_dimensions()
951 applespi->tp_dim_min_y = min(applespi->tp_dim_min_y, in applespi_debug_update_dimensions()
953 applespi->tp_dim_max_y = max(applespi->tp_dim_max_y, in applespi_debug_update_dimensions()
959 struct applespi_data *applespi = inode->i_private; in applespi_tp_dim_open() local
961 file->private_data = applespi; in applespi_tp_dim_open()
963 snprintf(applespi->tp_dim_val, sizeof(applespi->tp_dim_val), in applespi_tp_dim_open()
965 applespi->touchpad_input_dev->id.product, in applespi_tp_dim_open()
966 applespi->tp_dim_min_x, applespi->tp_dim_min_y, in applespi_tp_dim_open()
967 applespi->tp_dim_max_x - applespi->tp_dim_min_x, in applespi_tp_dim_open()
968 applespi->tp_dim_max_y - applespi->tp_dim_min_y); in applespi_tp_dim_open()
976 struct applespi_data *applespi = file->private_data; in applespi_tp_dim_read() local
978 return simple_read_from_buffer(buf, len, off, applespi->tp_dim_val, in applespi_tp_dim_read()
979 strlen(applespi->tp_dim_val)); in applespi_tp_dim_read()
1010 static void report_tp_state(struct applespi_data *applespi, in report_tp_state() argument
1015 const struct applespi_tp_info *tp_info = &applespi->tp_info; in report_tp_state()
1019 input = smp_load_acquire(&applespi->touchpad_input_dev); in report_tp_state()
1029 applespi->pos[n].x = le16_to_int(f->abs_x); in report_tp_state()
1030 applespi->pos[n].y = tp_info->y_min + tp_info->y_max - in report_tp_state()
1034 if (applespi->debug_tp_dim) in report_tp_state()
1035 applespi_debug_update_dimensions(applespi, f); in report_tp_state()
1038 input_mt_assign_slots(input, applespi->slots, applespi->pos, n, 0); in report_tp_state()
1041 report_finger_data(input, applespi->slots[i], in report_tp_state()
1042 &applespi->pos[i], &t->fingers[i]); in report_tp_state()
1123 applespi_handle_keyboard_event(struct applespi_data *applespi, in applespi_handle_keyboard_event() argument
1143 applespi->last_keys_pressed[i], MAX_ROLLOVER)) in applespi_handle_keyboard_event()
1146 key = applespi_code_to_key(applespi->last_keys_pressed[i], in applespi_handle_keyboard_event()
1147 applespi->last_keys_fn_pressed[i]); in applespi_handle_keyboard_event()
1148 input_report_key(applespi->keyboard_input_dev, key, 0); in applespi_handle_keyboard_event()
1149 applespi->last_keys_fn_pressed[i] = 0; in applespi_handle_keyboard_event()
1160 input_report_key(applespi->keyboard_input_dev, key, 1); in applespi_handle_keyboard_event()
1161 applespi->last_keys_fn_pressed[i] = in applespi_handle_keyboard_event()
1169 input_report_key(applespi->keyboard_input_dev, in applespi_handle_keyboard_event()
1172 input_report_key(applespi->keyboard_input_dev, in applespi_handle_keyboard_event()
1177 if (keyboard_protocol->fn_pressed && !applespi->last_fn_pressed) in applespi_handle_keyboard_event()
1178 input_report_key(applespi->keyboard_input_dev, KEY_FN, 1); in applespi_handle_keyboard_event()
1179 else if (!keyboard_protocol->fn_pressed && applespi->last_fn_pressed) in applespi_handle_keyboard_event()
1180 input_report_key(applespi->keyboard_input_dev, KEY_FN, 0); in applespi_handle_keyboard_event()
1181 applespi->last_fn_pressed = keyboard_protocol->fn_pressed; in applespi_handle_keyboard_event()
1184 input_sync(applespi->keyboard_input_dev); in applespi_handle_keyboard_event()
1185 memcpy(&applespi->last_keys_pressed, keyboard_protocol->keys_pressed, in applespi_handle_keyboard_event()
1186 sizeof(applespi->last_keys_pressed)); in applespi_handle_keyboard_event()
1202 applespi_register_touchpad_device(struct applespi_data *applespi, in applespi_register_touchpad_device() argument
1212 dev_warn(&applespi->spi->dev, in applespi_register_touchpad_device()
1218 applespi->tp_info = *tp_info; in applespi_register_touchpad_device()
1225 dev_info(&applespi->spi->dev, in applespi_register_touchpad_device()
1227 applespi->tp_info.x_min = x; in applespi_register_touchpad_device()
1228 applespi->tp_info.y_min = y; in applespi_register_touchpad_device()
1229 applespi->tp_info.x_max = x + w; in applespi_register_touchpad_device()
1230 applespi->tp_info.y_max = y + h; in applespi_register_touchpad_device()
1232 dev_warn(&applespi->spi->dev, in applespi_register_touchpad_device()
1241 applespi->tp_info.x_min, in applespi_register_touchpad_device()
1242 applespi->tp_info.y_min, in applespi_register_touchpad_device()
1243 applespi->tp_info.x_max - applespi->tp_info.x_min, in applespi_register_touchpad_device()
1244 applespi->tp_info.y_max - applespi->tp_info.y_min); in applespi_register_touchpad_device()
1248 touchpad_input_dev = devm_input_allocate_device(&applespi->spi->dev); in applespi_register_touchpad_device()
1250 dev_err(&applespi->spi->dev, in applespi_register_touchpad_device()
1257 touchpad_input_dev->dev.parent = &applespi->spi->dev; in applespi_register_touchpad_device()
1289 applespi->tp_info.x_min, applespi->tp_info.x_max, in applespi_register_touchpad_device()
1292 applespi->tp_info.y_min, applespi->tp_info.y_max, in applespi_register_touchpad_device()
1303 dev_err(&applespi->spi->dev, in applespi_register_touchpad_device()
1311 dev_err(&applespi->spi->dev, in applespi_register_touchpad_device()
1317 smp_store_release(&applespi->touchpad_input_dev, touchpad_input_dev); in applespi_register_touchpad_device()
1324 struct applespi_data *applespi = in applespi_worker() local
1327 applespi_register_touchpad_device(applespi, &applespi->rcvd_tp_info); in applespi_worker()
1330 static void applespi_handle_cmd_response(struct applespi_data *applespi, in applespi_handle_cmd_response() argument
1340 applespi->rcvd_tp_info = message->tp_info; in applespi_handle_cmd_response()
1341 schedule_work(&applespi->work); in applespi_handle_cmd_response()
1346 dev_warn_ratelimited(&applespi->spi->dev, in applespi_handle_cmd_response()
1355 dev_info(&applespi->spi->dev, "modeswitch done.\n"); in applespi_handle_cmd_response()
1358 static bool applespi_verify_crc(struct applespi_data *applespi, u8 *buffer, in applespi_verify_crc() argument
1365 dev_warn_ratelimited(&applespi->spi->dev, in applespi_verify_crc()
1375 static void applespi_debug_print_read_packet(struct applespi_data *applespi, in applespi_debug_print_read_packet() argument
1387 evt_type = applespi->cmd_evt_type; in applespi_debug_print_read_packet()
1391 applespi_get_trace_fun(evt_type)(evt_type, PT_READ, applespi->rx_buffer, in applespi_debug_print_read_packet()
1395 static void applespi_got_data(struct applespi_data *applespi) in applespi_got_data() argument
1405 if (!applespi_verify_crc(applespi, applespi->rx_buffer, in applespi_got_data()
1409 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_got_data()
1411 if (applespi->drain) { in applespi_got_data()
1412 applespi->read_active = false; in applespi_got_data()
1413 applespi->write_active = false; in applespi_got_data()
1415 wake_up_all(&applespi->drain_complete); in applespi_got_data()
1418 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_got_data()
1423 packet = (struct spi_packet *)applespi->rx_buffer; in applespi_got_data()
1425 applespi_debug_print_read_packet(applespi, packet); in applespi_got_data()
1432 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1440 if (off != applespi->saved_msg_len) { in applespi_got_data()
1441 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1443 off, applespi->saved_msg_len); in applespi_got_data()
1448 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1455 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1461 memcpy(applespi->msg_buf + off, &packet->data, len); in applespi_got_data()
1462 applespi->saved_msg_len += len; in applespi_got_data()
1467 message = (struct message *)applespi->msg_buf; in applespi_got_data()
1468 msg_len = applespi->saved_msg_len; in applespi_got_data()
1475 if (!applespi_verify_crc(applespi, (u8 *)message, msg_len)) in applespi_got_data()
1479 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1489 applespi_handle_keyboard_event(applespi, &message->keyboard); in applespi_got_data()
1500 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1508 dev_warn_ratelimited(&applespi->spi->dev, in applespi_got_data()
1515 report_tp_state(applespi, tp); in applespi_got_data()
1518 applespi_handle_cmd_response(applespi, packet, message); in applespi_got_data()
1522 applespi->saved_msg_len = 0; in applespi_got_data()
1524 applespi_msg_complete(applespi, packet->flags == PACKET_TYPE_WRITE, in applespi_got_data()
1530 struct applespi_data *applespi = context; in applespi_async_read_complete() local
1532 if (applespi->rd_m.status < 0) { in applespi_async_read_complete()
1533 dev_warn(&applespi->spi->dev, "Error reading from device: %d\n", in applespi_async_read_complete()
1534 applespi->rd_m.status); in applespi_async_read_complete()
1540 applespi_msg_complete(applespi, true, true); in applespi_async_read_complete()
1542 applespi_got_data(applespi); in applespi_async_read_complete()
1545 acpi_finish_gpe(NULL, applespi->gpe); in applespi_async_read_complete()
1550 struct applespi_data *applespi = context; in applespi_notify() local
1556 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_notify()
1558 if (!applespi->suspended) { in applespi_notify()
1559 sts = applespi_async(applespi, &applespi->rd_m, in applespi_notify()
1562 dev_warn(&applespi->spi->dev, in applespi_notify()
1566 applespi->read_active = true; in applespi_notify()
1569 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_notify()
1574 static int applespi_get_saved_bl_level(struct applespi_data *applespi) in applespi_get_saved_bl_level() argument
1592 dev_warn(&applespi->spi->dev, in applespi_get_saved_bl_level()
1601 static void applespi_save_bl_level(struct applespi_data *applespi, in applespi_save_bl_level() argument
1620 dev_warn(&applespi->spi->dev, in applespi_save_bl_level()
1626 struct applespi_data *applespi; in applespi_probe() local
1641 applespi = devm_kzalloc(&spi->dev, sizeof(*applespi), GFP_KERNEL); in applespi_probe()
1642 if (!applespi) in applespi_probe()
1645 applespi->spi = spi; in applespi_probe()
1647 INIT_WORK(&applespi->work, applespi_worker); in applespi_probe()
1650 spi_set_drvdata(spi, applespi); in applespi_probe()
1653 applespi->tx_buffer = devm_kmalloc(&spi->dev, APPLESPI_PACKET_SIZE, in applespi_probe()
1655 applespi->tx_status = devm_kmalloc(&spi->dev, APPLESPI_STATUS_SIZE, in applespi_probe()
1657 applespi->rx_buffer = devm_kmalloc(&spi->dev, APPLESPI_PACKET_SIZE, in applespi_probe()
1659 applespi->msg_buf = devm_kmalloc_array(&spi->dev, MAX_PKTS_PER_MSG, in applespi_probe()
1663 if (!applespi->tx_buffer || !applespi->tx_status || in applespi_probe()
1664 !applespi->rx_buffer || !applespi->msg_buf) in applespi_probe()
1668 applespi_setup_read_txfrs(applespi); in applespi_probe()
1669 applespi_setup_write_txfrs(applespi); in applespi_probe()
1672 acpi_sts = acpi_get_handle(spi_handle, "SIEN", &applespi->sien); in applespi_probe()
1674 dev_err(&applespi->spi->dev, in applespi_probe()
1680 acpi_sts = acpi_get_handle(spi_handle, "SIST", &applespi->sist); in applespi_probe()
1682 dev_err(&applespi->spi->dev, in applespi_probe()
1689 sts = applespi_setup_spi(applespi); in applespi_probe()
1693 sts = applespi_enable_spi(applespi); in applespi_probe()
1698 applespi->keyboard_input_dev = devm_input_allocate_device(&spi->dev); in applespi_probe()
1700 if (!applespi->keyboard_input_dev) in applespi_probe()
1703 applespi->keyboard_input_dev->name = "Apple SPI Keyboard"; in applespi_probe()
1704 applespi->keyboard_input_dev->phys = "applespi/input0"; in applespi_probe()
1705 applespi->keyboard_input_dev->dev.parent = &spi->dev; in applespi_probe()
1706 applespi->keyboard_input_dev->id.bustype = BUS_SPI; in applespi_probe()
1708 applespi->keyboard_input_dev->evbit[0] = in applespi_probe()
1710 applespi->keyboard_input_dev->ledbit[0] = BIT_MASK(LED_CAPSL); in applespi_probe()
1712 input_set_drvdata(applespi->keyboard_input_dev, applespi); in applespi_probe()
1713 applespi->keyboard_input_dev->event = applespi_event; in applespi_probe()
1717 input_set_capability(applespi->keyboard_input_dev, in applespi_probe()
1722 input_set_capability(applespi->keyboard_input_dev, in applespi_probe()
1727 input_set_capability(applespi->keyboard_input_dev, in applespi_probe()
1730 input_set_capability(applespi->keyboard_input_dev, EV_KEY, KEY_FN); in applespi_probe()
1732 sts = input_register_device(applespi->keyboard_input_dev); in applespi_probe()
1734 dev_err(&applespi->spi->dev, in applespi_probe()
1745 dev_err(&applespi->spi->dev, in applespi_probe()
1750 applespi->gpe = (int)gpe; in applespi_probe()
1752 acpi_sts = acpi_install_gpe_handler(NULL, applespi->gpe, in applespi_probe()
1754 applespi_notify, applespi); in applespi_probe()
1756 dev_err(&applespi->spi->dev, in applespi_probe()
1758 applespi->gpe, acpi_format_exception(acpi_sts)); in applespi_probe()
1762 applespi->suspended = false; in applespi_probe()
1764 acpi_sts = acpi_enable_gpe(NULL, applespi->gpe); in applespi_probe()
1766 dev_err(&applespi->spi->dev, in applespi_probe()
1768 applespi->gpe, acpi_format_exception(acpi_sts)); in applespi_probe()
1769 acpi_remove_gpe_handler(NULL, applespi->gpe, applespi_notify); in applespi_probe()
1774 applespi_init(applespi, false); in applespi_probe()
1784 sts = applespi_get_saved_bl_level(applespi); in applespi_probe()
1786 applespi_set_bl_level(&applespi->backlight_info, sts); in applespi_probe()
1788 applespi->backlight_info.name = "spi::kbd_backlight"; in applespi_probe()
1789 applespi->backlight_info.default_trigger = "kbd-backlight"; in applespi_probe()
1790 applespi->backlight_info.brightness_set = applespi_set_bl_level; in applespi_probe()
1792 sts = devm_led_classdev_register(&spi->dev, &applespi->backlight_info); in applespi_probe()
1794 dev_warn(&applespi->spi->dev, in applespi_probe()
1799 applespi->debugfs_root = debugfs_create_dir("applespi", NULL); in applespi_probe()
1801 debugfs_create_bool("enable_tp_dim", 0600, applespi->debugfs_root, in applespi_probe()
1802 &applespi->debug_tp_dim); in applespi_probe()
1804 debugfs_create_file("tp_dim", 0400, applespi->debugfs_root, applespi, in applespi_probe()
1810 static void applespi_drain_writes(struct applespi_data *applespi) in applespi_drain_writes() argument
1814 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_drain_writes()
1816 applespi->drain = true; in applespi_drain_writes()
1817 wait_event_lock_irq(applespi->drain_complete, !applespi->write_active, in applespi_drain_writes()
1818 applespi->cmd_msg_lock); in applespi_drain_writes()
1820 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_drain_writes()
1823 static void applespi_drain_reads(struct applespi_data *applespi) in applespi_drain_reads() argument
1827 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_drain_reads()
1829 wait_event_lock_irq(applespi->drain_complete, !applespi->read_active, in applespi_drain_reads()
1830 applespi->cmd_msg_lock); in applespi_drain_reads()
1832 applespi->suspended = true; in applespi_drain_reads()
1834 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_drain_reads()
1839 struct applespi_data *applespi = spi_get_drvdata(spi); in applespi_remove() local
1841 applespi_drain_writes(applespi); in applespi_remove()
1843 acpi_disable_gpe(NULL, applespi->gpe); in applespi_remove()
1844 acpi_remove_gpe_handler(NULL, applespi->gpe, applespi_notify); in applespi_remove()
1847 applespi_drain_reads(applespi); in applespi_remove()
1849 debugfs_remove_recursive(applespi->debugfs_root); in applespi_remove()
1856 struct applespi_data *applespi = spi_get_drvdata(spi); in applespi_shutdown() local
1858 applespi_save_bl_level(applespi, applespi->have_bl_level); in applespi_shutdown()
1864 struct applespi_data *applespi = spi_get_drvdata(spi); in applespi_poweroff_late() local
1866 applespi_save_bl_level(applespi, applespi->have_bl_level); in applespi_poweroff_late()
1874 struct applespi_data *applespi = spi_get_drvdata(spi); in applespi_suspend() local
1879 sts = applespi_set_capsl_led(applespi, false); in applespi_suspend()
1881 dev_warn(&applespi->spi->dev, in applespi_suspend()
1884 applespi_drain_writes(applespi); in applespi_suspend()
1887 acpi_sts = acpi_disable_gpe(NULL, applespi->gpe); in applespi_suspend()
1889 dev_err(&applespi->spi->dev, in applespi_suspend()
1891 applespi->gpe, acpi_format_exception(acpi_sts)); in applespi_suspend()
1893 applespi_drain_reads(applespi); in applespi_suspend()
1901 struct applespi_data *applespi = spi_get_drvdata(spi); in applespi_resume() local
1906 spin_lock_irqsave(&applespi->cmd_msg_lock, flags); in applespi_resume()
1908 applespi->drain = false; in applespi_resume()
1909 applespi->have_cl_led_on = false; in applespi_resume()
1910 applespi->have_bl_level = 0; in applespi_resume()
1911 applespi->cmd_msg_queued = false; in applespi_resume()
1912 applespi->read_active = false; in applespi_resume()
1913 applespi->write_active = false; in applespi_resume()
1915 applespi->suspended = false; in applespi_resume()
1917 spin_unlock_irqrestore(&applespi->cmd_msg_lock, flags); in applespi_resume()
1920 applespi_enable_spi(applespi); in applespi_resume()
1923 acpi_sts = acpi_enable_gpe(NULL, applespi->gpe); in applespi_resume()
1925 dev_err(&applespi->spi->dev, in applespi_resume()
1927 applespi->gpe, acpi_format_exception(acpi_sts)); in applespi_resume()
1930 applespi_init(applespi, true); in applespi_resume()