From 119844a75ed99e43cd9d0a87f7dfdf4dc438a50f Mon Sep 17 00:00:00 2001 From: Andi Shyti Date: Fri, 17 Feb 2017 17:32:04 +0900 Subject: HID: gearvr: add support for Samsung Gear VR The Gear VR is a connected through USB to mobile phones and generates a hidraw device as interface to userspace. Change-Id: Ib7814fa6f86a034d5ab6fd59120efb8c2392f9bd Signed-off-by: Andi Shyti --- drivers/hid/hid-gearvr.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 drivers/hid/hid-gearvr.c (limited to 'drivers/hid/hid-gearvr.c') diff --git a/drivers/hid/hid-gearvr.c b/drivers/hid/hid-gearvr.c new file mode 100644 index 000000000000..09e6459b0c4f --- /dev/null +++ b/drivers/hid/hid-gearvr.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Author: Andi Shyti + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Samsung Gear VR device driver + */ + +#include +#include + +#include "hid-ids.h" + +static int gearvr_probe(struct hid_device *hdev, const struct hid_device_id *id) +{ + int err; + + err = hid_parse(hdev); + if (err) + return err; + + err = hid_hw_start(hdev, HID_CONNECT_DEFAULT); + if (err) + return err; + + err = hid_hw_power(hdev, PM_HINT_FULLON); + if (err < 0) + goto fail_dev_stop; + + err = hid_hw_open(hdev); + if (err < 0) + goto fail_power_off; + + return 0; + +fail_power_off: + hid_hw_power(hdev, PM_HINT_NORMAL); +fail_dev_stop: + hid_hw_stop(hdev); + + return err; +} + +static void gearvr_remove(struct hid_device *hdev) +{ + hid_hw_close(hdev); + hid_hw_power(hdev, PM_HINT_NORMAL); + hid_hw_stop(hdev); +} + +static const struct hid_device_id gearvr_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG_ELECTRONICS, + USB_DEVICE_ID_SAMSUNG_GEARVR_R320) }, + { } +}; + +MODULE_DEVICE_TABLE(hid, gearvr_devices); + +static struct hid_driver gearvr_driver = { + .name = "gearvr", + .id_table = gearvr_devices, + .probe = gearvr_probe, + .remove = gearvr_remove, +}; + +module_hid_driver(gearvr_driver); + +MODULE_AUTHOR("Andi Shyti "); +MODULE_DESCRIPTION("Samsung Gear VR device driver"); +MODULE_LICENSE("GPL v2"); -- cgit v1.2.3