diff options
Diffstat (limited to 'drivers/hid/intel-ish-hid/ishtp-hid-client.c')
| -rw-r--r-- | drivers/hid/intel-ish-hid/ishtp-hid-client.c | 41 | 
1 files changed, 14 insertions, 27 deletions
diff --git a/drivers/hid/intel-ish-hid/ishtp-hid-client.c b/drivers/hid/intel-ish-hid/ishtp-hid-client.c index 2d28cffc1404..e64243bc9c96 100644 --- a/drivers/hid/intel-ish-hid/ishtp-hid-client.c +++ b/drivers/hid/intel-ish-hid/ishtp-hid-client.c @@ -320,23 +320,14 @@ do_get_report:   */  static void ish_cl_event_cb(struct ishtp_cl_device *device)  { -	struct ishtp_cl	*hid_ishtp_cl = device->driver_data; +	struct ishtp_cl	*hid_ishtp_cl = ishtp_get_drvdata(device);  	struct ishtp_cl_rb *rb_in_proc;  	size_t r_length; -	unsigned long flags;  	if (!hid_ishtp_cl)  		return; -	spin_lock_irqsave(&hid_ishtp_cl->in_process_spinlock, flags); -	while (!list_empty(&hid_ishtp_cl->in_process_list.list)) { -		rb_in_proc = list_entry( -			hid_ishtp_cl->in_process_list.list.next, -			struct ishtp_cl_rb, list); -		list_del_init(&rb_in_proc->list); -		spin_unlock_irqrestore(&hid_ishtp_cl->in_process_spinlock, -			flags); - +	while ((rb_in_proc = ishtp_cl_rx_get_rb(hid_ishtp_cl)) != NULL) {  		if (!rb_in_proc->buffer.data)  			return; @@ -346,9 +337,7 @@ static void ish_cl_event_cb(struct ishtp_cl_device *device)  		process_recv(hid_ishtp_cl, rb_in_proc->buffer.data, r_length);  		ishtp_cl_io_rb_recycle(rb_in_proc); -		spin_lock_irqsave(&hid_ishtp_cl->in_process_spinlock, flags);  	} -	spin_unlock_irqrestore(&hid_ishtp_cl->in_process_spinlock, flags);  }  /** @@ -637,8 +626,8 @@ static int ishtp_get_report_descriptor(struct ishtp_cl *hid_ishtp_cl,  static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, int reset)  {  	struct ishtp_device *dev; -	unsigned long flags;  	struct ishtp_cl_data *client_data = hid_ishtp_cl->client_data; +	struct ishtp_fw_client *fw_client;  	int i;  	int rv; @@ -660,16 +649,14 @@ static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, int reset)  	hid_ishtp_cl->rx_ring_size = HID_CL_RX_RING_SIZE;  	hid_ishtp_cl->tx_ring_size = HID_CL_TX_RING_SIZE; -	spin_lock_irqsave(&dev->fw_clients_lock, flags); -	i = ishtp_fw_cl_by_uuid(dev, &hid_ishtp_guid); -	if (i < 0) { -		spin_unlock_irqrestore(&dev->fw_clients_lock, flags); +	fw_client = ishtp_fw_cl_get_client(dev, &hid_ishtp_guid); +	if (!fw_client) {  		dev_err(&client_data->cl_device->dev,  			"ish client uuid not found\n"); -		return i; +		return -ENOENT;  	} -	hid_ishtp_cl->fw_client_id = dev->fw_clients[i].client_id; -	spin_unlock_irqrestore(&dev->fw_clients_lock, flags); + +	hid_ishtp_cl->fw_client_id = fw_client->client_id;  	hid_ishtp_cl->state = ISHTP_CL_CONNECTING;  	rv = ishtp_cl_connect(hid_ishtp_cl); @@ -765,7 +752,7 @@ static void hid_ishtp_cl_reset_handler(struct work_struct *work)  	if (!hid_ishtp_cl)  		return; -	cl_device->driver_data = hid_ishtp_cl; +	ishtp_set_drvdata(cl_device, hid_ishtp_cl);  	hid_ishtp_cl->client_data = client_data;  	client_data->hid_ishtp_cl = hid_ishtp_cl; @@ -814,7 +801,7 @@ static int hid_ishtp_cl_probe(struct ishtp_cl_device *cl_device)  	if (!hid_ishtp_cl)  		return -ENOMEM; -	cl_device->driver_data = hid_ishtp_cl; +	ishtp_set_drvdata(cl_device, hid_ishtp_cl);  	hid_ishtp_cl->client_data = client_data;  	client_data->hid_ishtp_cl = hid_ishtp_cl;  	client_data->cl_device = cl_device; @@ -844,7 +831,7 @@ static int hid_ishtp_cl_probe(struct ishtp_cl_device *cl_device)   */  static int hid_ishtp_cl_remove(struct ishtp_cl_device *cl_device)  { -	struct ishtp_cl *hid_ishtp_cl = cl_device->driver_data; +	struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);  	struct ishtp_cl_data *client_data = hid_ishtp_cl->client_data;  	hid_ishtp_trace(client_data, "%s hid_ishtp_cl %p\n", __func__, @@ -874,7 +861,7 @@ static int hid_ishtp_cl_remove(struct ishtp_cl_device *cl_device)   */  static int hid_ishtp_cl_reset(struct ishtp_cl_device *cl_device)  { -	struct ishtp_cl *hid_ishtp_cl = cl_device->driver_data; +	struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);  	struct ishtp_cl_data *client_data = hid_ishtp_cl->client_data;  	hid_ishtp_trace(client_data, "%s hid_ishtp_cl %p\n", __func__, @@ -898,7 +885,7 @@ static int hid_ishtp_cl_reset(struct ishtp_cl_device *cl_device)  static int hid_ishtp_cl_suspend(struct device *device)  {  	struct ishtp_cl_device *cl_device = to_ishtp_cl_device(device); -	struct ishtp_cl *hid_ishtp_cl = cl_device->driver_data; +	struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);  	struct ishtp_cl_data *client_data = hid_ishtp_cl->client_data;  	hid_ishtp_trace(client_data, "%s hid_ishtp_cl %p\n", __func__, @@ -919,7 +906,7 @@ static int hid_ishtp_cl_suspend(struct device *device)  static int hid_ishtp_cl_resume(struct device *device)  {  	struct ishtp_cl_device *cl_device = to_ishtp_cl_device(device); -	struct ishtp_cl *hid_ishtp_cl = cl_device->driver_data; +	struct ishtp_cl *hid_ishtp_cl = ishtp_get_drvdata(cl_device);  	struct ishtp_cl_data *client_data = hid_ishtp_cl->client_data;  	hid_ishtp_trace(client_data, "%s hid_ishtp_cl %p\n", __func__,  |