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

Commit 5626116d authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gsi: Allocate strings IDs for functions on every bind"

parents fb8f0234 f34a46e4
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -1746,6 +1746,11 @@ int usb_gsi_ep_op(struct usb_ep *ep, void *op_data, enum gsi_ep_op op)

	switch (op) {
	case GSI_EP_OP_PREPARE_TRBS:
		if (!dwc->pullups_connected) {
			dbg_log_string("No Pullup\n");
			return -ESHUTDOWN;
		}

		request = (struct usb_gsi_request *)op_data;
		ret = gsi_prepare_trbs(ep, request);
		break;
@@ -1754,12 +1759,22 @@ int usb_gsi_ep_op(struct usb_ep *ep, void *op_data, enum gsi_ep_op op)
		gsi_free_trbs(ep, request);
		break;
	case GSI_EP_OP_CONFIG:
		if (!dwc->pullups_connected) {
			dbg_log_string("No Pullup\n");
			return -ESHUTDOWN;
		}

		request = (struct usb_gsi_request *)op_data;
		spin_lock_irqsave(&dwc->lock, flags);
		gsi_configure_ep(ep, request);
		spin_unlock_irqrestore(&dwc->lock, flags);
		break;
	case GSI_EP_OP_STARTXFER:
		if (!dwc->pullups_connected) {
			dbg_log_string("No Pullup\n");
			return -ESHUTDOWN;
		}

		request = (struct usb_gsi_request *)op_data;
		spin_lock_irqsave(&dwc->lock, flags);
		ret = gsi_startxfer_for_ep(ep, request);
@@ -1773,6 +1788,11 @@ int usb_gsi_ep_op(struct usb_ep *ep, void *op_data, enum gsi_ep_op op)
		gsi_store_ringbase_dbl_info(ep, request);
		break;
	case GSI_EP_OP_ENABLE_GSI:
		if (!dwc->pullups_connected) {
			dbg_log_string("No Pullup\n");
			return -ESHUTDOWN;
		}

		gsi_enable(ep);
		break;
	case GSI_EP_OP_GET_CH_INFO:
@@ -1780,6 +1800,11 @@ int usb_gsi_ep_op(struct usb_ep *ep, void *op_data, enum gsi_ep_op op)
		gsi_get_channel_info(ep, ch_info);
		break;
	case GSI_EP_OP_RING_DB:
		if (!dwc->pullups_connected) {
			dbg_log_string("No Pullup\n");
			return -ESHUTDOWN;
		}

		request = (struct usb_gsi_request *)op_data;
		gsi_ring_db(ep, request);
		break;
+10 −8
Original line number Diff line number Diff line
@@ -839,8 +839,10 @@ static int gsi_ep_enable(struct f_gsi *gsi)
			return ret;

		log_event_dbg("%s: Enable IN ep", __func__);
		usb_gsi_ep_op(gsi->d_port.in_ep,
		ret = usb_gsi_ep_op(gsi->d_port.in_ep,
				&gsi->d_port.in_request, GSI_EP_OP_CONFIG);
		if (ret)
			return ret;
	}

	if (gsi->d_port.out_ep && !gsi->d_port.out_ep->desc) {
@@ -850,8 +852,13 @@ static int gsi_ep_enable(struct f_gsi *gsi)
			return ret;

		log_event_dbg("%s: Enable OUT ep", __func__);
		usb_gsi_ep_op(gsi->d_port.out_ep,
		ret = usb_gsi_ep_op(gsi->d_port.out_ep,
				&gsi->d_port.out_request, GSI_EP_OP_CONFIG);
		if (ret) {
			usb_gsi_ep_op(gsi->d_port.in_ep,
				&gsi->d_port.in_request, GSI_EP_OP_DISABLE);
			return ret;
		}
	}

	return 0;
@@ -2593,10 +2600,6 @@ static int gsi_update_function_bind_params(struct f_gsi *gsi,
	struct usb_function *f = &gsi->function;
	int status;

	/* maybe allocate device-global string IDs */
	if (info->string_defs[0].id != 0)
		goto skip_string_id_alloc;

	if (info->ctrl_str_idx >= 0 && info->ctrl_desc) {
		/* ctrl interface label */
		status = usb_string_id(cdev);
@@ -2633,7 +2636,6 @@ static int gsi_update_function_bind_params(struct f_gsi *gsi,
		info->cdc_eth_desc->iMACAddress = status;
	}

skip_string_id_alloc:
	if (info->ctrl_desc)
		info->ctrl_desc->bInterfaceNumber = gsi->ctrl_id;