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

Commit be6b0c1b authored by Peter Chen's avatar Peter Chen Committed by Greg Kroah-Hartman
Browse files

usb: chipidea: using one inline function to cover queue work operations



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: default avatarPeter Chen <peter.chen@freescale.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2dbd633f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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;
	}

+5 −0
Original line number Diff line number Diff line
@@ -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 */
+23 −46
Original line number Diff line number Diff line
@@ -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)