aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/nfc.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2015-02-10 03:39:44 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-01 22:37:00 -0500
commit03b8d3419fdfc02d1984a0db51c8b74426e12605 (patch)
tree740b43b278842ad3d88c47e1b707616e4c2c4a1a /drivers/misc/mei/nfc.c
parentbca67d681c4864b74fa5fae9ee47e562d1e272b1 (diff)
mei: add mei_cl_alloc_linked function
Add convenient wrapper mei_cl_alloc_linked to simplify error handling Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/nfc.c')
-rw-r--r--drivers/misc/mei/nfc.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c
index bb61a119b8bb..c3bcb63686d7 100644
--- a/drivers/misc/mei/nfc.c
+++ b/drivers/misc/mei/nfc.c
@@ -482,8 +482,8 @@ err:
482int mei_nfc_host_init(struct mei_device *dev) 482int mei_nfc_host_init(struct mei_device *dev)
483{ 483{
484 struct mei_nfc_dev *ndev; 484 struct mei_nfc_dev *ndev;
485 struct mei_cl *cl_info, *cl = NULL; 485 struct mei_cl *cl_info, *cl;
486 struct mei_me_client *me_cl; 486 struct mei_me_client *me_cl = NULL;
487 int ret; 487 int ret;
488 488
489 489
@@ -500,17 +500,6 @@ int mei_nfc_host_init(struct mei_device *dev)
500 goto err; 500 goto err;
501 } 501 }
502 502
503 ndev->cl_info = mei_cl_allocate(dev);
504 ndev->cl = mei_cl_allocate(dev);
505
506 cl = ndev->cl;
507 cl_info = ndev->cl_info;
508
509 if (!cl || !cl_info) {
510 ret = -ENOMEM;
511 goto err;
512 }
513
514 /* check for valid client id */ 503 /* check for valid client id */
515 me_cl = mei_me_cl_by_uuid(dev, &mei_nfc_info_guid); 504 me_cl = mei_me_cl_by_uuid(dev, &mei_nfc_info_guid);
516 if (!me_cl) { 505 if (!me_cl) {
@@ -519,17 +508,21 @@ int mei_nfc_host_init(struct mei_device *dev)
519 goto err; 508 goto err;
520 } 509 }
521 510
511 cl_info = mei_cl_alloc_linked(dev, MEI_HOST_CLIENT_ID_ANY);
512 if (IS_ERR(cl_info)) {
513 ret = PTR_ERR(cl_info);
514 goto err;
515 }
516
522 cl_info->me_client_id = me_cl->client_id; 517 cl_info->me_client_id = me_cl->client_id;
523 cl_info->cl_uuid = me_cl->props.protocol_name; 518 cl_info->cl_uuid = me_cl->props.protocol_name;
524 mei_me_cl_put(me_cl); 519 mei_me_cl_put(me_cl);
525 520 me_cl = NULL;
526 ret = mei_cl_link(cl_info, MEI_HOST_CLIENT_ID_ANY);
527 if (ret)
528 goto err;
529
530 521
531 list_add_tail(&cl_info->device_link, &dev->device_list); 522 list_add_tail(&cl_info->device_link, &dev->device_list);
532 523
524 ndev->cl_info = cl_info;
525
533 /* check for valid client id */ 526 /* check for valid client id */
534 me_cl = mei_me_cl_by_uuid(dev, &mei_nfc_guid); 527 me_cl = mei_me_cl_by_uuid(dev, &mei_nfc_guid);
535 if (!me_cl) { 528 if (!me_cl) {
@@ -538,16 +531,21 @@ int mei_nfc_host_init(struct mei_device *dev)
538 goto err; 531 goto err;
539 } 532 }
540 533
534 cl = mei_cl_alloc_linked(dev, MEI_HOST_CLIENT_ID_ANY);
535 if (IS_ERR(cl)) {
536 ret = PTR_ERR(cl);
537 goto err;
538 }
539
541 cl->me_client_id = me_cl->client_id; 540 cl->me_client_id = me_cl->client_id;
542 cl->cl_uuid = me_cl->props.protocol_name; 541 cl->cl_uuid = me_cl->props.protocol_name;
543 mei_me_cl_put(me_cl); 542 mei_me_cl_put(me_cl);
544 543 me_cl = NULL;
545 ret = mei_cl_link(cl, MEI_HOST_CLIENT_ID_ANY);
546 if (ret)
547 goto err;
548 544
549 list_add_tail(&cl->device_link, &dev->device_list); 545 list_add_tail(&cl->device_link, &dev->device_list);
550 546
547 ndev->cl = cl;
548
551 ndev->req_id = 1; 549 ndev->req_id = 1;
552 550
553 INIT_WORK(&ndev->init_work, mei_nfc_init); 551 INIT_WORK(&ndev->init_work, mei_nfc_init);
@@ -557,6 +555,7 @@ int mei_nfc_host_init(struct mei_device *dev)
557 return 0; 555 return 0;
558 556
559err: 557err:
558 mei_me_cl_put(me_cl);
560 mei_nfc_free(ndev); 559 mei_nfc_free(ndev);
561 560
562 return ret; 561 return ret;