Skip to content

Commit f645a90

Browse files
EvenxfJiri Kosina
authored andcommitted
HID: intel-ish-hid: ishtp-hid-client: use helper functions for connection
Use helper functions ishtp_cl_establish_connection() and ishtp_cl_destroy_connection() to establish and destroy connection respectively. These functions are used during initialization, reset and deinitialization flows. No functional changes are expected. Signed-off-by: Even Xu <[email protected]> Acked-by: Srinivas Pandruvada <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent a3a44d2 commit f645a90

File tree

1 file changed

+13
-50
lines changed

1 file changed

+13
-50
lines changed

drivers/hid/intel-ish-hid/ishtp-hid-client.c

Lines changed: 13 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -639,47 +639,26 @@ static int ishtp_get_report_descriptor(struct ishtp_cl *hid_ishtp_cl,
639639
*
640640
* Return: 0 on success, non zero on error
641641
*/
642-
static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, int reset)
642+
static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, bool reset)
643643
{
644-
struct ishtp_device *dev;
645644
struct ishtp_cl_data *client_data = ishtp_get_client_data(hid_ishtp_cl);
646-
struct ishtp_fw_client *fw_client;
647645
int i;
648646
int rv;
649647

650648
dev_dbg(cl_data_to_dev(client_data), "%s\n", __func__);
651649
hid_ishtp_trace(client_data, "%s reset flag: %d\n", __func__, reset);
652650

653-
rv = ishtp_cl_link(hid_ishtp_cl);
654-
if (rv) {
655-
dev_err(cl_data_to_dev(client_data),
656-
"ishtp_cl_link failed\n");
657-
return -ENOMEM;
658-
}
659-
660651
client_data->init_done = 0;
661652

662-
dev = ishtp_get_ishtp_device(hid_ishtp_cl);
663-
664-
/* Connect to FW client */
665-
ishtp_set_tx_ring_size(hid_ishtp_cl, HID_CL_TX_RING_SIZE);
666-
ishtp_set_rx_ring_size(hid_ishtp_cl, HID_CL_RX_RING_SIZE);
667-
668-
fw_client = ishtp_fw_cl_get_client(dev, &hid_ishtp_id_table[0].guid);
669-
if (!fw_client) {
670-
dev_err(cl_data_to_dev(client_data),
671-
"ish client uuid not found\n");
672-
return -ENOENT;
673-
}
674-
ishtp_cl_set_fw_client_id(hid_ishtp_cl,
675-
ishtp_get_fw_client_id(fw_client));
676-
ishtp_set_connection_state(hid_ishtp_cl, ISHTP_CL_CONNECTING);
677-
678-
rv = ishtp_cl_connect(hid_ishtp_cl);
653+
rv = ishtp_cl_establish_connection(hid_ishtp_cl,
654+
&hid_ishtp_id_table[0].guid,
655+
HID_CL_TX_RING_SIZE,
656+
HID_CL_RX_RING_SIZE,
657+
reset);
679658
if (rv) {
680659
dev_err(cl_data_to_dev(client_data),
681660
"client connect fail\n");
682-
goto err_cl_unlink;
661+
goto err_cl_disconnect;
683662
}
684663

685664
hid_ishtp_trace(client_data, "%s client connected\n", __func__);
@@ -723,10 +702,7 @@ static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, int reset)
723702
return 0;
724703

725704
err_cl_disconnect:
726-
ishtp_set_connection_state(hid_ishtp_cl, ISHTP_CL_DISCONNECTING);
727-
ishtp_cl_disconnect(hid_ishtp_cl);
728-
err_cl_unlink:
729-
ishtp_cl_unlink(hid_ishtp_cl);
705+
ishtp_cl_destroy_connection(hid_ishtp_cl, reset);
730706
return rv;
731707
}
732708

@@ -738,8 +714,7 @@ static int hid_ishtp_cl_init(struct ishtp_cl *hid_ishtp_cl, int reset)
738714
*/
739715
static void hid_ishtp_cl_deinit(struct ishtp_cl *hid_ishtp_cl)
740716
{
741-
ishtp_cl_unlink(hid_ishtp_cl);
742-
ishtp_cl_flush_queues(hid_ishtp_cl);
717+
ishtp_cl_destroy_connection(hid_ishtp_cl, false);
743718

744719
/* disband and free all Tx and Rx client-level rings */
745720
ishtp_cl_free(hid_ishtp_cl);
@@ -749,33 +724,23 @@ static void hid_ishtp_cl_reset_handler(struct work_struct *work)
749724
{
750725
struct ishtp_cl_data *client_data;
751726
struct ishtp_cl *hid_ishtp_cl;
752-
struct ishtp_cl_device *cl_device;
753727
int retry;
754728
int rv;
755729

756730
client_data = container_of(work, struct ishtp_cl_data, work);
757731

758732
hid_ishtp_cl = client_data->hid_ishtp_cl;
759-
cl_device = client_data->cl_device;
760733

761734
hid_ishtp_trace(client_data, "%s hid_ishtp_cl %p\n", __func__,
762735
hid_ishtp_cl);
763736
dev_dbg(ishtp_device(client_data->cl_device), "%s\n", __func__);
764737

765-
hid_ishtp_cl_deinit(hid_ishtp_cl);
766-
767-
hid_ishtp_cl = ishtp_cl_allocate(cl_device);
768-
if (!hid_ishtp_cl)
769-
return;
770-
771-
ishtp_set_drvdata(cl_device, hid_ishtp_cl);
772-
ishtp_set_client_data(hid_ishtp_cl, client_data);
773-
client_data->hid_ishtp_cl = hid_ishtp_cl;
738+
ishtp_cl_destroy_connection(hid_ishtp_cl, true);
774739

775740
client_data->num_hid_devices = 0;
776741

777742
for (retry = 0; retry < 3; ++retry) {
778-
rv = hid_ishtp_cl_init(hid_ishtp_cl, 1);
743+
rv = hid_ishtp_cl_init(hid_ishtp_cl, true);
779744
if (!rv)
780745
break;
781746
dev_err(cl_data_to_dev(client_data), "Retry reset init\n");
@@ -841,7 +806,7 @@ static int hid_ishtp_cl_probe(struct ishtp_cl_device *cl_device)
841806

842807
ishtp_hid_print_trace = ishtp_trace_callback(cl_device);
843808

844-
rv = hid_ishtp_cl_init(hid_ishtp_cl, 0);
809+
rv = hid_ishtp_cl_init(hid_ishtp_cl, false);
845810
if (rv) {
846811
ishtp_cl_free(hid_ishtp_cl);
847812
return rv;
@@ -868,11 +833,9 @@ static void hid_ishtp_cl_remove(struct ishtp_cl_device *cl_device)
868833
hid_ishtp_cl);
869834

870835
dev_dbg(ishtp_device(cl_device), "%s\n", __func__);
871-
ishtp_set_connection_state(hid_ishtp_cl, ISHTP_CL_DISCONNECTING);
872-
ishtp_cl_disconnect(hid_ishtp_cl);
836+
hid_ishtp_cl_deinit(hid_ishtp_cl);
873837
ishtp_put_device(cl_device);
874838
ishtp_hid_remove(client_data);
875-
hid_ishtp_cl_deinit(hid_ishtp_cl);
876839

877840
hid_ishtp_cl = NULL;
878841

0 commit comments

Comments
 (0)