Lines Matching +full:push +full:- +full:button
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*-
5 * Copyright (C) 2005-2007 Asia Vital Components Co., Ltd.
6 * Copyright (C) 2005-2012 Tai-hwa Liang, Sentelic Corporation.
31 static const char fsp_drv_ver[] = "1.1.0-K";
73 struct ps2dev *ps2dev = &psmouse->ps2dev; in fsp_reg_read()
76 int rc = -1; in fsp_reg_read()
130 struct ps2dev *ps2dev = &psmouse->ps2dev; in fsp_reg_write()
132 int rc = -1; in fsp_reg_write()
185 if (fsp_reg_read(psmouse, FSP_REG_SYSCTL1, &v) == -1) in fsp_reg_write_enable()
186 return -1; in fsp_reg_write_enable()
195 if (fsp_reg_write(psmouse, FSP_REG_SYSCTL1, nv) == -1) in fsp_reg_write_enable()
196 return -1; in fsp_reg_write_enable()
203 struct ps2dev *ps2dev = &psmouse->ps2dev; in fsp_page_reg_read()
205 int rc = -1; in fsp_page_reg_read()
241 struct ps2dev *ps2dev = &psmouse->ps2dev; in fsp_page_reg_write()
243 int rc = -1; in fsp_page_reg_write()
280 return -EIO; in fsp_get_version()
288 return -EIO; in fsp_get_revision()
296 int rc = -EIO; in fsp_get_sn()
324 if (fsp_reg_read(psmouse, FSP_REG_TMOD_STATUS, &val) == -1) in fsp_get_buttons()
325 return -EIO; in fsp_get_buttons()
331 /* Enable on-pad command tag output */
337 if (fsp_reg_read(psmouse, FSP_REG_OPC_QDOWN, &v) == -1) { in fsp_opc_tag_enable()
339 return -EIO; in fsp_opc_tag_enable()
356 res = -EIO; in fsp_opc_tag_enable()
364 struct fsp_data *pad = psmouse->private; in fsp_onpad_vscr()
368 return -EIO; in fsp_onpad_vscr()
370 pad->vscroll = enable; in fsp_onpad_vscr()
378 return -EIO; in fsp_onpad_vscr()
385 struct fsp_data *pad = psmouse->private; in fsp_onpad_hscr()
389 return -EIO; in fsp_onpad_hscr()
392 return -EIO; in fsp_onpad_hscr()
394 pad->hscroll = enable; in fsp_onpad_hscr()
405 return -EIO; in fsp_onpad_hscr()
409 return -EIO; in fsp_onpad_hscr()
417 * ex: 0xab 0xcd - write oxcd into register 0xab
428 return -EINVAL; in fsp_attr_set_setreg()
435 return -EINVAL; in fsp_attr_set_setreg()
438 return -EIO; in fsp_attr_set_setreg()
440 retval = fsp_reg_write(psmouse, reg, val) < 0 ? -EIO : count; in fsp_attr_set_setreg()
452 struct fsp_data *pad = psmouse->private; in fsp_attr_show_getreg()
454 return sprintf(buf, "%02x%02x\n", pad->last_reg, pad->last_val); in fsp_attr_show_getreg()
460 * ex: 0xab -- read content from register 0xab
465 struct fsp_data *pad = psmouse->private; in fsp_attr_set_getreg()
474 return -EINVAL; in fsp_attr_set_getreg()
477 return -EIO; in fsp_attr_set_getreg()
479 pad->last_reg = reg; in fsp_attr_set_getreg()
480 pad->last_val = val; in fsp_attr_set_getreg()
494 return -EIO; in fsp_attr_show_pagereg()
510 return -EINVAL; in fsp_attr_set_pagereg()
513 return -EIO; in fsp_attr_set_pagereg()
524 struct fsp_data *pad = psmouse->private; in fsp_attr_show_vscroll()
526 return sprintf(buf, "%d\n", pad->vscroll); in fsp_attr_show_vscroll()
540 return -EINVAL; in fsp_attr_set_vscroll()
553 struct fsp_data *pad = psmouse->private; in fsp_attr_show_hscroll()
555 return sprintf(buf, "%d\n", pad->hscroll); in fsp_attr_show_hscroll()
569 return -EINVAL; in fsp_attr_set_hscroll()
582 struct fsp_data *pad = psmouse->private; in fsp_attr_show_flags()
585 pad->flags & FSPDRV_FLAG_EN_OPC ? 'C' : 'c'); in fsp_attr_show_flags()
591 struct fsp_data *pad = psmouse->private; in fsp_attr_set_flags()
597 pad->flags |= FSPDRV_FLAG_EN_OPC; in fsp_attr_set_flags()
600 pad->flags &= ~FSPDRV_FLAG_EN_OPC; in fsp_attr_set_flags()
603 return -EINVAL; in fsp_attr_set_flags()
658 packet_type = "Normal-OPC"; in fsp_packet_debug()
670 if (jiffies_msec - ps2_last_second > 1000) { in fsp_packet_debug()
695 struct input_dev *dev = psmouse->dev; in fsp_process_byte()
696 struct fsp_data *ad = psmouse->private; in fsp_process_byte()
697 unsigned char *packet = psmouse->packet; in fsp_process_byte()
701 if (psmouse->pktcnt < 4) in fsp_process_byte()
710 switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) { in fsp_process_byte()
717 * surface, otherwise cursor may jump to upper-left in fsp_process_byte()
736 if (ad->last_mt_fgr == 2) { in fsp_process_byte()
745 ad->last_mt_fgr = 2; in fsp_process_byte()
750 if (ad->last_mt_fgr == 1) { in fsp_process_byte()
759 ad->last_mt_fgr = 1; in fsp_process_byte()
766 /* On-pad click in SFAC mode should be handled in fsp_process_byte()
767 * by userspace. On-pad clicks in MFMC mode in fsp_process_byte()
773 /* no multi-finger information */ in fsp_process_byte()
774 ad->last_mt_fgr = 0; in fsp_process_byte()
794 /* on-pad click, filter it if necessary */ in fsp_process_byte()
795 if ((ad->flags & FSPDRV_FLAG_EN_OPC) != FSPDRV_FLAG_EN_OPC) in fsp_process_byte()
801 /* special packet data translation from on-pad packets */ in fsp_process_byte()
811 /* push back to packet queue */ in fsp_process_byte()
818 * Processing wheel up/down and extra button events in fsp_process_byte()
821 (int)(packet[3] & 8) - (int)(packet[3] & 7)); in fsp_process_byte()
822 input_report_rel(dev, REL_HWHEEL, lscroll - rscroll); in fsp_process_byte()
840 struct fsp_data *pad = psmouse->private; in fsp_activate_protocol()
841 struct ps2dev *ps2dev = &psmouse->ps2dev; in fsp_activate_protocol()
860 return -EIO; in fsp_activate_protocol()
863 if (pad->ver < FSP_VER_STL3888_C0) { in fsp_activate_protocol()
868 return -EIO; in fsp_activate_protocol()
871 if (fsp_get_buttons(psmouse, &pad->buttons)) { in fsp_activate_protocol()
874 return -EIO; in fsp_activate_protocol()
880 if (pad->buttons == 0x06) { in fsp_activate_protocol()
888 return -EIO; in fsp_activate_protocol()
893 * between on-pad and real button click in fsp_activate_protocol()
898 /* enable on-pad click by default */ in fsp_activate_protocol()
899 pad->flags |= FSPDRV_FLAG_EN_OPC; in fsp_activate_protocol()
901 /* Enable on-pad vertical and horizontal scrolling */ in fsp_activate_protocol()
913 return -EIO; in fsp_activate_protocol()
922 struct input_dev *dev = psmouse->dev; in fsp_set_input_params()
923 struct fsp_data *pad = psmouse->private; in fsp_set_input_params()
925 if (pad->ver < FSP_VER_STL3888_C0) { in fsp_set_input_params()
926 __set_bit(BTN_MIDDLE, dev->keybit); in fsp_set_input_params()
927 __set_bit(BTN_BACK, dev->keybit); in fsp_set_input_params()
928 __set_bit(BTN_FORWARD, dev->keybit); in fsp_set_input_params()
929 __set_bit(REL_WHEEL, dev->relbit); in fsp_set_input_params()
930 __set_bit(REL_HWHEEL, dev->relbit); in fsp_set_input_params()
935 * multi-touch output for the newer hardware. in fsp_set_input_params()
939 * number of scanlines * 64 - 57 in fsp_set_input_params()
945 __set_bit(EV_ABS, dev->evbit); in fsp_set_input_params()
946 __clear_bit(EV_REL, dev->evbit); in fsp_set_input_params()
947 __set_bit(BTN_TOUCH, dev->keybit); in fsp_set_input_params()
948 __set_bit(BTN_TOOL_FINGER, dev->keybit); in fsp_set_input_params()
949 __set_bit(BTN_TOOL_DOUBLETAP, dev->keybit); in fsp_set_input_params()
950 __set_bit(INPUT_PROP_SEMI_MT, dev->propbit); in fsp_set_input_params()
967 return -EIO; in fsp_detect()
970 return -ENODEV; in fsp_detect()
973 psmouse->vendor = "Sentelic"; in fsp_detect()
974 psmouse->name = "FingerSensingPad"; in fsp_detect()
989 sysfs_remove_group(&psmouse->ps2dev.serio->dev.kobj, in fsp_disconnect()
993 kfree(psmouse->private); in fsp_disconnect()
1001 return -ENODEV; in fsp_reconnect()
1004 return -ENODEV; in fsp_reconnect()
1007 return -EIO; in fsp_reconnect()
1020 return -ENODEV; in fsp_init()
1031 psmouse->private = priv = kzalloc_obj(*priv); in fsp_init()
1033 return -ENOMEM; in fsp_init()
1035 priv->ver = ver; in fsp_init()
1036 priv->rev = rev; in fsp_init()
1038 psmouse->protocol_handler = fsp_process_byte; in fsp_init()
1039 psmouse->disconnect = fsp_disconnect; in fsp_init()
1040 psmouse->reconnect = fsp_reconnect; in fsp_init()
1041 psmouse->cleanup = fsp_reset; in fsp_init()
1042 psmouse->pktsize = 4; in fsp_init()
1053 error = sysfs_create_group(&psmouse->ps2dev.serio->dev.kobj, in fsp_init()
1064 kfree(psmouse->private); in fsp_init()
1065 psmouse->private = NULL; in fsp_init()