1/* Realtek USB SD/MMC Card Interface driver
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 version 2
7 * as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, see <http://www.gnu.org/licenses/>.
16 *
17 * Author:
18 *   Roger Tseng <rogerable@realtek.com>
19 */
20
21#include <linux/module.h>
22#include <linux/slab.h>
23#include <linux/delay.h>
24#include <linux/platform_device.h>
25#include <linux/usb.h>
26#include <linux/mmc/host.h>
27#include <linux/mmc/mmc.h>
28#include <linux/mmc/sd.h>
29#include <linux/mmc/sdio.h>
30#include <linux/mmc/card.h>
31#include <linux/scatterlist.h>
32#include <linux/pm_runtime.h>
33
34#include <linux/mfd/rtsx_usb.h>
35#include <asm/unaligned.h>
36
37#if defined(CONFIG_LEDS_CLASS) || (defined(CONFIG_LEDS_CLASS_MODULE) && \
38		defined(CONFIG_MMC_REALTEK_USB_MODULE))
39#include <linux/leds.h>
40#include <linux/workqueue.h>
41#define RTSX_USB_USE_LEDS_CLASS
42#endif
43
44struct rtsx_usb_sdmmc {
45	struct platform_device	*pdev;
46	struct rtsx_ucr	*ucr;
47	struct mmc_host		*mmc;
48	struct mmc_request	*mrq;
49
50	struct mutex		host_mutex;
51
52	u8			ssc_depth;
53	unsigned int		clock;
54	bool			vpclk;
55	bool			double_clk;
56	bool			host_removal;
57	bool			card_exist;
58	bool			initial_mode;
59	bool			ddr_mode;
60
61	unsigned char		power_mode;
62
63#ifdef RTSX_USB_USE_LEDS_CLASS
64	struct led_classdev	led;
65	char			led_name[32];
66	struct work_struct	led_work;
67#endif
68};
69
70static inline struct device *sdmmc_dev(struct rtsx_usb_sdmmc *host)
71{
72	return &(host->pdev->dev);
73}
74
75static inline void sd_clear_error(struct rtsx_usb_sdmmc *host)
76{
77	struct rtsx_ucr *ucr = host->ucr;
78	rtsx_usb_ep0_write_register(ucr, CARD_STOP,
79				  SD_STOP | SD_CLR_ERR,
80				  SD_STOP | SD_CLR_ERR);
81
82	rtsx_usb_clear_dma_err(ucr);
83	rtsx_usb_clear_fsm_err(ucr);
84}
85
86#ifdef DEBUG
87static void sd_print_debug_regs(struct rtsx_usb_sdmmc *host)
88{
89	struct rtsx_ucr *ucr = host->ucr;
90	u8 val = 0;
91
92	rtsx_usb_ep0_read_register(ucr, SD_STAT1, &val);
93	dev_dbg(sdmmc_dev(host), "SD_STAT1: 0x%x\n", val);
94	rtsx_usb_ep0_read_register(ucr, SD_STAT2, &val);
95	dev_dbg(sdmmc_dev(host), "SD_STAT2: 0x%x\n", val);
96	rtsx_usb_ep0_read_register(ucr, SD_BUS_STAT, &val);
97	dev_dbg(sdmmc_dev(host), "SD_BUS_STAT: 0x%x\n", val);
98}
99#else
100#define sd_print_debug_regs(host)
101#endif /* DEBUG */
102
103static int sd_read_data(struct rtsx_usb_sdmmc *host, struct mmc_command *cmd,
104	       u16 byte_cnt, u8 *buf, int buf_len, int timeout)
105{
106	struct rtsx_ucr *ucr = host->ucr;
107	int err;
108	u8 trans_mode;
109
110	if (!buf)
111		buf_len = 0;
112
113	rtsx_usb_init_cmd(ucr);
114	if (cmd != NULL) {
115		dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD%d\n", __func__
116				, cmd->opcode);
117		if (cmd->opcode == MMC_SEND_TUNING_BLOCK)
118			trans_mode = SD_TM_AUTO_TUNING;
119		else
120			trans_mode = SD_TM_NORMAL_READ;
121
122		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
123				SD_CMD0, 0xFF, (u8)(cmd->opcode) | 0x40);
124		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
125				SD_CMD1, 0xFF, (u8)(cmd->arg >> 24));
126		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
127				SD_CMD2, 0xFF, (u8)(cmd->arg >> 16));
128		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
129				SD_CMD3, 0xFF, (u8)(cmd->arg >> 8));
130		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
131				SD_CMD4, 0xFF, (u8)cmd->arg);
132	} else {
133		trans_mode = SD_TM_AUTO_READ_3;
134	}
135
136	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, (u8)byte_cnt);
137	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_H,
138			0xFF, (u8)(byte_cnt >> 8));
139	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 1);
140	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0);
141
142	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG2, 0xFF,
143			SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
144			SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_6);
145	if (trans_mode != SD_TM_AUTO_TUNING)
146		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
147				CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
148
149	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_TRANSFER,
150			0xFF, trans_mode | SD_TRANSFER_START);
151	rtsx_usb_add_cmd(ucr, CHECK_REG_CMD, SD_TRANSFER,
152			SD_TRANSFER_END, SD_TRANSFER_END);
153
154	if (cmd != NULL) {
155		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD1, 0, 0);
156		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD2, 0, 0);
157		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD3, 0, 0);
158		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD4, 0, 0);
159	}
160
161	err = rtsx_usb_send_cmd(ucr, MODE_CR, timeout);
162	if (err) {
163		dev_dbg(sdmmc_dev(host),
164			"rtsx_usb_send_cmd failed (err = %d)\n", err);
165		return err;
166	}
167
168	err = rtsx_usb_get_rsp(ucr, !cmd ? 1 : 5, timeout);
169	if (err || (ucr->rsp_buf[0] & SD_TRANSFER_ERR)) {
170		sd_print_debug_regs(host);
171
172		if (!err) {
173			dev_dbg(sdmmc_dev(host),
174				"Transfer failed (SD_TRANSFER = %02x)\n",
175				ucr->rsp_buf[0]);
176			err = -EIO;
177		} else {
178			dev_dbg(sdmmc_dev(host),
179				"rtsx_usb_get_rsp failed (err = %d)\n", err);
180		}
181
182		return err;
183	}
184
185	if (cmd != NULL) {
186		cmd->resp[0] = get_unaligned_be32(ucr->rsp_buf + 1);
187		dev_dbg(sdmmc_dev(host), "cmd->resp[0] = 0x%08x\n",
188				cmd->resp[0]);
189	}
190
191	if (buf && buf_len) {
192		/* 2-byte aligned part */
193		err = rtsx_usb_read_ppbuf(ucr, buf, byte_cnt - (byte_cnt % 2));
194		if (err) {
195			dev_dbg(sdmmc_dev(host),
196				"rtsx_usb_read_ppbuf failed (err = %d)\n", err);
197			return err;
198		}
199
200		/* unaligned byte */
201		if (byte_cnt % 2)
202			return rtsx_usb_read_register(ucr,
203					PPBUF_BASE2 + byte_cnt,
204					buf + byte_cnt - 1);
205	}
206
207	return 0;
208}
209
210static int sd_write_data(struct rtsx_usb_sdmmc *host, struct mmc_command *cmd,
211		u16 byte_cnt, u8 *buf, int buf_len, int timeout)
212{
213	struct rtsx_ucr *ucr = host->ucr;
214	int err;
215	u8 trans_mode;
216
217	if (!buf)
218		buf_len = 0;
219
220	if (buf && buf_len) {
221		err = rtsx_usb_write_ppbuf(ucr, buf, buf_len);
222		if (err) {
223			dev_dbg(sdmmc_dev(host),
224				"rtsx_usb_write_ppbuf failed (err = %d)\n",
225				err);
226			return err;
227		}
228	}
229
230	trans_mode = (cmd != NULL) ? SD_TM_AUTO_WRITE_2 : SD_TM_AUTO_WRITE_3;
231	rtsx_usb_init_cmd(ucr);
232
233	if (cmd != NULL) {
234		dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD%d\n", __func__,
235				cmd->opcode);
236		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
237				SD_CMD0, 0xFF, (u8)(cmd->opcode) | 0x40);
238		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
239				SD_CMD1, 0xFF, (u8)(cmd->arg >> 24));
240		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
241				SD_CMD2, 0xFF, (u8)(cmd->arg >> 16));
242		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
243				SD_CMD3, 0xFF, (u8)(cmd->arg >> 8));
244		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
245				SD_CMD4, 0xFF, (u8)cmd->arg);
246	}
247
248	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, (u8)byte_cnt);
249	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_H,
250			0xFF, (u8)(byte_cnt >> 8));
251	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 1);
252	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0);
253
254	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG2, 0xFF,
255		SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
256		SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_6);
257	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
258			CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
259
260	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
261			trans_mode | SD_TRANSFER_START);
262	rtsx_usb_add_cmd(ucr, CHECK_REG_CMD, SD_TRANSFER,
263			SD_TRANSFER_END, SD_TRANSFER_END);
264
265	if (cmd != NULL) {
266		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD1, 0, 0);
267		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD2, 0, 0);
268		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD3, 0, 0);
269		rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_CMD4, 0, 0);
270	}
271
272	err = rtsx_usb_send_cmd(ucr, MODE_CR, timeout);
273	if (err) {
274		dev_dbg(sdmmc_dev(host),
275			"rtsx_usb_send_cmd failed (err = %d)\n", err);
276		return err;
277	}
278
279	err = rtsx_usb_get_rsp(ucr, !cmd ? 1 : 5, timeout);
280	if (err) {
281		sd_print_debug_regs(host);
282		dev_dbg(sdmmc_dev(host),
283			"rtsx_usb_get_rsp failed (err = %d)\n", err);
284		return err;
285	}
286
287	if (cmd != NULL) {
288		cmd->resp[0] = get_unaligned_be32(ucr->rsp_buf + 1);
289		dev_dbg(sdmmc_dev(host), "cmd->resp[0] = 0x%08x\n",
290				cmd->resp[0]);
291	}
292
293	return 0;
294}
295
296static void sd_send_cmd_get_rsp(struct rtsx_usb_sdmmc *host,
297		struct mmc_command *cmd)
298{
299	struct rtsx_ucr *ucr = host->ucr;
300	u8 cmd_idx = (u8)cmd->opcode;
301	u32 arg = cmd->arg;
302	int err = 0;
303	int timeout = 100;
304	int i;
305	u8 *ptr;
306	int stat_idx = 0;
307	int len = 2;
308	u8 rsp_type;
309
310	dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
311			__func__, cmd_idx, arg);
312
313	/* Response type:
314	 * R0
315	 * R1, R5, R6, R7
316	 * R1b
317	 * R2
318	 * R3, R4
319	 */
320	switch (mmc_resp_type(cmd)) {
321	case MMC_RSP_NONE:
322		rsp_type = SD_RSP_TYPE_R0;
323		break;
324	case MMC_RSP_R1:
325		rsp_type = SD_RSP_TYPE_R1;
326		break;
327	case MMC_RSP_R1 & ~MMC_RSP_CRC:
328		rsp_type = SD_RSP_TYPE_R1 | SD_NO_CHECK_CRC7;
329		break;
330	case MMC_RSP_R1B:
331		rsp_type = SD_RSP_TYPE_R1b;
332		break;
333	case MMC_RSP_R2:
334		rsp_type = SD_RSP_TYPE_R2;
335		break;
336	case MMC_RSP_R3:
337		rsp_type = SD_RSP_TYPE_R3;
338		break;
339	default:
340		dev_dbg(sdmmc_dev(host), "cmd->flag is not valid\n");
341		err = -EINVAL;
342		goto out;
343	}
344
345	if (rsp_type == SD_RSP_TYPE_R1b)
346		timeout = 3000;
347
348	if (cmd->opcode == SD_SWITCH_VOLTAGE) {
349		err = rtsx_usb_write_register(ucr, SD_BUS_STAT,
350				SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
351				SD_CLK_TOGGLE_EN);
352		if (err)
353			goto out;
354	}
355
356	rtsx_usb_init_cmd(ucr);
357
358	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CMD0, 0xFF, 0x40 | cmd_idx);
359	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CMD1, 0xFF, (u8)(arg >> 24));
360	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CMD2, 0xFF, (u8)(arg >> 16));
361	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CMD3, 0xFF, (u8)(arg >> 8));
362	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CMD4, 0xFF, (u8)arg);
363
364	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG2, 0xFF, rsp_type);
365	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_DATA_SOURCE,
366			0x01, PINGPONG_BUFFER);
367	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_TRANSFER,
368			0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
369	rtsx_usb_add_cmd(ucr, CHECK_REG_CMD, SD_TRANSFER,
370		     SD_TRANSFER_END | SD_STAT_IDLE,
371		     SD_TRANSFER_END | SD_STAT_IDLE);
372
373	if (rsp_type == SD_RSP_TYPE_R2) {
374		/* Read data from ping-pong buffer */
375		for (i = PPBUF_BASE2; i < PPBUF_BASE2 + 16; i++)
376			rtsx_usb_add_cmd(ucr, READ_REG_CMD, (u16)i, 0, 0);
377		stat_idx = 16;
378	} else if (rsp_type != SD_RSP_TYPE_R0) {
379		/* Read data from SD_CMDx registers */
380		for (i = SD_CMD0; i <= SD_CMD4; i++)
381			rtsx_usb_add_cmd(ucr, READ_REG_CMD, (u16)i, 0, 0);
382		stat_idx = 5;
383	}
384	len += stat_idx;
385
386	rtsx_usb_add_cmd(ucr, READ_REG_CMD, SD_STAT1, 0, 0);
387
388	err = rtsx_usb_send_cmd(ucr, MODE_CR, 100);
389	if (err) {
390		dev_dbg(sdmmc_dev(host),
391			"rtsx_usb_send_cmd error (err = %d)\n", err);
392		goto out;
393	}
394
395	err = rtsx_usb_get_rsp(ucr, len, timeout);
396	if (err || (ucr->rsp_buf[0] & SD_TRANSFER_ERR)) {
397		sd_print_debug_regs(host);
398		sd_clear_error(host);
399
400		if (!err) {
401			dev_dbg(sdmmc_dev(host),
402				"Transfer failed (SD_TRANSFER = %02x)\n",
403					ucr->rsp_buf[0]);
404			err = -EIO;
405		} else {
406			dev_dbg(sdmmc_dev(host),
407				"rtsx_usb_get_rsp failed (err = %d)\n", err);
408		}
409
410		goto out;
411	}
412
413	if (rsp_type == SD_RSP_TYPE_R0) {
414		err = 0;
415		goto out;
416	}
417
418	/* Skip result of CHECK_REG_CMD */
419	ptr = ucr->rsp_buf + 1;
420
421	/* Check (Start,Transmission) bit of Response */
422	if ((ptr[0] & 0xC0) != 0) {
423		err = -EILSEQ;
424		dev_dbg(sdmmc_dev(host), "Invalid response bit\n");
425		goto out;
426	}
427
428	/* Check CRC7 */
429	if (!(rsp_type & SD_NO_CHECK_CRC7)) {
430		if (ptr[stat_idx] & SD_CRC7_ERR) {
431			err = -EILSEQ;
432			dev_dbg(sdmmc_dev(host), "CRC7 error\n");
433			goto out;
434		}
435	}
436
437	if (rsp_type == SD_RSP_TYPE_R2) {
438		/*
439		 * The controller offloads the last byte {CRC-7, end bit 1'b1}
440		 * of response type R2. Assign dummy CRC, 0, and end bit to the
441		 * byte(ptr[16], goes into the LSB of resp[3] later).
442		 */
443		ptr[16] = 1;
444
445		for (i = 0; i < 4; i++) {
446			cmd->resp[i] = get_unaligned_be32(ptr + 1 + i * 4);
447			dev_dbg(sdmmc_dev(host), "cmd->resp[%d] = 0x%08x\n",
448					i, cmd->resp[i]);
449		}
450	} else {
451		cmd->resp[0] = get_unaligned_be32(ptr + 1);
452		dev_dbg(sdmmc_dev(host), "cmd->resp[0] = 0x%08x\n",
453				cmd->resp[0]);
454	}
455
456out:
457	cmd->error = err;
458}
459
460static int sd_rw_multi(struct rtsx_usb_sdmmc *host, struct mmc_request *mrq)
461{
462	struct rtsx_ucr *ucr = host->ucr;
463	struct mmc_data *data = mrq->data;
464	int read = (data->flags & MMC_DATA_READ) ? 1 : 0;
465	u8 cfg2, trans_mode;
466	int err;
467	u8 flag;
468	size_t data_len = data->blksz * data->blocks;
469	unsigned int pipe;
470
471	if (read) {
472		dev_dbg(sdmmc_dev(host), "%s: read %zu bytes\n",
473				__func__, data_len);
474		cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
475			SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_0;
476		trans_mode = SD_TM_AUTO_READ_3;
477	} else {
478		dev_dbg(sdmmc_dev(host), "%s: write %zu bytes\n",
479				__func__, data_len);
480		cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
481			SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
482		trans_mode = SD_TM_AUTO_WRITE_3;
483	}
484
485	rtsx_usb_init_cmd(ucr);
486
487	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0x00);
488	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF, 0x02);
489	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_L,
490			0xFF, (u8)data->blocks);
491	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BLOCK_CNT_H,
492			0xFF, (u8)(data->blocks >> 8));
493
494	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_DATA_SOURCE,
495			0x01, RING_BUFFER);
496
497	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_TC3,
498			0xFF, (u8)(data_len >> 24));
499	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_TC2,
500			0xFF, (u8)(data_len >> 16));
501	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_TC1,
502			0xFF, (u8)(data_len >> 8));
503	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_TC0,
504			0xFF, (u8)data_len);
505	if (read) {
506		flag = MODE_CDIR;
507		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_CTL,
508				0x03 | DMA_PACK_SIZE_MASK,
509				DMA_DIR_FROM_CARD | DMA_EN | DMA_512);
510	} else {
511		flag = MODE_CDOR;
512		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, MC_DMA_CTL,
513				0x03 | DMA_PACK_SIZE_MASK,
514				DMA_DIR_TO_CARD | DMA_EN | DMA_512);
515	}
516
517	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG2, 0xFF, cfg2);
518	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
519			trans_mode | SD_TRANSFER_START);
520	rtsx_usb_add_cmd(ucr, CHECK_REG_CMD, SD_TRANSFER,
521			SD_TRANSFER_END, SD_TRANSFER_END);
522
523	err = rtsx_usb_send_cmd(ucr, flag, 100);
524	if (err)
525		return err;
526
527	if (read)
528		pipe = usb_rcvbulkpipe(ucr->pusb_dev, EP_BULK_IN);
529	else
530		pipe = usb_sndbulkpipe(ucr->pusb_dev, EP_BULK_OUT);
531
532	err = rtsx_usb_transfer_data(ucr, pipe, data->sg, data_len,
533			data->sg_len,  NULL, 10000);
534	if (err) {
535		dev_dbg(sdmmc_dev(host), "rtsx_usb_transfer_data error %d\n"
536				, err);
537		sd_clear_error(host);
538		return err;
539	}
540
541	return rtsx_usb_get_rsp(ucr, 1, 2000);
542}
543
544static inline void sd_enable_initial_mode(struct rtsx_usb_sdmmc *host)
545{
546	rtsx_usb_write_register(host->ucr, SD_CFG1,
547			SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_128);
548}
549
550static inline void sd_disable_initial_mode(struct rtsx_usb_sdmmc *host)
551{
552	rtsx_usb_write_register(host->ucr, SD_CFG1,
553			SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_0);
554}
555
556static void sd_normal_rw(struct rtsx_usb_sdmmc *host,
557		struct mmc_request *mrq)
558{
559	struct mmc_command *cmd = mrq->cmd;
560	struct mmc_data *data = mrq->data;
561	u8 *buf;
562
563	buf = kzalloc(data->blksz, GFP_NOIO);
564	if (!buf) {
565		cmd->error = -ENOMEM;
566		return;
567	}
568
569	if (data->flags & MMC_DATA_READ) {
570		if (host->initial_mode)
571			sd_disable_initial_mode(host);
572
573		cmd->error = sd_read_data(host, cmd, (u16)data->blksz, buf,
574				data->blksz, 200);
575
576		if (host->initial_mode)
577			sd_enable_initial_mode(host);
578
579		sg_copy_from_buffer(data->sg, data->sg_len, buf, data->blksz);
580	} else {
581		sg_copy_to_buffer(data->sg, data->sg_len, buf, data->blksz);
582
583		cmd->error = sd_write_data(host, cmd, (u16)data->blksz, buf,
584				data->blksz, 200);
585	}
586
587	kfree(buf);
588}
589
590static int sd_change_phase(struct rtsx_usb_sdmmc *host, u8 sample_point, int tx)
591{
592	struct rtsx_ucr *ucr = host->ucr;
593	int err;
594
595	dev_dbg(sdmmc_dev(host), "%s: %s sample_point = %d\n",
596			__func__, tx ? "TX" : "RX", sample_point);
597
598	rtsx_usb_init_cmd(ucr);
599
600	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE, CLK_CHANGE);
601
602	if (tx)
603		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK0_CTL,
604				0x0F, sample_point);
605	else
606		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK1_CTL,
607				0x0F, sample_point);
608
609	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
610	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_VPCLK0_CTL,
611			PHASE_NOT_RESET, PHASE_NOT_RESET);
612	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CLK_DIV, CLK_CHANGE, 0);
613	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1, SD_ASYNC_FIFO_RST, 0);
614
615	err = rtsx_usb_send_cmd(ucr, MODE_C, 100);
616	if (err)
617		return err;
618
619	return 0;
620}
621
622static inline u32 get_phase_point(u32 phase_map, unsigned int idx)
623{
624	idx &= MAX_PHASE;
625	return phase_map & (1 << idx);
626}
627
628static int get_phase_len(u32 phase_map, unsigned int idx)
629{
630	int i;
631
632	for (i = 0; i < MAX_PHASE + 1; i++) {
633		if (get_phase_point(phase_map, idx + i) == 0)
634			return i;
635	}
636	return MAX_PHASE + 1;
637}
638
639static u8 sd_search_final_phase(struct rtsx_usb_sdmmc *host, u32 phase_map)
640{
641	int start = 0, len = 0;
642	int start_final = 0, len_final = 0;
643	u8 final_phase = 0xFF;
644
645	if (phase_map == 0) {
646		dev_dbg(sdmmc_dev(host), "Phase: [map:%x]\n", phase_map);
647		return final_phase;
648	}
649
650	while (start < MAX_PHASE + 1) {
651		len = get_phase_len(phase_map, start);
652		if (len_final < len) {
653			start_final = start;
654			len_final = len;
655		}
656		start += len ? len : 1;
657	}
658
659	final_phase = (start_final + len_final / 2) & MAX_PHASE;
660	dev_dbg(sdmmc_dev(host), "Phase: [map:%x] [maxlen:%d] [final:%d]\n",
661		phase_map, len_final, final_phase);
662
663	return final_phase;
664}
665
666static void sd_wait_data_idle(struct rtsx_usb_sdmmc *host)
667{
668	int err, i;
669	u8 val = 0;
670
671	for (i = 0; i < 100; i++) {
672		err = rtsx_usb_ep0_read_register(host->ucr,
673				SD_DATA_STATE, &val);
674		if (val & SD_DATA_IDLE)
675			return;
676
677		usleep_range(100, 1000);
678	}
679}
680
681static int sd_tuning_rx_cmd(struct rtsx_usb_sdmmc *host,
682		u8 opcode, u8 sample_point)
683{
684	int err;
685	struct mmc_command cmd = {0};
686
687	err = sd_change_phase(host, sample_point, 0);
688	if (err)
689		return err;
690
691	cmd.opcode = MMC_SEND_TUNING_BLOCK;
692	err = sd_read_data(host, &cmd, 0x40, NULL, 0, 100);
693	if (err) {
694		/* Wait till SD DATA IDLE */
695		sd_wait_data_idle(host);
696		sd_clear_error(host);
697		return err;
698	}
699
700	return 0;
701}
702
703static void sd_tuning_phase(struct rtsx_usb_sdmmc *host,
704		u8 opcode, u16 *phase_map)
705{
706	int err, i;
707	u16 raw_phase_map = 0;
708
709	for (i = MAX_PHASE; i >= 0; i--) {
710		err = sd_tuning_rx_cmd(host, opcode, (u8)i);
711		if (!err)
712			raw_phase_map |= 1 << i;
713	}
714
715	if (phase_map)
716		*phase_map = raw_phase_map;
717}
718
719static int sd_tuning_rx(struct rtsx_usb_sdmmc *host, u8 opcode)
720{
721	int err, i;
722	u16 raw_phase_map[RX_TUNING_CNT] = {0}, phase_map;
723	u8 final_phase;
724
725	/* setting fixed default TX phase */
726	err = sd_change_phase(host, 0x01, 1);
727	if (err) {
728		dev_dbg(sdmmc_dev(host), "TX phase setting failed\n");
729		return err;
730	}
731
732	/* tuning RX phase */
733	for (i = 0; i < RX_TUNING_CNT; i++) {
734		sd_tuning_phase(host, opcode, &(raw_phase_map[i]));
735
736		if (raw_phase_map[i] == 0)
737			break;
738	}
739
740	phase_map = 0xFFFF;
741	for (i = 0; i < RX_TUNING_CNT; i++) {
742		dev_dbg(sdmmc_dev(host), "RX raw_phase_map[%d] = 0x%04x\n",
743				i, raw_phase_map[i]);
744		phase_map &= raw_phase_map[i];
745	}
746	dev_dbg(sdmmc_dev(host), "RX phase_map = 0x%04x\n", phase_map);
747
748	if (phase_map) {
749		final_phase = sd_search_final_phase(host, phase_map);
750		if (final_phase == 0xFF)
751			return -EINVAL;
752
753		err = sd_change_phase(host, final_phase, 0);
754		if (err)
755			return err;
756	} else {
757		return -EINVAL;
758	}
759
760	return 0;
761}
762
763static int sdmmc_get_ro(struct mmc_host *mmc)
764{
765	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
766	struct rtsx_ucr *ucr = host->ucr;
767	int err;
768	u16 val;
769
770	if (host->host_removal)
771		return -ENOMEDIUM;
772
773	mutex_lock(&ucr->dev_mutex);
774
775	/* Check SD card detect */
776	err = rtsx_usb_get_card_status(ucr, &val);
777
778	mutex_unlock(&ucr->dev_mutex);
779
780
781	/* Treat failed detection as non-ro */
782	if (err)
783		return 0;
784
785	if (val & SD_WP)
786		return 1;
787
788	return 0;
789}
790
791static int sdmmc_get_cd(struct mmc_host *mmc)
792{
793	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
794	struct rtsx_ucr *ucr = host->ucr;
795	int err;
796	u16 val;
797
798	if (host->host_removal)
799		return -ENOMEDIUM;
800
801	mutex_lock(&ucr->dev_mutex);
802
803	/* Check SD card detect */
804	err = rtsx_usb_get_card_status(ucr, &val);
805
806	mutex_unlock(&ucr->dev_mutex);
807
808	/* Treat failed detection as non-exist */
809	if (err)
810		goto no_card;
811
812	if (val & SD_CD) {
813		host->card_exist = true;
814		return 1;
815	}
816
817no_card:
818	host->card_exist = false;
819	return 0;
820}
821
822static void sdmmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
823{
824	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
825	struct rtsx_ucr *ucr = host->ucr;
826	struct mmc_command *cmd = mrq->cmd;
827	struct mmc_data *data = mrq->data;
828	unsigned int data_size = 0;
829
830	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
831
832	if (host->host_removal) {
833		cmd->error = -ENOMEDIUM;
834		goto finish;
835	}
836
837	if ((!host->card_exist)) {
838		cmd->error = -ENOMEDIUM;
839		goto finish_detect_card;
840	}
841
842	/*
843	 * Reject SDIO CMDs to speed up card identification
844	 * since unsupported
845	 */
846	if (cmd->opcode == SD_IO_SEND_OP_COND ||
847	    cmd->opcode == SD_IO_RW_DIRECT ||
848	    cmd->opcode == SD_IO_RW_EXTENDED) {
849		cmd->error = -EINVAL;
850		goto finish;
851	}
852
853	mutex_lock(&ucr->dev_mutex);
854
855	mutex_lock(&host->host_mutex);
856	host->mrq = mrq;
857	mutex_unlock(&host->host_mutex);
858
859	if (mrq->data)
860		data_size = data->blocks * data->blksz;
861
862	if (!data_size) {
863		sd_send_cmd_get_rsp(host, cmd);
864	} else if ((!(data_size % 512) && cmd->opcode != MMC_SEND_EXT_CSD) ||
865		   mmc_op_multi(cmd->opcode)) {
866		sd_send_cmd_get_rsp(host, cmd);
867
868		if (!cmd->error) {
869			sd_rw_multi(host, mrq);
870
871			if (mmc_op_multi(cmd->opcode) && mrq->stop) {
872				sd_send_cmd_get_rsp(host, mrq->stop);
873				rtsx_usb_write_register(ucr, MC_FIFO_CTL,
874						FIFO_FLUSH, FIFO_FLUSH);
875			}
876		}
877	} else {
878		sd_normal_rw(host, mrq);
879	}
880
881	if (mrq->data) {
882		if (cmd->error || data->error)
883			data->bytes_xfered = 0;
884		else
885			data->bytes_xfered = data->blocks * data->blksz;
886	}
887
888	mutex_unlock(&ucr->dev_mutex);
889
890finish_detect_card:
891	if (cmd->error) {
892		/*
893		 * detect card when fail to update card existence state and
894		 * speed up card removal when retry
895		 */
896		sdmmc_get_cd(mmc);
897		dev_dbg(sdmmc_dev(host), "cmd->error = %d\n", cmd->error);
898	}
899
900finish:
901	mutex_lock(&host->host_mutex);
902	host->mrq = NULL;
903	mutex_unlock(&host->host_mutex);
904
905	mmc_request_done(mmc, mrq);
906}
907
908static int sd_set_bus_width(struct rtsx_usb_sdmmc *host,
909		unsigned char bus_width)
910{
911	int err = 0;
912	u8 width[] = {
913		[MMC_BUS_WIDTH_1] = SD_BUS_WIDTH_1BIT,
914		[MMC_BUS_WIDTH_4] = SD_BUS_WIDTH_4BIT,
915		[MMC_BUS_WIDTH_8] = SD_BUS_WIDTH_8BIT,
916	};
917
918	if (bus_width <= MMC_BUS_WIDTH_8)
919		err = rtsx_usb_write_register(host->ucr, SD_CFG1,
920				0x03, width[bus_width]);
921
922	return err;
923}
924
925static int sd_pull_ctl_disable_lqfp48(struct rtsx_ucr *ucr)
926{
927	rtsx_usb_init_cmd(ucr);
928
929	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0x55);
930	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x55);
931	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0x95);
932	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
933	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x55);
934	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0xA5);
935
936	return rtsx_usb_send_cmd(ucr, MODE_C, 100);
937}
938
939static int sd_pull_ctl_disable_qfn24(struct rtsx_ucr *ucr)
940{
941	rtsx_usb_init_cmd(ucr);
942
943	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0x65);
944	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x55);
945	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0x95);
946	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
947	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x56);
948	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0x59);
949
950	return rtsx_usb_send_cmd(ucr, MODE_C, 100);
951}
952
953static int sd_pull_ctl_enable_lqfp48(struct rtsx_ucr *ucr)
954{
955	rtsx_usb_init_cmd(ucr);
956
957	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xAA);
958	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0xAA);
959	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0xA9);
960	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
961	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x55);
962	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0xA5);
963
964	return rtsx_usb_send_cmd(ucr, MODE_C, 100);
965}
966
967static int sd_pull_ctl_enable_qfn24(struct rtsx_ucr *ucr)
968{
969	rtsx_usb_init_cmd(ucr);
970
971	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xA5);
972	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x9A);
973	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0xA5);
974	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x9A);
975	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x65);
976	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0x5A);
977
978	return rtsx_usb_send_cmd(ucr, MODE_C, 100);
979}
980
981static int sd_power_on(struct rtsx_usb_sdmmc *host)
982{
983	struct rtsx_ucr *ucr = host->ucr;
984	int err;
985
986	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
987	rtsx_usb_init_cmd(ucr);
988	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
989	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SHARE_MODE,
990			CARD_SHARE_MASK, CARD_SHARE_SD);
991	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_EN,
992			SD_CLK_EN, SD_CLK_EN);
993	err = rtsx_usb_send_cmd(ucr, MODE_C, 100);
994	if (err)
995		return err;
996
997	if (CHECK_PKG(ucr, LQFP48))
998		err = sd_pull_ctl_enable_lqfp48(ucr);
999	else
1000		err = sd_pull_ctl_enable_qfn24(ucr);
1001	if (err)
1002		return err;
1003
1004	err = rtsx_usb_write_register(ucr, CARD_PWR_CTL,
1005			POWER_MASK, PARTIAL_POWER_ON);
1006	if (err)
1007		return err;
1008
1009	usleep_range(800, 1000);
1010
1011	rtsx_usb_init_cmd(ucr);
1012	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL,
1013			POWER_MASK|LDO3318_PWR_MASK, POWER_ON|LDO_ON);
1014	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_OE,
1015			SD_OUTPUT_EN, SD_OUTPUT_EN);
1016
1017	return rtsx_usb_send_cmd(ucr, MODE_C, 100);
1018}
1019
1020static int sd_power_off(struct rtsx_usb_sdmmc *host)
1021{
1022	struct rtsx_ucr *ucr = host->ucr;
1023	int err;
1024
1025	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
1026	rtsx_usb_init_cmd(ucr);
1027
1028	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_EN, SD_CLK_EN, 0);
1029	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_OE, SD_OUTPUT_EN, 0);
1030	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL,
1031			POWER_MASK, POWER_OFF);
1032	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_PWR_CTL,
1033			POWER_MASK|LDO3318_PWR_MASK, POWER_OFF|LDO_SUSPEND);
1034
1035	err = rtsx_usb_send_cmd(ucr, MODE_C, 100);
1036	if (err)
1037		return err;
1038
1039	if (CHECK_PKG(ucr, LQFP48))
1040			return sd_pull_ctl_disable_lqfp48(ucr);
1041	return sd_pull_ctl_disable_qfn24(ucr);
1042}
1043
1044static int sd_set_power_mode(struct rtsx_usb_sdmmc *host,
1045		unsigned char power_mode)
1046{
1047	int err;
1048
1049	if (power_mode != MMC_POWER_OFF)
1050		power_mode = MMC_POWER_ON;
1051
1052	if (power_mode == host->power_mode)
1053		return 0;
1054
1055	if (power_mode == MMC_POWER_OFF) {
1056		err = sd_power_off(host);
1057		pm_runtime_put(sdmmc_dev(host));
1058	} else {
1059		pm_runtime_get_sync(sdmmc_dev(host));
1060		err = sd_power_on(host);
1061	}
1062
1063	if (!err)
1064		host->power_mode = power_mode;
1065
1066	return err;
1067}
1068
1069static int sd_set_timing(struct rtsx_usb_sdmmc *host,
1070		unsigned char timing, bool *ddr_mode)
1071{
1072	struct rtsx_ucr *ucr = host->ucr;
1073	int err;
1074
1075	*ddr_mode = false;
1076
1077	rtsx_usb_init_cmd(ucr);
1078
1079	switch (timing) {
1080	case MMC_TIMING_UHS_SDR104:
1081	case MMC_TIMING_UHS_SDR50:
1082		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
1083				0x0C | SD_ASYNC_FIFO_RST,
1084				SD_30_MODE | SD_ASYNC_FIFO_RST);
1085		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1086				CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
1087		break;
1088
1089	case MMC_TIMING_UHS_DDR50:
1090		*ddr_mode = true;
1091
1092		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
1093				0x0C | SD_ASYNC_FIFO_RST,
1094				SD_DDR_MODE | SD_ASYNC_FIFO_RST);
1095		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1096				CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
1097		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
1098				DDR_VAR_TX_CMD_DAT, DDR_VAR_TX_CMD_DAT);
1099		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1100				DDR_VAR_RX_DAT | DDR_VAR_RX_CMD,
1101				DDR_VAR_RX_DAT | DDR_VAR_RX_CMD);
1102		break;
1103
1104	case MMC_TIMING_MMC_HS:
1105	case MMC_TIMING_SD_HS:
1106		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
1107				0x0C, SD_20_MODE);
1108		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1109				CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
1110		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
1111				SD20_TX_SEL_MASK, SD20_TX_14_AHEAD);
1112		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1113				SD20_RX_SEL_MASK, SD20_RX_14_DELAY);
1114		break;
1115
1116	default:
1117		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
1118				SD_CFG1, 0x0C, SD_20_MODE);
1119		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1120				CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
1121		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD,
1122				SD_PUSH_POINT_CTL, 0xFF, 0);
1123		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1124				SD20_RX_SEL_MASK, SD20_RX_POS_EDGE);
1125		break;
1126	}
1127
1128	err = rtsx_usb_send_cmd(ucr, MODE_C, 100);
1129
1130	return err;
1131}
1132
1133static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1134{
1135	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
1136	struct rtsx_ucr *ucr = host->ucr;
1137
1138	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
1139	mutex_lock(&ucr->dev_mutex);
1140
1141	if (rtsx_usb_card_exclusive_check(ucr, RTSX_USB_SD_CARD)) {
1142		mutex_unlock(&ucr->dev_mutex);
1143		return;
1144	}
1145
1146	sd_set_power_mode(host, ios->power_mode);
1147	sd_set_bus_width(host, ios->bus_width);
1148	sd_set_timing(host, ios->timing, &host->ddr_mode);
1149
1150	host->vpclk = false;
1151	host->double_clk = true;
1152
1153	switch (ios->timing) {
1154	case MMC_TIMING_UHS_SDR104:
1155	case MMC_TIMING_UHS_SDR50:
1156		host->ssc_depth = SSC_DEPTH_2M;
1157		host->vpclk = true;
1158		host->double_clk = false;
1159		break;
1160	case MMC_TIMING_UHS_DDR50:
1161	case MMC_TIMING_UHS_SDR25:
1162		host->ssc_depth = SSC_DEPTH_1M;
1163		break;
1164	default:
1165		host->ssc_depth = SSC_DEPTH_512K;
1166		break;
1167	}
1168
1169	host->initial_mode = (ios->clock <= 1000000) ? true : false;
1170	host->clock = ios->clock;
1171
1172	rtsx_usb_switch_clock(host->ucr, host->clock, host->ssc_depth,
1173			host->initial_mode, host->double_clk, host->vpclk);
1174
1175	mutex_unlock(&ucr->dev_mutex);
1176	dev_dbg(sdmmc_dev(host), "%s end\n", __func__);
1177}
1178
1179static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
1180{
1181	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
1182	struct rtsx_ucr *ucr = host->ucr;
1183	int err = 0;
1184
1185	dev_dbg(sdmmc_dev(host), "%s: signal_voltage = %d\n",
1186			__func__, ios->signal_voltage);
1187
1188	if (host->host_removal)
1189		return -ENOMEDIUM;
1190
1191	if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_120)
1192		return -EPERM;
1193
1194	mutex_lock(&ucr->dev_mutex);
1195
1196	err = rtsx_usb_card_exclusive_check(ucr, RTSX_USB_SD_CARD);
1197	if (err) {
1198		mutex_unlock(&ucr->dev_mutex);
1199		return err;
1200	}
1201
1202	/* Let mmc core do the busy checking, simply stop the forced-toggle
1203	 * clock(while issuing CMD11) and switch voltage.
1204	 */
1205	rtsx_usb_init_cmd(ucr);
1206
1207	if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
1208		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL,
1209				SD_IO_USING_1V8, SD_IO_USING_3V3);
1210		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG,
1211				TUNE_SD18_MASK, TUNE_SD18_3V3);
1212	} else {
1213		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_BUS_STAT,
1214				SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
1215				SD_CLK_FORCE_STOP);
1216		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL,
1217				SD_IO_USING_1V8, SD_IO_USING_1V8);
1218		rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG,
1219				TUNE_SD18_MASK, TUNE_SD18_1V8);
1220	}
1221
1222	err = rtsx_usb_send_cmd(ucr, MODE_C, 100);
1223	mutex_unlock(&ucr->dev_mutex);
1224
1225	return err;
1226}
1227
1228static int sdmmc_card_busy(struct mmc_host *mmc)
1229{
1230	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
1231	struct rtsx_ucr *ucr = host->ucr;
1232	int err;
1233	u8 stat;
1234	u8 mask = SD_DAT3_STATUS | SD_DAT2_STATUS | SD_DAT1_STATUS
1235		| SD_DAT0_STATUS;
1236
1237	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
1238
1239	mutex_lock(&ucr->dev_mutex);
1240
1241	err = rtsx_usb_write_register(ucr, SD_BUS_STAT,
1242			SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
1243			SD_CLK_TOGGLE_EN);
1244	if (err)
1245		goto out;
1246
1247	mdelay(1);
1248
1249	err = rtsx_usb_read_register(ucr, SD_BUS_STAT, &stat);
1250	if (err)
1251		goto out;
1252
1253	err = rtsx_usb_write_register(ucr, SD_BUS_STAT,
1254			SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
1255out:
1256	mutex_unlock(&ucr->dev_mutex);
1257
1258	if (err)
1259		return err;
1260
1261	/* check if any pin between dat[0:3] is low */
1262	if ((stat & mask) != mask)
1263		return 1;
1264	else
1265		return 0;
1266}
1267
1268static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
1269{
1270	struct rtsx_usb_sdmmc *host = mmc_priv(mmc);
1271	struct rtsx_ucr *ucr = host->ucr;
1272	int err = 0;
1273
1274	if (host->host_removal)
1275		return -ENOMEDIUM;
1276
1277	mutex_lock(&ucr->dev_mutex);
1278
1279	if (!host->ddr_mode)
1280		err = sd_tuning_rx(host, MMC_SEND_TUNING_BLOCK);
1281
1282	mutex_unlock(&ucr->dev_mutex);
1283
1284	return err;
1285}
1286
1287static const struct mmc_host_ops rtsx_usb_sdmmc_ops = {
1288	.request = sdmmc_request,
1289	.set_ios = sdmmc_set_ios,
1290	.get_ro = sdmmc_get_ro,
1291	.get_cd = sdmmc_get_cd,
1292	.start_signal_voltage_switch = sdmmc_switch_voltage,
1293	.card_busy = sdmmc_card_busy,
1294	.execute_tuning = sdmmc_execute_tuning,
1295};
1296
1297#ifdef RTSX_USB_USE_LEDS_CLASS
1298static void rtsx_usb_led_control(struct led_classdev *led,
1299	enum led_brightness brightness)
1300{
1301	struct rtsx_usb_sdmmc *host = container_of(led,
1302			struct rtsx_usb_sdmmc, led);
1303
1304	if (host->host_removal)
1305		return;
1306
1307	host->led.brightness = brightness;
1308	schedule_work(&host->led_work);
1309}
1310
1311static void rtsx_usb_update_led(struct work_struct *work)
1312{
1313	struct rtsx_usb_sdmmc *host =
1314		container_of(work, struct rtsx_usb_sdmmc, led_work);
1315	struct rtsx_ucr *ucr = host->ucr;
1316
1317	mutex_lock(&ucr->dev_mutex);
1318
1319	if (host->led.brightness == LED_OFF)
1320		rtsx_usb_turn_off_led(ucr);
1321	else
1322		rtsx_usb_turn_on_led(ucr);
1323
1324	mutex_unlock(&ucr->dev_mutex);
1325}
1326#endif
1327
1328static void rtsx_usb_init_host(struct rtsx_usb_sdmmc *host)
1329{
1330	struct mmc_host *mmc = host->mmc;
1331
1332	mmc->f_min = 250000;
1333	mmc->f_max = 208000000;
1334	mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
1335	mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED |
1336		MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST |
1337		MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR50 |
1338		MMC_CAP_NEEDS_POLL;
1339	mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE;
1340
1341	mmc->max_current_330 = 400;
1342	mmc->max_current_180 = 800;
1343	mmc->ops = &rtsx_usb_sdmmc_ops;
1344	mmc->max_segs = 256;
1345	mmc->max_seg_size = 65536;
1346	mmc->max_blk_size = 512;
1347	mmc->max_blk_count = 65535;
1348	mmc->max_req_size = 524288;
1349
1350	host->power_mode = MMC_POWER_OFF;
1351}
1352
1353static int rtsx_usb_sdmmc_drv_probe(struct platform_device *pdev)
1354{
1355	struct mmc_host *mmc;
1356	struct rtsx_usb_sdmmc *host;
1357	struct rtsx_ucr *ucr;
1358#ifdef RTSX_USB_USE_LEDS_CLASS
1359	int err;
1360#endif
1361
1362	ucr = usb_get_intfdata(to_usb_interface(pdev->dev.parent));
1363	if (!ucr)
1364		return -ENXIO;
1365
1366	dev_dbg(&(pdev->dev), ": Realtek USB SD/MMC controller found\n");
1367
1368	mmc = mmc_alloc_host(sizeof(*host), &pdev->dev);
1369	if (!mmc)
1370		return -ENOMEM;
1371
1372	host = mmc_priv(mmc);
1373	host->ucr = ucr;
1374	host->mmc = mmc;
1375	host->pdev = pdev;
1376	platform_set_drvdata(pdev, host);
1377
1378	mutex_init(&host->host_mutex);
1379	rtsx_usb_init_host(host);
1380	pm_runtime_enable(&pdev->dev);
1381
1382#ifdef RTSX_USB_USE_LEDS_CLASS
1383	snprintf(host->led_name, sizeof(host->led_name),
1384		"%s::", mmc_hostname(mmc));
1385	host->led.name = host->led_name;
1386	host->led.brightness = LED_OFF;
1387	host->led.default_trigger = mmc_hostname(mmc);
1388	host->led.brightness_set = rtsx_usb_led_control;
1389
1390	err = led_classdev_register(mmc_dev(mmc), &host->led);
1391	if (err)
1392		dev_err(&(pdev->dev),
1393				"Failed to register LED device: %d\n", err);
1394	INIT_WORK(&host->led_work, rtsx_usb_update_led);
1395
1396#endif
1397	mmc_add_host(mmc);
1398
1399	return 0;
1400}
1401
1402static int rtsx_usb_sdmmc_drv_remove(struct platform_device *pdev)
1403{
1404	struct rtsx_usb_sdmmc *host = platform_get_drvdata(pdev);
1405	struct mmc_host *mmc;
1406
1407	if (!host)
1408		return 0;
1409
1410	mmc = host->mmc;
1411	host->host_removal = true;
1412
1413	mutex_lock(&host->host_mutex);
1414	if (host->mrq) {
1415		dev_dbg(&(pdev->dev),
1416			"%s: Controller removed during transfer\n",
1417			mmc_hostname(mmc));
1418		host->mrq->cmd->error = -ENOMEDIUM;
1419		if (host->mrq->stop)
1420			host->mrq->stop->error = -ENOMEDIUM;
1421		mmc_request_done(mmc, host->mrq);
1422	}
1423	mutex_unlock(&host->host_mutex);
1424
1425	mmc_remove_host(mmc);
1426
1427#ifdef RTSX_USB_USE_LEDS_CLASS
1428	cancel_work_sync(&host->led_work);
1429	led_classdev_unregister(&host->led);
1430#endif
1431
1432	mmc_free_host(mmc);
1433	pm_runtime_disable(&pdev->dev);
1434	platform_set_drvdata(pdev, NULL);
1435
1436	dev_dbg(&(pdev->dev),
1437		": Realtek USB SD/MMC module has been removed\n");
1438
1439	return 0;
1440}
1441
1442static struct platform_device_id rtsx_usb_sdmmc_ids[] = {
1443	{
1444		.name = "rtsx_usb_sdmmc",
1445	}, {
1446		/* sentinel */
1447	}
1448};
1449MODULE_DEVICE_TABLE(platform, rtsx_usb_sdmmc_ids);
1450
1451static struct platform_driver rtsx_usb_sdmmc_driver = {
1452	.probe		= rtsx_usb_sdmmc_drv_probe,
1453	.remove		= rtsx_usb_sdmmc_drv_remove,
1454	.id_table       = rtsx_usb_sdmmc_ids,
1455	.driver		= {
1456		.name	= "rtsx_usb_sdmmc",
1457	},
1458};
1459module_platform_driver(rtsx_usb_sdmmc_driver);
1460
1461MODULE_LICENSE("GPL v2");
1462MODULE_AUTHOR("Roger Tseng <rogerable@realtek.com>");
1463MODULE_DESCRIPTION("Realtek USB SD/MMC Card Host Driver");
1464