cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hid-rmi.c (19346B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  Copyright (c) 2013 Andrew Duggan <aduggan@synaptics.com>
      4 *  Copyright (c) 2013 Synaptics Incorporated
      5 *  Copyright (c) 2014 Benjamin Tissoires <benjamin.tissoires@gmail.com>
      6 *  Copyright (c) 2014 Red Hat, Inc
      7 */
      8
      9#include <linux/kernel.h>
     10#include <linux/hid.h>
     11#include <linux/input.h>
     12#include <linux/input/mt.h>
     13#include <linux/irq.h>
     14#include <linux/irqdomain.h>
     15#include <linux/module.h>
     16#include <linux/pm.h>
     17#include <linux/slab.h>
     18#include <linux/wait.h>
     19#include <linux/sched.h>
     20#include <linux/rmi.h>
     21#include "hid-ids.h"
     22
     23#define RMI_MOUSE_REPORT_ID		0x01 /* Mouse emulation Report */
     24#define RMI_WRITE_REPORT_ID		0x09 /* Output Report */
     25#define RMI_READ_ADDR_REPORT_ID		0x0a /* Output Report */
     26#define RMI_READ_DATA_REPORT_ID		0x0b /* Input Report */
     27#define RMI_ATTN_REPORT_ID		0x0c /* Input Report */
     28#define RMI_SET_RMI_MODE_REPORT_ID	0x0f /* Feature Report */
     29
     30/* flags */
     31#define RMI_READ_REQUEST_PENDING	0
     32#define RMI_READ_DATA_PENDING		1
     33#define RMI_STARTED			2
     34
     35/* device flags */
     36#define RMI_DEVICE			BIT(0)
     37#define RMI_DEVICE_HAS_PHYS_BUTTONS	BIT(1)
     38#define RMI_DEVICE_OUTPUT_SET_REPORT	BIT(2)
     39
     40/*
     41 * retrieve the ctrl registers
     42 * the ctrl register has a size of 20 but a fw bug split it into 16 + 4,
     43 * and there is no way to know if the first 20 bytes are here or not.
     44 * We use only the first 12 bytes, so get only them.
     45 */
     46#define RMI_F11_CTRL_REG_COUNT		12
     47
     48enum rmi_mode_type {
     49	RMI_MODE_OFF			= 0,
     50	RMI_MODE_ATTN_REPORTS		= 1,
     51	RMI_MODE_NO_PACKED_ATTN_REPORTS	= 2,
     52};
     53
     54/**
     55 * struct rmi_data - stores information for hid communication
     56 *
     57 * @page_mutex: Locks current page to avoid changing pages in unexpected ways.
     58 * @page: Keeps track of the current virtual page
     59 * @xport: transport device to be registered with the RMI4 core.
     60 *
     61 * @wait: Used for waiting for read data
     62 *
     63 * @writeReport: output buffer when writing RMI registers
     64 * @readReport: input buffer when reading RMI registers
     65 *
     66 * @input_report_size: size of an input report (advertised by HID)
     67 * @output_report_size: size of an output report (advertised by HID)
     68 *
     69 * @flags: flags for the current device (started, reading, etc...)
     70 *
     71 * @reset_work: worker which will be called in case of a mouse report
     72 * @hdev: pointer to the struct hid_device
     73 *
     74 * @device_flags: flags which describe the device
     75 *
     76 * @domain: the IRQ domain allocated for this RMI4 device
     77 * @rmi_irq: the irq that will be used to generate events to rmi-core
     78 */
     79struct rmi_data {
     80	struct mutex page_mutex;
     81	int page;
     82	struct rmi_transport_dev xport;
     83
     84	wait_queue_head_t wait;
     85
     86	u8 *writeReport;
     87	u8 *readReport;
     88
     89	u32 input_report_size;
     90	u32 output_report_size;
     91
     92	unsigned long flags;
     93
     94	struct work_struct reset_work;
     95	struct hid_device *hdev;
     96
     97	unsigned long device_flags;
     98
     99	struct irq_domain *domain;
    100	int rmi_irq;
    101};
    102
    103#define RMI_PAGE(addr) (((addr) >> 8) & 0xff)
    104
    105static int rmi_write_report(struct hid_device *hdev, u8 *report, int len);
    106
    107/**
    108 * rmi_set_page - Set RMI page
    109 * @hdev: The pointer to the hid_device struct
    110 * @page: The new page address.
    111 *
    112 * RMI devices have 16-bit addressing, but some of the physical
    113 * implementations (like SMBus) only have 8-bit addressing. So RMI implements
    114 * a page address at 0xff of every page so we can reliable page addresses
    115 * every 256 registers.
    116 *
    117 * The page_mutex lock must be held when this function is entered.
    118 *
    119 * Returns zero on success, non-zero on failure.
    120 */
    121static int rmi_set_page(struct hid_device *hdev, u8 page)
    122{
    123	struct rmi_data *data = hid_get_drvdata(hdev);
    124	int retval;
    125
    126	data->writeReport[0] = RMI_WRITE_REPORT_ID;
    127	data->writeReport[1] = 1;
    128	data->writeReport[2] = 0xFF;
    129	data->writeReport[4] = page;
    130
    131	retval = rmi_write_report(hdev, data->writeReport,
    132			data->output_report_size);
    133	if (retval != data->output_report_size) {
    134		dev_err(&hdev->dev,
    135			"%s: set page failed: %d.", __func__, retval);
    136		return retval;
    137	}
    138
    139	data->page = page;
    140	return 0;
    141}
    142
    143static int rmi_set_mode(struct hid_device *hdev, u8 mode)
    144{
    145	int ret;
    146	const u8 txbuf[2] = {RMI_SET_RMI_MODE_REPORT_ID, mode};
    147	u8 *buf;
    148
    149	buf = kmemdup(txbuf, sizeof(txbuf), GFP_KERNEL);
    150	if (!buf)
    151		return -ENOMEM;
    152
    153	ret = hid_hw_raw_request(hdev, RMI_SET_RMI_MODE_REPORT_ID, buf,
    154			sizeof(txbuf), HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
    155	kfree(buf);
    156	if (ret < 0) {
    157		dev_err(&hdev->dev, "unable to set rmi mode to %d (%d)\n", mode,
    158			ret);
    159		return ret;
    160	}
    161
    162	return 0;
    163}
    164
    165static int rmi_write_report(struct hid_device *hdev, u8 *report, int len)
    166{
    167	struct rmi_data *data = hid_get_drvdata(hdev);
    168	int ret;
    169
    170	if (data->device_flags & RMI_DEVICE_OUTPUT_SET_REPORT) {
    171		/*
    172		 * Talk to device by using SET_REPORT requests instead.
    173		 */
    174		ret = hid_hw_raw_request(hdev, report[0], report,
    175				len, HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
    176	} else {
    177		ret = hid_hw_output_report(hdev, (void *)report, len);
    178	}
    179
    180	if (ret < 0) {
    181		dev_err(&hdev->dev, "failed to write hid report (%d)\n", ret);
    182		return ret;
    183	}
    184
    185	return ret;
    186}
    187
    188static int rmi_hid_read_block(struct rmi_transport_dev *xport, u16 addr,
    189		void *buf, size_t len)
    190{
    191	struct rmi_data *data = container_of(xport, struct rmi_data, xport);
    192	struct hid_device *hdev = data->hdev;
    193	int ret;
    194	int bytes_read;
    195	int bytes_needed;
    196	int retries;
    197	int read_input_count;
    198
    199	mutex_lock(&data->page_mutex);
    200
    201	if (RMI_PAGE(addr) != data->page) {
    202		ret = rmi_set_page(hdev, RMI_PAGE(addr));
    203		if (ret < 0)
    204			goto exit;
    205	}
    206
    207	for (retries = 5; retries > 0; retries--) {
    208		data->writeReport[0] = RMI_READ_ADDR_REPORT_ID;
    209		data->writeReport[1] = 0; /* old 1 byte read count */
    210		data->writeReport[2] = addr & 0xFF;
    211		data->writeReport[3] = (addr >> 8) & 0xFF;
    212		data->writeReport[4] = len  & 0xFF;
    213		data->writeReport[5] = (len >> 8) & 0xFF;
    214
    215		set_bit(RMI_READ_REQUEST_PENDING, &data->flags);
    216
    217		ret = rmi_write_report(hdev, data->writeReport,
    218						data->output_report_size);
    219		if (ret != data->output_report_size) {
    220			dev_err(&hdev->dev,
    221				"failed to write request output report (%d)\n",
    222				ret);
    223			goto exit;
    224		}
    225
    226		bytes_read = 0;
    227		bytes_needed = len;
    228		while (bytes_read < len) {
    229			if (!wait_event_timeout(data->wait,
    230				test_bit(RMI_READ_DATA_PENDING, &data->flags),
    231					msecs_to_jiffies(1000))) {
    232				hid_warn(hdev, "%s: timeout elapsed\n",
    233					 __func__);
    234				ret = -EAGAIN;
    235				break;
    236			}
    237
    238			read_input_count = data->readReport[1];
    239			memcpy(buf + bytes_read, &data->readReport[2],
    240				read_input_count < bytes_needed ?
    241					read_input_count : bytes_needed);
    242
    243			bytes_read += read_input_count;
    244			bytes_needed -= read_input_count;
    245			clear_bit(RMI_READ_DATA_PENDING, &data->flags);
    246		}
    247
    248		if (ret >= 0) {
    249			ret = 0;
    250			break;
    251		}
    252	}
    253
    254exit:
    255	clear_bit(RMI_READ_REQUEST_PENDING, &data->flags);
    256	mutex_unlock(&data->page_mutex);
    257	return ret;
    258}
    259
    260static int rmi_hid_write_block(struct rmi_transport_dev *xport, u16 addr,
    261		const void *buf, size_t len)
    262{
    263	struct rmi_data *data = container_of(xport, struct rmi_data, xport);
    264	struct hid_device *hdev = data->hdev;
    265	int ret;
    266
    267	mutex_lock(&data->page_mutex);
    268
    269	if (RMI_PAGE(addr) != data->page) {
    270		ret = rmi_set_page(hdev, RMI_PAGE(addr));
    271		if (ret < 0)
    272			goto exit;
    273	}
    274
    275	data->writeReport[0] = RMI_WRITE_REPORT_ID;
    276	data->writeReport[1] = len;
    277	data->writeReport[2] = addr & 0xFF;
    278	data->writeReport[3] = (addr >> 8) & 0xFF;
    279	memcpy(&data->writeReport[4], buf, len);
    280
    281	ret = rmi_write_report(hdev, data->writeReport,
    282					data->output_report_size);
    283	if (ret < 0) {
    284		dev_err(&hdev->dev,
    285			"failed to write request output report (%d)\n",
    286			ret);
    287		goto exit;
    288	}
    289	ret = 0;
    290
    291exit:
    292	mutex_unlock(&data->page_mutex);
    293	return ret;
    294}
    295
    296static int rmi_reset_attn_mode(struct hid_device *hdev)
    297{
    298	struct rmi_data *data = hid_get_drvdata(hdev);
    299	struct rmi_device *rmi_dev = data->xport.rmi_dev;
    300	int ret;
    301
    302	ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
    303	if (ret)
    304		return ret;
    305
    306	if (test_bit(RMI_STARTED, &data->flags))
    307		ret = rmi_dev->driver->reset_handler(rmi_dev);
    308
    309	return ret;
    310}
    311
    312static void rmi_reset_work(struct work_struct *work)
    313{
    314	struct rmi_data *hdata = container_of(work, struct rmi_data,
    315						reset_work);
    316
    317	/* switch the device to RMI if we receive a generic mouse report */
    318	rmi_reset_attn_mode(hdata->hdev);
    319}
    320
    321static int rmi_input_event(struct hid_device *hdev, u8 *data, int size)
    322{
    323	struct rmi_data *hdata = hid_get_drvdata(hdev);
    324	struct rmi_device *rmi_dev = hdata->xport.rmi_dev;
    325	unsigned long flags;
    326
    327	if (!(test_bit(RMI_STARTED, &hdata->flags)))
    328		return 0;
    329
    330	local_irq_save(flags);
    331
    332	rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2);
    333
    334	generic_handle_irq(hdata->rmi_irq);
    335
    336	local_irq_restore(flags);
    337
    338	return 1;
    339}
    340
    341static int rmi_read_data_event(struct hid_device *hdev, u8 *data, int size)
    342{
    343	struct rmi_data *hdata = hid_get_drvdata(hdev);
    344
    345	if (!test_bit(RMI_READ_REQUEST_PENDING, &hdata->flags)) {
    346		hid_dbg(hdev, "no read request pending\n");
    347		return 0;
    348	}
    349
    350	memcpy(hdata->readReport, data, size < hdata->input_report_size ?
    351			size : hdata->input_report_size);
    352	set_bit(RMI_READ_DATA_PENDING, &hdata->flags);
    353	wake_up(&hdata->wait);
    354
    355	return 1;
    356}
    357
    358static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size)
    359{
    360	int valid_size = size;
    361	/*
    362	 * On the Dell XPS 13 9333, the bus sometimes get confused and fills
    363	 * the report with a sentinel value "ff". Synaptics told us that such
    364	 * behavior does not comes from the touchpad itself, so we filter out
    365	 * such reports here.
    366	 */
    367
    368	while ((data[valid_size - 1] == 0xff) && valid_size > 0)
    369		valid_size--;
    370
    371	return valid_size;
    372}
    373
    374static int rmi_raw_event(struct hid_device *hdev,
    375		struct hid_report *report, u8 *data, int size)
    376{
    377	struct rmi_data *hdata = hid_get_drvdata(hdev);
    378
    379	if (!(hdata->device_flags & RMI_DEVICE))
    380		return 0;
    381
    382	size = rmi_check_sanity(hdev, data, size);
    383	if (size < 2)
    384		return 0;
    385
    386	switch (data[0]) {
    387	case RMI_READ_DATA_REPORT_ID:
    388		return rmi_read_data_event(hdev, data, size);
    389	case RMI_ATTN_REPORT_ID:
    390		return rmi_input_event(hdev, data, size);
    391	default:
    392		return 1;
    393	}
    394
    395	return 0;
    396}
    397
    398static int rmi_event(struct hid_device *hdev, struct hid_field *field,
    399			struct hid_usage *usage, __s32 value)
    400{
    401	struct rmi_data *data = hid_get_drvdata(hdev);
    402
    403	if ((data->device_flags & RMI_DEVICE) &&
    404	    (field->application == HID_GD_POINTER ||
    405	    field->application == HID_GD_MOUSE)) {
    406		if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) {
    407			if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
    408				return 0;
    409
    410			if ((usage->hid == HID_GD_X || usage->hid == HID_GD_Y)
    411			    && !value)
    412				return 1;
    413		}
    414
    415		schedule_work(&data->reset_work);
    416		return 1;
    417	}
    418
    419	return 0;
    420}
    421
    422static void rmi_report(struct hid_device *hid, struct hid_report *report)
    423{
    424	struct hid_field *field = report->field[0];
    425
    426	if (!(hid->claimed & HID_CLAIMED_INPUT))
    427		return;
    428
    429	switch (report->id) {
    430	case RMI_READ_DATA_REPORT_ID:
    431	case RMI_ATTN_REPORT_ID:
    432		return;
    433	}
    434
    435	if (field && field->hidinput && field->hidinput->input)
    436		input_sync(field->hidinput->input);
    437}
    438
    439#ifdef CONFIG_PM
    440static int rmi_suspend(struct hid_device *hdev, pm_message_t message)
    441{
    442	struct rmi_data *data = hid_get_drvdata(hdev);
    443	struct rmi_device *rmi_dev = data->xport.rmi_dev;
    444	int ret;
    445
    446	if (!(data->device_flags & RMI_DEVICE))
    447		return 0;
    448
    449	ret = rmi_driver_suspend(rmi_dev, false);
    450	if (ret) {
    451		hid_warn(hdev, "Failed to suspend device: %d\n", ret);
    452		return ret;
    453	}
    454
    455	return 0;
    456}
    457
    458static int rmi_post_resume(struct hid_device *hdev)
    459{
    460	struct rmi_data *data = hid_get_drvdata(hdev);
    461	struct rmi_device *rmi_dev = data->xport.rmi_dev;
    462	int ret;
    463
    464	if (!(data->device_flags & RMI_DEVICE))
    465		return 0;
    466
    467	/* Make sure the HID device is ready to receive events */
    468	ret = hid_hw_open(hdev);
    469	if (ret)
    470		return ret;
    471
    472	ret = rmi_reset_attn_mode(hdev);
    473	if (ret)
    474		goto out;
    475
    476	ret = rmi_driver_resume(rmi_dev, false);
    477	if (ret) {
    478		hid_warn(hdev, "Failed to resume device: %d\n", ret);
    479		goto out;
    480	}
    481
    482out:
    483	hid_hw_close(hdev);
    484	return ret;
    485}
    486#endif /* CONFIG_PM */
    487
    488static int rmi_hid_reset(struct rmi_transport_dev *xport, u16 reset_addr)
    489{
    490	struct rmi_data *data = container_of(xport, struct rmi_data, xport);
    491	struct hid_device *hdev = data->hdev;
    492
    493	return rmi_reset_attn_mode(hdev);
    494}
    495
    496static int rmi_input_configured(struct hid_device *hdev, struct hid_input *hi)
    497{
    498	struct rmi_data *data = hid_get_drvdata(hdev);
    499	struct input_dev *input = hi->input;
    500	int ret = 0;
    501
    502	if (!(data->device_flags & RMI_DEVICE))
    503		return 0;
    504
    505	data->xport.input = input;
    506
    507	hid_dbg(hdev, "Opening low level driver\n");
    508	ret = hid_hw_open(hdev);
    509	if (ret)
    510		return ret;
    511
    512	/* Allow incoming hid reports */
    513	hid_device_io_start(hdev);
    514
    515	ret = rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
    516	if (ret < 0) {
    517		dev_err(&hdev->dev, "failed to set rmi mode\n");
    518		goto exit;
    519	}
    520
    521	ret = rmi_set_page(hdev, 0);
    522	if (ret < 0) {
    523		dev_err(&hdev->dev, "failed to set page select to 0.\n");
    524		goto exit;
    525	}
    526
    527	ret = rmi_register_transport_device(&data->xport);
    528	if (ret < 0) {
    529		dev_err(&hdev->dev, "failed to register transport driver\n");
    530		goto exit;
    531	}
    532
    533	set_bit(RMI_STARTED, &data->flags);
    534
    535exit:
    536	hid_device_io_stop(hdev);
    537	hid_hw_close(hdev);
    538	return ret;
    539}
    540
    541static int rmi_input_mapping(struct hid_device *hdev,
    542		struct hid_input *hi, struct hid_field *field,
    543		struct hid_usage *usage, unsigned long **bit, int *max)
    544{
    545	struct rmi_data *data = hid_get_drvdata(hdev);
    546
    547	/*
    548	 * we want to make HID ignore the advertised HID collection
    549	 * for RMI deivces
    550	 */
    551	if (data->device_flags & RMI_DEVICE) {
    552		if ((data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) &&
    553		    ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON))
    554			return 0;
    555
    556		return -1;
    557	}
    558
    559	return 0;
    560}
    561
    562static int rmi_check_valid_report_id(struct hid_device *hdev, unsigned type,
    563		unsigned id, struct hid_report **report)
    564{
    565	int i;
    566
    567	*report = hdev->report_enum[type].report_id_hash[id];
    568	if (*report) {
    569		for (i = 0; i < (*report)->maxfield; i++) {
    570			unsigned app = (*report)->field[i]->application;
    571			if ((app & HID_USAGE_PAGE) >= HID_UP_MSVENDOR)
    572				return 1;
    573		}
    574	}
    575
    576	return 0;
    577}
    578
    579static struct rmi_device_platform_data rmi_hid_pdata = {
    580	.sensor_pdata = {
    581		.sensor_type = rmi_sensor_touchpad,
    582		.axis_align.flip_y = true,
    583		.dribble = RMI_REG_STATE_ON,
    584		.palm_detect = RMI_REG_STATE_OFF,
    585	},
    586};
    587
    588static const struct rmi_transport_ops hid_rmi_ops = {
    589	.write_block	= rmi_hid_write_block,
    590	.read_block	= rmi_hid_read_block,
    591	.reset		= rmi_hid_reset,
    592};
    593
    594static void rmi_irq_teardown(void *data)
    595{
    596	struct rmi_data *hdata = data;
    597	struct irq_domain *domain = hdata->domain;
    598
    599	if (!domain)
    600		return;
    601
    602	irq_dispose_mapping(irq_find_mapping(domain, 0));
    603
    604	irq_domain_remove(domain);
    605	hdata->domain = NULL;
    606	hdata->rmi_irq = 0;
    607}
    608
    609static int rmi_irq_map(struct irq_domain *h, unsigned int virq,
    610		       irq_hw_number_t hw_irq_num)
    611{
    612	irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq);
    613
    614	return 0;
    615}
    616
    617static const struct irq_domain_ops rmi_irq_ops = {
    618	.map = rmi_irq_map,
    619};
    620
    621static int rmi_setup_irq_domain(struct hid_device *hdev)
    622{
    623	struct rmi_data *hdata = hid_get_drvdata(hdev);
    624	int ret;
    625
    626	hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1,
    627						 &rmi_irq_ops, hdata);
    628	if (!hdata->domain)
    629		return -ENOMEM;
    630
    631	ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata);
    632	if (ret)
    633		return ret;
    634
    635	hdata->rmi_irq = irq_create_mapping(hdata->domain, 0);
    636	if (hdata->rmi_irq <= 0) {
    637		hid_err(hdev, "Can't allocate an IRQ\n");
    638		return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO;
    639	}
    640
    641	return 0;
    642}
    643
    644static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id)
    645{
    646	struct rmi_data *data = NULL;
    647	int ret;
    648	size_t alloc_size;
    649	struct hid_report *input_report;
    650	struct hid_report *output_report;
    651	struct hid_report *feature_report;
    652
    653	data = devm_kzalloc(&hdev->dev, sizeof(struct rmi_data), GFP_KERNEL);
    654	if (!data)
    655		return -ENOMEM;
    656
    657	INIT_WORK(&data->reset_work, rmi_reset_work);
    658	data->hdev = hdev;
    659
    660	hid_set_drvdata(hdev, data);
    661
    662	hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
    663	hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
    664
    665	ret = hid_parse(hdev);
    666	if (ret) {
    667		hid_err(hdev, "parse failed\n");
    668		return ret;
    669	}
    670
    671	if (id->driver_data)
    672		data->device_flags = id->driver_data;
    673
    674	/*
    675	 * Check for the RMI specific report ids. If they are misisng
    676	 * simply return and let the events be processed by hid-input
    677	 */
    678	if (!rmi_check_valid_report_id(hdev, HID_FEATURE_REPORT,
    679	    RMI_SET_RMI_MODE_REPORT_ID, &feature_report)) {
    680		hid_dbg(hdev, "device does not have set mode feature report\n");
    681		goto start;
    682	}
    683
    684	if (!rmi_check_valid_report_id(hdev, HID_INPUT_REPORT,
    685	    RMI_ATTN_REPORT_ID, &input_report)) {
    686		hid_dbg(hdev, "device does not have attention input report\n");
    687		goto start;
    688	}
    689
    690	data->input_report_size = hid_report_len(input_report);
    691
    692	if (!rmi_check_valid_report_id(hdev, HID_OUTPUT_REPORT,
    693	    RMI_WRITE_REPORT_ID, &output_report)) {
    694		hid_dbg(hdev,
    695			"device does not have rmi write output report\n");
    696		goto start;
    697	}
    698
    699	data->output_report_size = hid_report_len(output_report);
    700
    701	data->device_flags |= RMI_DEVICE;
    702	alloc_size = data->output_report_size + data->input_report_size;
    703
    704	data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL);
    705	if (!data->writeReport) {
    706		hid_err(hdev, "failed to allocate buffer for HID reports\n");
    707		return -ENOMEM;
    708	}
    709
    710	data->readReport = data->writeReport + data->output_report_size;
    711
    712	init_waitqueue_head(&data->wait);
    713
    714	mutex_init(&data->page_mutex);
    715
    716	ret = rmi_setup_irq_domain(hdev);
    717	if (ret) {
    718		hid_err(hdev, "failed to allocate IRQ domain\n");
    719		return ret;
    720	}
    721
    722	if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)
    723		rmi_hid_pdata.gpio_data.disable = true;
    724
    725	data->xport.dev = hdev->dev.parent;
    726	data->xport.pdata = rmi_hid_pdata;
    727	data->xport.pdata.irq = data->rmi_irq;
    728	data->xport.proto_name = "hid";
    729	data->xport.ops = &hid_rmi_ops;
    730
    731start:
    732	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
    733	if (ret) {
    734		hid_err(hdev, "hw start failed\n");
    735		return ret;
    736	}
    737
    738	return 0;
    739}
    740
    741static void rmi_remove(struct hid_device *hdev)
    742{
    743	struct rmi_data *hdata = hid_get_drvdata(hdev);
    744
    745	if ((hdata->device_flags & RMI_DEVICE)
    746	    && test_bit(RMI_STARTED, &hdata->flags)) {
    747		clear_bit(RMI_STARTED, &hdata->flags);
    748		cancel_work_sync(&hdata->reset_work);
    749		rmi_unregister_transport_device(&hdata->xport);
    750	}
    751
    752	hid_hw_stop(hdev);
    753}
    754
    755static const struct hid_device_id rmi_id[] = {
    756	{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14),
    757		.driver_data = RMI_DEVICE_HAS_PHYS_BUTTONS },
    758	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
    759	{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_REZEL) },
    760	{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5),
    761		.driver_data = RMI_DEVICE_OUTPUT_SET_REPORT },
    762	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
    763	{ }
    764};
    765MODULE_DEVICE_TABLE(hid, rmi_id);
    766
    767static struct hid_driver rmi_driver = {
    768	.name = "hid-rmi",
    769	.id_table		= rmi_id,
    770	.probe			= rmi_probe,
    771	.remove			= rmi_remove,
    772	.event			= rmi_event,
    773	.raw_event		= rmi_raw_event,
    774	.report			= rmi_report,
    775	.input_mapping		= rmi_input_mapping,
    776	.input_configured	= rmi_input_configured,
    777#ifdef CONFIG_PM
    778	.suspend		= rmi_suspend,
    779	.resume			= rmi_post_resume,
    780	.reset_resume		= rmi_post_resume,
    781#endif
    782};
    783
    784module_hid_driver(rmi_driver);
    785
    786MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
    787MODULE_DESCRIPTION("RMI HID driver");
    788MODULE_LICENSE("GPL");