*参照元 [#je9c42e0]
#backlinks

*説明 [#s707c013]
-パス: [[linux-4.4.1/drivers/base/platform.c]]

-FIXME: これは何?
--説明


**引数 [#zb97b834]
-const struct platform_device_info *pdevinfo
--
--[[linux-4.4.1/platform_device_info]]


**返り値 [#md2d177b]
-struct platform_device *
--
--[[linux-4.4.1/platform_device]]


**参考 [#e66fd459]


*実装 [#w2bbacc9]
 /**
  * platform_device_register_full - add a platform-level device with
  * resources and platform-specific data
  *
  * @pdevinfo: data used to create device
  *
  * Returns &struct platform_device pointer on success, or ERR_PTR() on error.
  */
 struct platform_device *platform_device_register_full(
                 const struct platform_device_info *pdevinfo)
 {
         int ret = -ENOMEM;
         struct platform_device *pdev;
 
         pdev = platform_device_alloc(pdevinfo->name, pdevinfo->id);
         if (!pdev)
                 goto err_alloc;
 
-
--[[linux-4.4.1/platform_device_alloc()]]

         pdev->dev.parent = pdevinfo->parent;
         pdev->dev.fwnode = pdevinfo->fwnode;
 
         if (pdevinfo->dma_mask) {
                 /*
                  * This memory isn't freed when the device is put,
                  * I don't have a nice idea for that though.  Conceptually
                  * dma_mask in struct device should not be a pointer.
                  * See http://thread.gmane.org/gmane.linux.kernel.pci/9081
                  */
                 pdev->dev.dma_mask =
                         kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
                 if (!pdev->dev.dma_mask)
                         goto err;
 
-
--[[linux-4.4.1/kmalloc()]]

                 *pdev->dev.dma_mask = pdevinfo->dma_mask;
                 pdev->dev.coherent_dma_mask = pdevinfo->dma_mask;
         }
 
         ret = platform_device_add_resources(pdev,
                         pdevinfo->res, pdevinfo->num_res);
         if (ret)
                 goto err;
 
-
--[[linux-4.4.1/platform_device_add_resources()]]

         ret = platform_device_add_data(pdev,
                         pdevinfo->data, pdevinfo->size_data);
         if (ret)
                 goto err;
 
-
--[[linux-4.4.1/platform_device_add_data()]]

         ret = platform_device_add(pdev);
-
--[[linux-4.4.1/platform_device_add()]]

         if (ret) {
 err:
                 ACPI_COMPANION_SET(&pdev->dev, NULL);
                 kfree(pdev->dev.dma_mask);
 
-
--[[linux-4.4.1/ACPI_COMPANION_SET()]]
--[[linux-4.4.1/kfree()]]

 err_alloc:
                 platform_device_put(pdev);
                 return ERR_PTR(ret);
-
--[[linux-4.4.1/platform_device_put()]]
--[[linux-4.4.1/ERR_PTR()]]

         }
 
         return pdev;
 }
 EXPORT_SYMBOL_GPL(platform_device_register_full);
-
--[[linux-4.4.1/EXPORT_SYMBOL_GPL()]]


*コメント [#d355a291]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS