Merge tag 'platform-drivers-x86-v4.9-1' of git://git.infradead.org/users/dvhart/linux...
[cascardo/linux.git] / drivers / platform / x86 / intel_pmc_ipc.c
index a511d51..0bf51d5 100644 (file)
@@ -522,48 +522,36 @@ static struct resource telemetry_res[] = {
 static int ipc_create_punit_device(void)
 {
        struct platform_device *pdev;
-       int ret;
-
-       pdev = platform_device_alloc(PUNIT_DEVICE_NAME, -1);
-       if (!pdev) {
-               dev_err(ipcdev.dev, "Failed to alloc punit platform device\n");
-               return -ENOMEM;
-       }
-
-       pdev->dev.parent = ipcdev.dev;
-       ret = platform_device_add_resources(pdev, punit_res_array,
-                                           ARRAY_SIZE(punit_res_array));
-       if (ret) {
-               dev_err(ipcdev.dev, "Failed to add platform punit resources\n");
-               goto err;
-       }
+       const struct platform_device_info pdevinfo = {
+               .parent = ipcdev.dev,
+               .name = PUNIT_DEVICE_NAME,
+               .id = -1,
+               .res = punit_res_array,
+               .num_res = ARRAY_SIZE(punit_res_array),
+               };
+
+       pdev = platform_device_register_full(&pdevinfo);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
-       ret = platform_device_add(pdev);
-       if (ret) {
-               dev_err(ipcdev.dev, "Failed to add punit platform device\n");
-               goto err;
-       }
        ipcdev.punit_dev = pdev;
 
        return 0;
-err:
-       platform_device_put(pdev);
-       return ret;
 }
 
 static int ipc_create_tco_device(void)
 {
        struct platform_device *pdev;
        struct resource *res;
-       int ret;
-
-       pdev = platform_device_alloc(TCO_DEVICE_NAME, -1);
-       if (!pdev) {
-               dev_err(ipcdev.dev, "Failed to alloc tco platform device\n");
-               return -ENOMEM;
-       }
-
-       pdev->dev.parent = ipcdev.dev;
+       const struct platform_device_info pdevinfo = {
+               .parent = ipcdev.dev,
+               .name = TCO_DEVICE_NAME,
+               .id = -1,
+               .res = tco_res,
+               .num_res = ARRAY_SIZE(tco_res),
+               .data = &tco_info,
+               .size_data = sizeof(tco_info),
+               };
 
        res = tco_res + TCO_RESOURCE_ACPI_IO;
        res->start = ipcdev.acpi_io_base + TCO_BASE_OFFSET;
@@ -577,45 +565,26 @@ static int ipc_create_tco_device(void)
        res->start = ipcdev.gcr_base + TCO_PMC_OFFSET;
        res->end = res->start + TCO_PMC_SIZE - 1;
 
-       ret = platform_device_add_resources(pdev, tco_res, ARRAY_SIZE(tco_res));
-       if (ret) {
-               dev_err(ipcdev.dev, "Failed to add tco platform resources\n");
-               goto err;
-       }
+       pdev = platform_device_register_full(&pdevinfo);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
-       ret = platform_device_add_data(pdev, &tco_info, sizeof(tco_info));
-       if (ret) {
-               dev_err(ipcdev.dev, "Failed to add tco platform data\n");
-               goto err;
-       }
-
-       ret = platform_device_add(pdev);
-       if (ret) {
-               dev_err(ipcdev.dev, "Failed to add tco platform device\n");
-               goto err;
-       }
        ipcdev.tco_dev = pdev;
 
        return 0;
-err:
-       platform_device_put(pdev);
-       return ret;
 }
 
 static int ipc_create_telemetry_device(void)
 {
        struct platform_device *pdev;
        struct resource *res;
-       int ret;
-
-       pdev = platform_device_alloc(TELEMETRY_DEVICE_NAME, -1);
-       if (!pdev) {
-               dev_err(ipcdev.dev,
-                       "Failed to allocate telemetry platform device\n");
-               return -ENOMEM;
-       }
-
-       pdev->dev.parent = ipcdev.dev;
+       const struct platform_device_info pdevinfo = {
+               .parent = ipcdev.dev,
+               .name = TELEMETRY_DEVICE_NAME,
+               .id = -1,
+               .res = telemetry_res,
+               .num_res = ARRAY_SIZE(telemetry_res),
+               };
 
        res = telemetry_res + TELEMETRY_RESOURCE_PUNIT_SSRAM;
        res->start = ipcdev.telem_punit_ssram_base;
@@ -625,26 +594,13 @@ static int ipc_create_telemetry_device(void)
        res->start = ipcdev.telem_pmc_ssram_base;
        res->end = res->start + ipcdev.telem_pmc_ssram_size - 1;
 
-       ret = platform_device_add_resources(pdev, telemetry_res,
-                                           ARRAY_SIZE(telemetry_res));
-       if (ret) {
-               dev_err(ipcdev.dev,
-                       "Failed to add telemetry platform resources\n");
-               goto err;
-       }
+       pdev = platform_device_register_full(&pdevinfo);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
-       ret = platform_device_add(pdev);
-       if (ret) {
-               dev_err(ipcdev.dev,
-                       "Failed to add telemetry platform device\n");
-               goto err;
-       }
        ipcdev.telemetry_dev = pdev;
 
        return 0;
-err:
-       platform_device_put(pdev);
-       return ret;
 }
 
 static int ipc_create_pmc_devices(void)