Lines Matching refs:pdev
32 static bool cdns2_check_new_setup(struct cdns2_device *pdev)
36 reg = readb(&pdev->ep0_regs->cs);
41 static void cdns2_ep0_enqueue(struct cdns2_device *pdev, dma_addr_t dma_addr,
44 struct cdns2_adma_regs __iomem *regs = pdev->adma_regs;
45 struct cdns2_endpoint *pep = &pdev->eps[0];
67 writel(0, &pdev->ep0_regs->rxbc);
69 cdns2_select_ep(pdev, pep->dir);
79 static int cdns2_ep0_delegate_req(struct cdns2_device *pdev)
83 spin_unlock(&pdev->lock);
84 ret = pdev->gadget_driver->setup(&pdev->gadget, &pdev->setup);
85 spin_lock(&pdev->lock);
90 static void cdns2_ep0_stall(struct cdns2_device *pdev)
92 struct cdns2_endpoint *pep = &pdev->eps[0];
96 set_reg_bit_8(&pdev->ep0_regs->cs, EP0CS_DSTALL);
98 if (pdev->ep0_stage == CDNS2_DATA_STAGE && preq)
103 pdev->ep0_stage = CDNS2_SETUP_STAGE;
107 static void cdns2_status_stage(struct cdns2_device *pdev)
109 struct cdns2_endpoint *pep = &pdev->eps[0];
116 pdev->ep0_stage = CDNS2_SETUP_STAGE;
117 writeb(EP0CS_HSNAK, &pdev->ep0_regs->cs);
120 static int cdns2_req_ep0_set_configuration(struct cdns2_device *pdev,
123 enum usb_device_state state = pdev->gadget.state;
128 dev_err(pdev->dev, "Set Configuration - bad device state\n");
132 ret = cdns2_ep0_delegate_req(pdev);
139 usb_gadget_set_state(&pdev->gadget, USB_STATE_ADDRESS);
144 static int cdns2_req_ep0_set_address(struct cdns2_device *pdev, u32 addr)
146 enum usb_device_state device_state = pdev->gadget.state;
150 dev_err(pdev->dev,
157 dev_err(pdev->dev,
162 reg = readb(&pdev->usb_regs->fnaddr);
163 pdev->dev_address = reg;
165 usb_gadget_set_state(&pdev->gadget,
173 static int cdns2_req_ep0_handle_status(struct cdns2_device *pdev,
186 status = pdev->gadget.is_selfpowered;
187 status |= pdev->may_wakeup << USB_DEVICE_REMOTE_WAKEUP;
190 return cdns2_ep0_delegate_req(pdev);
193 pep = &pdev->eps[ep_sts];
202 put_unaligned_le16(status, (__le16 *)pdev->ep0_preq.request.buf);
204 cdns2_ep0_enqueue(pdev, pdev->ep0_preq.request.dma,
210 static int cdns2_ep0_handle_feature_device(struct cdns2_device *pdev,
221 state = pdev->gadget.state;
222 speed = pdev->gadget.speed;
226 pdev->may_wakeup = !!set;
263 static int cdns2_ep0_handle_feature_intf(struct cdns2_device *pdev,
282 static int cdns2_ep0_handle_feature_endpoint(struct cdns2_device *pdev,
290 pep = &pdev->eps[cdns2_w_index_to_ep_index(le16_to_cpu(ctrl->wIndex))];
301 return cdns2_halt_endpoint(pdev, pep, set);
304 dev_warn(pdev->dev, "WARN Incorrect wValue %04x\n", wValue);
311 static int cdns2_req_ep0_handle_feature(struct cdns2_device *pdev,
317 return cdns2_ep0_handle_feature_device(pdev, ctrl, set);
319 return cdns2_ep0_handle_feature_intf(pdev, ctrl, set);
321 return cdns2_ep0_handle_feature_endpoint(pdev, ctrl, set);
327 static int cdns2_ep0_std_request(struct cdns2_device *pdev)
329 struct usb_ctrlrequest *ctrl = &pdev->setup;
334 ret = cdns2_req_ep0_set_address(pdev,
338 ret = cdns2_req_ep0_set_configuration(pdev, ctrl);
341 ret = cdns2_req_ep0_handle_status(pdev, ctrl);
344 ret = cdns2_req_ep0_handle_feature(pdev, ctrl, 0);
347 ret = cdns2_req_ep0_handle_feature(pdev, ctrl, 1);
350 ret = cdns2_ep0_delegate_req(pdev);
357 static void __pending_setup_status_handler(struct cdns2_device *pdev)
359 struct usb_request *request = pdev->pending_status_request;
361 if (pdev->status_completion_no_call && request && request->complete) {
362 request->complete(&pdev->eps[0].endpoint, request);
363 pdev->status_completion_no_call = 0;
369 struct cdns2_device *pdev = container_of(work, struct cdns2_device,
373 spin_lock_irqsave(&pdev->lock, flags);
374 __pending_setup_status_handler(pdev);
375 spin_unlock_irqrestore(&pdev->lock, flags);
378 void cdns2_handle_setup_packet(struct cdns2_device *pdev)
380 struct usb_ctrlrequest *ctrl = &pdev->setup;
381 struct cdns2_endpoint *pep = &pdev->eps[0];
388 writeb(EP0CS_CHGSET, &pdev->ep0_regs->cs);
391 ((u8 *)&pdev->setup)[i] = readb(&pdev->ep0_regs->setupdat[i]);
397 if (cdns2_check_new_setup(pdev)) {
404 if (!pdev->gadget_driver)
407 if (pdev->gadget.state == USB_STATE_NOTATTACHED) {
408 dev_err(pdev->dev, "ERR: Setup detected in unattached state\n");
413 pep = &pdev->eps[0];
425 pdev->ep0_stage = CDNS2_DATA_STAGE;
427 pdev->ep0_stage = CDNS2_STATUS_STAGE;
437 reg = readb(&pdev->usb_regs->fnaddr);
438 if (pdev->setup.bRequest != USB_REQ_SET_ADDRESS &&
439 pdev->dev_address != reg)
440 cdns2_req_ep0_set_address(pdev, reg);
443 ret = cdns2_ep0_std_request(pdev);
445 ret = cdns2_ep0_delegate_req(pdev);
454 cdns2_ep0_stall(pdev);
455 else if (pdev->ep0_stage == CDNS2_STATUS_STAGE)
456 cdns2_status_stage(pdev);
459 static void cdns2_transfer_completed(struct cdns2_device *pdev)
461 struct cdns2_endpoint *pep = &pdev->eps[0];
474 cdns2_status_stage(pdev);
477 void cdns2_handle_ep0_interrupt(struct cdns2_device *pdev, int dir)
481 cdns2_select_ep(pdev, dir);
483 trace_cdns2_ep0_irq(pdev);
485 ep_sts_reg = readl(&pdev->adma_regs->ep_sts);
486 writel(ep_sts_reg, &pdev->adma_regs->ep_sts);
488 __pending_setup_status_handler(pdev);
491 pdev->eps[0].dir = dir;
492 cdns2_transfer_completed(pdev);
518 struct cdns2_device *pdev = pep->pdev;
524 spin_lock_irqsave(&pdev->lock, flags);
525 cdns2_ep0_stall(pdev);
526 spin_unlock_irqrestore(&pdev->lock, flags);
541 struct cdns2_device *pdev = pep->pdev;
547 spin_lock_irqsave(&pdev->lock, flags);
554 if (cdns2_check_new_setup(pdev)) {
556 spin_unlock_irqrestore(&pdev->lock, flags);
561 if (pdev->ep0_stage == CDNS2_STATUS_STAGE) {
562 cdns2_status_stage(pdev);
565 pdev->status_completion_no_call = true;
566 pdev->pending_status_request = request;
567 usb_gadget_set_state(&pdev->gadget, USB_STATE_CONFIGURED);
568 spin_unlock_irqrestore(&pdev->lock, flags);
575 queue_work(system_freezable_wq, &pdev->pending_status_wq);
581 dev_err(pdev->dev,
583 spin_unlock_irqrestore(&pdev->lock, flags);
587 ret = usb_gadget_map_request_by_dev(pdev->dev, request, pep->dir);
589 spin_unlock_irqrestore(&pdev->lock, flags);
590 dev_err(pdev->dev, "failed to map request\n");
601 cdns2_ep0_enqueue(pdev, request->dma, request->length, zlp);
603 spin_unlock_irqrestore(&pdev->lock, flags);
619 void cdns2_ep0_config(struct cdns2_device *pdev)
623 pep = &pdev->eps[0];
632 writeb(EP0_FIFO_AUTO, &pdev->ep0_regs->fifo);
633 cdns2_select_ep(pdev, USB_DIR_OUT);
634 writel(DMA_EP_CFG_ENABLE, &pdev->adma_regs->ep_cfg);
636 writeb(EP0_FIFO_IO_TX | EP0_FIFO_AUTO, &pdev->ep0_regs->fifo);
637 cdns2_select_ep(pdev, USB_DIR_IN);
638 writel(DMA_EP_CFG_ENABLE, &pdev->adma_regs->ep_cfg);
640 writeb(pdev->gadget.ep0->maxpacket, &pdev->ep0_regs->maxpack);
642 &pdev->adma_regs->ep_ien);
645 void cdns2_init_ep0(struct cdns2_device *pdev,
658 pdev->gadget.ep0 = &pep->endpoint;