162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * HID driver for PenMount touchscreens 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2014 Christian Gmeiner <christian.gmeiner <at> gmail.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * based on hid-penmount copyrighted by 862306a36Sopenharmony_ci * PenMount Touch Solutions <penmount <at> seed.net.tw> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci/* 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/module.h> 1562306a36Sopenharmony_ci#include <linux/hid.h> 1662306a36Sopenharmony_ci#include "hid-ids.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic int penmount_input_mapping(struct hid_device *hdev, 1962306a36Sopenharmony_ci struct hid_input *hi, struct hid_field *field, 2062306a36Sopenharmony_ci struct hid_usage *usage, unsigned long **bit, int *max) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) { 2362306a36Sopenharmony_ci if (((usage->hid - 1) & HID_USAGE) == 0) { 2462306a36Sopenharmony_ci hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH); 2562306a36Sopenharmony_ci return 1; 2662306a36Sopenharmony_ci } else { 2762306a36Sopenharmony_ci return -1; 2862306a36Sopenharmony_ci } 2962306a36Sopenharmony_ci } 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci return 0; 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic const struct hid_device_id penmount_devices[] = { 3562306a36Sopenharmony_ci { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) }, 3662306a36Sopenharmony_ci { } 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ciMODULE_DEVICE_TABLE(hid, penmount_devices); 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic struct hid_driver penmount_driver = { 4162306a36Sopenharmony_ci .name = "hid-penmount", 4262306a36Sopenharmony_ci .id_table = penmount_devices, 4362306a36Sopenharmony_ci .input_mapping = penmount_input_mapping, 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cimodule_hid_driver(penmount_driver); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciMODULE_AUTHOR("Christian Gmeiner <christian.gmeiner@gmail.com>"); 4962306a36Sopenharmony_ciMODULE_DESCRIPTION("PenMount HID TouchScreen driver"); 5062306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 51