Create a proper per device platorm_device structure for all the child devices that needs to be registered by vchiq platform driver. Replace the vchiq_register_child() with platform_add_devices() to register the child devices. This is part of an effort to address TODO item "Get rid of all non essential global structures and create a proper per device structure" Signed-off-by: Umang Jain <umang.jain@xxxxxxxxxxxxxxxx> --- .../interface/vchiq_arm/vchiq_arm.c | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c index 22de23f3af02..fa42ea3791a7 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -65,8 +65,29 @@ int vchiq_susp_log_level = VCHIQ_LOG_ERROR; DEFINE_SPINLOCK(msg_queue_spinlock); struct vchiq_state g_state; -static struct platform_device *bcm2835_camera; -static struct platform_device *bcm2835_audio; +static u64 vchiq_device_dmamask = DMA_BIT_MASK(32); + +static struct platform_device bcm2835_camera = { + .name = "bcm2835-camera", + .id = PLATFORM_DEVID_NONE, + .dev = { + .dma_mask = &vchiq_device_dmamask, + } +}; + +static struct platform_device bcm2835_audio = { + .name = "bcm2835_audio", + .id = PLATFORM_DEVID_NONE, + .dev = { + .dma_mask = &vchiq_device_dmamask, + } + +}; + +static struct platform_device *vchiq_devices[] __initdata = { + &bcm2835_camera, + &bcm2835_audio, +}; struct vchiq_drvdata { const unsigned int cache_line_size; @@ -1763,28 +1784,6 @@ static const struct of_device_id vchiq_of_match[] = { }; MODULE_DEVICE_TABLE(of, vchiq_of_match); -static struct platform_device * -vchiq_register_child(struct platform_device *pdev, const char *name) -{ - struct platform_device_info pdevinfo; - struct platform_device *child; - - memset(&pdevinfo, 0, sizeof(pdevinfo)); - - pdevinfo.parent = &pdev->dev; - pdevinfo.name = name; - pdevinfo.id = PLATFORM_DEVID_NONE; - pdevinfo.dma_mask = DMA_BIT_MASK(32); - - child = platform_device_register_full(&pdevinfo); - if (IS_ERR(child)) { - dev_warn(&pdev->dev, "%s not registered\n", name); - child = NULL; - } - - return child; -} - static int vchiq_probe(struct platform_device *pdev) { struct device_node *fw_node; @@ -1832,8 +1831,11 @@ static int vchiq_probe(struct platform_device *pdev) goto error_exit; } - bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera"); - bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio"); + err = platform_add_devices(vchiq_devices, ARRAY_SIZE(vchiq_devices)); + if (err) { + dev_warn(&pdev->dev, "Failed to add vchiq child devices"); + goto error_exit; + } return 0; @@ -1845,8 +1847,9 @@ static int vchiq_probe(struct platform_device *pdev) static int vchiq_remove(struct platform_device *pdev) { - platform_device_unregister(bcm2835_audio); - platform_device_unregister(bcm2835_camera); + for (unsigned int i = 0; i < ARRAY_SIZE(vchiq_devices); i++) + platform_device_unregister(vchiq_devices[i]); + vchiq_debugfs_deinit(); vchiq_deregister_chrdev(); -- 2.38.1