Lines Matching refs:psmouse

127 static int hgpk_discard_decay_hack(struct psmouse *psmouse, int x, int y)  in hgpk_discard_decay_hack()  argument
129 struct hgpk_data *priv = psmouse->private; in hgpk_discard_decay_hack()
139 psmouse_warn(psmouse, "detected %dpx jump in x\n", x); in hgpk_discard_decay_hack()
142 psmouse_warn(psmouse, "detected secondary %dpx jump in x\n", x); in hgpk_discard_decay_hack()
154 psmouse_warn(psmouse, "detected %dpx jump in y\n", y); in hgpk_discard_decay_hack()
157 psmouse_warn(psmouse, "detected secondary %dpx jump in y\n", y); in hgpk_discard_decay_hack()
171 psmouse_warn(psmouse, "scheduling recalibration\n"); in hgpk_discard_decay_hack()
172 psmouse_queue_work(psmouse, &priv->recalib_wq, in hgpk_discard_decay_hack()
188 static void hgpk_reset_hack_state(struct psmouse *psmouse) in hgpk_reset_hack_state() argument
190 struct hgpk_data *priv = psmouse->private; in hgpk_reset_hack_state()
214 static void hgpk_spewing_hack(struct psmouse *psmouse, in hgpk_spewing_hack() argument
217 struct hgpk_data *priv = psmouse->private; in hgpk_spewing_hack()
263 psmouse_warn(psmouse, "packet spew detected (%d,%d)\n", in hgpk_spewing_hack()
266 psmouse_queue_work(psmouse, &priv->recalib_wq, in hgpk_spewing_hack()
309 static bool hgpk_is_byte_valid(struct psmouse *psmouse, unsigned char *packet) in hgpk_is_byte_valid() argument
311 struct hgpk_data *priv = psmouse->private; in hgpk_is_byte_valid()
312 int pktcnt = psmouse->pktcnt; in hgpk_is_byte_valid()
336 psmouse_dbg(psmouse, in hgpk_is_byte_valid()
338 priv->mode, pktcnt, 6, psmouse->packet); in hgpk_is_byte_valid()
343 static void hgpk_process_advanced_packet(struct psmouse *psmouse) in hgpk_process_advanced_packet() argument
345 struct hgpk_data *priv = psmouse->private; in hgpk_process_advanced_packet()
346 struct input_dev *idev = psmouse->dev; in hgpk_process_advanced_packet()
347 unsigned char *packet = psmouse->packet; in hgpk_process_advanced_packet()
361 psmouse_dbg(psmouse, "pd=%d fd=%d z=%d", in hgpk_process_advanced_packet()
369 psmouse_dbg(psmouse, "pd=%d ", down); in hgpk_process_advanced_packet()
373 psmouse_dbg(psmouse, "l=%d r=%d x=%d y=%d\n", in hgpk_process_advanced_packet()
385 hgpk_reset_hack_state(psmouse); in hgpk_process_advanced_packet()
396 psmouse_dbg(psmouse, "hard spew detected\n"); in hgpk_process_advanced_packet()
398 psmouse_queue_work(psmouse, &priv->recalib_wq, in hgpk_process_advanced_packet()
411 if (hgpk_discard_decay_hack(psmouse, x_diff, y_diff)) { in hgpk_process_advanced_packet()
413 psmouse_dbg(psmouse, "discarding\n"); in hgpk_process_advanced_packet()
416 hgpk_spewing_hack(psmouse, left, right, x_diff, y_diff); in hgpk_process_advanced_packet()
428 static void hgpk_process_simple_packet(struct psmouse *psmouse) in hgpk_process_simple_packet() argument
430 struct input_dev *dev = psmouse->dev; in hgpk_process_simple_packet()
431 unsigned char *packet = psmouse->packet; in hgpk_process_simple_packet()
438 psmouse_dbg(psmouse, in hgpk_process_simple_packet()
442 if (hgpk_discard_decay_hack(psmouse, x, y)) { in hgpk_process_simple_packet()
444 psmouse_dbg(psmouse, "discarding\n"); in hgpk_process_simple_packet()
448 hgpk_spewing_hack(psmouse, left, right, x, y); in hgpk_process_simple_packet()
451 psmouse_dbg(psmouse, "l=%d r=%d x=%d y=%d\n", in hgpk_process_simple_packet()
463 static psmouse_ret_t hgpk_process_byte(struct psmouse *psmouse) in hgpk_process_byte() argument
465 struct hgpk_data *priv = psmouse->private; in hgpk_process_byte()
467 if (!hgpk_is_byte_valid(psmouse, psmouse->packet)) in hgpk_process_byte()
470 if (psmouse->pktcnt >= psmouse->pktsize) { in hgpk_process_byte()
472 hgpk_process_simple_packet(psmouse); in hgpk_process_byte()
474 hgpk_process_advanced_packet(psmouse); in hgpk_process_byte()
484 psmouse_dbg(psmouse, in hgpk_process_byte()
486 psmouse_queue_work(psmouse, &priv->recalib_wq, in hgpk_process_byte()
495 static int hgpk_select_mode(struct psmouse *psmouse) in hgpk_select_mode() argument
497 struct ps2dev *ps2dev = &psmouse->ps2dev; in hgpk_select_mode()
498 struct hgpk_data *priv = psmouse->private; in hgpk_select_mode()
514 psmouse->pktsize = 3; in hgpk_select_mode()
519 psmouse->pktsize = 6; in hgpk_select_mode()
606 static int hgpk_reset_device(struct psmouse *psmouse, bool recalibrate) in hgpk_reset_device() argument
610 psmouse_reset(psmouse); in hgpk_reset_device()
613 struct ps2dev *ps2dev = &psmouse->ps2dev; in hgpk_reset_device()
627 err = hgpk_select_mode(psmouse); in hgpk_reset_device()
629 psmouse_err(psmouse, "failed to select mode\n"); in hgpk_reset_device()
633 hgpk_reset_hack_state(psmouse); in hgpk_reset_device()
638 static int hgpk_force_recalibrate(struct psmouse *psmouse) in hgpk_force_recalibrate() argument
640 struct hgpk_data *priv = psmouse->private; in hgpk_force_recalibrate()
644 if (psmouse->model < HGPK_MODEL_C) in hgpk_force_recalibrate()
648 psmouse_dbg(psmouse, "recalibration disabled, ignoring\n"); in hgpk_force_recalibrate()
652 psmouse_dbg(psmouse, "recalibrating touchpad..\n"); in hgpk_force_recalibrate()
655 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in hgpk_force_recalibrate()
658 err = hgpk_reset_device(psmouse, true); in hgpk_force_recalibrate()
668 if (psmouse_activate(psmouse)) in hgpk_force_recalibrate()
672 psmouse_dbg(psmouse, "touchpad reactivated\n"); in hgpk_force_recalibrate()
695 static int hgpk_toggle_powersave(struct psmouse *psmouse, int enable) in hgpk_toggle_powersave() argument
697 struct ps2dev *ps2dev = &psmouse->ps2dev; in hgpk_toggle_powersave()
702 if (psmouse->model < HGPK_MODEL_D) in hgpk_toggle_powersave()
706 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in hgpk_toggle_powersave()
716 if (!ps2_sendbyte(&psmouse->ps2dev, in hgpk_toggle_powersave()
722 err = hgpk_reset_device(psmouse, false); in hgpk_toggle_powersave()
724 psmouse_err(psmouse, "Failed to reset device!\n"); in hgpk_toggle_powersave()
729 psmouse_activate(psmouse); in hgpk_toggle_powersave()
730 psmouse_dbg(psmouse, "Touchpad powered up.\n"); in hgpk_toggle_powersave()
732 psmouse_dbg(psmouse, "Powering off touchpad.\n"); in hgpk_toggle_powersave()
740 psmouse_set_state(psmouse, PSMOUSE_IGNORE); in hgpk_toggle_powersave()
743 ps2_sendbyte(&psmouse->ps2dev, 0xec, 20); in hgpk_toggle_powersave()
749 static int hgpk_poll(struct psmouse *psmouse) in hgpk_poll() argument
755 static int hgpk_reconnect(struct psmouse *psmouse) in hgpk_reconnect() argument
757 struct hgpk_data *priv = psmouse->private; in hgpk_reconnect()
765 if (psmouse->ps2dev.serio->dev.power.power_state.event != in hgpk_reconnect()
770 return hgpk_reset_device(psmouse, false); in hgpk_reconnect()
773 static ssize_t hgpk_show_powered(struct psmouse *psmouse, void *data, char *buf) in hgpk_show_powered() argument
775 struct hgpk_data *priv = psmouse->private; in hgpk_show_powered()
780 static ssize_t hgpk_set_powered(struct psmouse *psmouse, void *data, in hgpk_set_powered() argument
783 struct hgpk_data *priv = psmouse->private; in hgpk_set_powered()
799 err = hgpk_toggle_powersave(psmouse, value); in hgpk_set_powered()
810 static ssize_t attr_show_mode(struct psmouse *psmouse, void *data, char *buf) in attr_show_mode() argument
812 struct hgpk_data *priv = psmouse->private; in attr_show_mode()
817 static ssize_t attr_set_mode(struct psmouse *psmouse, void *data, in attr_set_mode() argument
820 struct hgpk_data *priv = psmouse->private; in attr_set_mode()
823 struct input_dev *old_dev = psmouse->dev; in attr_set_mode()
837 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); in attr_set_mode()
841 err = hgpk_reset_device(psmouse, false); in attr_set_mode()
847 psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); in attr_set_mode()
853 psmouse->dev = new_dev; in attr_set_mode()
861 hgpk_reset_device(psmouse, false); in attr_set_mode()
869 static ssize_t hgpk_trigger_recal_show(struct psmouse *psmouse, in hgpk_trigger_recal_show() argument
875 static ssize_t hgpk_trigger_recal(struct psmouse *psmouse, void *data, in hgpk_trigger_recal() argument
878 struct hgpk_data *priv = psmouse->private; in hgpk_trigger_recal()
894 psmouse_queue_work(psmouse, &priv->recalib_wq, 0); in hgpk_trigger_recal()
901 static void hgpk_disconnect(struct psmouse *psmouse) in hgpk_disconnect() argument
903 struct hgpk_data *priv = psmouse->private; in hgpk_disconnect()
905 device_remove_file(&psmouse->ps2dev.serio->dev, in hgpk_disconnect()
907 device_remove_file(&psmouse->ps2dev.serio->dev, in hgpk_disconnect()
910 if (psmouse->model >= HGPK_MODEL_C) in hgpk_disconnect()
911 device_remove_file(&psmouse->ps2dev.serio->dev, in hgpk_disconnect()
914 psmouse_reset(psmouse); in hgpk_disconnect()
922 struct psmouse *psmouse = priv->psmouse; in hgpk_recalib_work() local
924 if (hgpk_force_recalibrate(psmouse)) in hgpk_recalib_work()
925 psmouse_err(psmouse, "recalibration failed!\n"); in hgpk_recalib_work()
928 static int hgpk_register(struct psmouse *psmouse) in hgpk_register() argument
930 struct hgpk_data *priv = psmouse->private; in hgpk_register()
934 psmouse->protocol_handler = hgpk_process_byte; in hgpk_register()
935 psmouse->poll = hgpk_poll; in hgpk_register()
936 psmouse->disconnect = hgpk_disconnect; in hgpk_register()
937 psmouse->reconnect = hgpk_reconnect; in hgpk_register()
940 psmouse->resync_time = 0; in hgpk_register()
942 psmouse->resetafter = 1024; in hgpk_register()
944 hgpk_setup_input_device(psmouse->dev, NULL, priv->mode); in hgpk_register()
946 err = device_create_file(&psmouse->ps2dev.serio->dev, in hgpk_register()
949 psmouse_err(psmouse, "Failed creating 'powered' sysfs node\n"); in hgpk_register()
953 err = device_create_file(&psmouse->ps2dev.serio->dev, in hgpk_register()
956 psmouse_err(psmouse, in hgpk_register()
962 if (psmouse->model >= HGPK_MODEL_C) { in hgpk_register()
963 err = device_create_file(&psmouse->ps2dev.serio->dev, in hgpk_register()
966 psmouse_err(psmouse, in hgpk_register()
975 device_remove_file(&psmouse->ps2dev.serio->dev, in hgpk_register()
978 device_remove_file(&psmouse->ps2dev.serio->dev, in hgpk_register()
983 int hgpk_init(struct psmouse *psmouse) in hgpk_init() argument
994 psmouse->private = priv; in hgpk_init()
996 priv->psmouse = psmouse; in hgpk_init()
1001 err = hgpk_reset_device(psmouse, false); in hgpk_init()
1005 err = hgpk_register(psmouse); in hgpk_init()
1017 static enum hgpk_model_t hgpk_get_model(struct psmouse *psmouse) in hgpk_get_model() argument
1019 struct ps2dev *ps2dev = &psmouse->ps2dev; in hgpk_get_model()
1030 psmouse_dbg(psmouse, "ID: %*ph\n", 3, param); in hgpk_get_model()
1036 psmouse_info(psmouse, "OLPC touchpad revision 0x%x\n", param[2]); in hgpk_get_model()
1041 int hgpk_detect(struct psmouse *psmouse, bool set_properties) in hgpk_detect() argument
1045 version = hgpk_get_model(psmouse); in hgpk_detect()
1050 psmouse->vendor = "ALPS"; in hgpk_detect()
1051 psmouse->name = "HGPK"; in hgpk_detect()
1052 psmouse->model = version; in hgpk_detect()