Summary
=======
This series adds to support New card reader rts5264
patch#1
Going to have new files to define rts5264 funtions,
and rts5264 register definition
patch#2
Add rts5264 to rtsx_pcr driver
patch#3
This new reader rts5264 can support sd express card
so need add the id to ths sd_init flow of rtsx_sdmmc
Patch structure
===============
v5->v6:
add more description for individual patches
v4->v5:
add summary for this series
v3->v4:
split new definition part up from same patch
v2->v3:
split misc part and mmc part
v1->v2:
remove ic version check for rts5264
Ricky Wu(3):
misc: rtsx: add to support new card reader rts5264 new
definition and function
misc: rtsx: add to support new card reader rts5264
mmc: rtsx: add rts5264 to support sd express card
drivers/misc/cardreader/Makefile | 2 +-
drivers/misc/cardreader/rts5264.c | 886 +++++++++++++++++++++++++++++
drivers/misc/cardreader/rts5264.h | 278 +++++++++
drivers/misc/cardreader/rtsx_pcr.c | 30 +-
drivers/misc/cardreader/rtsx_pcr.h | 1 +
drivers/mmc/host/rtsx_pci_sdmmc.c | 17 +-
include/linux/rtsx_pci.h | 8 +
7 files changed, 1215 insertions(+), 7 deletions(-)
create mode 100644 drivers/misc/cardreader/rts5264.c
create mode 100644 drivers/misc/cardreader/rts5264.h
--
2.25.1
rts5264 can support sd express card, so add the id in sd express card init
to do rts5264 register setting when the sd express card insert
Signed-off-by: Ricky Wu <[email protected]>
---
v3: split up mmc part from v2 patch
v4: split new definition up from v3
---
drivers/mmc/host/rtsx_pci_sdmmc.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/rtsx_pci_sdmmc.c b/drivers/mmc/host/rtsx_pci_sdmmc.c
index 87d78432a1e0..7dfe7c4e0077 100644
--- a/drivers/mmc/host/rtsx_pci_sdmmc.c
+++ b/drivers/mmc/host/rtsx_pci_sdmmc.c
@@ -7,6 +7,7 @@
* Wei WANG <[email protected]>
*/
+#include <linux/pci.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/highmem.h>
@@ -947,7 +948,7 @@ static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode)
/* send at least 74 clocks */
rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
- if (PCI_PID(pcr) == PID_5261) {
+ if ((PCI_PID(pcr) == PID_5261) || (PCI_PID(pcr) == PID_5264)) {
/*
* If test mode is set switch to SD Express mandatorily,
* this is only for factory testing.
@@ -1364,6 +1365,14 @@ static int sdmmc_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
struct realtek_pci_sdmmc *host = mmc_priv(mmc);
struct rtsx_pcr *pcr = host->pcr;
+ if (PCI_PID(pcr) == PID_5264) {
+ pcie_capability_clear_and_set_word(pcr->pci, PCI_EXP_LNKCTL2,
+ PCI_EXP_LNKCTL2_TLS, PCI_EXP_LNKCTL2_TLS_2_5GT);
+ pci_write_config_byte(pcr->pci, 0x80e, 0x02);
+ pcie_capability_clear_and_set_word(pcr->pci, PCI_EXP_LNKCTL2,
+ PCI_EXP_LNKCTL2_TLS, PCI_EXP_LNKCTL2_TLS_5_0GT);
+ }
+
/* Set relink_time for changing to PCIe card */
relink_time = 0x8FFF;
@@ -1379,6 +1388,12 @@ static int sdmmc_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
if (pcr->ops->disable_auto_blink)
pcr->ops->disable_auto_blink(pcr);
+ if (PCI_PID(pcr) == PID_5264) {
+ rtsx_pci_write_register(pcr, RTS5264_AUTOLOAD_CFG2,
+ RTS5264_CHIP_RST_N_SEL, RTS5264_CHIP_RST_N_SEL);
+ rtsx_pci_write_register(pcr, GPIO_CTL, 0x02, 0x00);
+ }
+
/* For PCIe/NVMe mode can't enter delink issue */
pcr->hw_param.interrupt_en &= ~(SD_INT_EN);
rtsx_pci_writel(pcr, RTSX_BIER, pcr->hw_param.interrupt_en);
--
2.25.1