/* If this is called while a probe() or remove() is in progress it will return -EAGAIN and not perform the reset.  */
int umc_controller_reset(struct umc_dev *umc)
/* If this is called while a probe() or remove() is in progress it will return -EAGAIN and not perform the reset.  */
int umc_controller_reset(struct umc_dev *umc)
{
	struct device *parent = umc->dev.parent;
	int ret = 0;
	if(down_trylock(&parent->sem))
		return -EAGAIN;
	ret = device_for_each_child(parent, parent, umc_bus_pre_reset_helper);
	if (ret >= 0)
		ret = device_for_each_child(parent, parent, umc_bus_post_reset_helper);
	up(&parent->sem);
	return ret;
}