1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Driver for Realtek PCI-Express card reader
4 *
5 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
6 *
7 * Author:
8 *   Wei WANG (wei_wang@realsil.com.cn)
9 *   Micky Ching (micky_ching@realsil.com.cn)
10 */
11
12#include <linux/blkdev.h>
13#include <linux/kthread.h>
14#include <linux/sched.h>
15#include <linux/workqueue.h>
16#include <linux/kernel.h>
17
18#include "rtsx.h"
19#include "sd.h"
20#include "xd.h"
21#include "ms.h"
22
23void do_remaining_work(struct rtsx_chip *chip)
24{
25	struct sd_info *sd_card = &chip->sd_card;
26#ifdef XD_DELAY_WRITE
27	struct xd_info *xd_card = &chip->xd_card;
28#endif
29	struct ms_info *ms_card = &chip->ms_card;
30
31	if (chip->card_ready & SD_CARD) {
32		if (sd_card->seq_mode) {
33			rtsx_set_stat(chip, RTSX_STAT_RUN);
34			sd_card->cleanup_counter++;
35		} else {
36			sd_card->cleanup_counter = 0;
37		}
38	}
39
40#ifdef XD_DELAY_WRITE
41	if (chip->card_ready & XD_CARD) {
42		if (xd_card->delay_write.delay_write_flag) {
43			rtsx_set_stat(chip, RTSX_STAT_RUN);
44			xd_card->cleanup_counter++;
45		} else {
46			xd_card->cleanup_counter = 0;
47		}
48	}
49#endif
50
51	if (chip->card_ready & MS_CARD) {
52		if (CHK_MSPRO(ms_card)) {
53			if (ms_card->seq_mode) {
54				rtsx_set_stat(chip, RTSX_STAT_RUN);
55				ms_card->cleanup_counter++;
56			} else {
57				ms_card->cleanup_counter = 0;
58			}
59		} else {
60#ifdef MS_DELAY_WRITE
61			if (ms_card->delay_write.delay_write_flag) {
62				rtsx_set_stat(chip, RTSX_STAT_RUN);
63				ms_card->cleanup_counter++;
64			} else {
65				ms_card->cleanup_counter = 0;
66			}
67#endif
68		}
69	}
70
71	if (sd_card->cleanup_counter > POLLING_WAIT_CNT)
72		sd_cleanup_work(chip);
73
74	if (xd_card->cleanup_counter > POLLING_WAIT_CNT)
75		xd_cleanup_work(chip);
76
77	if (ms_card->cleanup_counter > POLLING_WAIT_CNT)
78		ms_cleanup_work(chip);
79}
80
81void try_to_switch_sdio_ctrl(struct rtsx_chip *chip)
82{
83	u8 reg1 = 0, reg2 = 0;
84
85	rtsx_read_register(chip, 0xFF34, &reg1);
86	rtsx_read_register(chip, 0xFF38, &reg2);
87	dev_dbg(rtsx_dev(chip), "reg 0xFF34: 0x%x, reg 0xFF38: 0x%x\n",
88		reg1, reg2);
89	if ((reg1 & 0xC0) && (reg2 & 0xC0)) {
90		chip->sd_int = 1;
91		rtsx_write_register(chip, SDIO_CTRL, 0xFF,
92				    SDIO_BUS_CTRL | SDIO_CD_CTRL);
93		rtsx_write_register(chip, PWR_GATE_CTRL,
94				    LDO3318_PWR_MASK, LDO_ON);
95	}
96}
97
98#ifdef SUPPORT_SDIO_ASPM
99void dynamic_configure_sdio_aspm(struct rtsx_chip *chip)
100{
101	u8 buf[12], reg;
102	int i;
103
104	for (i = 0; i < 12; i++)
105		rtsx_read_register(chip, 0xFF08 + i, &buf[i]);
106	rtsx_read_register(chip, 0xFF25, &reg);
107	if ((memcmp(buf, chip->sdio_raw_data, 12) != 0) || (reg & 0x03)) {
108		chip->sdio_counter = 0;
109		chip->sdio_idle = 0;
110	} else {
111		if (!chip->sdio_idle) {
112			chip->sdio_counter++;
113			if (chip->sdio_counter >= SDIO_IDLE_COUNT) {
114				chip->sdio_counter = 0;
115				chip->sdio_idle = 1;
116			}
117		}
118	}
119	memcpy(chip->sdio_raw_data, buf, 12);
120
121	if (chip->sdio_idle) {
122		if (!chip->sdio_aspm) {
123			dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
124			rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC,
125					    0x30 | (chip->aspm_level[1] << 2));
126			chip->sdio_aspm = 1;
127		}
128	} else {
129		if (chip->sdio_aspm) {
130			dev_dbg(rtsx_dev(chip), "SDIO exit ASPM!\n");
131			rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, 0x30);
132			chip->sdio_aspm = 0;
133		}
134	}
135}
136#endif
137
138void do_reset_sd_card(struct rtsx_chip *chip)
139{
140	int retval;
141
142	dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
143		chip->sd_reset_counter, chip->card2lun[SD_CARD]);
144
145	if (chip->card2lun[SD_CARD] >= MAX_ALLOWED_LUN_CNT) {
146		clear_bit(SD_NR, &chip->need_reset);
147		chip->sd_reset_counter = 0;
148		chip->sd_show_cnt = 0;
149		return;
150	}
151
152	chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
153
154	rtsx_set_stat(chip, RTSX_STAT_RUN);
155	rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
156
157	retval = reset_sd_card(chip);
158	if (chip->need_release & SD_CARD)
159		return;
160	if (retval == STATUS_SUCCESS) {
161		clear_bit(SD_NR, &chip->need_reset);
162		chip->sd_reset_counter = 0;
163		chip->sd_show_cnt = 0;
164		chip->card_ready |= SD_CARD;
165		chip->card_fail &= ~SD_CARD;
166		chip->rw_card[chip->card2lun[SD_CARD]] = sd_rw;
167	} else {
168		if (chip->sd_io || chip->sd_reset_counter >= MAX_RESET_CNT) {
169			clear_bit(SD_NR, &chip->need_reset);
170			chip->sd_reset_counter = 0;
171			chip->sd_show_cnt = 0;
172		} else {
173			chip->sd_reset_counter++;
174		}
175		chip->card_ready &= ~SD_CARD;
176		chip->card_fail |= SD_CARD;
177		chip->capacity[chip->card2lun[SD_CARD]] = 0;
178		chip->rw_card[chip->card2lun[SD_CARD]] = NULL;
179
180		rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
181		if (!chip->ft2_fast_mode)
182			card_power_off(chip, SD_CARD);
183		if (chip->sd_io) {
184			chip->sd_int = 0;
185			try_to_switch_sdio_ctrl(chip);
186		} else {
187			disable_card_clock(chip, SD_CARD);
188		}
189	}
190}
191
192void do_reset_xd_card(struct rtsx_chip *chip)
193{
194	int retval;
195
196	dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
197		chip->xd_reset_counter, chip->card2lun[XD_CARD]);
198
199	if (chip->card2lun[XD_CARD] >= MAX_ALLOWED_LUN_CNT) {
200		clear_bit(XD_NR, &chip->need_reset);
201		chip->xd_reset_counter = 0;
202		chip->xd_show_cnt = 0;
203		return;
204	}
205
206	chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
207
208	rtsx_set_stat(chip, RTSX_STAT_RUN);
209	rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
210
211	retval = reset_xd_card(chip);
212	if (chip->need_release & XD_CARD)
213		return;
214	if (retval == STATUS_SUCCESS) {
215		clear_bit(XD_NR, &chip->need_reset);
216		chip->xd_reset_counter = 0;
217		chip->card_ready |= XD_CARD;
218		chip->card_fail &= ~XD_CARD;
219		chip->rw_card[chip->card2lun[XD_CARD]] = xd_rw;
220	} else {
221		if (chip->xd_reset_counter >= MAX_RESET_CNT) {
222			clear_bit(XD_NR, &chip->need_reset);
223			chip->xd_reset_counter = 0;
224			chip->xd_show_cnt = 0;
225		} else {
226			chip->xd_reset_counter++;
227		}
228		chip->card_ready &= ~XD_CARD;
229		chip->card_fail |= XD_CARD;
230		chip->capacity[chip->card2lun[XD_CARD]] = 0;
231		chip->rw_card[chip->card2lun[XD_CARD]] = NULL;
232
233		rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
234		if (!chip->ft2_fast_mode)
235			card_power_off(chip, XD_CARD);
236		disable_card_clock(chip, XD_CARD);
237	}
238}
239
240void do_reset_ms_card(struct rtsx_chip *chip)
241{
242	int retval;
243
244	dev_dbg(rtsx_dev(chip), "%s: %d, card2lun = 0x%x\n", __func__,
245		chip->ms_reset_counter, chip->card2lun[MS_CARD]);
246
247	if (chip->card2lun[MS_CARD] >= MAX_ALLOWED_LUN_CNT) {
248		clear_bit(MS_NR, &chip->need_reset);
249		chip->ms_reset_counter = 0;
250		chip->ms_show_cnt = 0;
251		return;
252	}
253
254	chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
255
256	rtsx_set_stat(chip, RTSX_STAT_RUN);
257	rtsx_write_register(chip, SDIO_CTRL, 0xFF, 0);
258
259	retval = reset_ms_card(chip);
260	if (chip->need_release & MS_CARD)
261		return;
262	if (retval == STATUS_SUCCESS) {
263		clear_bit(MS_NR, &chip->need_reset);
264		chip->ms_reset_counter = 0;
265		chip->card_ready |= MS_CARD;
266		chip->card_fail &= ~MS_CARD;
267		chip->rw_card[chip->card2lun[MS_CARD]] = ms_rw;
268	} else {
269		if (chip->ms_reset_counter >= MAX_RESET_CNT) {
270			clear_bit(MS_NR, &chip->need_reset);
271			chip->ms_reset_counter = 0;
272			chip->ms_show_cnt = 0;
273		} else {
274			chip->ms_reset_counter++;
275		}
276		chip->card_ready &= ~MS_CARD;
277		chip->card_fail |= MS_CARD;
278		chip->capacity[chip->card2lun[MS_CARD]] = 0;
279		chip->rw_card[chip->card2lun[MS_CARD]] = NULL;
280
281		rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
282		if (!chip->ft2_fast_mode)
283			card_power_off(chip, MS_CARD);
284		disable_card_clock(chip, MS_CARD);
285	}
286}
287
288static void release_sdio(struct rtsx_chip *chip)
289{
290	if (chip->sd_io) {
291		rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
292				    SD_STOP | SD_CLR_ERR);
293
294		if (chip->chip_insert_with_sdio) {
295			chip->chip_insert_with_sdio = 0;
296
297			if (CHECK_PID(chip, 0x5288))
298				rtsx_write_register(chip, 0xFE5A, 0x08, 0x00);
299			else
300				rtsx_write_register(chip, 0xFE70, 0x80, 0x00);
301		}
302
303		rtsx_write_register(chip, SDIO_CTRL, SDIO_CD_CTRL, 0);
304		chip->sd_io = 0;
305	}
306}
307
308void rtsx_power_off_card(struct rtsx_chip *chip)
309{
310	if ((chip->card_ready & SD_CARD) || chip->sd_io) {
311		sd_cleanup_work(chip);
312		sd_power_off_card3v3(chip);
313	}
314
315	if (chip->card_ready & XD_CARD) {
316		xd_cleanup_work(chip);
317		xd_power_off_card3v3(chip);
318	}
319
320	if (chip->card_ready & MS_CARD) {
321		ms_cleanup_work(chip);
322		ms_power_off_card3v3(chip);
323	}
324}
325
326void rtsx_release_cards(struct rtsx_chip *chip)
327{
328	chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
329
330	if ((chip->card_ready & SD_CARD) || chip->sd_io) {
331		if (chip->int_reg & SD_EXIST)
332			sd_cleanup_work(chip);
333		release_sd_card(chip);
334	}
335
336	if (chip->card_ready & XD_CARD) {
337		if (chip->int_reg & XD_EXIST)
338			xd_cleanup_work(chip);
339		release_xd_card(chip);
340	}
341
342	if (chip->card_ready & MS_CARD) {
343		if (chip->int_reg & MS_EXIST)
344			ms_cleanup_work(chip);
345		release_ms_card(chip);
346	}
347}
348
349void rtsx_reset_cards(struct rtsx_chip *chip)
350{
351	if (!chip->need_reset)
352		return;
353
354	rtsx_set_stat(chip, RTSX_STAT_RUN);
355
356	rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
357
358	rtsx_disable_aspm(chip);
359
360	if ((chip->need_reset & SD_CARD) && chip->chip_insert_with_sdio)
361		clear_bit(SD_NR, &chip->need_reset);
362
363	if (chip->need_reset & XD_CARD) {
364		chip->card_exist |= XD_CARD;
365
366		if (chip->xd_show_cnt >= MAX_SHOW_CNT)
367			do_reset_xd_card(chip);
368		else
369			chip->xd_show_cnt++;
370	}
371	if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
372		if (chip->card_exist & XD_CARD) {
373			clear_bit(SD_NR, &chip->need_reset);
374			clear_bit(MS_NR, &chip->need_reset);
375		}
376	}
377	if (chip->need_reset & SD_CARD) {
378		chip->card_exist |= SD_CARD;
379
380		if (chip->sd_show_cnt >= MAX_SHOW_CNT) {
381			rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
382			do_reset_sd_card(chip);
383		} else {
384			chip->sd_show_cnt++;
385		}
386	}
387	if (chip->need_reset & MS_CARD) {
388		chip->card_exist |= MS_CARD;
389
390		if (chip->ms_show_cnt >= MAX_SHOW_CNT)
391			do_reset_ms_card(chip);
392		else
393			chip->ms_show_cnt++;
394	}
395}
396
397void rtsx_reinit_cards(struct rtsx_chip *chip, int reset_chip)
398{
399	rtsx_set_stat(chip, RTSX_STAT_RUN);
400
401	rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
402
403	if (reset_chip)
404		rtsx_reset_chip(chip);
405
406	chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
407
408	if ((chip->int_reg & SD_EXIST) && (chip->need_reinit & SD_CARD)) {
409		release_sdio(chip);
410		release_sd_card(chip);
411
412		wait_timeout(100);
413
414		chip->card_exist |= SD_CARD;
415		do_reset_sd_card(chip);
416	}
417
418	if ((chip->int_reg & XD_EXIST) && (chip->need_reinit & XD_CARD)) {
419		release_xd_card(chip);
420
421		wait_timeout(100);
422
423		chip->card_exist |= XD_CARD;
424		do_reset_xd_card(chip);
425	}
426
427	if ((chip->int_reg & MS_EXIST) && (chip->need_reinit & MS_CARD)) {
428		release_ms_card(chip);
429
430		wait_timeout(100);
431
432		chip->card_exist |= MS_CARD;
433		do_reset_ms_card(chip);
434	}
435
436	chip->need_reinit = 0;
437}
438
439#ifdef DISABLE_CARD_INT
440void card_cd_debounce(struct rtsx_chip *chip, unsigned long *need_reset,
441		      unsigned long *need_release)
442{
443	u8 release_map = 0, reset_map = 0;
444
445	chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
446
447	if (chip->card_exist) {
448		if (chip->card_exist & XD_CARD) {
449			if (!(chip->int_reg & XD_EXIST))
450				release_map |= XD_CARD;
451		} else if (chip->card_exist & SD_CARD) {
452			if (!(chip->int_reg & SD_EXIST))
453				release_map |= SD_CARD;
454		} else if (chip->card_exist & MS_CARD) {
455			if (!(chip->int_reg & MS_EXIST))
456				release_map |= MS_CARD;
457		}
458	} else {
459		if (chip->int_reg & XD_EXIST)
460			reset_map |= XD_CARD;
461		else if (chip->int_reg & SD_EXIST)
462			reset_map |= SD_CARD;
463		else if (chip->int_reg & MS_EXIST)
464			reset_map |= MS_CARD;
465	}
466
467	if (reset_map) {
468		int xd_cnt = 0, sd_cnt = 0, ms_cnt = 0;
469		int i;
470
471		for (i = 0; i < (DEBOUNCE_CNT); i++) {
472			chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
473
474			if (chip->int_reg & XD_EXIST)
475				xd_cnt++;
476			else
477				xd_cnt = 0;
478
479			if (chip->int_reg & SD_EXIST)
480				sd_cnt++;
481			else
482				sd_cnt = 0;
483
484			if (chip->int_reg & MS_EXIST)
485				ms_cnt++;
486			else
487				ms_cnt = 0;
488
489			wait_timeout(30);
490		}
491
492		reset_map = 0;
493		if (!(chip->card_exist & XD_CARD) &&
494		    (xd_cnt > (DEBOUNCE_CNT - 1)))
495			reset_map |= XD_CARD;
496		if (!(chip->card_exist & SD_CARD) &&
497		    (sd_cnt > (DEBOUNCE_CNT - 1)))
498			reset_map |= SD_CARD;
499		if (!(chip->card_exist & MS_CARD) &&
500		    (ms_cnt > (DEBOUNCE_CNT - 1)))
501			reset_map |= MS_CARD;
502	}
503
504	if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN))
505		rtsx_write_register(chip, HOST_SLEEP_STATE, 0xC0, 0x00);
506
507	if (need_reset)
508		*need_reset = reset_map;
509	if (need_release)
510		*need_release = release_map;
511}
512#endif
513
514void rtsx_init_cards(struct rtsx_chip *chip)
515{
516	if (RTSX_TST_DELINK(chip) && (rtsx_get_stat(chip) != RTSX_STAT_SS)) {
517		dev_dbg(rtsx_dev(chip), "Reset chip in polling thread!\n");
518		rtsx_reset_chip(chip);
519		RTSX_CLR_DELINK(chip);
520	}
521
522#ifdef DISABLE_CARD_INT
523	card_cd_debounce(chip, &chip->need_reset, &chip->need_release);
524#endif
525
526	if (chip->need_release) {
527		if (CHECK_PID(chip, 0x5288) && CHECK_BARO_PKG(chip, QFN)) {
528			if (chip->int_reg & XD_EXIST) {
529				clear_bit(SD_NR, &chip->need_release);
530				clear_bit(MS_NR, &chip->need_release);
531			}
532		}
533
534		if (!(chip->card_exist & SD_CARD) && !chip->sd_io)
535			clear_bit(SD_NR, &chip->need_release);
536		if (!(chip->card_exist & XD_CARD))
537			clear_bit(XD_NR, &chip->need_release);
538		if (!(chip->card_exist & MS_CARD))
539			clear_bit(MS_NR, &chip->need_release);
540
541		dev_dbg(rtsx_dev(chip), "chip->need_release = 0x%x\n",
542			(unsigned int)(chip->need_release));
543
544#ifdef SUPPORT_OCP
545		if (chip->need_release) {
546			if (chip->ocp_stat & (CARD_OC_NOW | CARD_OC_EVER))
547				rtsx_write_register(chip, OCPCLR,
548						    CARD_OC_INT_CLR |
549						    CARD_OC_CLR,
550						    CARD_OC_INT_CLR |
551						    CARD_OC_CLR);
552			chip->ocp_stat = 0;
553		}
554#endif
555		if (chip->need_release) {
556			rtsx_set_stat(chip, RTSX_STAT_RUN);
557			rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
558		}
559
560		if (chip->need_release & SD_CARD) {
561			clear_bit(SD_NR, &chip->need_release);
562			chip->card_exist &= ~SD_CARD;
563			chip->card_ejected &= ~SD_CARD;
564			chip->card_fail &= ~SD_CARD;
565			CLR_BIT(chip->lun_mc, chip->card2lun[SD_CARD]);
566			chip->rw_fail_cnt[chip->card2lun[SD_CARD]] = 0;
567			rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
568
569			release_sdio(chip);
570			release_sd_card(chip);
571		}
572
573		if (chip->need_release & XD_CARD) {
574			clear_bit(XD_NR, &chip->need_release);
575			chip->card_exist &= ~XD_CARD;
576			chip->card_ejected &= ~XD_CARD;
577			chip->card_fail &= ~XD_CARD;
578			CLR_BIT(chip->lun_mc, chip->card2lun[XD_CARD]);
579			chip->rw_fail_cnt[chip->card2lun[XD_CARD]] = 0;
580
581			release_xd_card(chip);
582
583			if (CHECK_PID(chip, 0x5288) &&
584			    CHECK_BARO_PKG(chip, QFN))
585				rtsx_write_register(chip, HOST_SLEEP_STATE,
586						    0xC0, 0xC0);
587		}
588
589		if (chip->need_release & MS_CARD) {
590			clear_bit(MS_NR, &chip->need_release);
591			chip->card_exist &= ~MS_CARD;
592			chip->card_ejected &= ~MS_CARD;
593			chip->card_fail &= ~MS_CARD;
594			CLR_BIT(chip->lun_mc, chip->card2lun[MS_CARD]);
595			chip->rw_fail_cnt[chip->card2lun[MS_CARD]] = 0;
596
597			release_ms_card(chip);
598		}
599
600		dev_dbg(rtsx_dev(chip), "chip->card_exist = 0x%x\n",
601			chip->card_exist);
602
603		if (!chip->card_exist)
604			turn_off_led(chip, LED_GPIO);
605	}
606
607	if (chip->need_reset) {
608		dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x\n",
609			(unsigned int)(chip->need_reset));
610
611		rtsx_reset_cards(chip);
612	}
613
614	if (chip->need_reinit) {
615		dev_dbg(rtsx_dev(chip), "chip->need_reinit = 0x%x\n",
616			(unsigned int)(chip->need_reinit));
617
618		rtsx_reinit_cards(chip, 0);
619	}
620}
621
622int switch_ssc_clock(struct rtsx_chip *chip, int clk)
623{
624	int retval;
625	u8 n = (u8)(clk - 2), min_n, max_n;
626	u8 mcu_cnt, div, max_div, ssc_depth, ssc_depth_mask;
627	int sd_vpclk_phase_reset = 0;
628
629	if (chip->cur_clk == clk)
630		return STATUS_SUCCESS;
631
632	min_n = 60;
633	max_n = 120;
634	max_div = CLK_DIV_4;
635
636	dev_dbg(rtsx_dev(chip), "Switch SSC clock to %dMHz (cur_clk = %d)\n",
637		clk, chip->cur_clk);
638
639	if (clk <= 2 || n > max_n)
640		return STATUS_FAIL;
641
642	mcu_cnt = (u8)(125 / clk + 3);
643	if (mcu_cnt > 7)
644		mcu_cnt = 7;
645
646	div = CLK_DIV_1;
647	while ((n < min_n) && (div < max_div)) {
648		n = (n + 2) * 2 - 2;
649		div++;
650	}
651	dev_dbg(rtsx_dev(chip), "n = %d, div = %d\n", n, div);
652
653	if (chip->ssc_en) {
654		ssc_depth = 0x01;
655		n -= 2;
656	} else {
657		ssc_depth = 0;
658	}
659
660	ssc_depth_mask = 0x03;
661
662	dev_dbg(rtsx_dev(chip), "ssc_depth = %d\n", ssc_depth);
663
664	rtsx_init_cmd(chip);
665	rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
666	rtsx_add_cmd(chip, WRITE_REG_CMD, CLK_DIV, 0xFF, (div << 4) | mcu_cnt);
667	rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
668	rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL2, ssc_depth_mask, ssc_depth);
669	rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, n);
670	rtsx_add_cmd(chip, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, SSC_RSTB);
671	if (sd_vpclk_phase_reset) {
672		rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
673			     PHASE_NOT_RESET, 0);
674		rtsx_add_cmd(chip, WRITE_REG_CMD, SD_VPCLK0_CTL,
675			     PHASE_NOT_RESET, PHASE_NOT_RESET);
676	}
677
678	retval = rtsx_send_cmd(chip, 0, WAIT_TIME);
679	if (retval < 0)
680		return STATUS_ERROR;
681
682	udelay(10);
683	retval = rtsx_write_register(chip, CLK_CTL, CLK_LOW_FREQ, 0);
684	if (retval)
685		return retval;
686
687	chip->cur_clk = clk;
688
689	return STATUS_SUCCESS;
690}
691
692int switch_normal_clock(struct rtsx_chip *chip, int clk)
693{
694	int retval;
695	u8 sel, div, mcu_cnt;
696	int sd_vpclk_phase_reset = 0;
697
698	if (chip->cur_clk == clk)
699		return STATUS_SUCCESS;
700
701	switch (clk) {
702	case CLK_20:
703		dev_dbg(rtsx_dev(chip), "Switch clock to 20MHz\n");
704		sel = SSC_80;
705		div = CLK_DIV_4;
706		mcu_cnt = 7;
707		break;
708
709	case CLK_30:
710		dev_dbg(rtsx_dev(chip), "Switch clock to 30MHz\n");
711		sel = SSC_120;
712		div = CLK_DIV_4;
713		mcu_cnt = 7;
714		break;
715
716	case CLK_40:
717		dev_dbg(rtsx_dev(chip), "Switch clock to 40MHz\n");
718		sel = SSC_80;
719		div = CLK_DIV_2;
720		mcu_cnt = 7;
721		break;
722
723	case CLK_50:
724		dev_dbg(rtsx_dev(chip), "Switch clock to 50MHz\n");
725		sel = SSC_100;
726		div = CLK_DIV_2;
727		mcu_cnt = 6;
728		break;
729
730	case CLK_60:
731		dev_dbg(rtsx_dev(chip), "Switch clock to 60MHz\n");
732		sel = SSC_120;
733		div = CLK_DIV_2;
734		mcu_cnt = 6;
735		break;
736
737	case CLK_80:
738		dev_dbg(rtsx_dev(chip), "Switch clock to 80MHz\n");
739		sel = SSC_80;
740		div = CLK_DIV_1;
741		mcu_cnt = 5;
742		break;
743
744	case CLK_100:
745		dev_dbg(rtsx_dev(chip), "Switch clock to 100MHz\n");
746		sel = SSC_100;
747		div = CLK_DIV_1;
748		mcu_cnt = 5;
749		break;
750
751	case CLK_120:
752		dev_dbg(rtsx_dev(chip), "Switch clock to 120MHz\n");
753		sel = SSC_120;
754		div = CLK_DIV_1;
755		mcu_cnt = 5;
756		break;
757
758	case CLK_150:
759		dev_dbg(rtsx_dev(chip), "Switch clock to 150MHz\n");
760		sel = SSC_150;
761		div = CLK_DIV_1;
762		mcu_cnt = 4;
763		break;
764
765	case CLK_200:
766		dev_dbg(rtsx_dev(chip), "Switch clock to 200MHz\n");
767		sel = SSC_200;
768		div = CLK_DIV_1;
769		mcu_cnt = 4;
770		break;
771
772	default:
773		dev_dbg(rtsx_dev(chip), "Try to switch to an illegal clock (%d)\n",
774			clk);
775		return STATUS_FAIL;
776	}
777
778	retval = rtsx_write_register(chip, CLK_CTL, 0xFF, CLK_LOW_FREQ);
779	if (retval)
780		return retval;
781	if (sd_vpclk_phase_reset) {
782		retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
783					     PHASE_NOT_RESET, 0);
784		if (retval)
785			return retval;
786		retval = rtsx_write_register(chip, SD_VPCLK1_CTL,
787					     PHASE_NOT_RESET, 0);
788		if (retval)
789			return retval;
790	}
791	retval = rtsx_write_register(chip, CLK_DIV, 0xFF,
792				     (div << 4) | mcu_cnt);
793	if (retval)
794		return retval;
795	retval = rtsx_write_register(chip, CLK_SEL, 0xFF, sel);
796	if (retval)
797		return retval;
798
799	if (sd_vpclk_phase_reset) {
800		udelay(200);
801		retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
802					     PHASE_NOT_RESET, PHASE_NOT_RESET);
803		if (retval)
804			return retval;
805		retval = rtsx_write_register(chip, SD_VPCLK1_CTL,
806					     PHASE_NOT_RESET, PHASE_NOT_RESET);
807		if (retval)
808			return retval;
809		udelay(200);
810	}
811	retval = rtsx_write_register(chip, CLK_CTL, 0xFF, 0);
812	if (retval)
813		return retval;
814
815	chip->cur_clk = clk;
816
817	return STATUS_SUCCESS;
818}
819
820void trans_dma_enable(enum dma_data_direction dir, struct rtsx_chip *chip,
821		      u32 byte_cnt, u8 pack_size)
822{
823	if (pack_size > DMA_1024)
824		pack_size = DMA_512;
825
826	rtsx_add_cmd(chip, WRITE_REG_CMD, IRQSTAT0, DMA_DONE_INT, DMA_DONE_INT);
827
828	rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC3, 0xFF, (u8)(byte_cnt >> 24));
829	rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC2, 0xFF, (u8)(byte_cnt >> 16));
830	rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC1, 0xFF, (u8)(byte_cnt >> 8));
831	rtsx_add_cmd(chip, WRITE_REG_CMD, DMATC0, 0xFF, (u8)byte_cnt);
832
833	if (dir == DMA_FROM_DEVICE) {
834		rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
835			     0x03 | DMA_PACK_SIZE_MASK,
836			     DMA_DIR_FROM_CARD | DMA_EN | pack_size);
837	} else {
838		rtsx_add_cmd(chip, WRITE_REG_CMD, DMACTL,
839			     0x03 | DMA_PACK_SIZE_MASK,
840			     DMA_DIR_TO_CARD | DMA_EN | pack_size);
841	}
842
843	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
844}
845
846int enable_card_clock(struct rtsx_chip *chip, u8 card)
847{
848	int retval;
849	u8 clk_en = 0;
850
851	if (card & XD_CARD)
852		clk_en |= XD_CLK_EN;
853	if (card & SD_CARD)
854		clk_en |= SD_CLK_EN;
855	if (card & MS_CARD)
856		clk_en |= MS_CLK_EN;
857
858	retval = rtsx_write_register(chip, CARD_CLK_EN, clk_en, clk_en);
859	if (retval)
860		return retval;
861
862	return STATUS_SUCCESS;
863}
864
865int disable_card_clock(struct rtsx_chip *chip, u8 card)
866{
867	int retval;
868	u8 clk_en = 0;
869
870	if (card & XD_CARD)
871		clk_en |= XD_CLK_EN;
872	if (card & SD_CARD)
873		clk_en |= SD_CLK_EN;
874	if (card & MS_CARD)
875		clk_en |= MS_CLK_EN;
876
877	retval = rtsx_write_register(chip, CARD_CLK_EN, clk_en, 0);
878	if (retval)
879		return retval;
880
881	return STATUS_SUCCESS;
882}
883
884int card_power_on(struct rtsx_chip *chip, u8 card)
885{
886	int retval;
887	u8 mask, val1, val2;
888
889	if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && card == MS_CARD) {
890		mask = MS_POWER_MASK;
891		val1 = MS_PARTIAL_POWER_ON;
892		val2 = MS_POWER_ON;
893	} else {
894		mask = SD_POWER_MASK;
895		val1 = SD_PARTIAL_POWER_ON;
896		val2 = SD_POWER_ON;
897	}
898
899	rtsx_init_cmd(chip);
900	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val1);
901
902	retval = rtsx_send_cmd(chip, 0, 100);
903	if (retval != STATUS_SUCCESS)
904		return STATUS_FAIL;
905
906	udelay(chip->pmos_pwr_on_interval);
907
908	rtsx_init_cmd(chip);
909	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, mask, val2);
910
911	retval = rtsx_send_cmd(chip, 0, 100);
912	if (retval != STATUS_SUCCESS)
913		return STATUS_FAIL;
914
915	return STATUS_SUCCESS;
916}
917
918int card_power_off(struct rtsx_chip *chip, u8 card)
919{
920	int retval;
921	u8 mask, val;
922
923	if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && card == MS_CARD) {
924		mask = MS_POWER_MASK;
925		val = MS_POWER_OFF;
926	} else {
927		mask = SD_POWER_MASK;
928		val = SD_POWER_OFF;
929	}
930
931	retval = rtsx_write_register(chip, CARD_PWR_CTL, mask, val);
932	if (retval)
933		return retval;
934
935	return STATUS_SUCCESS;
936}
937
938int card_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip,
939	    u32 sec_addr, u16 sec_cnt)
940{
941	int retval;
942	unsigned int lun = SCSI_LUN(srb);
943	int i;
944
945	if (!chip->rw_card[lun])
946		return STATUS_FAIL;
947
948	for (i = 0; i < 3; i++) {
949		chip->rw_need_retry = 0;
950
951		retval = chip->rw_card[lun](srb, chip, sec_addr, sec_cnt);
952		if (retval != STATUS_SUCCESS) {
953			if (rtsx_check_chip_exist(chip) != STATUS_SUCCESS) {
954				rtsx_release_chip(chip);
955				return STATUS_FAIL;
956			}
957			if (detect_card_cd(chip, chip->cur_card) !=
958							STATUS_SUCCESS) {
959				return STATUS_FAIL;
960			}
961
962			if (!chip->rw_need_retry) {
963				dev_dbg(rtsx_dev(chip), "RW fail, but no need to retry\n");
964				break;
965			}
966		} else {
967			chip->rw_need_retry = 0;
968			break;
969		}
970
971		dev_dbg(rtsx_dev(chip), "Retry RW, (i = %d)\n", i);
972	}
973
974	return retval;
975}
976
977int card_share_mode(struct rtsx_chip *chip, int card)
978{
979	int retval;
980	u8 mask, value;
981
982	if (CHECK_PID(chip, 0x5208)) {
983		mask = CARD_SHARE_MASK;
984		if (card == SD_CARD)
985			value = CARD_SHARE_48_SD;
986		else if (card == MS_CARD)
987			value = CARD_SHARE_48_MS;
988		else if (card == XD_CARD)
989			value = CARD_SHARE_48_XD;
990		else
991			return STATUS_FAIL;
992
993	} else if (CHECK_PID(chip, 0x5288)) {
994		mask = 0x03;
995		if (card == SD_CARD)
996			value = CARD_SHARE_BAROSSA_SD;
997		else if (card == MS_CARD)
998			value = CARD_SHARE_BAROSSA_MS;
999		else if (card == XD_CARD)
1000			value = CARD_SHARE_BAROSSA_XD;
1001		else
1002			return STATUS_FAIL;
1003
1004	} else {
1005		return STATUS_FAIL;
1006	}
1007
1008	retval = rtsx_write_register(chip, CARD_SHARE_MODE, mask, value);
1009	if (retval)
1010		return retval;
1011
1012	return STATUS_SUCCESS;
1013}
1014
1015int select_card(struct rtsx_chip *chip, int card)
1016{
1017	int retval;
1018
1019	if (chip->cur_card != card) {
1020		u8 mod;
1021
1022		if (card == SD_CARD)
1023			mod = SD_MOD_SEL;
1024		else if (card == MS_CARD)
1025			mod = MS_MOD_SEL;
1026		else if (card == XD_CARD)
1027			mod = XD_MOD_SEL;
1028		else if (card == SPI_CARD)
1029			mod = SPI_MOD_SEL;
1030		else
1031			return STATUS_FAIL;
1032
1033		retval = rtsx_write_register(chip, CARD_SELECT, 0x07, mod);
1034		if (retval)
1035			return retval;
1036		chip->cur_card = card;
1037
1038		retval =  card_share_mode(chip, card);
1039		if (retval != STATUS_SUCCESS)
1040			return STATUS_FAIL;
1041	}
1042
1043	return STATUS_SUCCESS;
1044}
1045
1046void toggle_gpio(struct rtsx_chip *chip, u8 gpio)
1047{
1048	u8 temp_reg;
1049
1050	rtsx_read_register(chip, CARD_GPIO, &temp_reg);
1051	temp_reg ^= (0x01 << gpio);
1052	rtsx_write_register(chip, CARD_GPIO, 0xFF, temp_reg);
1053}
1054
1055void turn_on_led(struct rtsx_chip *chip, u8 gpio)
1056{
1057	if (CHECK_PID(chip, 0x5288))
1058		rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1059				    (u8)(1 << gpio));
1060	else
1061		rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1062}
1063
1064void turn_off_led(struct rtsx_chip *chip, u8 gpio)
1065{
1066	if (CHECK_PID(chip, 0x5288))
1067		rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio), 0);
1068	else
1069		rtsx_write_register(chip, CARD_GPIO, (u8)(1 << gpio),
1070				    (u8)(1 << gpio));
1071}
1072
1073int detect_card_cd(struct rtsx_chip *chip, int card)
1074{
1075	u32 card_cd, status;
1076
1077	if (card == SD_CARD) {
1078		card_cd = SD_EXIST;
1079	} else if (card == MS_CARD) {
1080		card_cd = MS_EXIST;
1081	} else if (card == XD_CARD) {
1082		card_cd = XD_EXIST;
1083	} else {
1084		dev_dbg(rtsx_dev(chip), "Wrong card type: 0x%x\n", card);
1085		return STATUS_FAIL;
1086	}
1087
1088	status = rtsx_readl(chip, RTSX_BIPR);
1089	if (!(status & card_cd))
1090		return STATUS_FAIL;
1091
1092	return STATUS_SUCCESS;
1093}
1094
1095int check_card_exist(struct rtsx_chip *chip, unsigned int lun)
1096{
1097	if (chip->card_exist & chip->lun2card[lun])
1098		return 1;
1099
1100	return 0;
1101}
1102
1103int check_card_ready(struct rtsx_chip *chip, unsigned int lun)
1104{
1105	if (chip->card_ready & chip->lun2card[lun])
1106		return 1;
1107
1108	return 0;
1109}
1110
1111int check_card_wp(struct rtsx_chip *chip, unsigned int lun)
1112{
1113	if (chip->card_wp & chip->lun2card[lun])
1114		return 1;
1115
1116	return 0;
1117}
1118
1119u8 get_lun_card(struct rtsx_chip *chip, unsigned int lun)
1120{
1121	if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD)
1122		return (u8)XD_CARD;
1123	else if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD)
1124		return (u8)SD_CARD;
1125	else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD)
1126		return (u8)MS_CARD;
1127
1128	return 0;
1129}
1130
1131void eject_card(struct rtsx_chip *chip, unsigned int lun)
1132{
1133	do_remaining_work(chip);
1134
1135	if ((chip->card_ready & chip->lun2card[lun]) == SD_CARD) {
1136		release_sd_card(chip);
1137		chip->card_ejected |= SD_CARD;
1138		chip->card_ready &= ~SD_CARD;
1139		chip->capacity[lun] = 0;
1140	} else if ((chip->card_ready & chip->lun2card[lun]) == XD_CARD) {
1141		release_xd_card(chip);
1142		chip->card_ejected |= XD_CARD;
1143		chip->card_ready &= ~XD_CARD;
1144		chip->capacity[lun] = 0;
1145	} else if ((chip->card_ready & chip->lun2card[lun]) == MS_CARD) {
1146		release_ms_card(chip);
1147		chip->card_ejected |= MS_CARD;
1148		chip->card_ready &= ~MS_CARD;
1149		chip->capacity[lun] = 0;
1150	}
1151}
1152