greybus: arche_platform: Remove child's platform device as part of _remove() fn
It seems we need to delete platform_dev of all childs explicitly, in _remove() fn callback of parent driver. There were some discussions about having of_platform_unpopulate(), but it never made it to mainline. https://lkml.org/lkml/2013/7/19/615 There are some drivers which are removing platform_dev explicitly, as done in this patch. Note that, without this, multiple insmod-rmmod won't work, as I see driver probe gets invoked twice and leads to failure of probe. Signed-off-by: Vaibhav Hiremath <hiremath_vaibhav@projectara.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Родитель
41c2395855
Коммит
bc142bbb4c
|
@ -149,10 +149,21 @@ static int arche_platform_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int arche_remove_child(struct device *dev, void *unused)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
||||
platform_device_unregister(pdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arche_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct arche_platform_drvdata *arche_pdata = platform_get_drvdata(pdev);
|
||||
|
||||
device_for_each_child(&pdev->dev, NULL, arche_remove_child);
|
||||
|
||||
if (arche_pdata)
|
||||
arche_platform_cleanup(arche_pdata);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче