Commit bc142bbb authored by Vaibhav Hiremath's avatar Vaibhav Hiremath Committed by Greg Kroah-Hartman

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: default avatarVaibhav Hiremath <hiremath_vaibhav@projectara.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 41c23958
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment