1 /* Driver for Realtek PCI-Express card reader
3 * Copyright(c) 2009-2013 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 * Wei WANG (wei_wang@realsil.com.cn)
20 * Micky Ching (micky_ching@realsil.com.cn)
23 #include <linux/blkdev.h>
24 #include <linux/kthread.h>
25 #include <linux/sched.h>
26 #include <linux/workqueue.h>
27 #include <linux/kernel.h>
30 #include "rtsx_transport.h"
31 #include "rtsx_scsi.h"
32 #include "rtsx_card.h"
41 void do_remaining_work(struct rtsx_chip *chip)
43 struct sd_info *sd_card = &(chip->sd_card);
45 struct xd_info *xd_card = &(chip->xd_card);
47 struct ms_info *ms_card = &(chip->ms_card);
49 if (chip->card_ready & SD_CARD) {
50 if (sd_card->seq_mode) {
51 rtsx_set_stat(chip, RTSX_STAT_RUN);
52 sd_card->cleanup_counter++;
54 sd_card->cleanup_counter = 0;
59 if (chip->card_ready & XD_CARD) {
60 if (xd_card->delay_write.delay_write_flag) {
61 rtsx_set_stat(chip, RTSX_STAT_RUN);
62 xd_card->cleanup_counter++;
64 xd_card->cleanup_counter = 0;
69 if (chip->card_ready & MS_CARD) {
70 if (CHK_MSPRO(ms_card)) {
71 if (ms_card->seq_mode) {
72 rtsx_set_stat(chip, RTSX_STAT_RUN);
73 ms_card->cleanup_counter++;
75 ms_card->cleanup_counter = 0;
79 if (ms_card->delay_write.delay_write_flag) {
80 rtsx_set_stat(chip, RTSX_STAT_RUN);
81 ms_card->cleanup_counter++;
83 ms_card->cleanup_counter = 0;
89 if (sd_card->cleanup_counter > POLLING_WAIT_CNT)
90 sd_cleanup_work(chip);
92 if (xd_card->cleanup_counter > POLLING_WAIT_CNT)
93 xd_cleanup_work(chip);
95 if (ms_card->cleanup_counter > POLLING_WAIT_CNT)
96 ms_cleanup_work(chip);
99 void try_to_switch_sdio_ctrl(struct rtsx_chip *chip)
101 u8 reg1 = 0, reg2 = 0;
103 rtsx_read_register(chip, 0xFF34, ®1);
104 rtsx_read_register(chip, 0xFF38, ®2);
105 RTSX_DEBUGP("reg 0xFF34: 0x%x, reg 0xFF38: 0x%x\n", reg1, reg2);
106 if ((reg1 & 0xC0) && (reg2 & 0xC0)) {
108 rtsx_write_register(chip, SDIO_CTRL, 0xFF,
109 SDIO_BUS_CTRL | SDIO_CD_CTRL);
110 rtsx_write_register(chip, PWR_GATE_CTRL,
111 LDO3318_PWR_MASK, LDO_ON);
115 #ifdef SUPPORT_SDIO_ASPM
116 void dynamic_configure_sdio_aspm(struct rtsx_chip *chip)
121 for (i = 0; i < 12; i++)
122 rtsx_read_register(chip, 0xFF08 + i, &buf[i]);
123 rtsx_read_register(chip, 0xFF25, ®);
124 if ((memcmp(buf, chip->sdio_raw_data, 12) != 0) || (reg & 0x03)) {
125 chip->sdio_counter = 0;
128 if (!chip->sdio_idle) {
129 chip->sdio_counter++;
130 if (chip->sdio_counter >= SDIO_IDLE_COUNT) {
131 chip->sdio_counter = 0;
136 memcpy(chip->sdio_raw_data, buf, 12);
138 if (chip->sdio_idle) {
139 if (!chip->sdio_aspm) {
140 RTSX_DEBUGP("SDIO enter ASPM!\n");
141 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC,
142 0x30 | (chip->aspm_level[1] << 2));
146 if (chip->sdio_aspm) {
147 RTSX_DEBUGP("SDIO exit ASPM!\n");
148 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30);
155 void do_reset_sd_card(struct rtsx_chip *chip)
159 RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__,
160 chip->sd_reset_counter, chip->card2lun[SD_CARD]);
162 if (chip->card2lun[SD_CARD] >= MAX_ALLOWED_LUN_CNT) {
163 clear_bit(SD_NR, &(chip->need_reset));
164 chip->sd_reset_counter = 0;
165 chip->sd_show_cnt = 0;
169 chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
171 rtsx_set_stat(chip, RTSX_STAT_RUN);
172 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
174 retval = reset_sd_card(chip);
175 if (chip->need_release & SD_CARD)
177 if (retval == STATUS_SUCCESS) {
178 clear_bit(SD_NR, &(chip->need_reset));
179 chip->sd_reset_counter = 0;
180 chip->sd_show_cnt = 0;
181 chip->card_ready |= SD_CARD;
182 chip->card_fail &= ~SD_CARD;
183 chip->rw_card[chip->card2lun[SD_CARD]] = sd_rw;
185 if (chip->sd_io || (chip->sd_reset_counter >= MAX_RESET_CNT)) {
186 clear_bit(SD_NR, &(chip->need_reset));
187 chip->sd_reset_counter = 0;
188 chip->sd_show_cnt = 0;
190 chip->sd_reset_counter++;
192 chip->card_ready &= ~SD_CARD;
193 chip->card_fail |= SD_CARD;
194 chip->capacity[chip->card2lun[SD_CARD]] = 0;
195 chip->rw_card[chip->card2lun[SD_CARD]] = NULL;
197 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
198 if (!chip->ft2_fast_mode)
199 card_power_off(chip, SD_CARD);
202 try_to_switch_sdio_ctrl(chip);
204 disable_card_clock(chip, SD_CARD);
209 void do_reset_xd_card(struct rtsx_chip *chip)
213 RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__,
214 chip->xd_reset_counter, chip->card2lun[XD_CARD]);
216 if (chip->card2lun[XD_CARD] >= MAX_ALLOWED_LUN_CNT) {
217 clear_bit(XD_NR, &(chip->need_reset));
218 chip->xd_reset_counter = 0;
219 chip->xd_show_cnt = 0;
223 chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
225 rtsx_set_stat(chip, RTSX_STAT_RUN);
226 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
228 retval = reset_xd_card(chip);
229 if (chip->need_release & XD_CARD)
231 if (retval == STATUS_SUCCESS) {
232 clear_bit(XD_NR, &(chip->need_reset));
233 chip->xd_reset_counter = 0;
234 chip->card_ready |= XD_CARD;
235 chip->card_fail &= ~XD_CARD;
236 chip->rw_card[chip->card2lun[XD_CARD]] = xd_rw;
238 if (chip->xd_reset_counter >= MAX_RESET_CNT) {
239 clear_bit(XD_NR, &(chip->need_reset));
240 chip->xd_reset_counter = 0;
241 chip->xd_show_cnt = 0;
243 chip->xd_reset_counter++;
245 chip->card_ready &= ~XD_CARD;
246 chip->card_fail |= XD_CARD;
247 chip->capacity[chip->card2lun[XD_CARD]] = 0;
248 chip->rw_card[chip->card2lun[XD_CARD]] = NULL;
250 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
251 if (!chip->ft2_fast_mode)
252 card_power_off(chip, XD_CARD);
253 disable_card_clock(chip, XD_CARD);
257 void do_reset_ms_card(struct rtsx_chip *chip)
261 RTSX_DEBUGP("%s: %d, card2lun = 0x%x\n", __func__,
262 chip->ms_reset_counter, chip->card2lun[MS_CARD]);
264 if (chip->card2lun[MS_CARD] >= MAX_ALLOWED_LUN_CNT) {
265 clear_bit(MS_NR, &(chip->need_reset));
266 chip->ms_reset_counter = 0;
267 chip->ms_show_cnt = 0;
271 chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
273 rtsx_set_stat(chip, RTSX_STAT_RUN);
274 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
276 retval = reset_ms_card(chip);
277 if (chip->need_release & MS_CARD)
279 if (retval == STATUS_SUCCESS) {
280 clear_bit(MS_NR, &(chip->need_reset));
281 chip->ms_reset_counter = 0;
282 chip->card_ready |= MS_CARD;
283 chip->card_fail &= ~MS_CARD;
284 chip->rw_card[chip->card2lun[MS_CARD]] = ms_rw;
286 if (chip->ms_reset_counter >= MAX_RESET_CNT) {
287 clear_bit(MS_NR, &(chip->need_reset));
288 chip->ms_reset_counter = 0;
289 chip->ms_show_cnt = 0;
291 chip->ms_reset_counter++;
293 chip->card_ready &= ~MS_CARD;
294 chip->card_fail |= MS_CARD;
295 chip->capacity[chip->card2lun[MS_CARD]] = 0;
296 chip->rw_card[chip->card2lun[MS_CARD]] = NULL;
298 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
299 if (!chip->ft2_fast_mode)
300 card_power_off(chip, MS_CARD);
301 disable_card_clock(chip, MS_CARD);
305 static void release_sdio(struct rtsx_chip *chip)
308 rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
309 SD_STOP | SD_CLR_ERR);
311 if (chip->chip_insert_with_sdio) {
312 chip->chip_insert_with_sdio = 0;
314 if (CHECK_PID(chip, 0x5288))
315 rtsx_write_register(chip, 0xFE5A, 0x08, 0x00);
317 rtsx_write_register(chip, 0xFE70, 0x80, 0x00);
320 rtsx_write_register(chip, SDIO_CTRL, SDIO_CD_CTRL, 0);
325 void rtsx_power_off_card(struct rtsx_chip *chip)
327 if ((chip->card_ready & SD_CARD) || chip->sd_io) {
328 sd_cleanup_work(chip);
329 sd_power_off_card3v3(chip);
332 if (chip->card_ready & XD_CARD) {
333 xd_cleanup_work(chip);
334 xd_power_off_card3v3(chip);
337 if (chip->card_ready & MS_CARD) {
338 ms_cleanup_work(chip);
339 ms_power_off_card3v3(chip);
343 void rtsx_release_cards(struct rtsx_chip *chip)
345 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
347 if ((chip->card_ready & SD_CARD) || chip->sd_io) {
348 if (chip->int_reg & SD_EXIST)
349 sd_cleanup_work(chip);
350 release_sd_card(chip);
353 if (chip->card_ready & XD_CARD) {
354 if (chip->int_reg & XD_EXIST)
355 xd_cleanup_work(chip);
356 release_xd_card(chip);
359 if (chip->card_ready & MS_CARD) {
360 if (chip->int_reg & MS_EXIST)
361 ms_cleanup_work(chip);
362 release_ms_card(chip);
366 void rtsx_reset_cards(struct rtsx_chip *chip)
368 if (!chip->need_reset)
371 rtsx_set_stat(chip, RTSX_STAT_RUN);
373 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
375 rtsx_disable_aspm(chip);
377 if ((chip->need_reset & SD_CARD) && chip->chip_insert_with_sdio)
378 clear_bit(SD_NR, &(chip->need_reset));
380 if (chip->need_reset & XD_CARD) {
381 chip->card_exist |= XD_CARD;
383 if (chip->xd_show_cnt >= MAX_SHOW_CNT)
384 do_reset_xd_card(chip);
388 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
389 if (chip->card_exist & XD_CARD) {
390 clear_bit(SD_NR, &(chip->need_reset));
391 clear_bit(MS_NR, &(chip->need_reset));
394 if (chip->need_reset & SD_CARD) {
395 chip->card_exist |= SD_CARD;
397 if (chip->sd_show_cnt >= MAX_SHOW_CNT) {
398 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
399 do_reset_sd_card(chip);
404 if (chip->need_reset & MS_CARD) {
405 chip->card_exist |= MS_CARD;
407 if (chip->ms_show_cnt >= MAX_SHOW_CNT)
408 do_reset_ms_card(chip);
414 void rtsx_reinit_cards(struct rtsx_chip *chip, int reset_chip)
416 rtsx_set_stat(chip, RTSX_STAT_RUN);
418 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
421 rtsx_reset_chip(chip);
423 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
425 if ((chip->int_reg & SD_EXIST) && (chip->need_reinit & SD_CARD)) {
427 release_sd_card(chip);
431 chip->card_exist |= SD_CARD;
432 do_reset_sd_card(chip);
435 if ((chip->int_reg & XD_EXIST) && (chip->need_reinit & XD_CARD)) {
436 release_xd_card(chip);
440 chip->card_exist |= XD_CARD;
441 do_reset_xd_card(chip);
444 if ((chip->int_reg & MS_EXIST) && (chip->need_reinit & MS_CARD)) {
445 release_ms_card(chip);
449 chip->card_exist |= MS_CARD;
450 do_reset_ms_card(chip);
453 chip->need_reinit = 0;
456 #ifdef DISABLE_CARD_INT
457 void card_cd_debounce(struct rtsx_chip *chip, unsigned long *need_reset,
458 unsigned long *need_release)
460 u8 release_map = 0, reset_map = 0;
462 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
464 if (chip->card_exist) {
465 if (chip->card_exist & XD_CARD) {
466 if (!(chip->int_reg & XD_EXIST))
467 release_map |= XD_CARD;
468 } else if (chip->card_exist & SD_CARD) {
469 if (!(chip->int_reg & SD_EXIST))
470 release_map |= SD_CARD;
471 } else if (chip->card_exist & MS_CARD) {
472 if (!(chip->int_reg & MS_EXIST))
473 release_map |= MS_CARD;
476 if (chip->int_reg & XD_EXIST)
477 reset_map |= XD_CARD;
478 else if (chip->int_reg & SD_EXIST)
479 reset_map |= SD_CARD;
480 else if (chip->int_reg & MS_EXIST)
481 reset_map |= MS_CARD;
485 int xd_cnt = 0, sd_cnt = 0, ms_cnt = 0;
488 for (i = 0; i < (DEBOUNCE_CNT); i++) {
489 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
491 if (chip->int_reg & XD_EXIST)
496 if (chip->int_reg & SD_EXIST)
501 if (chip->int_reg & MS_EXIST)
510 if (!(chip->card_exist & XD_CARD) &&
511 (xd_cnt > (DEBOUNCE_CNT-1)))
512 reset_map |= XD_CARD;
513 if (!(chip->card_exist & SD_CARD) &&
514 (sd_cnt > (DEBOUNCE_CNT-1)))
515 reset_map |= SD_CARD;
516 if (!(chip->card_exist & MS_CARD) &&
517 (ms_cnt > (DEBOUNCE_CNT-1)))
518 reset_map |= MS_CARD;
521 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN))
522 rtsx_write_register(chip, HOST_SLEEP_STATE, 0xC0, 0x00);
525 *need_reset = reset_map;
527 *need_release = release_map;
531 void rtsx_init_cards(struct rtsx_chip *chip)
533 if (RTSX_TST_DELINK(chip) && (rtsx_get_stat(chip) != RTSX_STAT_SS)) {
534 RTSX_DEBUGP("Reset chip in polling thread!\n");
535 rtsx_reset_chip(chip);
536 RTSX_CLR_DELINK(chip);
539 #ifdef DISABLE_CARD_INT
540 card_cd_debounce(chip, &(chip->need_reset), &(chip->need_release));
543 if (chip->need_release) {
544 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
545 if (chip->int_reg & XD_EXIST) {
546 clear_bit(SD_NR, &(chip->need_release));
547 clear_bit(MS_NR, &(chip->need_release));
551 if (!(chip->card_exist & SD_CARD) && !chip->sd_io)
552 clear_bit(SD_NR, &(chip->need_release));
553 if (!(chip->card_exist & XD_CARD))
554 clear_bit(XD_NR, &(chip->need_release));
555 if (!(chip->card_exist & MS_CARD))
556 clear_bit(MS_NR, &(chip->need_release));
558 RTSX_DEBUGP("chip->need_release = 0x%x\n",
559 (unsigned int)(chip->need_release));
562 if (chip->need_release) {
563 if (chip->ocp_stat & (CARD_OC_NOW | CARD_OC_EVER))
564 rtsx_write_register(chip, OCPCLR,
565 CARD_OC_INT_CLR | CARD_OC_CLR,
566 CARD_OC_INT_CLR | CARD_OC_CLR);
570 if (chip->need_release) {
571 rtsx_set_stat(chip, RTSX_STAT_RUN);
572 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
575 if (chip->need_release & SD_CARD) {
576 clear_bit(SD_NR, &(chip->need_release));
577 chip->card_exist &= ~SD_CARD;
578 chip->card_ejected &= ~SD_CARD;
579 chip->card_fail &= ~SD_CARD;
580 CLR_BIT(chip->lun_mc, chip->card2lun[SD_CARD]);
581 chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
582 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
585 release_sd_card(chip);
588 if (chip->need_release & XD_CARD) {
589 clear_bit(XD_NR, &(chip->need_release));
590 chip->card_exist &= ~XD_CARD;
591 chip->card_ejected &= ~XD_CARD;
592 chip->card_fail &= ~XD_CARD;
593 CLR_BIT(chip->lun_mc, chip->card2lun[XD_CARD]);
594 chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
596 release_xd_card(chip);
598 if (CHECK_PID(chip, 0x5288) &&
599 CHECK_BARO_PKG(chip, QFN))
600 rtsx_write_register(chip, HOST_SLEEP_STATE,
604 if (chip->need_release & MS_CARD) {
605 clear_bit(MS_NR, &(chip->need_release));
606 chip->card_exist &= ~MS_CARD;
607 chip->card_ejected &= ~MS_CARD;
608 chip->card_fail &= ~MS_CARD;
609 CLR_BIT(chip->lun_mc, chip->card2lun[MS_CARD]);
610 chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
612 release_ms_card(chip);
615 RTSX_DEBUGP("chip->card_exist = 0x%x\n", chip->card_exist);
617 if (!chip->card_exist)
618 turn_off_led(chip, LED_GPIO);
621 if (chip->need_reset) {
622 RTSX_DEBUGP("chip->need_reset = 0x%x\n",
623 (unsigned int)(chip->need_reset));
625 rtsx_reset_cards(chip);
628 if (chip->need_reinit) {
629 RTSX_DEBUGP("chip->need_reinit = 0x%x\n",
630 (unsigned int)(chip->need_reinit));
632 rtsx_reinit_cards(chip, 0);
636 static inline u8 double_depth(u8 depth)
638 return (depth > 1) ? (depth - 1) : depth;
641 int switch_ssc_clock(struct rtsx_chip *chip, int clk)
644 u8 N = (u8)(clk - 2), min_N, max_N;
645 u8 mcu_cnt, div, max_div, ssc_depth, ssc_depth_mask;
646 int sd_vpclk_phase_reset = 0;
648 if (chip->cur_clk == clk)
649 return STATUS_SUCCESS;
655 RTSX_DEBUGP("Switch SSC clock to %dMHz (cur_clk = %d)\n",
658 if ((clk <= 2) || (N > max_N))
659 TRACE_RET(chip, STATUS_FAIL);
661 mcu_cnt = (u8)(125/clk + 3);
666 while ((N < min_N) && (div < max_div)) {
670 RTSX_DEBUGP("N = %d, div = %d\n", N, div);
679 ssc_depth_mask = 0x03;
681 RTSX_DEBUGP("ssc_depth = %d\n", ssc_depth);
684 rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
685 rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0xFF, (div << 4) | mcu_cnt);
686 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
687 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL2, ssc_depth_mask, ssc_depth);
688 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, N);
689 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, SSC_RSTB);
690 if (sd_vpclk_phase_reset) {
691 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
693 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
694 PHASE_NOT_RESET, PHASE_NOT_RESET);
697 retval = rtsx_send_cmd(chip, 0, WAIT_TIME);
699 TRACE_RET(chip, STATUS_ERROR);
702 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, 0);
706 return STATUS_SUCCESS;
709 int switch_normal_clock(struct rtsx_chip *chip, int clk)
711 u8 sel, div, mcu_cnt;
712 int sd_vpclk_phase_reset = 0;
714 if (chip->cur_clk == clk)
715 return STATUS_SUCCESS;
719 RTSX_DEBUGP("Switch clock to 20MHz\n");
726 RTSX_DEBUGP("Switch clock to 30MHz\n");
733 RTSX_DEBUGP("Switch clock to 40MHz\n");
740 RTSX_DEBUGP("Switch clock to 50MHz\n");
747 RTSX_DEBUGP("Switch clock to 60MHz\n");
754 RTSX_DEBUGP("Switch clock to 80MHz\n");
761 RTSX_DEBUGP("Switch clock to 100MHz\n");
768 RTSX_DEBUGP("Switch clock to 120MHz\n");
775 RTSX_DEBUGP("Switch clock to 150MHz\n");
782 RTSX_DEBUGP("Switch clock to 200MHz\n");
789 RTSX_DEBUGP("Try to switch to an illegal clock (%d)\n", clk);
790 TRACE_RET(chip, STATUS_FAIL);
793 RTSX_WRITE_REG(chip, CLK_CTL, 0xFF, CLK_LOW_FREQ);
794 if (sd_vpclk_phase_reset) {
795 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
796 RTSX_WRITE_REG(chip, SD_VPCLK1_CTL, PHASE_NOT_RESET, 0);
798 RTSX_WRITE_REG(chip, CLK_DIV, 0xFF, (div << 4) | mcu_cnt);
799 RTSX_WRITE_REG(chip, CLK_SEL, 0xFF, sel);
801 if (sd_vpclk_phase_reset) {
803 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
805 RTSX_WRITE_REG(chip, SD_VPCLK1_CTL, PHASE_NOT_RESET,
809 RTSX_WRITE_REG(chip, CLK_CTL, 0xFF, 0);
813 return STATUS_SUCCESS;
816 void trans_dma_enable(enum dma_data_direction dir, struct rtsx_chip *chip,
817 u32 byte_cnt, u8 pack_size)
819 if (pack_size > DMA_1024)
822 rtsx_add_cmd(chip, WRITE_REG_CMD, IRQSTAT0, DMA_DONE_INT, DMA_DONE_INT);
824 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC3, 0xFF, (u8)(byte_cnt >> 24));
825 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC2, 0xFF, (u8)(byte_cnt >> 16));
826 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC1, 0xFF, (u8)(byte_cnt >> 8));
827 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC0, 0xFF, (u8)byte_cnt);
829 if (dir == DMA_FROM_DEVICE) {
830 rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
831 0x03 | DMA_PACK_SIZE_MASK,
832 DMA_DIR_FROM_CARD | DMA_EN | pack_size);
834 rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
835 0x03 | DMA_PACK_SIZE_MASK,
836 DMA_DIR_TO_CARD | DMA_EN | pack_size);
839 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
842 int enable_card_clock(struct rtsx_chip *chip, u8 card)
853 RTSX_WRITE_REG(chip, CARD_CLK_EN, clk_en, clk_en);
855 return STATUS_SUCCESS;
858 int disable_card_clock(struct rtsx_chip *chip, u8 card)
869 RTSX_WRITE_REG(chip, CARD_CLK_EN, clk_en, 0);
871 return STATUS_SUCCESS;
874 int card_power_on(struct rtsx_chip *chip, u8 card)
879 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && (card == MS_CARD)) {
880 mask = MS_POWER_MASK;
881 val1 = MS_PARTIAL_POWER_ON;
884 mask = SD_POWER_MASK;
885 val1 = SD_PARTIAL_POWER_ON;
890 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val1);
892 retval = rtsx_send_cmd(chip, 0, 100);
893 if (retval != STATUS_SUCCESS)
894 TRACE_RET(chip, STATUS_FAIL);
896 udelay(chip->pmos_pwr_on_interval);
899 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val2);
901 retval = rtsx_send_cmd(chip, 0, 100);
902 if (retval != STATUS_SUCCESS)
903 TRACE_RET(chip, STATUS_FAIL);
905 return STATUS_SUCCESS;
908 int card_power_off(struct rtsx_chip *chip, u8 card)
912 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && (card == MS_CARD)) {
913 mask = MS_POWER_MASK;
916 mask = SD_POWER_MASK;
920 RTSX_WRITE_REG(chip, CARD_PWR_CTL, mask, val);
922 return STATUS_SUCCESS;
925 int card_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip,
926 u32 sec_addr, u16 sec_cnt)
929 unsigned int lun = SCSI_LUN(srb);
932 if (chip->rw_card[lun] == NULL)
933 TRACE_RET(chip, STATUS_FAIL);
935 for (i = 0; i < 3; i++) {
936 chip->rw_need_retry = 0;
938 retval = chip->rw_card[lun](srb, chip, sec_addr, sec_cnt);
939 if (retval != STATUS_SUCCESS) {
940 if (rtsx_check_chip_exist(chip) != STATUS_SUCCESS) {
941 rtsx_release_chip(chip);
942 TRACE_RET(chip, STATUS_FAIL);
944 if (detect_card_cd(chip, chip->cur_card) !=
946 TRACE_RET(chip, STATUS_FAIL);
948 if (!chip->rw_need_retry) {
949 RTSX_DEBUGP("RW fail, but no need to retry\n");
953 chip->rw_need_retry = 0;
957 RTSX_DEBUGP("Retry RW, (i = %d)\n", i);
963 int card_share_mode(struct rtsx_chip *chip, int card)
967 if (CHECK_PID(chip, 0x5208)) {
968 mask = CARD_SHARE_MASK;
970 value = CARD_SHARE_48_SD;
971 else if (card == MS_CARD)
972 value = CARD_SHARE_48_MS;
973 else if (card == XD_CARD)
974 value = CARD_SHARE_48_XD;
976 TRACE_RET(chip, STATUS_FAIL);
978 } else if (CHECK_PID(chip, 0x5288)) {
981 value = CARD_SHARE_BAROSSA_SD;
982 else if (card == MS_CARD)
983 value = CARD_SHARE_BAROSSA_MS;
984 else if (card == XD_CARD)
985 value = CARD_SHARE_BAROSSA_XD;
987 TRACE_RET(chip, STATUS_FAIL);
990 TRACE_RET(chip, STATUS_FAIL);
993 RTSX_WRITE_REG(chip, CARD_SHARE_MODE, mask, value);
995 return STATUS_SUCCESS;
999 int select_card(struct rtsx_chip *chip, int card)
1003 if (chip->cur_card != card) {
1006 if (card == SD_CARD)
1008 else if (card == MS_CARD)
1010 else if (card == XD_CARD)
1012 else if (card == SPI_CARD)
1015 TRACE_RET(chip, STATUS_FAIL);
1017 RTSX_WRITE_REG(chip, CARD_SELECT, 0x07, mod);
1018 chip->cur_card = card;
1020 retval = card_share_mode(chip, card);
1021 if (retval != STATUS_SUCCESS)
1022 TRACE_RET(chip, STATUS_FAIL);
1025 return STATUS_SUCCESS;
1028 void toggle_gpio(struct rtsx_chip *chip, u8 gpio)
1032 rtsx_read_register(chip, CARD_GPIO, &temp_reg);
1033 temp_reg ^= (0x01 << gpio);
1034 rtsx_write_register(chip, CARD_GPIO, 0xFF, temp_reg);
1037 void turn_on_led(struct rtsx_chip *chip, u8 gpio)
1039 if (CHECK_PID(chip, 0x5288))
1040 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1043 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1046 void turn_off_led(struct rtsx_chip *chip, u8 gpio)
1048 if (CHECK_PID(chip, 0x5288))
1049 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1051 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1055 int detect_card_cd(struct rtsx_chip *chip, int card)
1057 u32 card_cd, status;
1059 if (card == SD_CARD) {
1061 } else if (card == MS_CARD) {
1063 } else if (card == XD_CARD) {
1066 RTSX_DEBUGP("Wrong card type: 0x%x\n", card);
1067 TRACE_RET(chip, STATUS_FAIL);
1070 status = rtsx_readl(chip, RTSX_BIPR);
1071 if (!(status & card_cd))
1072 TRACE_RET(chip, STATUS_FAIL);
1074 return STATUS_SUCCESS;
1077 int check_card_exist(struct rtsx_chip *chip, unsigned int lun)
1079 if (chip->card_exist & chip->lun2card[lun])
1085 int check_card_ready(struct rtsx_chip *chip, unsigned int lun)
1087 if (chip->card_ready & chip->lun2card[lun])
1093 int check_card_wp(struct rtsx_chip *chip, unsigned int lun)
1095 if (chip->card_wp & chip->lun2card[lun])
1101 int check_card_fail(struct rtsx_chip *chip, unsigned int lun)
1103 if (chip->card_fail & chip->lun2card[lun])
1109 int check_card_ejected(struct rtsx_chip *chip, unsigned int lun)
1111 if (chip->card_ejected & chip->lun2card[lun])
1117 u8 get_lun_card(struct rtsx_chip *chip, unsigned int lun)
1119 if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD)
1121 else if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD)
1123 else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD)
1129 void eject_card(struct rtsx_chip *chip, unsigned int lun)
1131 do_remaining_work(chip);
1133 if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD) {
1134 release_sd_card(chip);
1135 chip->card_ejected |= SD_CARD;
1136 chip->card_ready &= ~SD_CARD;
1137 chip->capacity[lun] = 0;
1138 } else if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD) {
1139 release_xd_card(chip);
1140 chip->card_ejected |= XD_CARD;
1141 chip->card_ready &= ~XD_CARD;
1142 chip->capacity[lun] = 0;
1143 } else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD) {
1144 release_ms_card(chip);
1145 chip->card_ejected |= MS_CARD;
1146 chip->card_ready &= ~MS_CARD;
1147 chip->capacity[lun] = 0;