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