Lines Matching refs:pdev

18 static void cdnsp_ep0_stall(struct cdnsp_device *pdev)
23 pep = &pdev->eps[0];
26 if (pdev->three_stage_setup) {
27 cdnsp_halt_endpoint(pdev, pep, true);
37 cdnsp_status_stage(pdev);
41 static int cdnsp_ep0_delegate_req(struct cdnsp_device *pdev,
46 spin_unlock(&pdev->lock);
47 ret = pdev->gadget_driver->setup(&pdev->gadget, ctrl);
48 spin_lock(&pdev->lock);
53 static int cdnsp_ep0_set_config(struct cdnsp_device *pdev,
56 enum usb_device_state state = pdev->gadget.state;
70 dev_err(pdev->dev, "Set Configuration - bad device state\n");
74 ret = cdnsp_ep0_delegate_req(pdev, ctrl);
79 usb_gadget_set_state(&pdev->gadget, USB_STATE_ADDRESS);
84 static int cdnsp_ep0_set_address(struct cdnsp_device *pdev,
87 enum usb_device_state state = pdev->gadget.state;
96 dev_err(pdev->dev, "Invalid device address %d\n", addr);
100 slot_ctx = cdnsp_get_slot_ctx(&pdev->out_ctx);
103 dev_err(pdev->dev, "Can't Set Address from Configured State\n");
107 pdev->device_address = le16_to_cpu(ctrl->wValue);
109 slot_ctx = cdnsp_get_slot_ctx(&pdev->out_ctx);
112 cdnsp_reset_device(pdev);
115 ret = cdnsp_setup_device(pdev, SETUP_CONTEXT_ADDRESS);
120 usb_gadget_set_state(&pdev->gadget, USB_STATE_ADDRESS);
122 usb_gadget_set_state(&pdev->gadget, USB_STATE_DEFAULT);
127 int cdnsp_status_stage(struct cdnsp_device *pdev)
129 pdev->ep0_stage = CDNSP_STATUS_STAGE;
130 pdev->ep0_preq.request.length = 0;
132 return cdnsp_ep_enqueue(pdev->ep0_preq.pep, &pdev->ep0_preq);
144 static int cdnsp_ep0_handle_status(struct cdnsp_device *pdev,
157 status = pdev->gadget.is_selfpowered;
158 status |= pdev->may_wakeup << USB_DEVICE_REMOTE_WAKEUP;
160 if (pdev->gadget.speed >= USB_SPEED_SUPER) {
161 status |= pdev->u1_allowed << USB_DEV_STAT_U1_ENABLED;
162 status |= pdev->u2_allowed << USB_DEV_STAT_U2_ENABLED;
170 return cdnsp_ep0_delegate_req(pdev, ctrl);
173 pep = &pdev->eps[ep_sts];
184 response = (__le16 *)pdev->setup_buf;
187 pdev->ep0_preq.request.length = sizeof(*response);
188 pdev->ep0_preq.request.buf = pdev->setup_buf;
190 return cdnsp_ep_enqueue(pdev->ep0_preq.pep, &pdev->ep0_preq);
193 static void cdnsp_enter_test_mode(struct cdnsp_device *pdev)
197 temp = readl(&pdev->active_port->regs->portpmsc) & ~GENMASK(31, 28);
198 temp |= PORT_TEST_MODE(pdev->test_mode);
199 writel(temp, &pdev->active_port->regs->portpmsc);
202 static int cdnsp_ep0_handle_feature_device(struct cdnsp_device *pdev,
210 state = pdev->gadget.state;
211 speed = pdev->gadget.speed;
215 pdev->may_wakeup = !!set;
222 pdev->u1_allowed = !!set;
229 pdev->u2_allowed = !!set;
248 pdev->test_mode = tmode;
254 cdnsp_enter_test_mode(pdev);
263 static int cdnsp_ep0_handle_feature_intf(struct cdnsp_device *pdev,
275 ret = cdnsp_ep0_delegate_req(pdev, ctrl);
284 pdev->may_wakeup++;
286 if (pdev->may_wakeup > 0)
287 pdev->may_wakeup--;
297 static int cdnsp_ep0_handle_feature_endpoint(struct cdnsp_device *pdev,
305 pep = &pdev->eps[cdnsp_w_index_to_ep_index(le16_to_cpu(ctrl->wIndex))];
311 cdnsp_halt_endpoint(pdev, pep, 0);
312 cdnsp_halt_endpoint(pdev, pep, 1);
316 return cdnsp_halt_endpoint(pdev, pep, set);
318 dev_warn(pdev->dev, "WARN Incorrect wValue %04x\n", wValue);
325 static int cdnsp_ep0_handle_feature(struct cdnsp_device *pdev,
331 return cdnsp_ep0_handle_feature_device(pdev, ctrl, set);
333 return cdnsp_ep0_handle_feature_intf(pdev, ctrl, set);
335 return cdnsp_ep0_handle_feature_endpoint(pdev, ctrl, set);
341 static int cdnsp_ep0_set_sel(struct cdnsp_device *pdev,
344 enum usb_device_state state = pdev->gadget.state;
353 dev_err(pdev->dev, "Set SEL should be 6 bytes, got %d\n",
362 pdev->ep0_preq.request.length = 6;
363 pdev->ep0_preq.request.buf = pdev->setup_buf;
365 return cdnsp_ep_enqueue(pdev->ep0_preq.pep, &pdev->ep0_preq);
368 static int cdnsp_ep0_set_isoch_delay(struct cdnsp_device *pdev,
374 pdev->gadget.isoch_delay = le16_to_cpu(ctrl->wValue);
379 static int cdnsp_ep0_std_request(struct cdnsp_device *pdev,
386 ret = cdnsp_ep0_handle_status(pdev, ctrl);
389 ret = cdnsp_ep0_handle_feature(pdev, ctrl, 0);
392 ret = cdnsp_ep0_handle_feature(pdev, ctrl, 1);
395 ret = cdnsp_ep0_set_address(pdev, ctrl);
398 ret = cdnsp_ep0_set_config(pdev, ctrl);
401 ret = cdnsp_ep0_set_sel(pdev, ctrl);
404 ret = cdnsp_ep0_set_isoch_delay(pdev, ctrl);
407 ret = cdnsp_ep0_delegate_req(pdev, ctrl);
414 void cdnsp_setup_analyze(struct cdnsp_device *pdev)
416 struct usb_ctrlrequest *ctrl = &pdev->setup;
422 if (!pdev->gadget_driver)
425 if (pdev->gadget.state == USB_STATE_NOTATTACHED) {
426 dev_err(pdev->dev, "ERR: Setup detected in unattached state\n");
431 if (pdev->eps[0].ep_state & EP_HALTED) {
433 cdnsp_halt_endpoint(pdev, &pdev->eps[0], 0);
440 if (!list_empty(&pdev->eps[0].pending_list)) {
444 req = next_request(&pdev->eps[0].pending_list);
445 cdnsp_ep_dequeue(&pdev->eps[0], req);
450 pdev->three_stage_setup = false;
451 pdev->ep0_expect_in = false;
453 pdev->three_stage_setup = true;
454 pdev->ep0_expect_in = !!(ctrl->bRequestType & USB_DIR_IN);
458 ret = cdnsp_ep0_std_request(pdev, ctrl);
460 ret = cdnsp_ep0_delegate_req(pdev, ctrl);
468 cdnsp_ep0_stall(pdev);
469 else if (!len && pdev->ep0_stage != CDNSP_STATUS_STAGE)
470 cdnsp_status_stage(pdev);