/* Dedicate or undedicate a port to the companion controller. Syntax is "portnum", where a leading '-' sign means return control of the port to the EHCI controller.  */
static ssize_t store_companion(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
/* Dedicate or undedicate a port to the companion controller. Syntax is "portnum", where a leading '-' sign means return control of the port to the EHCI controller.  */
static ssize_t store_companion(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	struct ehci_hcd		*ehci;
	int			portnum, new_owner;
	ehci = hcd_to_ehci(bus_to_hcd(dev_get_drvdata(dev)));
	new_owner = PORT_OWNER;
	if (sscanf(buf, "%d", &portnum) != 1)
		return -EINVAL;
	if (portnum < 0) {
		portnum = - portnum;
		new_owner = 0;
	}
	if (portnum <= 0 || portnum > HCS_N_PORTS(ehci->hcs_params))
		return -ENOENT;
	portnum--;
	if (new_owner)
		set_bit(portnum, &ehci->companion_ports);
	else
		clear_bit(portnum, &ehci->companion_ports);
	set_owner(ehci, portnum, new_owner);
	return count;
}