Lines Matching defs:wacom
7 #include "wacom.h"
88 struct wacom *wacom = hid_get_drvdata(hdev);
89 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
156 struct wacom *wacom = hid_get_drvdata(hdev);
158 if (wacom->wacom_wac.features.type == BOOTLOADER)
167 memcpy(wacom->wacom_wac.data, raw_data, size);
169 wacom_wac_irq(&wacom->wacom_wac, size);
176 struct wacom *wacom = input_get_drvdata(dev);
178 return hid_hw_open(wacom->hdev);
183 struct wacom *wacom = input_get_drvdata(dev);
186 * wacom->hdev should never be null, but surprisingly, I had the case
189 if (wacom->hdev)
190 hid_hw_close(wacom->hdev);
212 struct wacom *wacom = hid_get_drvdata(hdev);
213 struct wacom_features *features = &wacom->wacom_wac.features;
223 wacom->wacom_wac.mode_report = field->report->id;
224 wacom->wacom_wac.mode_value = 2;
295 struct wacom *wacom = hid_get_drvdata(hdev);
296 struct wacom_features *features = &wacom->wacom_wac.features;
297 struct hid_data *hid_data = &wacom->wacom_wac.hid_data;
307 wacom->generic_has_leds = true;
350 wacom->wacom_wac.mode_report = field->report->id;
351 wacom->wacom_wac.mode_value = 0;
356 wacom->wacom_wac.mode_report = field->report->id;
357 wacom->wacom_wac.mode_value = 2;
365 wacom->wacom_wac.mode_report = field->report->id;
366 wacom->wacom_wac.mode_value = 0;
394 * Interface Descriptor of wacom devices can be incomplete and
428 struct wacom *wacom = hid_get_drvdata(hdev);
429 struct wacom_features *features = &wacom->wacom_wac.features;
484 struct wacom *wacom = hid_get_drvdata(hdev);
485 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
549 struct wacom *wacom = hid_get_drvdata(hdev);
550 struct hid_data *hid_data = &wacom->wacom_wac.hid_data;
610 struct wacom *wacom = hid_get_drvdata(hdev);
629 wacom->wacom_wac.bt_high_speed = speed;
643 wacom->wacom_wac.bt_features &= ~0x20;
645 wacom->wacom_wac.bt_features |= 0x20;
648 rep_data[1] = wacom->wacom_wac.bt_features;
653 wacom->wacom_wac.bt_high_speed = speed;
667 static int _wacom_query_tablet_data(struct wacom *wacom)
669 struct hid_device *hdev = wacom->hdev;
670 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
711 struct wacom *wacom = hid_get_drvdata(hdev);
712 struct usb_interface *intf = wacom->intf;
751 struct wacom *wacom = hid_get_drvdata(hdev);
752 struct wacom_features *features = &wacom->wacom_wac.features;
753 struct wacom *sibling_wacom = hid_get_drvdata(sibling);
851 struct wacom *wacom = res;
853 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
859 if (wacom_wac->shared->touch == wacom->hdev)
861 else if (wacom_wac->shared->pen == wacom->hdev)
871 struct wacom *wacom = hid_get_drvdata(hdev);
872 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
895 retval = devm_add_action_or_reset(&hdev->dev, wacom_remove_shared_data, wacom);
907 static int wacom_led_control(struct wacom *wacom)
914 if (!wacom->led.groups)
917 if (wacom->wacom_wac.features.type == REMOTE)
920 if (wacom->wacom_wac.pid) { /* wireless connected */
924 else if (wacom->wacom_wac.features.type == INTUOSP2_BT) {
932 if (wacom->wacom_wac.features.type == HID_GENERIC) {
934 buf[1] = wacom->led.llv;
935 buf[2] = wacom->led.groups[0].select & 0x03;
937 } else if ((wacom->wacom_wac.features.type >= INTUOS5S &&
938 wacom->wacom_wac.features.type <= INTUOSPL)) {
944 int ring_led = wacom->led.groups[0].select & 0x03;
945 int ring_lum = (((wacom->led.llv & 0x60) >> 5) - 1) & 0x03;
950 if (wacom->wacom_wac.pid) {
951 wacom_get_report(wacom->hdev, HID_FEATURE_REPORT,
958 else if (wacom->wacom_wac.features.type == INTUOSP2_BT) {
965 buf[9] = wacom->led.llv;
966 buf[10] = wacom->led.groups[0].select & 0x03;
969 int led = wacom->led.groups[0].select | 0x4;
971 if (wacom->wacom_wac.features.type == WACOM_21UX2 ||
972 wacom->wacom_wac.features.type == WACOM_24HD)
973 led |= (wacom->led.groups[1].select << 4) | 0x40;
977 buf[2] = wacom->led.llv;
978 buf[3] = wacom->led.hlv;
979 buf[4] = wacom->led.img_lum;
982 retval = wacom_set_report(wacom->hdev, HID_FEATURE_REPORT, buf, buf_size,
989 static int wacom_led_putimage(struct wacom *wacom, int button_id, u8 xfer_id,
1003 retval = wacom_set_report(wacom->hdev, HID_FEATURE_REPORT, buf, 2,
1014 retval = wacom_set_report(wacom->hdev, HID_FEATURE_REPORT,
1023 wacom_set_report(wacom->hdev, HID_FEATURE_REPORT, buf, 2,
1035 struct wacom *wacom = hid_get_drvdata(hdev);
1043 mutex_lock(&wacom->lock);
1045 wacom->led.groups[set_id].select = id & 0x3;
1046 err = wacom_led_control(wacom);
1048 mutex_unlock(&wacom->lock);
1063 struct wacom *wacom = hid_get_drvdata(hdev); \
1065 wacom->led.groups[SET_ID].select); \
1074 static ssize_t wacom_luminance_store(struct wacom *wacom, u8 *dest,
1084 mutex_lock(&wacom->lock);
1087 err = wacom_led_control(wacom);
1089 mutex_unlock(&wacom->lock);
1099 struct wacom *wacom = hid_get_drvdata(hdev); \
1101 return wacom_luminance_store(wacom, &wacom->led.field, \
1107 struct wacom *wacom = dev_get_drvdata(dev); \
1108 return scnprintf(buf, PAGE_SIZE, "%d\n", wacom->led.field); \
1122 struct wacom *wacom = hid_get_drvdata(hdev);
1138 mutex_lock(&wacom->lock);
1140 err = wacom_led_putimage(wacom, button_id, xfer_id, len, buf);
1142 mutex_unlock(&wacom->lock);
1234 static int __wacom_devm_sysfs_create_group(struct wacom *wacom,
1256 devres_add(&wacom->hdev->dev, devres);
1261 static int wacom_devm_sysfs_create_group(struct wacom *wacom,
1264 return __wacom_devm_sysfs_create_group(wacom, &wacom->hdev->dev.kobj,
1275 static int wacom_devm_kfifo_alloc(struct wacom *wacom)
1277 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1294 devres_add(&wacom->hdev->dev, pen_fifo);
1302 struct wacom *wacom = led->wacom;
1304 if (wacom->led.max_hlv)
1305 return led->hlv * LED_FULL / wacom->led.max_hlv;
1307 if (wacom->led.max_llv)
1308 return led->llv * LED_FULL / wacom->led.max_llv;
1317 struct wacom *wacom = led->wacom;
1319 if (wacom->led.groups[led->group].select != led->id)
1329 struct wacom *wacom = led->wacom;
1332 mutex_lock(&wacom->lock);
1334 if (!wacom->led.groups || (brightness == LED_OFF &&
1335 wacom->led.groups[led->group].select != led->id)) {
1340 led->llv = wacom->led.llv = wacom->led.max_llv * brightness / LED_FULL;
1341 led->hlv = wacom->led.hlv = wacom->led.max_hlv * brightness / LED_FULL;
1343 wacom->led.groups[led->group].select = led->id;
1345 error = wacom_led_control(wacom);
1348 mutex_unlock(&wacom->lock);
1358 static int wacom_led_register_one(struct device *dev, struct wacom *wacom,
1366 "%s::wacom-%d.%d",
1377 hid_err(wacom->hdev,
1386 led->wacom = wacom;
1387 led->llv = wacom->led.llv;
1388 led->hlv = wacom->led.hlv;
1402 hid_err(wacom->hdev,
1420 struct wacom *wacom,
1427 if (group_id >= wacom->led.count || count <= 0)
1430 if (!devres_open_group(dev, &wacom->led.groups[group_id], GFP_KERNEL))
1439 wacom->led.groups[group_id].leds = leds;
1440 wacom->led.groups[group_id].count = count;
1443 error = wacom_led_register_one(dev, wacom, &leds[i],
1449 wacom->led.groups[group_id].dev = dev;
1451 devres_close_group(dev, &wacom->led.groups[group_id]);
1462 error = devm_add_action_or_reset(&wacom->hdev->dev,
1464 &wacom->led.groups[group_id]);
1471 devres_release_group(dev, &wacom->led.groups[group_id]);
1475 struct wacom_led *wacom_led_find(struct wacom *wacom, unsigned int group_id,
1480 if (group_id >= wacom->led.count)
1483 group = &wacom->led.groups[group_id];
1494 * wacom_led_next: gives the next available led with a wacom trigger.
1499 struct wacom_led *wacom_led_next(struct wacom *wacom, struct wacom_led *cur)
1504 if (!wacom || !cur)
1511 next_led = wacom_led_find(wacom, group, ++next);
1521 struct wacom *wacom = data;
1523 wacom->led.groups = NULL;
1524 wacom->led.count = 0;
1527 static int wacom_led_groups_allocate(struct wacom *wacom, int count)
1529 struct device *dev = &wacom->hdev->dev;
1538 error = devm_add_action_or_reset(dev, wacom_led_groups_release, wacom);
1542 wacom->led.groups = groups;
1543 wacom->led.count = count;
1548 static int wacom_leds_alloc_and_register(struct wacom *wacom, int group_count,
1554 if (!wacom->wacom_wac.pad_input)
1557 dev = &wacom->wacom_wac.pad_input->dev;
1559 error = wacom_led_groups_allocate(wacom, group_count);
1564 error = wacom_led_groups_alloc_and_register_one(dev, wacom, i,
1574 int wacom_initialize_leds(struct wacom *wacom)
1578 if (!(wacom->wacom_wac.features.device_type & WACOM_DEVICETYPE_PAD))
1582 switch (wacom->wacom_wac.features.type) {
1584 if (!wacom->generic_has_leds)
1586 wacom->led.llv = 100;
1587 wacom->led.max_llv = 100;
1589 error = wacom_leds_alloc_and_register(wacom, 1, 4, false);
1591 hid_err(wacom->hdev,
1596 error = wacom_devm_sysfs_create_group(wacom,
1604 wacom->led.llv = 10;
1605 wacom->led.hlv = 20;
1606 wacom->led.max_llv = 127;
1607 wacom->led.max_hlv = 127;
1608 wacom->led.img_lum = 10;
1610 error = wacom_leds_alloc_and_register(wacom, 1, 4, false);
1612 hid_err(wacom->hdev,
1617 error = wacom_devm_sysfs_create_group(wacom,
1623 wacom->led.llv = 0;
1624 wacom->led.hlv = 0;
1625 wacom->led.img_lum = 0;
1627 error = wacom_leds_alloc_and_register(wacom, 2, 4, false);
1629 hid_err(wacom->hdev,
1634 error = wacom_devm_sysfs_create_group(wacom,
1644 wacom->led.llv = 32;
1645 wacom->led.max_llv = 96;
1647 error = wacom_leds_alloc_and_register(wacom, 1, 4, false);
1649 hid_err(wacom->hdev,
1654 error = wacom_devm_sysfs_create_group(wacom,
1659 wacom->led.llv = 50;
1660 wacom->led.max_llv = 100;
1661 error = wacom_leds_alloc_and_register(wacom, 1, 4, false);
1663 hid_err(wacom->hdev,
1670 wacom->led.llv = 255;
1671 wacom->led.max_llv = 255;
1672 error = wacom_led_groups_allocate(wacom, 5);
1674 hid_err(wacom->hdev,
1685 hid_err(wacom->hdev,
1695 struct wacom *wacom = container_of(work, struct wacom, init_work.work);
1697 _wacom_query_tablet_data(wacom);
1698 wacom_led_control(wacom);
1701 static void wacom_query_tablet_data(struct wacom *wacom)
1703 schedule_delayed_work(&wacom->init_work, msecs_to_jiffies(1000));
1723 val->strval = battery->wacom->wacom_wac.name;
1755 static int __wacom_initialize_battery(struct wacom *wacom,
1759 struct device *dev = &wacom->hdev->dev;
1769 battery->wacom = wacom;
1787 power_supply_powers(ps_bat, &wacom->hdev->dev);
1799 static int wacom_initialize_battery(struct wacom *wacom)
1801 if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY)
1802 return __wacom_initialize_battery(wacom, &wacom->battery);
1807 static void wacom_destroy_battery(struct wacom *wacom)
1809 if (wacom->battery.battery) {
1810 devres_release_group(&wacom->hdev->dev,
1811 &wacom->battery.bat_desc);
1812 wacom->battery.battery = NULL;
1821 struct wacom *wacom = hid_get_drvdata(hdev);
1823 return sysfs_emit(buf, "%i\n", wacom->wacom_wac.bt_high_speed);
1831 struct wacom *wacom = hid_get_drvdata(hdev);
1840 wacom_bt_query_tablet_data(hdev, new_speed, &wacom->wacom_wac.features);
1855 struct wacom *wacom = hid_get_drvdata(hdev);
1858 mode = wacom->led.groups[index].select;
1888 static int wacom_remote_create_attr_group(struct wacom *wacom, __u32 serial,
1892 struct wacom_remote *remote = wacom->remote;
1894 remote->remotes[index].group.name = devm_kasprintf(&wacom->hdev->dev,
1900 error = __wacom_devm_sysfs_create_group(wacom, remote->remote_dir,
1904 hid_err(wacom->hdev,
1912 static int wacom_cmd_unpair_remote(struct wacom *wacom, unsigned char selector)
1925 retval = wacom_set_report(wacom->hdev, HID_OUTPUT_REPORT, buf,
1939 struct wacom *wacom = hid_get_drvdata(hdev);
1945 hid_info(wacom->hdev, "remote: unrecognized unpair code: %s\n",
1950 mutex_lock(&wacom->lock);
1952 err = wacom_cmd_unpair_remote(wacom, selector);
1953 mutex_unlock(&wacom->lock);
1970 struct wacom *wacom = data;
1971 struct wacom_remote *remote = wacom->remote;
1978 wacom->remote = NULL;
1981 static int wacom_initialize_remotes(struct wacom *wacom)
1987 if (wacom->wacom_wac.features.type != REMOTE)
1990 remote = devm_kzalloc(&wacom->hdev->dev, sizeof(*wacom->remote),
1995 wacom->remote = remote;
2003 hid_err(wacom->hdev, "failed allocating remote_fifo\n");
2014 &wacom->hdev->dev.kobj);
2021 hid_err(wacom->hdev,
2027 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
2031 error = devm_add_action_or_reset(&wacom->hdev->dev,
2032 wacom_remotes_destroy, wacom);
2039 static struct input_dev *wacom_allocate_input(struct wacom *wacom)
2042 struct hid_device *hdev = wacom->hdev;
2043 struct wacom_wac *wacom_wac = &(wacom->wacom_wac);
2059 input_set_drvdata(input_dev, wacom);
2064 static int wacom_allocate_inputs(struct wacom *wacom)
2066 struct wacom_wac *wacom_wac = &(wacom->wacom_wac);
2068 wacom_wac->pen_input = wacom_allocate_input(wacom);
2069 wacom_wac->touch_input = wacom_allocate_input(wacom);
2070 wacom_wac->pad_input = wacom_allocate_input(wacom);
2083 static int wacom_setup_inputs(struct wacom *wacom)
2086 struct wacom_wac *wacom_wac = &(wacom->wacom_wac);
2123 static int wacom_register_inputs(struct wacom *wacom)
2126 struct wacom_wac *wacom_wac = &(wacom->wacom_wac);
2195 struct wacom *wacom = container_of(work, struct wacom, battery_work);
2197 if ((wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) &&
2198 !wacom->battery.battery) {
2199 wacom_initialize_battery(wacom);
2201 else if (!(wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) &&
2202 wacom->battery.battery) {
2203 wacom_destroy_battery(wacom);
2224 static void wacom_update_name(struct wacom *wacom, const char *suffix)
2226 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2232 char *product_name = wacom->hdev->name;
2234 if (hid_is_usb(wacom->hdev)) {
2235 struct usb_interface *intf = to_usb_interface(wacom->hdev->dev.parent);
2240 if (wacom->hdev->bus == BUS_I2C) {
2242 features->name, wacom->hdev->product);
2244 strstr(product_name, "wacom") ||
2247 hid_warn(wacom->hdev, "String overflow while assembling device name");
2267 hid_warn(wacom->hdev, "String overflow while assembling device name");
2283 static void wacom_release_resources(struct wacom *wacom)
2285 struct hid_device *hdev = wacom->hdev;
2287 if (!wacom->resources)
2290 devres_release_group(&hdev->dev, wacom);
2292 wacom->resources = false;
2294 wacom->wacom_wac.pen_input = NULL;
2295 wacom->wacom_wac.touch_input = NULL;
2296 wacom->wacom_wac.pad_input = NULL;
2325 static int wacom_parse_and_register(struct wacom *wacom, bool wireless)
2327 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2329 struct hid_device *hdev = wacom->hdev;
2337 if (!devres_open_group(&hdev->dev, wacom, GFP_KERNEL))
2340 wacom->resources = true;
2342 error = wacom_allocate_inputs(wacom);
2366 wacom_setup_device_quirks(wacom);
2384 wacom_update_name(wacom, wireless ? " (WL)" : "");
2398 error = wacom_setup_inputs(wacom);
2412 error = wacom_register_inputs(wacom);
2416 if (wacom->wacom_wac.features.device_type & WACOM_DEVICETYPE_PAD) {
2417 error = wacom_initialize_leds(wacom);
2421 error = wacom_initialize_remotes(wacom);
2428 wacom_query_tablet_data(wacom);
2434 cancel_delayed_work_sync(&wacom->init_work);
2435 _wacom_query_tablet_data(wacom);
2449 devres_close_group(&hdev->dev, wacom);
2456 wacom_release_resources(wacom);
2462 struct wacom *wacom = container_of(work, struct wacom, wireless_work);
2463 struct usb_device *usbdev = wacom->usbdev;
2464 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2466 struct wacom *wacom1, *wacom2;
2475 wacom_destroy_battery(wacom);
2493 hid_info(wacom->hdev, "wireless tablet disconnected\n");
2497 hid_info(wacom->hdev, "wireless tablet connected with PID %x\n",
2508 hid_info(wacom->hdev, "ignoring unknown PID.\n");
2537 hid_warn(wacom->hdev, "String overflow while assembling device name");
2549 static void wacom_remote_destroy_battery(struct wacom *wacom, int index)
2551 struct wacom_remote *remote = wacom->remote;
2554 devres_release_group(&wacom->hdev->dev,
2561 static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
2563 struct wacom_remote *remote = wacom->remote;
2575 wacom_remote_destroy_battery(wacom, i);
2578 devres_release_group(&wacom->hdev->dev,
2583 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
2588 static int wacom_remote_create_one(struct wacom *wacom, u32 serial,
2591 struct wacom_remote *remote = wacom->remote;
2592 struct device *dev = &wacom->hdev->dev;
2611 error = wacom_remote_create_attr_group(wacom, serial, index);
2615 remote->remotes[index].input = wacom_allocate_input(wacom);
2621 remote->remotes[index].input->name = wacom->wacom_wac.pad_name;
2629 &wacom->wacom_wac);
2641 wacom, index, 3, true);
2656 static int wacom_remote_attach_battery(struct wacom *wacom, int index)
2658 struct wacom_remote *remote = wacom->remote;
2670 if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
2673 error = __wacom_initialize_battery(wacom,
2674 &wacom->remote->remotes[index].battery);
2683 struct wacom *wacom = container_of(work, struct wacom, remote_work);
2684 struct wacom_remote *remote = wacom->remote;
2698 hid_err(wacom->hdev,
2705 wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_REMOTE);
2715 wacom_remote_destroy_battery(wacom, i);
2718 wacom_remote_attach_battery(wacom, i);
2723 wacom_remote_destroy_one(wacom, i);
2725 wacom_remote_create_one(wacom, work_serial, i);
2728 wacom_remote_destroy_one(wacom, i);
2735 struct wacom *wacom = container_of(work, struct wacom, mode_change_work);
2736 struct wacom_shared *shared = wacom->wacom_wac.shared;
2737 struct wacom *wacom1 = NULL;
2738 struct wacom *wacom2 = NULL;
2739 bool is_direct = wacom->wacom_wac.is_direct_mode;
2776 struct wacom *wacom;
2789 wacom = devm_kzalloc(&hdev->dev, sizeof(struct wacom), GFP_KERNEL);
2790 if (!wacom)
2793 hid_set_drvdata(hdev, wacom);
2794 wacom->hdev = hdev;
2796 wacom_wac = &wacom->wacom_wac;
2803 error = wacom_devm_kfifo_alloc(wacom);
2814 wacom->usbdev = dev;
2815 wacom->intf = intf;
2818 mutex_init(&wacom->lock);
2819 INIT_DELAYED_WORK(&wacom->init_work, wacom_init_work);
2820 INIT_WORK(&wacom->wireless_work, wacom_wireless_work);
2821 INIT_WORK(&wacom->battery_work, wacom_battery_work);
2822 INIT_WORK(&wacom->remote_work, wacom_remote_work);
2823 INIT_WORK(&wacom->mode_change_work, wacom_mode_change_work);
2824 timer_setup(&wacom->idleprox_timer, &wacom_idleprox_timeout, TIMER_DEFERRABLE);
2838 error = wacom_parse_and_register(wacom, false);
2856 struct wacom *wacom = hid_get_drvdata(hdev);
2857 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2865 cancel_delayed_work_sync(&wacom->init_work);
2866 cancel_work_sync(&wacom->wireless_work);
2867 cancel_work_sync(&wacom->battery_work);
2868 cancel_work_sync(&wacom->remote_work);
2869 cancel_work_sync(&wacom->mode_change_work);
2870 del_timer_sync(&wacom->idleprox_timer);
2875 wacom_led_groups_release(wacom);
2877 if (wacom->wacom_wac.features.type != REMOTE)
2878 wacom_release_resources(wacom);
2884 struct wacom *wacom = hid_get_drvdata(hdev);
2886 mutex_lock(&wacom->lock);
2888 /* switch to wacom mode first */
2889 _wacom_query_tablet_data(wacom);
2890 wacom_led_control(wacom);
2892 mutex_unlock(&wacom->lock);
2904 .name = "wacom",