Lines Matching refs:ucr
34 struct rtsx_ucr *ucr = from_timer(ucr, t, sg_timer);
36 dev_dbg(&ucr->pusb_intf->dev, "%s: sg transfer timed out", __func__);
37 usb_sg_cancel(&ucr->current_sg);
40 static int rtsx_usb_bulk_transfer_sglist(struct rtsx_ucr *ucr,
46 dev_dbg(&ucr->pusb_intf->dev, "%s: xfer %u bytes, %d entries\n",
48 ret = usb_sg_init(&ucr->current_sg, ucr->pusb_dev, pipe, 0,
53 ucr->sg_timer.expires = jiffies + msecs_to_jiffies(timeout);
54 add_timer(&ucr->sg_timer);
55 usb_sg_wait(&ucr->current_sg);
56 if (!del_timer_sync(&ucr->sg_timer))
59 ret = ucr->current_sg.status;
62 *act_len = ucr->current_sg.bytes;
67 int rtsx_usb_transfer_data(struct rtsx_ucr *ucr, unsigned int pipe,
75 return rtsx_usb_bulk_transfer_sglist(ucr, pipe,
79 return usb_bulk_msg(ucr->pusb_dev, pipe, buf, len, act_len,
84 static inline void rtsx_usb_seq_cmd_hdr(struct rtsx_ucr *ucr,
87 rtsx_usb_cmd_hdr_tag(ucr);
89 ucr->cmd_buf[PACKET_TYPE] = seq_type;
90 ucr->cmd_buf[5] = (u8)(len >> 8);
91 ucr->cmd_buf[6] = (u8)len;
92 ucr->cmd_buf[8] = (u8)(addr >> 8);
93 ucr->cmd_buf[9] = (u8)addr;
96 ucr->cmd_buf[STAGE_FLAG] = 0;
98 ucr->cmd_buf[STAGE_FLAG] = STAGE_R;
101 static int rtsx_usb_seq_write_register(struct rtsx_ucr *ucr,
112 rtsx_usb_seq_cmd_hdr(ucr, addr, len, SEQ_WRITE);
113 memcpy(ucr->cmd_buf + SEQ_WRITE_DATA_OFFSET, data, len);
115 return rtsx_usb_transfer_data(ucr,
116 usb_sndbulkpipe(ucr->pusb_dev, EP_BULK_OUT),
117 ucr->cmd_buf, cmd_len, 0, NULL, 100);
120 static int rtsx_usb_seq_read_register(struct rtsx_ucr *ucr,
132 rtsx_usb_seq_cmd_hdr(ucr, addr, len, SEQ_READ);
133 ret = rtsx_usb_transfer_data(ucr,
134 usb_sndbulkpipe(ucr->pusb_dev, EP_BULK_OUT),
135 ucr->cmd_buf, 12, 0, NULL, 100);
139 ret = rtsx_usb_transfer_data(ucr,
140 usb_rcvbulkpipe(ucr->pusb_dev, EP_BULK_IN),
148 ret = rtsx_usb_read_register(ucr, addr + rsp_len + i,
157 int rtsx_usb_read_ppbuf(struct rtsx_ucr *ucr, u8 *buf, int buf_len)
159 return rtsx_usb_seq_read_register(ucr, PPBUF_BASE2, (u16)buf_len, buf);
163 int rtsx_usb_write_ppbuf(struct rtsx_ucr *ucr, u8 *buf, int buf_len)
165 return rtsx_usb_seq_write_register(ucr, PPBUF_BASE2, (u16)buf_len, buf);
169 int rtsx_usb_ep0_write_register(struct rtsx_ucr *ucr, u16 addr,
178 return usb_control_msg(ucr->pusb_dev,
179 usb_sndctrlpipe(ucr->pusb_dev, 0), RTSX_USB_REQ_REG_OP,
185 int rtsx_usb_ep0_read_register(struct rtsx_ucr *ucr, u16 addr, u8 *data)
201 ret = usb_control_msg(ucr->pusb_dev,
202 usb_rcvctrlpipe(ucr->pusb_dev, 0), RTSX_USB_REQ_REG_OP,
212 void rtsx_usb_add_cmd(struct rtsx_ucr *ucr, u8 cmd_type, u16 reg_addr,
217 if (ucr->cmd_idx < (IOBUF_SIZE - CMD_OFFSET) / 4) {
218 i = CMD_OFFSET + ucr->cmd_idx * 4;
220 ucr->cmd_buf[i++] = ((cmd_type & 0x03) << 6) |
222 ucr->cmd_buf[i++] = (u8)reg_addr;
223 ucr->cmd_buf[i++] = mask;
224 ucr->cmd_buf[i++] = data;
226 ucr->cmd_idx++;
231 int rtsx_usb_send_cmd(struct rtsx_ucr *ucr, u8 flag, int timeout)
235 ucr->cmd_buf[CNT_H] = (u8)(ucr->cmd_idx >> 8);
236 ucr->cmd_buf[CNT_L] = (u8)(ucr->cmd_idx);
237 ucr->cmd_buf[STAGE_FLAG] = flag;
239 ret = rtsx_usb_transfer_data(ucr,
240 usb_sndbulkpipe(ucr->pusb_dev, EP_BULK_OUT),
241 ucr->cmd_buf, ucr->cmd_idx * 4 + CMD_OFFSET,
244 rtsx_usb_clear_fsm_err(ucr);
252 int rtsx_usb_get_rsp(struct rtsx_ucr *ucr, int rsp_len, int timeout)
259 return rtsx_usb_transfer_data(ucr,
260 usb_rcvbulkpipe(ucr->pusb_dev, EP_BULK_IN),
261 ucr->rsp_buf, rsp_len, 0, NULL, timeout);
265 static int rtsx_usb_get_status_with_bulk(struct rtsx_ucr *ucr, u16 *status)
269 rtsx_usb_init_cmd(ucr);
270 rtsx_usb_add_cmd(ucr, READ_REG_CMD, CARD_EXIST, 0x00, 0x00);
271 rtsx_usb_add_cmd(ucr, READ_REG_CMD, OCPSTAT, 0x00, 0x00);
272 ret = rtsx_usb_send_cmd(ucr, MODE_CR, 100);
276 ret = rtsx_usb_get_rsp(ucr, 2, 100);
280 *status = ((ucr->rsp_buf[0] >> 2) & 0x0f) |
281 ((ucr->rsp_buf[1] & 0x03) << 4);
286 int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status)
299 ret = usb_control_msg(ucr->pusb_dev,
300 usb_rcvctrlpipe(ucr->pusb_dev, 0),
308 ret = rtsx_usb_get_status_with_bulk(ucr, status);
319 static int rtsx_usb_write_phy_register(struct rtsx_ucr *ucr, u8 addr, u8 val)
321 dev_dbg(&ucr->pusb_intf->dev, "Write 0x%x to phy register 0x%x\n",
324 rtsx_usb_init_cmd(ucr);
326 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VSTAIN, 0xFF, val);
327 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VCONTROL, 0xFF, addr & 0x0F);
328 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
329 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
330 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
331 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VCONTROL,
333 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
334 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
335 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
337 return rtsx_usb_send_cmd(ucr, MODE_C, 100);
340 int rtsx_usb_write_register(struct rtsx_ucr *ucr, u16 addr, u8 mask, u8 data)
342 rtsx_usb_init_cmd(ucr);
343 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, addr, mask, data);
344 return rtsx_usb_send_cmd(ucr, MODE_C, 100);
348 int rtsx_usb_read_register(struct rtsx_ucr *ucr, u16 addr, u8 *data)
355 rtsx_usb_init_cmd(ucr);
356 rtsx_usb_add_cmd(ucr, READ_REG_CMD, addr, 0, 0);
357 ret = rtsx_usb_send_cmd(ucr, MODE_CR, 100);
361 ret = rtsx_usb_get_rsp(ucr, 1, 100);
366 *data = ucr->rsp_buf[0];
389 int rtsx_usb_switch_clock(struct rtsx_ucr *ucr, unsigned int card_clock,
396 ucr->cur_clk = 0;
408 ret = rtsx_usb_write_register(ucr, SD_CFG1,
414 dev_dbg(&ucr->pusb_intf->dev,
419 dev_dbg(&ucr->pusb_intf->dev,
421 card_clock, ucr->cur_clk);
423 if (card_clock == ucr->cur_clk)
442 dev_dbg(&ucr->pusb_intf->dev, "n = %d, div = %d\n", n, div);
448 dev_dbg(&ucr->pusb_intf->dev, "ssc_depth = %d\n", ssc_depth);
450 rtsx_usb_init_cmd(ucr);
451 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE, CLK_CHANGE);
452 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CLK_DIV,
454 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
455 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SSC_CTL2,
457 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, n);
458 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, SSC_RSTB);
460 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK0_CTL,
462 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK0_CTL,
466 ret = rtsx_usb_send_cmd(ucr, MODE_C, 2000);
470 ret = rtsx_usb_write_register(ucr, SSC_CTL1, 0xff,
478 ret = rtsx_usb_write_register(ucr, CLK_DIV, CLK_CHANGE, 0);
482 ucr->cur_clk = card_clock;
488 int rtsx_usb_card_exclusive_check(struct rtsx_ucr *ucr, int card)
497 ret = rtsx_usb_get_card_status(ucr, &val);
512 static int rtsx_usb_reset_chip(struct rtsx_ucr *ucr)
517 rtsx_usb_init_cmd(ucr);
519 if (CHECK_PKG(ucr, LQFP48)) {
520 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL,
522 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL,
524 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL1,
526 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL5,
528 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL6,
532 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SYS_DUMMY0, NYET_MSAK, NYET_EN);
533 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CD_DEGLITCH_WIDTH, 0xFF, 0x08);
534 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
536 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD30_DRIVE_SEL,
538 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
540 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG, 0xE0, 0x0);
542 if (ucr->is_rts5179)
543 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
546 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_DMA1_CTL,
548 rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_INT_PEND,
552 ret = rtsx_usb_send_cmd(ucr, MODE_C, 100);
557 rtsx_usb_read_register(ucr, CFG_MODE, &val);
559 ret = rtsx_usb_write_phy_register(ucr, 0xC2, 0x7C);
567 static int rtsx_usb_init_chip(struct rtsx_ucr *ucr)
572 rtsx_usb_clear_fsm_err(ucr);
575 ret = rtsx_usb_write_register(ucr,
581 ret = rtsx_usb_write_register(ucr, CLK_DIV, CLK_CHANGE, 0x00);
586 ret = rtsx_usb_read_register(ucr, HW_VERSION, &val);
590 ucr->ic_version = val & HW_VER_MASK;
593 ret = rtsx_usb_read_register(ucr, CARD_SHARE_MODE, &val);
598 ucr->package = LQFP48;
599 dev_dbg(&ucr->pusb_intf->dev, "Package: LQFP48\n");
601 ucr->package = QFN24;
602 dev_dbg(&ucr->pusb_intf->dev, "Package: QFN24\n");
606 rtsx_usb_read_register(ucr, CFG_MODE_1, &val);
608 ucr->is_rts5179 = true;
609 dev_dbg(&ucr->pusb_intf->dev, "Device is rts5179\n");
611 ucr->is_rts5179 = false;
614 return rtsx_usb_reset_chip(ucr);
621 struct rtsx_ucr *ucr;
628 ucr = devm_kzalloc(&intf->dev, sizeof(*ucr), GFP_KERNEL);
629 if (!ucr)
632 ucr->pusb_dev = usb_dev;
634 ucr->cmd_buf = kmalloc(IOBUF_SIZE, GFP_KERNEL);
635 if (!ucr->cmd_buf)
638 ucr->rsp_buf = kmalloc(IOBUF_SIZE, GFP_KERNEL);
639 if (!ucr->rsp_buf) {
644 usb_set_intfdata(intf, ucr);
646 ucr->vendor_id = id->idVendor;
647 ucr->product_id = id->idProduct;
649 mutex_init(&ucr->dev_mutex);
651 ucr->pusb_intf = intf;
654 ret = rtsx_usb_init_chip(ucr);
659 timer_setup(&ucr->sg_timer, rtsx_usb_sg_timed_out, 0);
674 usb_set_intfdata(ucr->pusb_intf, NULL);
675 kfree(ucr->rsp_buf);
676 ucr->rsp_buf = NULL;
678 kfree(ucr->cmd_buf);
679 ucr->cmd_buf = NULL;
685 struct rtsx_ucr *ucr = (struct rtsx_ucr *)usb_get_intfdata(intf);
691 usb_set_intfdata(ucr->pusb_intf, NULL);
693 kfree(ucr->cmd_buf);
694 ucr->cmd_buf = NULL;
696 kfree(ucr->rsp_buf);
697 ucr->rsp_buf = NULL;
703 struct rtsx_ucr *ucr =
711 if (mutex_trylock(&ucr->dev_mutex)) {
712 rtsx_usb_get_card_status(ucr, &val);
713 mutex_unlock(&ucr->dev_mutex);
741 struct rtsx_ucr *ucr =
744 rtsx_usb_reset_chip(ucr);
760 struct rtsx_ucr *ucr = (struct rtsx_ucr *)usb_get_intfdata(intf);
762 mutex_lock(&ucr->dev_mutex);
768 struct rtsx_ucr *ucr = (struct rtsx_ucr *)usb_get_intfdata(intf);
770 mutex_unlock(&ucr->dev_mutex);