Andy J
Andy J

Reputation: 1545

platform devices; why 'alloc' and 'add'?

I'm currently looking at a machine driver in sound/soc/imx. In the initialization function there is, in this order;

platform_driver_register(...);
...
platform_device_alloc(..., ...);
platform_set_drvdata(..., ...);
platform_device_add(...);
...

For the platform device, why is it necessary to do 'alloc' and then 'add'?
platform_device_alloc() means "create a platform device"; and platform_device_add() means "add a platform device to device hierarchy", so I'm just curious to know, why do you need both?

Upvotes: 0

Views: 1844

Answers (1)

Duleeka Gunatilake
Duleeka Gunatilake

Reputation: 366

The platform_device_alloc function performs only the memory allocation for the platform_device structure and initialize its variables using the external arguments.

http://lxr.free-electrons.com/source/drivers/base/platform.c#L197

The platform_device_add function performs all the tasks required to register the intended device within the device driver hierarchy.

http://lxr.free-electrons.com/source/drivers/base/platform.c#L277

The separation of the two functions is intended to allow granule level configurations for the driver developer if required.

The two operations is combined within the platform_device_register_simple and other related functions, which perform both memory allocation as well as device registration within.

Upvotes: 3

Related Questions