aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/intel_pmc_ipc.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-10-13 19:52:39 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-10-13 19:52:39 -0400
commit44dc8c9d685a2b7c9d4f5a87c746799c80aa53f0 (patch)
treee9996804892b1823a256f536f6462ae56d77cf3e /drivers/platform/x86/intel_pmc_ipc.c
parente3799a210d794fda0fa2ae99841d30cadf76069c (diff)
parent127595ed21c1bb24e20d488914b70ca7a643f7a4 (diff)
Merge tag 'platform-drivers-x86-v4.9-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86
Pull x86 platform drivers updates from Darren Hart: "Cleanups, refactoring, and a couple bug fixes. intel_pmc_core: - avoid boot time warning for !CONFIG_DEBUGFS_FS intel_pmc_ipc: - Convert to use platform_device_register_full asus-wmi: - Filter buggy scan codes on ASUS Q500A toshiba_bluetooth: - Decouple an error checking status code toshiba_haps: - Change logging level from info to debug - Split ACPI and HDD protection error handling asus-laptop: - get rid of parse_arg() asus-wmi: - fix asus ux303ub brightness issue toshiba_acpi: - Fix typo in *_cooling_method_set function - Change error checking logic from TCI functions - Clean up variable declaration" * tag 'platform-drivers-x86-v4.9-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86: platform/x86: intel_pmc_core: avoid boot time warning for !CONFIG_DEBUGFS_FS platform/x86: intel_pmc_ipc: Convert to use platform_device_register_full platform/x86: asus-wmi: Filter buggy scan codes on ASUS Q500A platform/x86: toshiba_bluetooth: Decouple an error checking status code platform/x86: toshiba_haps: Change logging level from info to debug platform/x86: toshiba_haps: Split ACPI and HDD protection error handling platform/x86: asus-laptop: get rid of parse_arg() platform/x86: asus-wmi: fix asus ux303ub brightness issue platform/x86: toshiba_acpi: Fix typo in *_cooling_method_set function platform/x86: toshiba_acpi: Change error checking logic from TCI functions platform/x86: toshiba_acpi: Clean up variable declaration
Diffstat (limited to 'drivers/platform/x86/intel_pmc_ipc.c')
-rw-r--r--drivers/platform/x86/intel_pmc_ipc.c110
1 files changed, 33 insertions, 77 deletions
diff --git a/drivers/platform/x86/intel_pmc_ipc.c b/drivers/platform/x86/intel_pmc_ipc.c
index a511d518206b..0bf51d574fa9 100644
--- a/drivers/platform/x86/intel_pmc_ipc.c
+++ b/drivers/platform/x86/intel_pmc_ipc.c
@@ -522,48 +522,36 @@ static struct resource telemetry_res[] = {
522static int ipc_create_punit_device(void) 522static int ipc_create_punit_device(void)
523{ 523{
524 struct platform_device *pdev; 524 struct platform_device *pdev;
525 int ret; 525 const struct platform_device_info pdevinfo = {
526 526 .parent = ipcdev.dev,
527 pdev = platform_device_alloc(PUNIT_DEVICE_NAME, -1); 527 .name = PUNIT_DEVICE_NAME,
528 if (!pdev) { 528 .id = -1,
529 dev_err(ipcdev.dev, "Failed to alloc punit platform device\n"); 529 .res = punit_res_array,
530 return -ENOMEM; 530 .num_res = ARRAY_SIZE(punit_res_array),
531 } 531 };
532 532
533 pdev->dev.parent = ipcdev.dev; 533 pdev = platform_device_register_full(&pdevinfo);
534 ret = platform_device_add_resources(pdev, punit_res_array, 534 if (IS_ERR(pdev))
535 ARRAY_SIZE(punit_res_array)); 535 return PTR_ERR(pdev);
536 if (ret) {
537 dev_err(ipcdev.dev, "Failed to add platform punit resources\n");
538 goto err;
539 }
540 536
541 ret = platform_device_add(pdev);
542 if (ret) {
543 dev_err(ipcdev.dev, "Failed to add punit platform device\n");
544 goto err;
545 }
546 ipcdev.punit_dev = pdev; 537 ipcdev.punit_dev = pdev;
547 538
548 return 0; 539 return 0;
549err:
550 platform_device_put(pdev);
551 return ret;
552} 540}
553 541
554static int ipc_create_tco_device(void) 542static int ipc_create_tco_device(void)
555{ 543{
556 struct platform_device *pdev; 544 struct platform_device *pdev;
557 struct resource *res; 545 struct resource *res;
558 int ret; 546 const struct platform_device_info pdevinfo = {
559 547 .parent = ipcdev.dev,
560 pdev = platform_device_alloc(TCO_DEVICE_NAME, -1); 548 .name = TCO_DEVICE_NAME,
561 if (!pdev) { 549 .id = -1,
562 dev_err(ipcdev.dev, "Failed to alloc tco platform device\n"); 550 .res = tco_res,
563 return -ENOMEM; 551 .num_res = ARRAY_SIZE(tco_res),
564 } 552 .data = &tco_info,
565 553 .size_data = sizeof(tco_info),
566 pdev->dev.parent = ipcdev.dev; 554 };
567 555
568 res = tco_res + TCO_RESOURCE_ACPI_IO; 556 res = tco_res + TCO_RESOURCE_ACPI_IO;
569 res->start = ipcdev.acpi_io_base + TCO_BASE_OFFSET; 557 res->start = ipcdev.acpi_io_base + TCO_BASE_OFFSET;
@@ -577,45 +565,26 @@ static int ipc_create_tco_device(void)
577 res->start = ipcdev.gcr_base + TCO_PMC_OFFSET; 565 res->start = ipcdev.gcr_base + TCO_PMC_OFFSET;
578 res->end = res->start + TCO_PMC_SIZE - 1; 566 res->end = res->start + TCO_PMC_SIZE - 1;
579 567
580 ret = platform_device_add_resources(pdev, tco_res, ARRAY_SIZE(tco_res)); 568 pdev = platform_device_register_full(&pdevinfo);
581 if (ret) { 569 if (IS_ERR(pdev))
582 dev_err(ipcdev.dev, "Failed to add tco platform resources\n"); 570 return PTR_ERR(pdev);
583 goto err;
584 }
585 571
586 ret = platform_device_add_data(pdev, &tco_info, sizeof(tco_info));
587 if (ret) {
588 dev_err(ipcdev.dev, "Failed to add tco platform data\n");
589 goto err;
590 }
591
592 ret = platform_device_add(pdev);
593 if (ret) {
594 dev_err(ipcdev.dev, "Failed to add tco platform device\n");
595 goto err;
596 }
597 ipcdev.tco_dev = pdev; 572 ipcdev.tco_dev = pdev;
598 573
599 return 0; 574 return 0;
600err:
601 platform_device_put(pdev);
602 return ret;
603} 575}
604 576
605static int ipc_create_telemetry_device(void) 577static int ipc_create_telemetry_device(void)
606{ 578{
607 struct platform_device *pdev; 579 struct platform_device *pdev;
608 struct resource *res; 580 struct resource *res;
609 int ret; 581 const struct platform_device_info pdevinfo = {
610 582 .parent = ipcdev.dev,
611 pdev = platform_device_alloc(TELEMETRY_DEVICE_NAME, -1); 583 .name = TELEMETRY_DEVICE_NAME,
612 if (!pdev) { 584 .id = -1,
613 dev_err(ipcdev.dev, 585 .res = telemetry_res,
614 "Failed to allocate telemetry platform device\n"); 586 .num_res = ARRAY_SIZE(telemetry_res),
615 return -ENOMEM; 587 };
616 }
617
618 pdev->dev.parent = ipcdev.dev;
619 588
620 res = telemetry_res + TELEMETRY_RESOURCE_PUNIT_SSRAM; 589 res = telemetry_res + TELEMETRY_RESOURCE_PUNIT_SSRAM;
621 res->start = ipcdev.telem_punit_ssram_base; 590 res->start = ipcdev.telem_punit_ssram_base;
@@ -625,26 +594,13 @@ static int ipc_create_telemetry_device(void)
625 res->start = ipcdev.telem_pmc_ssram_base; 594 res->start = ipcdev.telem_pmc_ssram_base;
626 res->end = res->start + ipcdev.telem_pmc_ssram_size - 1; 595 res->end = res->start + ipcdev.telem_pmc_ssram_size - 1;
627 596
628 ret = platform_device_add_resources(pdev, telemetry_res, 597 pdev = platform_device_register_full(&pdevinfo);
629 ARRAY_SIZE(telemetry_res)); 598 if (IS_ERR(pdev))
630 if (ret) { 599 return PTR_ERR(pdev);
631 dev_err(ipcdev.dev,
632 "Failed to add telemetry platform resources\n");
633 goto err;
634 }
635 600
636 ret = platform_device_add(pdev);
637 if (ret) {
638 dev_err(ipcdev.dev,
639 "Failed to add telemetry platform device\n");
640 goto err;
641 }
642 ipcdev.telemetry_dev = pdev; 601 ipcdev.telemetry_dev = pdev;
643 602
644 return 0; 603 return 0;
645err:
646 platform_device_put(pdev);
647 return ret;
648} 604}
649 605
650static int ipc_create_pmc_devices(void) 606static int ipc_create_pmc_devices(void)