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/>.
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 dev_dbg(rtsx_dev(chip), "reg 0xFF34: 0x%x, reg 0xFF38: 0x%x\n",
107 if ((reg1 & 0xC0) && (reg2 & 0xC0)) {
109 rtsx_write_register(chip, SDIO_CTRL, 0xFF,
110 SDIO_BUS_CTRL | SDIO_CD_CTRL);
111 rtsx_write_register(chip, PWR_GATE_CTRL,
112 LDO3318_PWR_MASK, LDO_ON);
116 #ifdef SUPPORT_SDIO_ASPM
117 void dynamic_configure_sdio_aspm(struct rtsx_chip *chip)
122 for (i = 0; i < 12; i++)
123 rtsx_read_register(chip, 0xFF08 + i, &buf[i]);
124 rtsx_read_register(chip, 0xFF25, ®);
125 if ((memcmp(buf, chip->sdio_raw_data, 12) != 0) || (reg & 0x03)) {
126 chip->sdio_counter = 0;
129 if (!chip->sdio_idle) {
130 chip->sdio_counter++;
131 if (chip->sdio_counter >= SDIO_IDLE_COUNT) {
132 chip->sdio_counter = 0;
137 memcpy(chip->sdio_raw_data, buf, 12);
139 if (chip->sdio_idle) {
140 if (!chip->sdio_aspm) {
141 dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
142 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC,
143 0x30 | (chip->aspm_level[1] << 2));
147 if (chip->sdio_aspm) {
148 dev_dbg(rtsx_dev(chip), "SDIO exit ASPM!\n");
149 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30);
156 void do_reset_sd_card(struct rtsx_chip *chip)
160 dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
161 chip->sd_reset_counter, chip->card2lun[SD_CARD]);
163 if (chip->card2lun[SD_CARD] >= MAX_ALLOWED_LUN_CNT) {
164 clear_bit(SD_NR, &(chip->need_reset));
165 chip->sd_reset_counter = 0;
166 chip->sd_show_cnt = 0;
170 chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
172 rtsx_set_stat(chip, RTSX_STAT_RUN);
173 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
175 retval = reset_sd_card(chip);
176 if (chip->need_release & SD_CARD)
178 if (retval == STATUS_SUCCESS) {
179 clear_bit(SD_NR, &(chip->need_reset));
180 chip->sd_reset_counter = 0;
181 chip->sd_show_cnt = 0;
182 chip->card_ready |= SD_CARD;
183 chip->card_fail &= ~SD_CARD;
184 chip->rw_card[chip->card2lun[SD_CARD]] = sd_rw;
186 if (chip->sd_io || (chip->sd_reset_counter >= MAX_RESET_CNT)) {
187 clear_bit(SD_NR, &(chip->need_reset));
188 chip->sd_reset_counter = 0;
189 chip->sd_show_cnt = 0;
191 chip->sd_reset_counter++;
193 chip->card_ready &= ~SD_CARD;
194 chip->card_fail |= SD_CARD;
195 chip->capacity[chip->card2lun[SD_CARD]] = 0;
196 chip->rw_card[chip->card2lun[SD_CARD]] = NULL;
198 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
199 if (!chip->ft2_fast_mode)
200 card_power_off(chip, SD_CARD);
203 try_to_switch_sdio_ctrl(chip);
205 disable_card_clock(chip, SD_CARD);
210 void do_reset_xd_card(struct rtsx_chip *chip)
214 dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
215 chip->xd_reset_counter, chip->card2lun[XD_CARD]);
217 if (chip->card2lun[XD_CARD] >= MAX_ALLOWED_LUN_CNT) {
218 clear_bit(XD_NR, &(chip->need_reset));
219 chip->xd_reset_counter = 0;
220 chip->xd_show_cnt = 0;
224 chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
226 rtsx_set_stat(chip, RTSX_STAT_RUN);
227 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
229 retval = reset_xd_card(chip);
230 if (chip->need_release & XD_CARD)
232 if (retval == STATUS_SUCCESS) {
233 clear_bit(XD_NR, &(chip->need_reset));
234 chip->xd_reset_counter = 0;
235 chip->card_ready |= XD_CARD;
236 chip->card_fail &= ~XD_CARD;
237 chip->rw_card[chip->card2lun[XD_CARD]] = xd_rw;
239 if (chip->xd_reset_counter >= MAX_RESET_CNT) {
240 clear_bit(XD_NR, &(chip->need_reset));
241 chip->xd_reset_counter = 0;
242 chip->xd_show_cnt = 0;
244 chip->xd_reset_counter++;
246 chip->card_ready &= ~XD_CARD;
247 chip->card_fail |= XD_CARD;
248 chip->capacity[chip->card2lun[XD_CARD]] = 0;
249 chip->rw_card[chip->card2lun[XD_CARD]] = NULL;
251 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
252 if (!chip->ft2_fast_mode)
253 card_power_off(chip, XD_CARD);
254 disable_card_clock(chip, XD_CARD);
258 void do_reset_ms_card(struct rtsx_chip *chip)
262 dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
263 chip->ms_reset_counter, chip->card2lun[MS_CARD]);
265 if (chip->card2lun[MS_CARD] >= MAX_ALLOWED_LUN_CNT) {
266 clear_bit(MS_NR, &(chip->need_reset));
267 chip->ms_reset_counter = 0;
268 chip->ms_show_cnt = 0;
272 chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
274 rtsx_set_stat(chip, RTSX_STAT_RUN);
275 rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
277 retval = reset_ms_card(chip);
278 if (chip->need_release & MS_CARD)
280 if (retval == STATUS_SUCCESS) {
281 clear_bit(MS_NR, &(chip->need_reset));
282 chip->ms_reset_counter = 0;
283 chip->card_ready |= MS_CARD;
284 chip->card_fail &= ~MS_CARD;
285 chip->rw_card[chip->card2lun[MS_CARD]] = ms_rw;
287 if (chip->ms_reset_counter >= MAX_RESET_CNT) {
288 clear_bit(MS_NR, &(chip->need_reset));
289 chip->ms_reset_counter = 0;
290 chip->ms_show_cnt = 0;
292 chip->ms_reset_counter++;
294 chip->card_ready &= ~MS_CARD;
295 chip->card_fail |= MS_CARD;
296 chip->capacity[chip->card2lun[MS_CARD]] = 0;
297 chip->rw_card[chip->card2lun[MS_CARD]] = NULL;
299 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
300 if (!chip->ft2_fast_mode)
301 card_power_off(chip, MS_CARD);
302 disable_card_clock(chip, MS_CARD);
306 static void release_sdio(struct rtsx_chip *chip)
309 rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
310 SD_STOP | SD_CLR_ERR);
312 if (chip->chip_insert_with_sdio) {
313 chip->chip_insert_with_sdio = 0;
315 if (CHECK_PID(chip, 0x5288))
316 rtsx_write_register(chip, 0xFE5A, 0x08, 0x00);
318 rtsx_write_register(chip, 0xFE70, 0x80, 0x00);
321 rtsx_write_register(chip, SDIO_CTRL, SDIO_CD_CTRL, 0);
326 void rtsx_power_off_card(struct rtsx_chip *chip)
328 if ((chip->card_ready & SD_CARD) || chip->sd_io) {
329 sd_cleanup_work(chip);
330 sd_power_off_card3v3(chip);
333 if (chip->card_ready & XD_CARD) {
334 xd_cleanup_work(chip);
335 xd_power_off_card3v3(chip);
338 if (chip->card_ready & MS_CARD) {
339 ms_cleanup_work(chip);
340 ms_power_off_card3v3(chip);
344 void rtsx_release_cards(struct rtsx_chip *chip)
346 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
348 if ((chip->card_ready & SD_CARD) || chip->sd_io) {
349 if (chip->int_reg & SD_EXIST)
350 sd_cleanup_work(chip);
351 release_sd_card(chip);
354 if (chip->card_ready & XD_CARD) {
355 if (chip->int_reg & XD_EXIST)
356 xd_cleanup_work(chip);
357 release_xd_card(chip);
360 if (chip->card_ready & MS_CARD) {
361 if (chip->int_reg & MS_EXIST)
362 ms_cleanup_work(chip);
363 release_ms_card(chip);
367 void rtsx_reset_cards(struct rtsx_chip *chip)
369 if (!chip->need_reset)
372 rtsx_set_stat(chip, RTSX_STAT_RUN);
374 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
376 rtsx_disable_aspm(chip);
378 if ((chip->need_reset & SD_CARD) && chip->chip_insert_with_sdio)
379 clear_bit(SD_NR, &(chip->need_reset));
381 if (chip->need_reset & XD_CARD) {
382 chip->card_exist |= XD_CARD;
384 if (chip->xd_show_cnt >= MAX_SHOW_CNT)
385 do_reset_xd_card(chip);
389 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
390 if (chip->card_exist & XD_CARD) {
391 clear_bit(SD_NR, &(chip->need_reset));
392 clear_bit(MS_NR, &(chip->need_reset));
395 if (chip->need_reset & SD_CARD) {
396 chip->card_exist |= SD_CARD;
398 if (chip->sd_show_cnt >= MAX_SHOW_CNT) {
399 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
400 do_reset_sd_card(chip);
405 if (chip->need_reset & MS_CARD) {
406 chip->card_exist |= MS_CARD;
408 if (chip->ms_show_cnt >= MAX_SHOW_CNT)
409 do_reset_ms_card(chip);
415 void rtsx_reinit_cards(struct rtsx_chip *chip, int reset_chip)
417 rtsx_set_stat(chip, RTSX_STAT_RUN);
419 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
422 rtsx_reset_chip(chip);
424 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
426 if ((chip->int_reg & SD_EXIST) && (chip->need_reinit & SD_CARD)) {
428 release_sd_card(chip);
432 chip->card_exist |= SD_CARD;
433 do_reset_sd_card(chip);
436 if ((chip->int_reg & XD_EXIST) && (chip->need_reinit & XD_CARD)) {
437 release_xd_card(chip);
441 chip->card_exist |= XD_CARD;
442 do_reset_xd_card(chip);
445 if ((chip->int_reg & MS_EXIST) && (chip->need_reinit & MS_CARD)) {
446 release_ms_card(chip);
450 chip->card_exist |= MS_CARD;
451 do_reset_ms_card(chip);
454 chip->need_reinit = 0;
457 #ifdef DISABLE_CARD_INT
458 void card_cd_debounce(struct rtsx_chip *chip, unsigned long *need_reset,
459 unsigned long *need_release)
461 u8 release_map = 0, reset_map = 0;
463 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
465 if (chip->card_exist) {
466 if (chip->card_exist & XD_CARD) {
467 if (!(chip->int_reg & XD_EXIST))
468 release_map |= XD_CARD;
469 } else if (chip->card_exist & SD_CARD) {
470 if (!(chip->int_reg & SD_EXIST))
471 release_map |= SD_CARD;
472 } else if (chip->card_exist & MS_CARD) {
473 if (!(chip->int_reg & MS_EXIST))
474 release_map |= MS_CARD;
477 if (chip->int_reg & XD_EXIST)
478 reset_map |= XD_CARD;
479 else if (chip->int_reg & SD_EXIST)
480 reset_map |= SD_CARD;
481 else if (chip->int_reg & MS_EXIST)
482 reset_map |= MS_CARD;
486 int xd_cnt = 0, sd_cnt = 0, ms_cnt = 0;
489 for (i = 0; i < (DEBOUNCE_CNT); i++) {
490 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
492 if (chip->int_reg & XD_EXIST)
497 if (chip->int_reg & SD_EXIST)
502 if (chip->int_reg & MS_EXIST)
511 if (!(chip->card_exist & XD_CARD) &&
512 (xd_cnt > (DEBOUNCE_CNT-1)))
513 reset_map |= XD_CARD;
514 if (!(chip->card_exist & SD_CARD) &&
515 (sd_cnt > (DEBOUNCE_CNT-1)))
516 reset_map |= SD_CARD;
517 if (!(chip->card_exist & MS_CARD) &&
518 (ms_cnt > (DEBOUNCE_CNT-1)))
519 reset_map |= MS_CARD;
522 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN))
523 rtsx_write_register(chip, HOST_SLEEP_STATE, 0xC0, 0x00);
526 *need_reset = reset_map;
528 *need_release = release_map;
532 void rtsx_init_cards(struct rtsx_chip *chip)
534 if (RTSX_TST_DELINK(chip) && (rtsx_get_stat(chip) != RTSX_STAT_SS)) {
535 dev_dbg(rtsx_dev(chip), "Reset chip in polling thread!\n");
536 rtsx_reset_chip(chip);
537 RTSX_CLR_DELINK(chip);
540 #ifdef DISABLE_CARD_INT
541 card_cd_debounce(chip, &(chip->need_reset), &(chip->need_release));
544 if (chip->need_release) {
545 if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
546 if (chip->int_reg & XD_EXIST) {
547 clear_bit(SD_NR, &(chip->need_release));
548 clear_bit(MS_NR, &(chip->need_release));
552 if (!(chip->card_exist & SD_CARD) && !chip->sd_io)
553 clear_bit(SD_NR, &(chip->need_release));
554 if (!(chip->card_exist & XD_CARD))
555 clear_bit(XD_NR, &(chip->need_release));
556 if (!(chip->card_exist & MS_CARD))
557 clear_bit(MS_NR, &(chip->need_release));
559 dev_dbg(rtsx_dev(chip), "chip->need_release = 0x%x\n",
560 (unsigned int)(chip->need_release));
563 if (chip->need_release) {
564 if (chip->ocp_stat & (CARD_OC_NOW | CARD_OC_EVER))
565 rtsx_write_register(chip, OCPCLR,
566 CARD_OC_INT_CLR | CARD_OC_CLR,
567 CARD_OC_INT_CLR | CARD_OC_CLR);
571 if (chip->need_release) {
572 rtsx_set_stat(chip, RTSX_STAT_RUN);
573 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
576 if (chip->need_release & SD_CARD) {
577 clear_bit(SD_NR, &(chip->need_release));
578 chip->card_exist &= ~SD_CARD;
579 chip->card_ejected &= ~SD_CARD;
580 chip->card_fail &= ~SD_CARD;
581 CLR_BIT(chip->lun_mc, chip->card2lun[SD_CARD]);
582 chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
583 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
586 release_sd_card(chip);
589 if (chip->need_release & XD_CARD) {
590 clear_bit(XD_NR, &(chip->need_release));
591 chip->card_exist &= ~XD_CARD;
592 chip->card_ejected &= ~XD_CARD;
593 chip->card_fail &= ~XD_CARD;
594 CLR_BIT(chip->lun_mc, chip->card2lun[XD_CARD]);
595 chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
597 release_xd_card(chip);
599 if (CHECK_PID(chip, 0x5288) &&
600 CHECK_BARO_PKG(chip, QFN))
601 rtsx_write_register(chip, HOST_SLEEP_STATE,
605 if (chip->need_release & MS_CARD) {
606 clear_bit(MS_NR, &(chip->need_release));
607 chip->card_exist &= ~MS_CARD;
608 chip->card_ejected &= ~MS_CARD;
609 chip->card_fail &= ~MS_CARD;
610 CLR_BIT(chip->lun_mc, chip->card2lun[MS_CARD]);
611 chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
613 release_ms_card(chip);
616 dev_dbg(rtsx_dev(chip), "chip->card_exist = 0x%x\n",
619 if (!chip->card_exist)
620 turn_off_led(chip, LED_GPIO);
623 if (chip->need_reset) {
624 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x\n",
625 (unsigned int)(chip->need_reset));
627 rtsx_reset_cards(chip);
630 if (chip->need_reinit) {
631 dev_dbg(rtsx_dev(chip), "chip->need_reinit = 0x%x\n",
632 (unsigned int)(chip->need_reinit));
634 rtsx_reinit_cards(chip, 0);
638 static inline u8 double_depth(u8 depth)
640 return (depth > 1) ? (depth - 1) : depth;
643 int switch_ssc_clock(struct rtsx_chip *chip, int clk)
646 u8 N = (u8)(clk - 2), min_N, max_N;
647 u8 mcu_cnt, div, max_div, ssc_depth, ssc_depth_mask;
648 int sd_vpclk_phase_reset = 0;
650 if (chip->cur_clk == clk)
651 return STATUS_SUCCESS;
657 dev_dbg(rtsx_dev(chip), "Switch SSC clock to %dMHz (cur_clk = %d)\n",
660 if ((clk <= 2) || (N > max_N))
661 TRACE_RET(chip, STATUS_FAIL);
663 mcu_cnt = (u8)(125/clk + 3);
668 while ((N < min_N) && (div < max_div)) {
672 dev_dbg(rtsx_dev(chip), "N = %d, div = %d\n", N, div);
681 ssc_depth_mask = 0x03;
683 dev_dbg(rtsx_dev(chip), "ssc_depth = %d\n", ssc_depth);
686 rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
687 rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0xFF, (div << 4) | mcu_cnt);
688 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
689 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL2, ssc_depth_mask, ssc_depth);
690 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, N);
691 rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, SSC_RSTB);
692 if (sd_vpclk_phase_reset) {
693 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
695 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
696 PHASE_NOT_RESET, PHASE_NOT_RESET);
699 retval = rtsx_send_cmd(chip, 0, WAIT_TIME);
701 TRACE_RET(chip, STATUS_ERROR);
704 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, 0);
708 return STATUS_SUCCESS;
711 int switch_normal_clock(struct rtsx_chip *chip, int clk)
713 u8 sel, div, mcu_cnt;
714 int sd_vpclk_phase_reset = 0;
716 if (chip->cur_clk == clk)
717 return STATUS_SUCCESS;
721 dev_dbg(rtsx_dev(chip), "Switch clock to 20MHz\n");
728 dev_dbg(rtsx_dev(chip), "Switch clock to 30MHz\n");
735 dev_dbg(rtsx_dev(chip), "Switch clock to 40MHz\n");
742 dev_dbg(rtsx_dev(chip), "Switch clock to 50MHz\n");
749 dev_dbg(rtsx_dev(chip), "Switch clock to 60MHz\n");
756 dev_dbg(rtsx_dev(chip), "Switch clock to 80MHz\n");
763 dev_dbg(rtsx_dev(chip), "Switch clock to 100MHz\n");
770 dev_dbg(rtsx_dev(chip), "Switch clock to 120MHz\n");
777 dev_dbg(rtsx_dev(chip), "Switch clock to 150MHz\n");
784 dev_dbg(rtsx_dev(chip), "Switch clock to 200MHz\n");
791 dev_dbg(rtsx_dev(chip), "Try to switch to an illegal clock (%d)\n",
793 TRACE_RET(chip, STATUS_FAIL);
796 RTSX_WRITE_REG(chip, CLK_CTL, 0xFF, CLK_LOW_FREQ);
797 if (sd_vpclk_phase_reset) {
798 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
799 RTSX_WRITE_REG(chip, SD_VPCLK1_CTL, PHASE_NOT_RESET, 0);
801 RTSX_WRITE_REG(chip, CLK_DIV, 0xFF, (div << 4) | mcu_cnt);
802 RTSX_WRITE_REG(chip, CLK_SEL, 0xFF, sel);
804 if (sd_vpclk_phase_reset) {
806 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
808 RTSX_WRITE_REG(chip, SD_VPCLK1_CTL, PHASE_NOT_RESET,
812 RTSX_WRITE_REG(chip, CLK_CTL, 0xFF, 0);
816 return STATUS_SUCCESS;
819 void trans_dma_enable(enum dma_data_direction dir, struct rtsx_chip *chip,
820 u32 byte_cnt, u8 pack_size)
822 if (pack_size > DMA_1024)
825 rtsx_add_cmd(chip, WRITE_REG_CMD, IRQSTAT0, DMA_DONE_INT, DMA_DONE_INT);
827 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC3, 0xFF, (u8)(byte_cnt >> 24));
828 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC2, 0xFF, (u8)(byte_cnt >> 16));
829 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC1, 0xFF, (u8)(byte_cnt >> 8));
830 rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC0, 0xFF, (u8)byte_cnt);
832 if (dir == DMA_FROM_DEVICE) {
833 rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
834 0x03 | DMA_PACK_SIZE_MASK,
835 DMA_DIR_FROM_CARD | DMA_EN | pack_size);
837 rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
838 0x03 | DMA_PACK_SIZE_MASK,
839 DMA_DIR_TO_CARD | DMA_EN | pack_size);
842 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
845 int enable_card_clock(struct rtsx_chip *chip, u8 card)
856 RTSX_WRITE_REG(chip, CARD_CLK_EN, clk_en, clk_en);
858 return STATUS_SUCCESS;
861 int disable_card_clock(struct rtsx_chip *chip, u8 card)
872 RTSX_WRITE_REG(chip, CARD_CLK_EN, clk_en, 0);
874 return STATUS_SUCCESS;
877 int card_power_on(struct rtsx_chip *chip, u8 card)
882 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && (card == MS_CARD)) {
883 mask = MS_POWER_MASK;
884 val1 = MS_PARTIAL_POWER_ON;
887 mask = SD_POWER_MASK;
888 val1 = SD_PARTIAL_POWER_ON;
893 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val1);
895 retval = rtsx_send_cmd(chip, 0, 100);
896 if (retval != STATUS_SUCCESS)
897 TRACE_RET(chip, STATUS_FAIL);
899 udelay(chip->pmos_pwr_on_interval);
902 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val2);
904 retval = rtsx_send_cmd(chip, 0, 100);
905 if (retval != STATUS_SUCCESS)
906 TRACE_RET(chip, STATUS_FAIL);
908 return STATUS_SUCCESS;
911 int card_power_off(struct rtsx_chip *chip, u8 card)
915 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && (card == MS_CARD)) {
916 mask = MS_POWER_MASK;
919 mask = SD_POWER_MASK;
923 RTSX_WRITE_REG(chip, CARD_PWR_CTL, mask, val);
925 return STATUS_SUCCESS;
928 int card_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip,
929 u32 sec_addr, u16 sec_cnt)
932 unsigned int lun = SCSI_LUN(srb);
935 if (chip->rw_card[lun] == NULL)
936 TRACE_RET(chip, STATUS_FAIL);
938 for (i = 0; i < 3; i++) {
939 chip->rw_need_retry = 0;
941 retval = chip->rw_card[lun](srb, chip, sec_addr, sec_cnt);
942 if (retval != STATUS_SUCCESS) {
943 if (rtsx_check_chip_exist(chip) != STATUS_SUCCESS) {
944 rtsx_release_chip(chip);
945 TRACE_RET(chip, STATUS_FAIL);
947 if (detect_card_cd(chip, chip->cur_card) !=
949 TRACE_RET(chip, STATUS_FAIL);
951 if (!chip->rw_need_retry) {
952 dev_dbg(rtsx_dev(chip), "RW fail, but no need to retry\n");
956 chip->rw_need_retry = 0;
960 dev_dbg(rtsx_dev(chip), "Retry RW, (i = %d)\n", i);
966 int card_share_mode(struct rtsx_chip *chip, int card)
970 if (CHECK_PID(chip, 0x5208)) {
971 mask = CARD_SHARE_MASK;
973 value = CARD_SHARE_48_SD;
974 else if (card == MS_CARD)
975 value = CARD_SHARE_48_MS;
976 else if (card == XD_CARD)
977 value = CARD_SHARE_48_XD;
979 TRACE_RET(chip, STATUS_FAIL);
981 } else if (CHECK_PID(chip, 0x5288)) {
984 value = CARD_SHARE_BAROSSA_SD;
985 else if (card == MS_CARD)
986 value = CARD_SHARE_BAROSSA_MS;
987 else if (card == XD_CARD)
988 value = CARD_SHARE_BAROSSA_XD;
990 TRACE_RET(chip, STATUS_FAIL);
993 TRACE_RET(chip, STATUS_FAIL);
996 RTSX_WRITE_REG(chip, CARD_SHARE_MODE, mask, value);
998 return STATUS_SUCCESS;
1002 int select_card(struct rtsx_chip *chip, int card)
1006 if (chip->cur_card != card) {
1009 if (card == SD_CARD)
1011 else if (card == MS_CARD)
1013 else if (card == XD_CARD)
1015 else if (card == SPI_CARD)
1018 TRACE_RET(chip, STATUS_FAIL);
1020 RTSX_WRITE_REG(chip, CARD_SELECT, 0x07, mod);
1021 chip->cur_card = card;
1023 retval = card_share_mode(chip, card);
1024 if (retval != STATUS_SUCCESS)
1025 TRACE_RET(chip, STATUS_FAIL);
1028 return STATUS_SUCCESS;
1031 void toggle_gpio(struct rtsx_chip *chip, u8 gpio)
1035 rtsx_read_register(chip, CARD_GPIO, &temp_reg);
1036 temp_reg ^= (0x01 << gpio);
1037 rtsx_write_register(chip, CARD_GPIO, 0xFF, temp_reg);
1040 void turn_on_led(struct rtsx_chip *chip, u8 gpio)
1042 if (CHECK_PID(chip, 0x5288))
1043 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1046 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1049 void turn_off_led(struct rtsx_chip *chip, u8 gpio)
1051 if (CHECK_PID(chip, 0x5288))
1052 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1054 rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1058 int detect_card_cd(struct rtsx_chip *chip, int card)
1060 u32 card_cd, status;
1062 if (card == SD_CARD) {
1064 } else if (card == MS_CARD) {
1066 } else if (card == XD_CARD) {
1069 dev_dbg(rtsx_dev(chip), "Wrong card type: 0x%x\n", card);
1070 TRACE_RET(chip, STATUS_FAIL);
1073 status = rtsx_readl(chip, RTSX_BIPR);
1074 if (!(status & card_cd))
1075 TRACE_RET(chip, STATUS_FAIL);
1077 return STATUS_SUCCESS;
1080 int check_card_exist(struct rtsx_chip *chip, unsigned int lun)
1082 if (chip->card_exist & chip->lun2card[lun])
1088 int check_card_ready(struct rtsx_chip *chip, unsigned int lun)
1090 if (chip->card_ready & chip->lun2card[lun])
1096 int check_card_wp(struct rtsx_chip *chip, unsigned int lun)
1098 if (chip->card_wp & chip->lun2card[lun])
1104 int check_card_fail(struct rtsx_chip *chip, unsigned int lun)
1106 if (chip->card_fail & chip->lun2card[lun])
1112 int check_card_ejected(struct rtsx_chip *chip, unsigned int lun)
1114 if (chip->card_ejected & chip->lun2card[lun])
1120 u8 get_lun_card(struct rtsx_chip *chip, unsigned int lun)
1122 if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD)
1124 else if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD)
1126 else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD)
1132 void eject_card(struct rtsx_chip *chip, unsigned int lun)
1134 do_remaining_work(chip);
1136 if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD) {
1137 release_sd_card(chip);
1138 chip->card_ejected |= SD_CARD;
1139 chip->card_ready &= ~SD_CARD;
1140 chip->capacity[lun] = 0;
1141 } else if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD) {
1142 release_xd_card(chip);
1143 chip->card_ejected |= XD_CARD;
1144 chip->card_ready &= ~XD_CARD;
1145 chip->capacity[lun] = 0;
1146 } else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD) {
1147 release_ms_card(chip);
1148 chip->card_ejected |= MS_CARD;
1149 chip->card_ready &= ~MS_CARD;
1150 chip->capacity[lun] = 0;