static void ps3_vuart_shutdown()

in ps3-vuart.c [1156:1195]


static void ps3_vuart_shutdown(struct ps3_system_bus_device *dev)
{
	struct ps3_vuart_port_driver *drv;

	BUG_ON(!dev);

	mutex_lock(&vuart_bus_priv.probe_mutex);

	dev_dbg(&dev->core, " -> %s:%d: match_id %d\n", __func__, __LINE__,
		dev->match_id);

	if (!dev->core.driver) {
		dev_dbg(&dev->core, "%s:%d: no driver bound\n", __func__,
			__LINE__);
		mutex_unlock(&vuart_bus_priv.probe_mutex);
		return;
	}

	drv = ps3_system_bus_dev_to_vuart_drv(dev);

	BUG_ON(!drv);

	if (drv->shutdown)
		drv->shutdown(dev);
	else if (drv->remove) {
		dev_dbg(&dev->core, "%s:%d: no shutdown, calling remove\n",
			__func__, __LINE__);
		drv->remove(dev);
	} else {
		dev_dbg(&dev->core, "%s:%d: no shutdown method\n", __func__,
			__LINE__);
		BUG();
	}

	ps3_vuart_cleanup(dev);

	dev_dbg(&dev->core, " <- %s:%d\n", __func__, __LINE__);

	mutex_unlock(&vuart_bus_priv.probe_mutex);
}