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>
31 #include <scsi/scsi.h>
32 #include <scsi/scsi_eh.h>
33 #include <scsi/scsi_device.h>
37 #include "rts51x_chip.h"
38 #include "rts51x_card.h"
39 #include "rts51x_transport.h"
40 #include "rts51x_sys.h"
45 void do_remaining_work(struct rts51x_chip *chip)
47 struct sd_info *sd_card = &(chip->sd_card);
48 struct xd_info *xd_card = &(chip->xd_card);
49 struct ms_info *ms_card = &(chip->ms_card);
51 if (chip->card_ready & SD_CARD) {
52 if (sd_card->seq_mode) {
53 RTS51X_SET_STAT(chip, STAT_RUN);
60 if (chip->card_ready & XD_CARD) {
61 if (xd_card->delay_write.delay_write_flag) {
62 RTS51X_SET_STAT(chip, STAT_RUN);
69 if (chip->card_ready & MS_CARD) {
70 if (CHK_MSPRO(ms_card)) {
71 if (ms_card->seq_mode) {
72 RTS51X_SET_STAT(chip, STAT_RUN);
78 if (ms_card->delay_write.delay_write_flag) {
79 RTS51X_SET_STAT(chip, STAT_RUN);
87 if (sd_card->counter > POLLING_WAIT_CNT)
88 sd_cleanup_work(chip);
90 if (xd_card->counter > POLLING_WAIT_CNT)
91 xd_cleanup_work(chip);
93 if (ms_card->counter > POLLING_WAIT_CNT)
94 ms_cleanup_work(chip);
97 void do_reset_xd_card(struct rts51x_chip *chip)
101 if (chip->card2lun[XD_CARD] >= MAX_ALLOWED_LUN_CNT)
104 retval = reset_xd_card(chip);
105 if (retval == STATUS_SUCCESS) {
106 chip->card_ready |= XD_CARD;
107 chip->card_fail &= ~XD_CARD;
108 chip->rw_card[chip->card2lun[XD_CARD]] = xd_rw;
110 chip->card_ready &= ~XD_CARD;
111 chip->card_fail |= XD_CARD;
112 chip->capacity[chip->card2lun[XD_CARD]] = 0;
113 chip->rw_card[chip->card2lun[XD_CARD]] = NULL;
115 rts51x_init_cmd(chip);
116 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_OE, XD_OUTPUT_EN, 0);
117 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, POWER_MASK,
119 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_EN, XD_CLK_EN, 0);
120 rts51x_send_cmd(chip, MODE_C, 100);
124 void do_reset_sd_card(struct rts51x_chip *chip)
128 if (chip->card2lun[SD_CARD] >= MAX_ALLOWED_LUN_CNT)
131 retval = reset_sd_card(chip);
132 if (retval == STATUS_SUCCESS) {
133 chip->card_ready |= SD_CARD;
134 chip->card_fail &= ~SD_CARD;
135 chip->rw_card[chip->card2lun[SD_CARD]] = sd_rw;
137 chip->card_ready &= ~SD_CARD;
138 chip->card_fail |= SD_CARD;
139 chip->capacity[chip->card2lun[SD_CARD]] = 0;
140 chip->rw_card[chip->card2lun[SD_CARD]] = NULL;
142 rts51x_init_cmd(chip);
143 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_OE, SD_OUTPUT_EN, 0);
144 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, POWER_MASK,
146 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_EN, SD_CLK_EN, 0);
147 rts51x_send_cmd(chip, MODE_C, 100);
151 void do_reset_ms_card(struct rts51x_chip *chip)
155 if (chip->card2lun[MS_CARD] >= MAX_ALLOWED_LUN_CNT)
158 retval = reset_ms_card(chip);
159 if (retval == STATUS_SUCCESS) {
160 chip->card_ready |= MS_CARD;
161 chip->card_fail &= ~MS_CARD;
162 chip->rw_card[chip->card2lun[MS_CARD]] = ms_rw;
164 chip->card_ready &= ~MS_CARD;
165 chip->card_fail |= MS_CARD;
166 chip->capacity[chip->card2lun[MS_CARD]] = 0;
167 chip->rw_card[chip->card2lun[MS_CARD]] = NULL;
169 rts51x_init_cmd(chip);
170 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_OE, MS_OUTPUT_EN, 0);
171 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, POWER_MASK,
173 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_EN, MS_CLK_EN, 0);
174 rts51x_send_cmd(chip, MODE_C, 100);
178 void card_cd_debounce(struct rts51x_chip *chip, u8 *need_reset,
182 u8 release_map = 0, reset_map = 0;
185 retval = rts51x_get_card_status(chip, &(chip->card_status));
187 chip->ocp_stat = (chip->card_status >> 4) & 0x03;
190 if (retval != STATUS_SUCCESS)
193 if (chip->card_exist) {
194 retval = rts51x_read_register(chip, CARD_INT_PEND, &value);
195 if (retval != STATUS_SUCCESS) {
196 rts51x_ep0_write_register(chip, MC_FIFO_CTL, FIFO_FLUSH,
198 rts51x_ep0_write_register(chip, SFSM_ED, 0xf8, 0xf8);
202 if (chip->card_exist & XD_CARD) {
203 if (!(chip->card_status & XD_CD))
204 release_map |= XD_CARD;
205 } else if (chip->card_exist & SD_CARD) {
206 /* if (!(chip->card_status & SD_CD)) { */
207 if (!(chip->card_status & SD_CD) || (value & SD_INT))
208 release_map |= SD_CARD;
209 } else if (chip->card_exist & MS_CARD) {
210 /* if (!(chip->card_status & MS_CD)) { */
211 if (!(chip->card_status & MS_CD) || (value & MS_INT))
212 release_map |= MS_CARD;
215 if (chip->card_status & XD_CD) {
216 reset_map |= XD_CARD;
217 } else if (chip->card_status & SD_CD) {
218 reset_map |= SD_CARD;
219 } else if (chip->card_status & MS_CD) {
220 reset_map |= MS_CARD;
224 if (CHECK_PKG(chip, QFN24) && reset_map) {
225 if (chip->card_exist & XD_CARD) {
232 int xd_cnt = 0, sd_cnt = 0, ms_cnt = 0;
235 for (i = 0; i < (chip->option.debounce_num); i++) {
237 rts51x_get_card_status(chip, &(chip->card_status));
238 if (retval != STATUS_SUCCESS) {
239 reset_map = release_map = 0;
242 if (chip->card_status & XD_CD)
246 if (chip->card_status & SD_CD)
250 if (chip->card_status & MS_CD)
258 if (!(chip->card_exist & XD_CARD)
259 && (xd_cnt > (chip->option.debounce_num - 1))) {
260 reset_map |= XD_CARD;
262 if (!(chip->card_exist & SD_CARD)
263 && (sd_cnt > (chip->option.debounce_num - 1))) {
264 reset_map |= SD_CARD;
266 if (!(chip->card_exist & MS_CARD)
267 && (ms_cnt > (chip->option.debounce_num - 1))) {
268 reset_map |= MS_CARD;
271 rts51x_write_register(chip, CARD_INT_PEND, XD_INT | MS_INT | SD_INT,
272 XD_INT | MS_INT | SD_INT);
276 *need_reset = reset_map;
278 *need_release = release_map;
281 void rts51x_init_cards(struct rts51x_chip *chip)
283 u8 need_reset = 0, need_release = 0;
285 card_cd_debounce(chip, &need_reset, &need_release);
288 RTS51X_DEBUGP("need_release = 0x%x\n", need_release);
290 rts51x_prepare_run(chip);
291 RTS51X_SET_STAT(chip, STAT_RUN);
294 if (chip->ocp_stat & (MS_OCP_NOW | MS_OCP_EVER)) {
295 rts51x_write_register(chip, OCPCTL, MS_OCP_CLEAR,
298 RTS51X_DEBUGP("Clear OCP status.\n");
302 if (need_release & XD_CARD) {
303 chip->card_exist &= ~XD_CARD;
304 chip->card_ejected = 0;
305 if (chip->card_ready & XD_CARD) {
306 release_xd_card(chip);
307 chip->rw_card[chip->card2lun[XD_CARD]] = NULL;
308 clear_bit(chip->card2lun[XD_CARD],
313 if (need_release & SD_CARD) {
314 chip->card_exist &= ~SD_CARD;
315 chip->card_ejected = 0;
316 if (chip->card_ready & SD_CARD) {
317 release_sd_card(chip);
318 chip->rw_card[chip->card2lun[SD_CARD]] = NULL;
319 clear_bit(chip->card2lun[SD_CARD],
324 if (need_release & MS_CARD) {
325 chip->card_exist &= ~MS_CARD;
326 chip->card_ejected = 0;
327 if (chip->card_ready & MS_CARD) {
328 release_ms_card(chip);
329 chip->rw_card[chip->card2lun[MS_CARD]] = NULL;
330 clear_bit(chip->card2lun[MS_CARD],
336 if (need_reset && !chip->card_ready) {
337 RTS51X_DEBUGP("need_reset = 0x%x\n", need_reset);
339 rts51x_prepare_run(chip);
340 RTS51X_SET_STAT(chip, STAT_RUN);
342 if (need_reset & XD_CARD) {
343 chip->card_exist |= XD_CARD;
344 do_reset_xd_card(chip);
345 } else if (need_reset & SD_CARD) {
346 chip->card_exist |= SD_CARD;
347 do_reset_sd_card(chip);
348 } else if (need_reset & MS_CARD) {
349 chip->card_exist |= MS_CARD;
350 do_reset_ms_card(chip);
355 void rts51x_release_cards(struct rts51x_chip *chip)
357 if (chip->card_ready & SD_CARD) {
358 sd_cleanup_work(chip);
359 release_sd_card(chip);
360 chip->card_ready &= ~SD_CARD;
363 if (chip->card_ready & XD_CARD) {
364 xd_cleanup_work(chip);
365 release_xd_card(chip);
366 chip->card_ready &= ~XD_CARD;
369 if (chip->card_ready & MS_CARD) {
370 ms_cleanup_work(chip);
371 release_ms_card(chip);
372 chip->card_ready &= ~MS_CARD;
376 static inline u8 double_depth(u8 depth)
378 return ((depth > 1) ? (depth - 1) : depth);
381 int switch_ssc_clock(struct rts51x_chip *chip, int clk)
383 struct sd_info *sd_card = &(chip->sd_card);
384 struct ms_info *ms_card = &(chip->ms_card);
386 u8 N = (u8) (clk - 2), min_N, max_N;
387 u8 mcu_cnt, div, max_div, ssc_depth;
388 int sd_vpclk_phase_reset = 0;
390 if (chip->cur_clk == clk)
391 return STATUS_SUCCESS;
397 RTS51X_DEBUGP("Switch SSC clock to %dMHz\n", clk);
399 if ((clk <= 2) || (N > max_N))
400 TRACE_RET(chip, STATUS_FAIL);
402 mcu_cnt = (u8) (60 / clk + 3);
405 /* To make sure that the SSC clock div_n is
406 * equal or greater than min_N */
408 while ((N < min_N) && (div < max_div)) {
412 RTS51X_DEBUGP("N = %d, div = %d\n", N, div);
414 if (chip->option.ssc_en) {
415 if (chip->cur_card == SD_CARD) {
416 if (CHK_SD_SDR104(sd_card)) {
417 ssc_depth = chip->option.ssc_depth_sd_sdr104;
418 } else if (CHK_SD_SDR50(sd_card)) {
419 ssc_depth = chip->option.ssc_depth_sd_sdr50;
420 } else if (CHK_SD_DDR50(sd_card)) {
422 double_depth(chip->option.
424 } else if (CHK_SD_HS(sd_card)) {
426 double_depth(chip->option.ssc_depth_sd_hs);
427 } else if (CHK_MMC_52M(sd_card)
428 || CHK_MMC_DDR52(sd_card)) {
430 double_depth(chip->option.
434 double_depth(chip->option.
435 ssc_depth_low_speed);
437 } else if (chip->cur_card == MS_CARD) {
438 if (CHK_MSPRO(ms_card)) {
439 if (CHK_HG8BIT(ms_card)) {
441 double_depth(chip->option.
445 double_depth(chip->option.
449 if (CHK_MS4BIT(ms_card)) {
451 double_depth(chip->option.
455 double_depth(chip->option.
456 ssc_depth_low_speed);
461 double_depth(chip->option.ssc_depth_low_speed);
465 if (div == CLK_DIV_2) {
466 /* If clock divided by 2, ssc depth must
467 * be multiplied by 2 */
471 ssc_depth = SSC_DEPTH_2M;
472 } else if (div == CLK_DIV_4) {
473 /* If clock divided by 4, ssc depth must
474 * be multiplied by 4 */
478 ssc_depth = SSC_DEPTH_2M;
486 RTS51X_DEBUGP("ssc_depth = %d\n", ssc_depth);
488 rts51x_init_cmd(chip);
489 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE, CLK_CHANGE);
490 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0x3F,
491 (div << 4) | mcu_cnt);
492 rts51x_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
493 rts51x_add_cmd(chip, WRITE_REG_CMD, SSC_CTL2, SSC_DEPTH_MASK,
495 rts51x_add_cmd(chip, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, N);
496 if (sd_vpclk_phase_reset) {
497 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
499 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
500 PHASE_NOT_RESET, PHASE_NOT_RESET);
503 retval = rts51x_send_cmd(chip, MODE_C, 2000);
504 if (retval != STATUS_SUCCESS)
505 TRACE_RET(chip, retval);
506 if (chip->option.ssc_en && ssc_depth)
507 rts51x_write_register(chip, SSC_CTL1, 0xff, 0xD0);
509 rts51x_write_register(chip, SSC_CTL1, 0xff, 0x50);
511 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, 0);
515 return STATUS_SUCCESS;
518 int switch_normal_clock(struct rts51x_chip *chip, int clk)
521 u8 sel, div, mcu_cnt;
522 int sd_vpclk_phase_reset = 0;
524 if (chip->cur_clk == clk)
525 return STATUS_SUCCESS;
527 if (chip->cur_card == SD_CARD) {
528 struct sd_info *sd_card = &(chip->sd_card);
529 if (CHK_SD30_SPEED(sd_card) || CHK_MMC_DDR52(sd_card))
530 sd_vpclk_phase_reset = 1;
535 RTS51X_DEBUGP("Switch clock to 20MHz\n");
542 RTS51X_DEBUGP("Switch clock to 30MHz\n");
549 RTS51X_DEBUGP("Switch clock to 40MHz\n");
556 RTS51X_DEBUGP("Switch clock to 50MHz\n");
563 RTS51X_DEBUGP("Switch clock to 60MHz\n");
570 RTS51X_DEBUGP("Switch clock to 80MHz\n");
577 RTS51X_DEBUGP("Switch clock to 100MHz\n");
584 RTS51X_DEBUGP("Switch clock to 120MHz\n");
591 RTS51X_DEBUGP("Switch clock to 150MHz\n");
598 RTS51X_DEBUGP("Try to switch to an illegal clock (%d)\n",
600 TRACE_RET(chip, STATUS_FAIL);
603 if (!sd_vpclk_phase_reset) {
604 rts51x_init_cmd(chip);
606 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE,
608 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0x3F,
609 (div << 4) | mcu_cnt);
610 rts51x_add_cmd(chip, WRITE_REG_CMD, SSC_CLK_FPGA_SEL, 0xFF,
612 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE, 0);
614 retval = rts51x_send_cmd(chip, MODE_C, 100);
615 if (retval != STATUS_SUCCESS)
616 TRACE_RET(chip, retval);
618 rts51x_init_cmd(chip);
620 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE,
622 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
624 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK1_CTL,
626 rts51x_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0x3F,
627 (div << 4) | mcu_cnt);
628 rts51x_add_cmd(chip, WRITE_REG_CMD, SSC_CLK_FPGA_SEL, 0xFF,
631 retval = rts51x_send_cmd(chip, MODE_C, 100);
632 if (retval != STATUS_SUCCESS)
633 TRACE_RET(chip, retval);
637 rts51x_init_cmd(chip);
639 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
640 PHASE_NOT_RESET, PHASE_NOT_RESET);
641 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK1_CTL,
642 PHASE_NOT_RESET, PHASE_NOT_RESET);
644 retval = rts51x_send_cmd(chip, MODE_C, 100);
645 if (retval != STATUS_SUCCESS)
646 TRACE_RET(chip, retval);
650 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, 0);
655 return STATUS_SUCCESS;
658 int card_rw(struct scsi_cmnd *srb, struct rts51x_chip *chip, u32 sec_addr,
662 unsigned int lun = SCSI_LUN(srb);
665 if (chip->rw_card[lun] == NULL)
668 RTS51X_DEBUGP("%s card, sector addr: 0x%x, sector cnt: %d\n",
669 (srb->sc_data_direction ==
670 DMA_TO_DEVICE) ? "Write" : "Read", sec_addr, sec_cnt);
672 chip->rw_need_retry = 0;
673 for (i = 0; i < 3; i++) {
674 retval = chip->rw_card[lun] (srb, chip, sec_addr, sec_cnt);
675 if (retval != STATUS_SUCCESS) {
677 if (chip->option.reset_or_rw_fail_set_pad_drive) {
678 rts51x_write_register(chip, CARD_DRIVE_SEL,
684 if (!chip->rw_need_retry)
687 RTS51X_DEBUGP("Retry RW, (i = %d\n)", i);
693 u8 get_lun_card(struct rts51x_chip *chip, unsigned int lun)
695 if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD)
697 else if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD)
699 else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD)
705 int card_share_mode(struct rts51x_chip *chip, int card)
710 value = CARD_SHARE_SD;
711 else if (card == MS_CARD)
712 value = CARD_SHARE_MS;
713 else if (card == XD_CARD)
714 value = CARD_SHARE_XD;
716 TRACE_RET(chip, STATUS_FAIL);
718 RTS51X_WRITE_REG(chip, CARD_SHARE_MODE, CARD_SHARE_MASK, value);
720 return STATUS_SUCCESS;
723 int rts51x_select_card(struct rts51x_chip *chip, int card)
727 if (chip->cur_card != card) {
732 else if (card == MS_CARD)
734 else if (card == XD_CARD)
737 TRACE_RET(chip, STATUS_FAIL);
738 RTS51X_WRITE_REG(chip, CARD_SELECT, 0x07, mod);
739 chip->cur_card = card;
741 retval = card_share_mode(chip, card);
742 if (retval != STATUS_SUCCESS)
743 TRACE_RET(chip, retval);
746 return STATUS_SUCCESS;
749 void eject_card(struct rts51x_chip *chip, unsigned int lun)
751 RTS51X_DEBUGP("eject card\n");
752 RTS51X_SET_STAT(chip, STAT_RUN);
753 do_remaining_work(chip);
755 if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD) {
756 release_sd_card(chip);
757 chip->card_ejected |= SD_CARD;
758 chip->card_ready &= ~SD_CARD;
759 chip->capacity[lun] = 0;
760 } else if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD) {
761 release_xd_card(chip);
762 chip->card_ejected |= XD_CARD;
763 chip->card_ready &= ~XD_CARD;
764 chip->capacity[lun] = 0;
765 } else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD) {
766 release_ms_card(chip);
767 chip->card_ejected |= MS_CARD;
768 chip->card_ready &= ~MS_CARD;
769 chip->capacity[lun] = 0;
771 rts51x_write_register(chip, CARD_INT_PEND, XD_INT | MS_INT | SD_INT,
772 XD_INT | MS_INT | SD_INT);
775 void trans_dma_enable(enum dma_data_direction dir, struct rts51x_chip *chip,
776 u32 byte_cnt, u8 pack_size)
778 if (pack_size > DMA_1024)
781 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
784 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_TC3, 0xFF,
785 (u8) (byte_cnt >> 24));
786 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_TC2, 0xFF,
787 (u8) (byte_cnt >> 16));
788 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_TC1, 0xFF,
789 (u8) (byte_cnt >> 8));
790 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_TC0, 0xFF, (u8) byte_cnt);
792 if (dir == DMA_FROM_DEVICE) {
793 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_CTL,
794 0x03 | DMA_PACK_SIZE_MASK,
795 DMA_DIR_FROM_CARD | DMA_EN | pack_size);
797 rts51x_add_cmd(chip, WRITE_REG_CMD, MC_DMA_CTL,
798 0x03 | DMA_PACK_SIZE_MASK,
799 DMA_DIR_TO_CARD | DMA_EN | pack_size);
803 int enable_card_clock(struct rts51x_chip *chip, u8 card)
814 RTS51X_WRITE_REG(chip, CARD_CLK_EN, clk_en, clk_en);
816 return STATUS_SUCCESS;
819 int disable_card_clock(struct rts51x_chip *chip, u8 card)
830 RTS51X_WRITE_REG(chip, CARD_CLK_EN, clk_en, 0);
832 return STATUS_SUCCESS;
835 int card_power_on(struct rts51x_chip *chip, u8 card)
840 val1 = PARTIAL_POWER_ON;
843 #ifdef SD_XD_IO_FOLLOW_PWR
844 if ((card == SD_CARD) || (card == XD_CARD)) {
845 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, mask | LDO3318_PWR_MASK,
847 /* RTS51X_WRITE_REG(chip, CARD_PWR_CTL,
848 LDO3318_PWR_MASK, LDO_SUSPEND); */
850 /* else if(card==XD_CARD)
852 RTS51X_WRITE_REG(chip, CARD_PWR_CTL,
853 mask|LDO3318_PWR_MASK, val1|LDO_SUSPEND);
854 //RTS51X_WRITE_REG(chip, CARD_PWR_CTL,
855 // LDO3318_PWR_MASK, LDO_SUSPEND);
859 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, mask, val1);
860 #ifdef SD_XD_IO_FOLLOW_PWR
863 udelay(chip->option.pwr_delay);
864 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, mask, val2);
865 #ifdef SD_XD_IO_FOLLOW_PWR
866 if (card == SD_CARD) {
867 rts51x_write_register(chip, CARD_PWR_CTL, LDO3318_PWR_MASK,
872 return STATUS_SUCCESS;
875 int card_power_off(struct rts51x_chip *chip, u8 card)
881 RTS51X_WRITE_REG(chip, CARD_PWR_CTL, mask, val);
883 return STATUS_SUCCESS;
886 int monitor_card_cd(struct rts51x_chip *chip, u8 card)
889 u8 card_cd[32] = { 0 };
891 card_cd[SD_CARD] = SD_CD;
892 card_cd[XD_CARD] = XD_CD;
893 card_cd[MS_CARD] = MS_CD;
895 retval = rts51x_get_card_status(chip, &(chip->card_status));
896 if (retval != STATUS_SUCCESS)
899 if (chip->card_status & card_cd[card])
905 int toggle_gpio(struct rts51x_chip *chip, u8 gpio)
909 u8 gpio_output[4] = {
916 retval = rts51x_ep0_read_register(chip, CARD_GPIO, &temp_reg);
917 if (retval != STATUS_SUCCESS)
918 TRACE_RET(chip, STATUS_FAIL);
919 temp_reg ^= gpio_oe[gpio];
920 temp_reg &= 0xfe; /* bit 0 always set 0 */
922 rts51x_ep0_write_register(chip, CARD_GPIO, 0x03, temp_reg);
923 if (retval != STATUS_SUCCESS)
924 TRACE_RET(chip, STATUS_FAIL);
926 retval = rts51x_ep0_read_register(chip, CARD_GPIO, &temp_reg);
927 if (retval != STATUS_SUCCESS)
928 TRACE_RET(chip, STATUS_FAIL);
929 temp_reg ^= gpio_output[gpio];
931 rts51x_ep0_write_register(chip, CARD_GPIO, 0xFF,
932 temp_reg | gpio_oe[gpio]);
933 if (retval != STATUS_SUCCESS)
934 TRACE_RET(chip, STATUS_FAIL);
937 return STATUS_SUCCESS;
940 int turn_on_led(struct rts51x_chip *chip, u8 gpio)
951 rts51x_ep0_write_register(chip, CARD_GPIO, gpio_mask[gpio],
953 if (retval != STATUS_SUCCESS)
954 TRACE_RET(chip, STATUS_FAIL);
956 return STATUS_SUCCESS;
959 int turn_off_led(struct rts51x_chip *chip, u8 gpio)
962 u8 gpio_output[4] = {
973 rts51x_ep0_write_register(chip, CARD_GPIO, gpio_mask[gpio],
974 gpio_oe[gpio] | gpio_output[gpio]);
975 if (retval != STATUS_SUCCESS)
976 TRACE_RET(chip, STATUS_FAIL);
978 return STATUS_SUCCESS;