1 /* Driver for Realtek RTS51xx USB card reader
3 * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2, or (at your option) any
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, see <http://www.gnu.org/licenses/>.
19 * wwang (wei_wang@realsil.com.cn)
20 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
22 * Edwin Rong (edwin_rong@realsil.com.cn)
23 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
26 #include <linux/blkdev.h>
27 #include <linux/kthread.h>
28 #include <linux/sched.h>
29 #include <linux/workqueue.h>
34 #include "rts51x_chip.h"
35 #include "rts51x_card.h"
36 #include "rts51x_transport.h"
41 static int check_sd_speed_prior(u32 sd_speed_prior)
45 /* Check the legality of sd_speed_prior */
46 for (i = 0; i < 4; i++) {
47 u8 tmp = (u8) (sd_speed_prior >> (i * 8));
48 if ((tmp < 0x01) || (tmp > 0x04)) {
57 int rts51x_reset_chip(struct rts51x_chip *chip)
61 if (CHECK_PKG(chip, LQFP48)) {
62 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, LDO3318_PWR_MASK,
64 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, FORCE_LDO_POWERB,
66 RTS51X_WRITE_REG(chip, CARD_PULL_CTL1, 0x30, 0x10);
67 RTS51X_WRITE_REG(chip, CARD_PULL_CTL5, 0x03, 0x01);
68 RTS51X_WRITE_REG(chip, CARD_PULL_CTL6, 0x0C, 0x04);
70 if (chip->asic_code) {
71 RTS51X_WRITE_REG(chip, SYS_DUMMY0, NYET_MSAK, NYET_EN);
72 RTS51X_WRITE_REG(chip, CD_DEGLITCH_WIDTH, 0xFF, 0x08);
73 rts51x_write_register(chip, CD_DEGLITCH_EN, XD_CD_DEGLITCH_EN,
75 rts51x_write_register(chip, SD30_DRIVE_SEL, SD30_DRIVE_MASK,
76 chip->option.sd30_pad_drive);
77 rts51x_write_register(chip, CARD_DRIVE_SEL, SD20_DRIVE_MASK,
78 chip->option.sd20_pad_drive);
80 rts51x_write_register(chip, CARD_PULL_CTL5, 0x03, 0x01);
81 if (CHECK_PKG(chip, LQFP48)) {
82 rts51x_write_register(chip, CARD_PULL_CTL3,
84 rts51x_write_register(chip, CARD_PULL_CTL6,
87 rts51x_write_register(chip, CARD_PULL_CTL1,
89 rts51x_write_register(chip, CARD_PULL_CTL3,
91 rts51x_write_register(chip, CARD_PULL_CTL6,
95 if (chip->option.sd_ctl & SUPPORT_UHS50_MMC44) {
97 RTS51X_DEBUGP("option enable UHS50&MMC44,sd_ctl:0x%x\n",
100 /* if(CHECK_PID(chip, 0x0139)&&CHECK_PKG(chip, LQFP48)) */
101 if ((CHECK_PID(chip, 0x0139) && CHECK_PKG(chip, LQFP48))
104 RTS51X_DEBUGP("PID enable UHS50&MMC44\n");
107 RTS51X_DEBUGP("PID disable UHS50&MMC44\n");
111 if (chip->option.ms_errreg_fix && (chip->ic_version > 1))
112 rts51x_write_register(chip, 0xFD4D, 0x01, 0x01);
113 retval = rts51x_write_phy_register(chip, 0xC2, 0x7C);
114 if (retval != STATUS_SUCCESS)
115 TRACE_RET(chip, retval);
117 rts51x_init_cmd(chip);
120 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_GPIO, GPIO_OE, GPIO_OE);
121 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DMA1_CTL,
122 EXTEND_DMA1_ASYNC_SIGNAL, EXTEND_DMA1_ASYNC_SIGNAL);
124 retval = rts51x_send_cmd(chip, MODE_C, 100);
125 if (retval != STATUS_SUCCESS)
126 TRACE_RET(chip, retval);
128 if (chip->asic_code) {
129 rts51x_write_register(chip, OCPCTL, MS_OCP_DETECT_EN,
131 RTS51X_DEBUGP("Enable OCP detect!\n");
134 if (chip->option.FT2_fast_mode) {
135 card_power_on(chip, SD_CARD | MS_CARD | XD_CARD);
139 return STATUS_SUCCESS;
142 int rts51x_init_chip(struct rts51x_chip *chip)
151 chip->card2lun[XD_CARD] = 0;
152 chip->card2lun[SD_CARD] = 0;
153 chip->card2lun[MS_CARD] = 0;
154 chip->card_ejected = 0;
156 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
157 #ifdef CLOSE_SSC_POWER
158 rts51x_write_register(chip, FPDCTL, SSC_POWER_MASK, SSC_POWER_ON);
160 rts51x_write_register(chip, CLK_DIV, CLK_CHANGE, 0x00);
162 RTS51X_SET_STAT(chip, STAT_RUN);
164 RTS51X_READ_REG(chip, HW_VERSION, &val);
165 RTS51X_DEBUGP("HW_VERSION: 0x%x\n", val);
166 if (val & FPGA_VER) {
168 RTS51X_DEBUGP("FPGA!\n");
171 RTS51X_DEBUGP("ASIC!\n");
173 chip->ic_version = val & HW_VER_MASK;
175 if (!check_sd_speed_prior(chip->option.sd_speed_prior))
176 chip->option.sd_speed_prior = 0x01020403;
177 RTS51X_DEBUGP("sd_speed_prior = 0x%08x\n",
178 chip->option.sd_speed_prior);
180 RTS51X_READ_REG(chip, CARD_SHARE_MODE, &val);
181 if (val & CARD_SHARE_LQFP_SEL) {
182 chip->package = LQFP48;
183 RTS51X_DEBUGP("Package: LQFP48\n");
185 chip->package = QFN24;
186 RTS51X_DEBUGP("Package: QFN24\n");
189 RTS51X_READ_REG(chip, HS_USB_STAT, &val);
190 if (val & USB_HI_SPEED) {
191 chip->usb_speed = USB_20;
192 RTS51X_DEBUGP("USB High Speed\n");
194 chip->usb_speed = USB_11;
195 RTS51X_DEBUGP("USB Full Speed\n");
198 RTS51X_READ_REG(chip, CFG_MODE_1, &val);
201 RTS51X_DEBUGP("device is rts5179\n");
206 retval = rts51x_reset_chip(chip);
207 if (retval != STATUS_SUCCESS)
208 TRACE_RET(chip, STATUS_FAIL);
210 return STATUS_SUCCESS;
213 int rts51x_release_chip(struct rts51x_chip *chip)
215 xd_free_l2p_tbl(chip);
216 ms_free_l2p_tbl(chip);
217 chip->card_ready = 0;
218 return STATUS_SUCCESS;
221 static inline void rts51x_blink_led(struct rts51x_chip *chip)
224 if (chip->card_ready) {
225 if (chip->led_toggle_counter <
226 chip->option.led_toggle_interval) {
227 chip->led_toggle_counter++;
229 chip->led_toggle_counter = 0;
230 toggle_gpio(chip, LED_GPIO);
235 static void rts51x_auto_delink_cmd(struct rts51x_chip *chip)
237 rts51x_write_register(chip, AUTO_DELINK_EN,
238 AUTO_DELINK, AUTO_DELINK);
241 static void rts51x_auto_delink_force_cmd(struct rts51x_chip *chip)
243 rts51x_write_register(chip, AUTO_DELINK_EN,
244 AUTO_DELINK | FORCE_DELINK,
245 AUTO_DELINK | FORCE_DELINK);
248 #ifdef USING_POLLING_CYCLE_DELINK
249 /* using polling cycle as delink time */
250 static void rts51x_auto_delink_polling_cycle(struct rts51x_chip *chip)
252 if (chip->auto_delink_counter <=
253 chip->option.delink_delay * 2) {
254 if (chip->auto_delink_counter ==
255 chip->option.delink_delay) {
256 if (chip->card_exist) {
258 if (!chip->card_ejected) {
259 /* if card is not ejected or safely
260 * remove,then do force delink */
261 RTS51X_DEBUGP("False card inserted,"
262 "do force delink\n");
263 rts51x_auto_delink_force_cmd(chip);
264 chip->auto_delink_counter =
265 chip->option.delink_delay * 2 + 1;
268 RTS51X_DEBUGP("No card inserted, do delink\n");
269 /* rts51x_write_register(chip, CARD_PWR_CTL,
270 DV3318_AUTO_PWR_OFF, 0); */
271 rts51x_auto_delink_cmd(chip);
274 if (chip->auto_delink_counter ==
275 chip->option.delink_delay * 2) {
276 RTS51X_DEBUGP("Try to do force delink\n");
277 rts51x_auto_delink_force_cmd(chip);
279 chip->auto_delink_counter++;
283 static void rts51x_auto_delink(struct rts51x_chip *chip)
285 rts51x_auto_delink_polling_cycle(chip);
288 /* some of called funcs are not implemented, so comment it out */
289 static void rts51x_auto_delink(struct rts51x_chip *chip)
294 void rts51x_polling_func(struct rts51x_chip *chip)
297 rts51x_init_cards(chip);
300 /* if OCP happen and card exist, then close card OE */
301 if ((chip->ocp_stat & (MS_OCP_NOW | MS_OCP_EVER)) &&
302 (chip->card_exist)) {
304 rts51x_prepare_run(chip);
306 if (chip->card_exist & SD_CARD)
307 rts51x_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
308 else if (chip->card_exist & MS_CARD)
309 rts51x_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
310 else if (chip->card_exist & XD_CARD)
311 rts51x_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
315 if (chip->idle_counter < IDLE_MAX_COUNT) {
316 chip->idle_counter++;
318 if (!RTS51X_CHK_STAT(chip, STAT_IDLE)) {
319 RTS51X_DEBUGP("Idle state!\n");
320 RTS51X_SET_STAT(chip, STAT_IDLE);
321 chip->led_toggle_counter = 0;
322 /* Idle state, turn off LED
323 * to reduce power consumption */
324 if (chip->option.led_always_on
325 && (chip->card_exist &
326 (SD_CARD | MS_CARD | XD_CARD))
327 && (!chip->card_ejected)) {
328 turn_on_led(chip, LED_GPIO);
331 rts51x_ep0_write_register(chip,
335 turn_off_led(chip, LED_GPIO);
340 #ifdef CLOSE_SSC_POWER
341 if (!chip->card_ready) {
342 rts51x_write_register(chip, CLK_DIV, CLK_CHANGE,
344 rts51x_write_register(chip, FPDCTL,
347 RTS51X_DEBUGP("Close SSC clock power!\n");
353 switch (RTS51X_GET_STAT(chip)) {
355 rts51x_blink_led(chip);
356 do_remaining_work(chip);
366 if (chip->option.auto_delink_en && !chip->card_ready) {
367 rts51x_auto_delink(chip);
369 chip->auto_delink_counter = 0;
373 void rts51x_add_cmd(struct rts51x_chip *chip,
374 u8 cmd_type, u16 reg_addr, u8 mask, u8 data)
378 if (chip->cmd_idx < ((CMD_BUF_LEN - CMD_OFFSET) / 4)) {
379 i = CMD_OFFSET + chip->cmd_idx * 4;
381 ((cmd_type & 0x03) << 6) | (u8) ((reg_addr >> 8) & 0x3F);
382 chip->cmd_buf[i++] = (u8) reg_addr;
383 chip->cmd_buf[i++] = mask;
384 chip->cmd_buf[i++] = data;
389 int rts51x_send_cmd(struct rts51x_chip *chip, u8 flag, int timeout)
393 chip->cmd_buf[CNT_H] = (u8) (chip->cmd_idx >> 8);
394 chip->cmd_buf[CNT_L] = (u8) (chip->cmd_idx);
395 chip->cmd_buf[STAGE_FLAG] = flag;
397 result = rts51x_transfer_data_rcc(chip, SND_BULK_PIPE(chip),
398 (void *)(chip->cmd_buf),
399 chip->cmd_idx * 4 + CMD_OFFSET,
400 0, NULL, timeout, MODE_C);
401 if (result != STATUS_SUCCESS)
402 TRACE_RET(chip, result);
404 return STATUS_SUCCESS;
407 int rts51x_get_rsp(struct rts51x_chip *chip, int rsp_len, int timeout)
412 TRACE_RET(chip, STATUS_ERROR);
413 /* rsp_len must aligned to dword */
415 rsp_len += (4 - rsp_len % 4);
417 result = rts51x_transfer_data_rcc(chip, RCV_BULK_PIPE(chip),
418 (void *)chip->rsp_buf, rsp_len,
419 0, NULL, timeout, STAGE_R);
420 if (result != STATUS_SUCCESS)
421 TRACE_RET(chip, result);
423 return STATUS_SUCCESS;
426 int rts51x_get_card_status(struct rts51x_chip *chip, u16 *status)
431 #ifdef GET_CARD_STATUS_USING_EPC
432 retval = rts51x_get_epc_status(chip, &val);
434 if (retval != STATUS_SUCCESS)
435 TRACE_RET(chip, retval);
437 retval = rts51x_ctrl_transfer(chip, RCV_CTRL_PIPE(chip), 0x02, 0xC0,
439 if (retval != STATUS_SUCCESS)
440 TRACE_RET(chip, retval);
446 return STATUS_SUCCESS;
449 int rts51x_write_register(struct rts51x_chip *chip, u16 addr, u8 mask, u8 data)
453 rts51x_init_cmd(chip);
454 rts51x_add_cmd(chip, WRITE_REG_CMD, addr, mask, data);
455 retval = rts51x_send_cmd(chip, MODE_C, 100);
456 if (retval != STATUS_SUCCESS)
457 TRACE_RET(chip, STATUS_FAIL);
459 return STATUS_SUCCESS;
462 int rts51x_read_register(struct rts51x_chip *chip, u16 addr, u8 *data)
468 rts51x_init_cmd(chip);
469 rts51x_add_cmd(chip, READ_REG_CMD, addr, 0, 0);
470 retval = rts51x_send_cmd(chip, MODE_CR, 100);
471 if (retval != STATUS_SUCCESS)
472 TRACE_RET(chip, STATUS_FAIL);
474 retval = rts51x_get_rsp(chip, 1, 100);
476 if (retval != STATUS_SUCCESS)
477 TRACE_RET(chip, STATUS_FAIL);
480 *data = chip->rsp_buf[0];
482 return STATUS_SUCCESS;
485 int rts51x_ep0_write_register(struct rts51x_chip *chip, u16 addr, u8 mask,
489 u16 value = 0, index = 0;
491 value |= (u16) (3 & 0x03) << 14;
492 value |= (u16) (addr & 0x3FFF);
493 index |= (u16) mask << 8;
496 retval = rts51x_ctrl_transfer(chip, SND_CTRL_PIPE(chip), 0x00, 0x40,
497 cpu_to_be16(value), cpu_to_be16(index),
499 if (retval != STATUS_SUCCESS)
500 TRACE_RET(chip, retval);
502 return STATUS_SUCCESS;
505 int rts51x_ep0_read_register(struct rts51x_chip *chip, u16 addr, u8 *data)
514 value |= (u16) (2 & 0x03) << 14;
515 value |= (u16) (addr & 0x3FFF);
517 retval = rts51x_ctrl_transfer(chip, RCV_CTRL_PIPE(chip), 0x00, 0xC0,
518 cpu_to_be16(value), 0, &val, 1, 100);
519 if (retval != STATUS_SUCCESS)
520 TRACE_RET(chip, retval);
525 return STATUS_SUCCESS;
528 int rts51x_seq_write_register(struct rts51x_chip *chip, u16 addr, u16 len,
532 u16 cmd_len = len + 12;
535 TRACE_RET(chip, STATUS_ERROR);
537 cmd_len = (cmd_len <= CMD_BUF_LEN) ? cmd_len : CMD_BUF_LEN;
539 /* cmd_len must aligned to dword */
541 cmd_len += (4 - cmd_len % 4);
543 chip->cmd_buf[0] = 'R';
544 chip->cmd_buf[1] = 'T';
545 chip->cmd_buf[2] = 'C';
546 chip->cmd_buf[3] = 'R';
547 chip->cmd_buf[PACKET_TYPE] = SEQ_WRITE;
548 chip->cmd_buf[5] = (u8) (len >> 8);
549 chip->cmd_buf[6] = (u8) len;
550 chip->cmd_buf[STAGE_FLAG] = 0;
551 chip->cmd_buf[8] = (u8) (addr >> 8);
552 chip->cmd_buf[9] = (u8) addr;
554 memcpy(chip->cmd_buf + 12, data, len);
556 result = rts51x_transfer_data_rcc(chip, SND_BULK_PIPE(chip),
557 (void *)(chip->cmd_buf), cmd_len, 0,
559 if (result != STATUS_SUCCESS)
560 TRACE_RET(chip, result);
562 return STATUS_SUCCESS;
565 int rts51x_seq_read_register(struct rts51x_chip *chip, u16 addr, u16 len,
572 TRACE_RET(chip, STATUS_ERROR);
573 /* rsp_len must aligned to dword */
575 rsp_len = len + (4 - len % 4);
579 chip->cmd_buf[0] = 'R';
580 chip->cmd_buf[1] = 'T';
581 chip->cmd_buf[2] = 'C';
582 chip->cmd_buf[3] = 'R';
583 chip->cmd_buf[PACKET_TYPE] = SEQ_READ;
584 chip->cmd_buf[5] = (u8) (rsp_len >> 8);
585 chip->cmd_buf[6] = (u8) rsp_len;
586 chip->cmd_buf[STAGE_FLAG] = STAGE_R;
587 chip->cmd_buf[8] = (u8) (addr >> 8);
588 chip->cmd_buf[9] = (u8) addr;
590 result = rts51x_transfer_data_rcc(chip, SND_BULK_PIPE(chip),
591 (void *)(chip->cmd_buf), 12, 0, NULL,
593 if (result != STATUS_SUCCESS)
594 TRACE_RET(chip, result);
596 result = rts51x_transfer_data_rcc(chip, RCV_BULK_PIPE(chip),
597 (void *)data, rsp_len, 0, NULL, 100,
599 if (result != STATUS_SUCCESS)
600 TRACE_RET(chip, result);
602 return STATUS_SUCCESS;
605 int rts51x_read_ppbuf(struct rts51x_chip *chip, u8 *buf, int buf_len)
610 TRACE_RET(chip, STATUS_ERROR);
613 rts51x_seq_read_register(chip, PPBUF_BASE2, (u16) buf_len, buf);
614 if (retval != STATUS_SUCCESS)
615 TRACE_RET(chip, retval);
617 return STATUS_SUCCESS;
620 int rts51x_write_ppbuf(struct rts51x_chip *chip, u8 *buf, int buf_len)
625 TRACE_RET(chip, STATUS_ERROR);
628 rts51x_seq_write_register(chip, PPBUF_BASE2, (u16) buf_len, buf);
629 if (retval != STATUS_SUCCESS)
630 TRACE_RET(chip, retval);
632 return STATUS_SUCCESS;
635 int rts51x_write_phy_register(struct rts51x_chip *chip, u8 addr, u8 val)
639 RTS51X_DEBUGP("Write 0x%x to phy register 0x%x\n", val, addr);
641 rts51x_init_cmd(chip);
643 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VSTAIN, 0xFF, val);
644 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VCONTROL, 0xFF, addr & 0x0F);
645 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
646 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
647 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
648 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VCONTROL, 0xFF,
650 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
651 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
652 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
654 retval = rts51x_send_cmd(chip, MODE_C, 100);
655 if (retval != STATUS_SUCCESS)
656 TRACE_RET(chip, retval);
658 return STATUS_SUCCESS;
661 int rts51x_read_phy_register(struct rts51x_chip *chip, u8 addr, u8 *val)
665 RTS51X_DEBUGP("Read from phy register 0x%x\n", addr);
667 rts51x_init_cmd(chip);
669 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VCONTROL, 0xFF, 0x07);
670 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
671 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
672 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
673 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VCONTROL, 0xFF,
675 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
676 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
677 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
678 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VCONTROL, 0xFF, addr & 0x0F);
679 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
680 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x00);
681 rts51x_add_cmd(chip, WRITE_REG_CMD, HS_VLOADM, 0xFF, 0x01);
682 rts51x_add_cmd(chip, READ_REG_CMD, HS_VSTAOUT, 0, 0);
684 retval = rts51x_send_cmd(chip, MODE_CR, 100);
685 if (retval != STATUS_SUCCESS)
686 TRACE_RET(chip, retval);
688 retval = rts51x_get_rsp(chip, 1, 100);
690 if (retval != STATUS_SUCCESS)
691 TRACE_RET(chip, retval);
694 *val = chip->rsp_buf[0];
696 RTS51X_DEBUGP("Return value: 0x%x\n", chip->rsp_buf[0]);
698 return STATUS_SUCCESS;
701 void rts51x_do_before_power_down(struct rts51x_chip *chip)
703 RTS51X_DEBUGP("rts51x_do_before_power_down\n");
705 rts51x_prepare_run(chip);
707 rts51x_release_cards(chip);
709 rts51x_ep0_write_register(chip, CARD_GPIO, 0x03, 0x00);
711 turn_off_led(chip, LED_GPIO);
714 chip->card_exist = 0;
716 if (chip->asic_code) {
717 if (CHECK_PKG(chip, LQFP48)) {
718 rts51x_write_register(chip, CARD_PULL_CTL3, 0x80, 0x00);
719 rts51x_write_register(chip, CARD_PULL_CTL6, 0xf0, 0x50);
721 rts51x_write_register(chip, CARD_PULL_CTL1, 0x30, 0x10);
722 rts51x_write_register(chip, CARD_PULL_CTL3, 0x80, 0x00);
723 rts51x_write_register(chip, CARD_PULL_CTL6, 0x0c, 0x04);
726 if (CHECK_PKG(chip, LQFP48))
727 rts51x_write_register(chip, CARD_PWR_CTL, LDO3318_PWR_MASK,
731 void rts51x_clear_hw_error(struct rts51x_chip *chip)
733 rts51x_ep0_write_register(chip, SFSM_ED, 0xf8, 0xf8);
736 void rts51x_prepare_run(struct rts51x_chip *chip)
738 #ifdef CLOSE_SSC_POWER
739 if (RTS51X_CHK_STAT(chip, STAT_IDLE) && (!chip->card_ready)) {
740 rts51x_write_register(chip, FPDCTL, SSC_POWER_MASK,
743 RTS51X_DEBUGP("Open SSC clock power.\n");
745 rts51x_write_register(chip, CLK_DIV, CLK_CHANGE, 0x00);
751 void rts51x_trace_msg(struct rts51x_chip *chip, unsigned char *buf, int clear)
761 if (chip->trace_msg[chip->msg_idx].valid)
762 msg_cnt = TRACE_ITEM_CNT;
764 msg_cnt = chip->msg_idx;
765 *(ptr++) = (u8) (msg_cnt >> 24);
766 *(ptr++) = (u8) (msg_cnt >> 16);
767 *(ptr++) = (u8) (msg_cnt >> 8);
768 *(ptr++) = (u8) msg_cnt;
769 RTS51X_DEBUGP("Trace message count is %d\n", msg_cnt);
771 for (i = 1; i <= msg_cnt; i++) {
774 idx = chip->msg_idx - i;
776 idx += TRACE_ITEM_CNT;
778 *(ptr++) = (u8) (chip->trace_msg[idx].line >> 8);
779 *(ptr++) = (u8) (chip->trace_msg[idx].line);
780 for (j = 0; j < MSG_FUNC_LEN; j++)
781 *(ptr++) = chip->trace_msg[idx].func[j];
782 for (j = 0; j < MSG_FILE_LEN; j++)
783 *(ptr++) = chip->trace_msg[idx].file[j];
784 for (j = 0; j < TIME_VAL_LEN; j++)
785 *(ptr++) = chip->trace_msg[idx].timeval_buf[j];
790 for (i = 0; i < TRACE_ITEM_CNT; i++)
791 chip->trace_msg[i].valid = 0;
796 void rts51x_pp_status(struct rts51x_chip *chip, unsigned int lun, u8 *status,
799 struct sd_info *sd_card = &(chip->sd_card);
800 struct ms_info *ms_card = &(chip->ms_card);
801 u8 card = get_lun_card(chip, lun);
803 u8 oc_now_mask = 0, oc_ever_mask = 0;
806 if (!status || (status_len < 32))
809 status[0] = (u8) RTS51X_GET_PID(chip);
810 status[1] = (u8) (chip->ic_version);
812 /* Auto delink mode */
813 if (chip->option.auto_delink_en)
831 /* Over current status */
833 oc_now_mask = MS_OCP_NOW;
834 oc_ever_mask = MS_OCP_EVER;
836 if (chip->ocp_stat & oc_now_mask)
838 if (chip->ocp_stat & oc_ever_mask)
842 if (card == SD_CARD) {
843 if (CHK_SD(sd_card)) {
844 if (CHK_SD_HCXC(sd_card)) {
845 if (sd_card->capacity > 0x4000000)
854 if (CHK_SD_SDR104(sd_card))
856 else if (CHK_SD_DDR50(sd_card))
858 else if (CHK_SD_SDR50(sd_card))
860 else if (CHK_SD_HS(sd_card))
863 status[0x0F] = 0x00; /* Normal speed */
865 if (CHK_MMC_SECTOR_MODE(sd_card))
866 status[0x0E] = 0x01; /* High capacity */
868 status[0x0E] = 0x00; /* Normal capacity */
870 if (CHK_MMC_DDR52(sd_card))
871 status[0x0F] = 0x03; /* DDR 52M */
872 else if (CHK_MMC_52M(sd_card))
873 status[0x0F] = 0x02; /* SDR 52M */
874 else if (CHK_MMC_26M(sd_card))
875 status[0x0F] = 0x01; /* SDR 26M */
877 status[0x0F] = 0x00; /* Normal speed */
879 } else if (card == MS_CARD) {
880 if (CHK_MSPRO(ms_card)) {
881 if (CHK_MSXC(ms_card))
882 status[0x0E] = 0x01; /* XC */
886 if (CHK_HG8BIT(ms_card))
894 * Support Magic Gate, CPRM and PhyRegister R/W */
898 * Support OC LUN status & WP LUN status */
902 * Support OC LUN status & WP LUN status */
906 void rts51x_read_status(struct rts51x_chip *chip, unsigned int lun,
907 u8 *rts51x_status, u8 status_len)
909 if (!rts51x_status || (status_len < 16))
912 rts51x_status[0] = (u8) (RTS51X_GET_VID(chip) >> 8);
913 rts51x_status[1] = (u8) RTS51X_GET_VID(chip);
916 rts51x_status[2] = (u8) (RTS51X_GET_PID(chip) >> 8);
917 rts51x_status[3] = (u8) RTS51X_GET_PID(chip);
920 rts51x_status[4] = (u8) lun;
922 /* Lun Card Number */
923 if (chip->card_exist) {
924 if (chip->card_exist & XD_CARD)
925 rts51x_status[5] = 4; /* xD Card */
926 else if (chip->card_exist & SD_CARD)
927 rts51x_status[5] = 2; /* SD Card */
928 else if (chip->card_exist & MS_CARD)
929 rts51x_status[5] = 3; /* MS Card */
931 rts51x_status[5] = 7; /* Multi */
933 rts51x_status[5] = 7; /* Multi */
937 rts51x_status[6] = 1;
940 rts51x_status[7] = (u8) RTS51X_GET_PID(chip);
941 rts51x_status[8] = chip->ic_version;
944 if (check_card_exist(chip, lun))
945 rts51x_status[9] = 1;
947 rts51x_status[9] = 0;
950 rts51x_status[10] = 1;
953 rts51x_status[11] = XD_CARD | SD_CARD | MS_CARD;
956 if (check_card_ready(chip, lun))
957 rts51x_status[12] = 1;
959 rts51x_status[12] = 0;
962 if (get_lun_card(chip, lun) == XD_CARD) {
963 rts51x_status[13] = 0x40;
964 } else if (get_lun_card(chip, lun) == SD_CARD) {
965 struct sd_info *sd_card = &(chip->sd_card);
967 rts51x_status[13] = 0x20;
968 if (CHK_SD(sd_card)) {
969 if (CHK_SD_HCXC(sd_card))
970 rts51x_status[13] |= 0x04; /* Hi capacity SD */
971 if (CHK_SD_HS(sd_card))
972 rts51x_status[13] |= 0x02; /* Hi speed SD */
974 rts51x_status[13] |= 0x08; /* MMC card */
975 if (CHK_MMC_52M(sd_card))
976 rts51x_status[13] |= 0x02; /* Hi speed */
977 if (CHK_MMC_SECTOR_MODE(sd_card))
978 rts51x_status[13] |= 0x04; /* Hi capacity */
980 } else if (get_lun_card(chip, lun) == MS_CARD) {
981 struct ms_info *ms_card = &(chip->ms_card);
983 if (CHK_MSPRO(ms_card)) {
984 rts51x_status[13] = 0x38; /* MS Pro */
985 if (CHK_HG8BIT(ms_card))
986 rts51x_status[13] |= 0x04; /* HG */
988 if (CHK_MSXC(ms_card))
989 rts51x_status[13] |= 0x01; /* MSXC */
992 rts51x_status[13] = 0x30;
995 rts51x_status[13] = 0x70;
997 /* Support OC, auto delink, vendor r/w, get bus width */
998 rts51x_status[14] = 0x78;
1000 rts51x_status[15] = 0x82;
1003 int rts51x_transfer_data_rcc(struct rts51x_chip *chip, unsigned int pipe,
1004 void *buf, unsigned int len, int use_sg,
1005 unsigned int *act_len, int timeout, u8 stage_flag)
1010 rts51x_transfer_data(chip, pipe, buf, len, use_sg, act_len,