[PATCH 3/3] usb: chipidea: using one inline function to cover queue work operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The otg queue work include operations: one is disable interrupt,
another one is call kernel queue work API. Many codes do this
operation, using one inline function to instead of them.

Signed-off-by: Peter Chen <peter.chen@xxxxxxxxxxxxx>
---
 drivers/usb/chipidea/core.c    |    6 +--
 drivers/usb/chipidea/otg.h     |    5 +++
 drivers/usb/chipidea/otg_fsm.c |   69 +++++++++++++--------------------------
 3 files changed, 30 insertions(+), 50 deletions(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 95b4dd7..619d13e 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -425,8 +425,7 @@ static irqreturn_t ci_irq(int irq, void *data)
 		ci->id_event = true;
 		/* Clear ID change irq status */
 		hw_write_otgsc(ci, OTGSC_IDIS, OTGSC_IDIS);
-		disable_irq_nosync(ci->irq);
-		queue_work(ci->wq, &ci->work);
+		ci_otg_queue_work(ci);
 		return IRQ_HANDLED;
 	}
 
@@ -438,8 +437,7 @@ static irqreturn_t ci_irq(int irq, void *data)
 		ci->b_sess_valid_event = true;
 		/* Clear BSV irq */
 		hw_write_otgsc(ci, OTGSC_BSVIS, OTGSC_BSVIS);
-		disable_irq_nosync(ci->irq);
-		queue_work(ci->wq, &ci->work);
+		ci_otg_queue_work(ci);
 		return IRQ_HANDLED;
 	}
 
diff --git a/drivers/usb/chipidea/otg.h b/drivers/usb/chipidea/otg.h
index 7349267..9ecb598 100644
--- a/drivers/usb/chipidea/otg.h
+++ b/drivers/usb/chipidea/otg.h
@@ -17,5 +17,10 @@ int ci_hdrc_otg_init(struct ci_hdrc *ci);
 void ci_hdrc_otg_destroy(struct ci_hdrc *ci);
 enum ci_role ci_otg_role(struct ci_hdrc *ci);
 void ci_handle_vbus_change(struct ci_hdrc *ci);
+static inline void ci_otg_queue_work(struct ci_hdrc *ci)
+{
+	disable_irq_nosync(ci->irq);
+	queue_work(ci->wq, &ci->work);
+}
 
 #endif /* __DRIVERS_USB_CHIPIDEA_OTG_H */
diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
index 8d4c33d..caaabc5 100644
--- a/drivers/usb/chipidea/otg_fsm.c
+++ b/drivers/usb/chipidea/otg_fsm.c
@@ -84,8 +84,7 @@ set_a_bus_req(struct device *dev, struct device_attribute *attr,
 		ci->fsm.a_bus_req = 1;
 	}
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 	mutex_unlock(&ci->fsm.lock);
 
 	return count;
@@ -125,8 +124,7 @@ set_a_bus_drop(struct device *dev, struct device_attribute *attr,
 		ci->fsm.a_bus_req = 0;
 	}
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 	mutex_unlock(&ci->fsm.lock);
 
 	return count;
@@ -165,8 +163,7 @@ set_b_bus_req(struct device *dev, struct device_attribute *attr,
 	else if (buf[0] == '1')
 		ci->fsm.b_bus_req = 1;
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 	mutex_unlock(&ci->fsm.lock);
 
 	return count;
@@ -186,8 +183,7 @@ set_a_clr_err(struct device *dev, struct device_attribute *attr,
 	if (buf[0] == '1')
 		ci->fsm.a_clr_err = 1;
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 	mutex_unlock(&ci->fsm.lock);
 
 	return count;
@@ -297,8 +293,7 @@ static void set_tmout_and_fsm(void *ptr, unsigned long indicator)
 
 	set_tmout(ci, indicator);
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 }
 
 static void a_wait_vfall_tmout_func(void *ptr, unsigned long indicator)
@@ -312,8 +307,7 @@ static void a_wait_vfall_tmout_func(void *ptr, unsigned long indicator)
 	hw_write_otgsc(ci, OTGSC_DPIS, OTGSC_DPIS);
 	/* Enable data pulse irq */
 	hw_write_otgsc(ci, OTGSC_DPIE, OTGSC_DPIE);
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 }
 
 static void b_ase0_brst_tmout_func(void *ptr, unsigned long indicator)
@@ -324,8 +318,7 @@ static void b_ase0_brst_tmout_func(void *ptr, unsigned long indicator)
 	if (!hw_read_otgsc(ci, OTGSC_BSV))
 		ci->fsm.b_sess_vld = 0;
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 }
 
 static void b_ssend_srp_tmout_func(void *ptr, unsigned long indicator)
@@ -335,10 +328,8 @@ static void b_ssend_srp_tmout_func(void *ptr, unsigned long indicator)
 	set_tmout(ci, indicator);
 
 	/* only vbus fall below B_sess_vld in b_idle state */
-	if (ci->transceiver->state == OTG_STATE_B_IDLE) {
-		disable_irq_nosync(ci->irq);
-		queue_work(ci->wq, &ci->work);
-	}
+	if (ci->transceiver->state == OTG_STATE_B_IDLE)
+		ci_otg_queue_work(ci);
 }
 
 static void b_sess_vld_tmout_func(void *ptr, unsigned long indicator)
@@ -349,8 +340,7 @@ static void b_sess_vld_tmout_func(void *ptr, unsigned long indicator)
 	if (!(hw_read_otgsc(ci, OTGSC_BSV))) {
 		ci->fsm.b_sess_vld = 0;
 		ci_otg_add_timer(ci, B_SSEND_SRP);
-		disable_irq_nosync(ci->irq);
-		queue_work(ci->wq, &ci->work);
+		ci_otg_queue_work(ci);
 	}
 }
 
@@ -365,8 +355,7 @@ static void b_data_pulse_end(void *ptr, unsigned long indicator)
 
 	hw_write_otgsc(ci, OTGSC_HABA, 0);
 
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 }
 
 /* Initialize timers */
@@ -607,10 +596,8 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
 			 * a_idle to a_wait_vrise when power up
 			 */
 			if ((ci->fsm.id) || (ci->id_event) ||
-						(ci->fsm.power_up)) {
-				disable_irq_nosync(ci->irq);
-				queue_work(ci->wq, &ci->work);
-			}
+						(ci->fsm.power_up))
+				ci_otg_queue_work(ci);
 			if (ci->id_event)
 				ci->id_event = false;
 		} else if (ci->transceiver->state == OTG_STATE_B_IDLE) {
@@ -620,8 +607,7 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
 				 * Further transite to b_periphearl state
 				 * when register gadget driver with vbus on
 				 */
-				disable_irq_nosync(ci->irq);
-				queue_work(ci->wq, &ci->work);
+				ci_otg_queue_work(ci);
 			}
 		}
 	}
@@ -646,22 +632,19 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
 		if (port_conn) {
 			fsm->b_conn = 1;
 			fsm->a_bus_req = 1;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		}
 		break;
 	case OTG_STATE_B_IDLE:
 		if (otg_bsess_vld && (intr_sts & USBi_PCI) && port_conn) {
 			fsm->b_sess_vld = 1;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		}
 		break;
 	case OTG_STATE_B_PERIPHERAL:
 		if ((intr_sts & USBi_SLI) && port_conn && otg_bsess_vld) {
 			fsm->a_bus_suspend = 1;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		} else if (intr_sts & USBi_PCI) {
 			if (fsm->a_bus_suspend == 1)
 				fsm->a_bus_suspend = 0;
@@ -671,8 +654,7 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
 		if ((intr_sts & USBi_PCI) && !port_conn) {
 			fsm->a_conn = 0;
 			fsm->b_bus_req = 0;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 			ci_otg_add_timer(ci, B_SESS_VLD);
 		}
 		break;
@@ -706,22 +688,19 @@ static void ci_otg_fsm_event(struct ci_hdrc *ci)
 				/* A device to be peripheral mode */
 				ci->gadget.is_a_peripheral = 1;
 			}
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		}
 		break;
 	case OTG_STATE_A_HOST:
 		if ((intr_sts & USBi_PCI) && !port_conn) {
 			fsm->b_conn = 0;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		}
 		break;
 	case OTG_STATE_B_WAIT_ACON:
 		if ((intr_sts & USBi_PCI) && port_conn) {
 			fsm->a_conn = 1;
-			disable_irq_nosync(ci->irq);
-			queue_work(ci->wq, &ci->work);
+			ci_otg_queue_work(ci);
 		}
 		break;
 	default:
@@ -782,8 +761,7 @@ irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci)
 				fsm->b_conn = 0;
 			}
 		}
-		disable_irq_nosync(ci->irq);
-		queue_work(ci->wq, &ci->work);
+		ci_otg_queue_work(ci);
 		return IRQ_HANDLED;
 	}
 
@@ -794,8 +772,7 @@ irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci)
 
 void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
 {
-	disable_irq_nosync(ci->irq);
-	queue_work(ci->wq, &ci->work);
+	ci_otg_queue_work(ci);
 }
 
 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
-- 
1.7.8

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux