Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 749da5f8 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: straighten out port feature vs. port status usage



This patch (as1349b) clears up the confusion in many USB host
controller drivers between port features and port statuses.  In mosty
cases it's true that the status bit is in the position given by the
corresponding feature value, but that's not always true and it's not
guaranteed in the USB spec.

There's no functional change, just replacing expressions of the form
(1 << USB_PORT_FEAT_x) with USB_PORT_STAT_x, which has the same value.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 288ead45
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -3037,7 +3037,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,


		/* maybe switch power back on (e.g. root hub was reset) */
		/* maybe switch power back on (e.g. root hub was reset) */
		if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
		if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
				&& !(portstatus & (1 << USB_PORT_FEAT_POWER)))
				&& !(portstatus & USB_PORT_STAT_POWER))
			set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
			set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);


		if (portstatus & USB_PORT_STAT_ENABLE)
		if (portstatus & USB_PORT_STAT_ENABLE)
+12 −12
Original line number Original line Diff line number Diff line
@@ -659,7 +659,7 @@ static int ehci_hub_control (
		 * Even if OWNER is set, so the port is owned by the
		 * Even if OWNER is set, so the port is owned by the
		 * companion controller, khubd needs to be able to clear
		 * companion controller, khubd needs to be able to clear
		 * the port-change status bits (especially
		 * the port-change status bits (especially
		 * USB_PORT_FEAT_C_CONNECTION).
		 * USB_PORT_STAT_C_CONNECTION).
		 */
		 */


		switch (wValue) {
		switch (wValue) {
@@ -729,12 +729,12 @@ static int ehci_hub_control (


		// wPortChange bits
		// wPortChange bits
		if (temp & PORT_CSC)
		if (temp & PORT_CSC)
			status |= 1 << USB_PORT_FEAT_C_CONNECTION;
			status |= USB_PORT_STAT_C_CONNECTION << 16;
		if (temp & PORT_PEC)
		if (temp & PORT_PEC)
			status |= 1 << USB_PORT_FEAT_C_ENABLE;
			status |= USB_PORT_STAT_C_ENABLE << 16;


		if ((temp & PORT_OCC) && !ignore_oc){
		if ((temp & PORT_OCC) && !ignore_oc){
			status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT;
			status |= USB_PORT_STAT_C_OVERCURRENT << 16;


			/*
			/*
			 * Hubs should disable port power on over-current.
			 * Hubs should disable port power on over-current.
@@ -791,7 +791,7 @@ static int ehci_hub_control (
		if ((temp & PORT_RESET)
		if ((temp & PORT_RESET)
				&& time_after_eq(jiffies,
				&& time_after_eq(jiffies,
					ehci->reset_done[wIndex])) {
					ehci->reset_done[wIndex])) {
			status |= 1 << USB_PORT_FEAT_C_RESET;
			status |= USB_PORT_STAT_C_RESET << 16;
			ehci->reset_done [wIndex] = 0;
			ehci->reset_done [wIndex] = 0;


			/* force reset to complete */
			/* force reset to complete */
@@ -833,7 +833,7 @@ static int ehci_hub_control (
		 */
		 */


		if (temp & PORT_CONNECT) {
		if (temp & PORT_CONNECT) {
			status |= 1 << USB_PORT_FEAT_CONNECTION;
			status |= USB_PORT_STAT_CONNECTION;
			// status may be from integrated TT
			// status may be from integrated TT
			if (ehci->has_hostpc) {
			if (ehci->has_hostpc) {
				temp1 = ehci_readl(ehci, hostpc_reg);
				temp1 = ehci_readl(ehci, hostpc_reg);
@@ -842,11 +842,11 @@ static int ehci_hub_control (
				status |= ehci_port_speed(ehci, temp);
				status |= ehci_port_speed(ehci, temp);
		}
		}
		if (temp & PORT_PE)
		if (temp & PORT_PE)
			status |= 1 << USB_PORT_FEAT_ENABLE;
			status |= USB_PORT_STAT_ENABLE;


		/* maybe the port was unsuspended without our knowledge */
		/* maybe the port was unsuspended without our knowledge */
		if (temp & (PORT_SUSPEND|PORT_RESUME)) {
		if (temp & (PORT_SUSPEND|PORT_RESUME)) {
			status |= 1 << USB_PORT_FEAT_SUSPEND;
			status |= USB_PORT_STAT_SUSPEND;
		} else if (test_bit(wIndex, &ehci->suspended_ports)) {
		} else if (test_bit(wIndex, &ehci->suspended_ports)) {
			clear_bit(wIndex, &ehci->suspended_ports);
			clear_bit(wIndex, &ehci->suspended_ports);
			ehci->reset_done[wIndex] = 0;
			ehci->reset_done[wIndex] = 0;
@@ -855,13 +855,13 @@ static int ehci_hub_control (
		}
		}


		if (temp & PORT_OC)
		if (temp & PORT_OC)
			status |= 1 << USB_PORT_FEAT_OVER_CURRENT;
			status |= USB_PORT_STAT_OVERCURRENT;
		if (temp & PORT_RESET)
		if (temp & PORT_RESET)
			status |= 1 << USB_PORT_FEAT_RESET;
			status |= USB_PORT_STAT_RESET;
		if (temp & PORT_POWER)
		if (temp & PORT_POWER)
			status |= 1 << USB_PORT_FEAT_POWER;
			status |= USB_PORT_STAT_POWER;
		if (test_bit(wIndex, &ehci->port_c_suspend))
		if (test_bit(wIndex, &ehci->port_c_suspend))
			status |= 1 << USB_PORT_FEAT_C_SUSPEND;
			status |= USB_PORT_STAT_C_SUSPEND << 16;


#ifndef	VERBOSE_DEBUG
#ifndef	VERBOSE_DEBUG
	if (status & ~0xffff)	/* only if wPortChange is interesting */
	if (status & ~0xffff)	/* only if wPortChange is interesting */
+1 −1
Original line number Original line Diff line number Diff line
@@ -1265,7 +1265,7 @@ static int isp1362_urb_enqueue(struct usb_hcd *hcd,


	/* don't submit to a dead or disabled port */
	/* don't submit to a dead or disabled port */
	if (!((isp1362_hcd->rhport[0] | isp1362_hcd->rhport[1]) &
	if (!((isp1362_hcd->rhport[0] | isp1362_hcd->rhport[1]) &
	      (1 << USB_PORT_FEAT_ENABLE)) ||
	      USB_PORT_STAT_ENABLE) ||
	    !HC_IS_RUNNING(hcd->state)) {
	    !HC_IS_RUNNING(hcd->state)) {
		kfree(ep);
		kfree(ep);
		retval = -ENODEV;
		retval = -ENODEV;
+9 −9
Original line number Original line Diff line number Diff line
@@ -1923,7 +1923,7 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
		 * Even if OWNER is set, so the port is owned by the
		 * Even if OWNER is set, so the port is owned by the
		 * companion controller, khubd needs to be able to clear
		 * companion controller, khubd needs to be able to clear
		 * the port-change status bits (especially
		 * the port-change status bits (especially
		 * USB_PORT_FEAT_C_CONNECTION).
		 * USB_PORT_STAT_C_CONNECTION).
		 */
		 */


		switch (wValue) {
		switch (wValue) {
@@ -1987,7 +1987,7 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,


		/* wPortChange bits */
		/* wPortChange bits */
		if (temp & PORT_CSC)
		if (temp & PORT_CSC)
			status |= 1 << USB_PORT_FEAT_C_CONNECTION;
			status |= USB_PORT_STAT_C_CONNECTION << 16;




		/* whoever resumes must GetPortStatus to complete it!! */
		/* whoever resumes must GetPortStatus to complete it!! */
@@ -2007,7 +2007,7 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
			/* resume completed? */
			/* resume completed? */
			else if (time_after_eq(jiffies,
			else if (time_after_eq(jiffies,
					priv->reset_done)) {
					priv->reset_done)) {
				status |= 1 << USB_PORT_FEAT_C_SUSPEND;
				status |= USB_PORT_STAT_C_SUSPEND << 16;
				priv->reset_done = 0;
				priv->reset_done = 0;


				/* stop resume signaling */
				/* stop resume signaling */
@@ -2031,7 +2031,7 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
		if ((temp & PORT_RESET)
		if ((temp & PORT_RESET)
				&& time_after_eq(jiffies,
				&& time_after_eq(jiffies,
					priv->reset_done)) {
					priv->reset_done)) {
			status |= 1 << USB_PORT_FEAT_C_RESET;
			status |= USB_PORT_STAT_C_RESET << 16;
			priv->reset_done = 0;
			priv->reset_done = 0;


			/* force reset to complete */
			/* force reset to complete */
@@ -2062,18 +2062,18 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
			printk(KERN_ERR "Warning: PORT_OWNER is set\n");
			printk(KERN_ERR "Warning: PORT_OWNER is set\n");


		if (temp & PORT_CONNECT) {
		if (temp & PORT_CONNECT) {
			status |= 1 << USB_PORT_FEAT_CONNECTION;
			status |= USB_PORT_STAT_CONNECTION;
			/* status may be from integrated TT */
			/* status may be from integrated TT */
			status |= ehci_port_speed(priv, temp);
			status |= ehci_port_speed(priv, temp);
		}
		}
		if (temp & PORT_PE)
		if (temp & PORT_PE)
			status |= 1 << USB_PORT_FEAT_ENABLE;
			status |= USB_PORT_STAT_ENABLE;
		if (temp & (PORT_SUSPEND|PORT_RESUME))
		if (temp & (PORT_SUSPEND|PORT_RESUME))
			status |= 1 << USB_PORT_FEAT_SUSPEND;
			status |= USB_PORT_STAT_SUSPEND;
		if (temp & PORT_RESET)
		if (temp & PORT_RESET)
			status |= 1 << USB_PORT_FEAT_RESET;
			status |= USB_PORT_STAT_RESET;
		if (temp & PORT_POWER)
		if (temp & PORT_POWER)
			status |= 1 << USB_PORT_FEAT_POWER;
			status |= USB_PORT_STAT_POWER;


		put_unaligned(cpu_to_le32(status), (__le32 *) buf);
		put_unaligned(cpu_to_le32(status), (__le32 *) buf);
		break;
		break;
+12 −12
Original line number Original line Diff line number Diff line
@@ -3201,7 +3201,7 @@ static int oxu_hub_control(struct usb_hcd *hcd, u16 typeReq,
		 * Even if OWNER is set, so the port is owned by the
		 * Even if OWNER is set, so the port is owned by the
		 * companion controller, khubd needs to be able to clear
		 * companion controller, khubd needs to be able to clear
		 * the port-change status bits (especially
		 * the port-change status bits (especially
		 * USB_PORT_FEAT_C_CONNECTION).
		 * USB_PORT_STAT_C_CONNECTION).
		 */
		 */


		switch (wValue) {
		switch (wValue) {
@@ -3263,11 +3263,11 @@ static int oxu_hub_control(struct usb_hcd *hcd, u16 typeReq,


		/* wPortChange bits */
		/* wPortChange bits */
		if (temp & PORT_CSC)
		if (temp & PORT_CSC)
			status |= 1 << USB_PORT_FEAT_C_CONNECTION;
			status |= USB_PORT_STAT_C_CONNECTION << 16;
		if (temp & PORT_PEC)
		if (temp & PORT_PEC)
			status |= 1 << USB_PORT_FEAT_C_ENABLE;
			status |= USB_PORT_STAT_C_ENABLE << 16;
		if ((temp & PORT_OCC) && !ignore_oc)
		if ((temp & PORT_OCC) && !ignore_oc)
			status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT;
			status |= USB_PORT_STAT_C_OVERCURRENT << 16;


		/* whoever resumes must GetPortStatus to complete it!! */
		/* whoever resumes must GetPortStatus to complete it!! */
		if (temp & PORT_RESUME) {
		if (temp & PORT_RESUME) {
@@ -3285,7 +3285,7 @@ static int oxu_hub_control(struct usb_hcd *hcd, u16 typeReq,
			/* resume completed? */
			/* resume completed? */
			else if (time_after_eq(jiffies,
			else if (time_after_eq(jiffies,
					oxu->reset_done[wIndex])) {
					oxu->reset_done[wIndex])) {
				status |= 1 << USB_PORT_FEAT_C_SUSPEND;
				status |= USB_PORT_STAT_C_SUSPEND << 16;
				oxu->reset_done[wIndex] = 0;
				oxu->reset_done[wIndex] = 0;


				/* stop resume signaling */
				/* stop resume signaling */
@@ -3308,7 +3308,7 @@ static int oxu_hub_control(struct usb_hcd *hcd, u16 typeReq,
		if ((temp & PORT_RESET)
		if ((temp & PORT_RESET)
				&& time_after_eq(jiffies,
				&& time_after_eq(jiffies,
					oxu->reset_done[wIndex])) {
					oxu->reset_done[wIndex])) {
			status |= 1 << USB_PORT_FEAT_C_RESET;
			status |= USB_PORT_STAT_C_RESET << 16;
			oxu->reset_done[wIndex] = 0;
			oxu->reset_done[wIndex] = 0;


			/* force reset to complete */
			/* force reset to complete */
@@ -3347,20 +3347,20 @@ static int oxu_hub_control(struct usb_hcd *hcd, u16 typeReq,
		 */
		 */


		if (temp & PORT_CONNECT) {
		if (temp & PORT_CONNECT) {
			status |= 1 << USB_PORT_FEAT_CONNECTION;
			status |= USB_PORT_STAT_CONNECTION;
			/* status may be from integrated TT */
			/* status may be from integrated TT */
			status |= oxu_port_speed(oxu, temp);
			status |= oxu_port_speed(oxu, temp);
		}
		}
		if (temp & PORT_PE)
		if (temp & PORT_PE)
			status |= 1 << USB_PORT_FEAT_ENABLE;
			status |= USB_PORT_STAT_ENABLE;
		if (temp & (PORT_SUSPEND|PORT_RESUME))
		if (temp & (PORT_SUSPEND|PORT_RESUME))
			status |= 1 << USB_PORT_FEAT_SUSPEND;
			status |= USB_PORT_STAT_SUSPEND;
		if (temp & PORT_OC)
		if (temp & PORT_OC)
			status |= 1 << USB_PORT_FEAT_OVER_CURRENT;
			status |= USB_PORT_STAT_OVERCURRENT;
		if (temp & PORT_RESET)
		if (temp & PORT_RESET)
			status |= 1 << USB_PORT_FEAT_RESET;
			status |= USB_PORT_STAT_RESET;
		if (temp & PORT_POWER)
		if (temp & PORT_POWER)
			status |= 1 << USB_PORT_FEAT_POWER;
			status |= USB_PORT_STAT_POWER;


#ifndef	OXU_VERBOSE_DEBUG
#ifndef	OXU_VERBOSE_DEBUG
	if (status & ~0xffff)	/* only if wPortChange is interesting */
	if (status & ~0xffff)	/* only if wPortChange is interesting */
Loading