1c0e5f4e7SRui Feng /* SPDX-License-Identifier: GPL-2.0-only */ 2c0e5f4e7SRui Feng /* Driver for Realtek PCI-Express card reader 3c0e5f4e7SRui Feng * 4c0e5f4e7SRui Feng * Copyright(c) 2018-2019 Realtek Semiconductor Corp. All rights reserved. 5c0e5f4e7SRui Feng * 6c0e5f4e7SRui Feng * Author: 7c0e5f4e7SRui Feng * Rui FENG <rui_feng@realsil.com.cn> 8c0e5f4e7SRui Feng * Wei WANG <wei_wang@realsil.com.cn> 9c0e5f4e7SRui Feng */ 10c0e5f4e7SRui Feng #ifndef RTS5261_H 11c0e5f4e7SRui Feng #define RTS5261_H 12c0e5f4e7SRui Feng 13c0e5f4e7SRui Feng /*New add*/ 14c0e5f4e7SRui Feng #define rts5261_vendor_setting_valid(reg) ((reg) & 0x010000) 150a3bbf92SRui Feng #define rts5261_reg_to_aspm(reg) \ 160a3bbf92SRui Feng (((~(reg) >> 28) & 0x02) | (((reg) >> 28) & 0x01)) 17c0e5f4e7SRui Feng #define rts5261_reg_check_reverse_socket(reg) ((reg) & 0x04) 18*6f61dd28SRui Feng #define rts5261_reg_to_sd30_drive_sel_1v8(reg) (((reg) >> 22) & 0x03) 19*6f61dd28SRui Feng #define rts5261_reg_to_sd30_drive_sel_3v3(reg) (((reg) >> 16) & 0x03) 20c0e5f4e7SRui Feng 21c0e5f4e7SRui Feng #define RTS5261_AUTOLOAD_CFG0 0xFF7B 22c0e5f4e7SRui Feng #define RTS5261_AUTOLOAD_CFG1 0xFF7C 23c0e5f4e7SRui Feng #define RTS5261_AUTOLOAD_CFG2 0xFF7D 24c0e5f4e7SRui Feng #define RTS5261_AUTOLOAD_CFG3 0xFF7E 25c0e5f4e7SRui Feng #define RTS5261_AUTOLOAD_CFG4 0xFF7F 26c0e5f4e7SRui Feng #define RTS5261_FORCE_PRSNT_LOW (1 << 6) 27c0e5f4e7SRui Feng #define RTS5261_AUX_CLK_16M_EN (1 << 5) 28c0e5f4e7SRui Feng 29c0e5f4e7SRui Feng #define RTS5261_REG_VREF 0xFE97 30c0e5f4e7SRui Feng #define RTS5261_PWD_SUSPND_EN (1 << 4) 31c0e5f4e7SRui Feng 32c0e5f4e7SRui Feng #define RTS5261_PAD_H3L1 0xFF79 33c0e5f4e7SRui Feng #define PAD_GPIO_H3L1 (1 << 3) 34c0e5f4e7SRui Feng 35c0e5f4e7SRui Feng /* SSC_CTL2 0xFC12 */ 36c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_MASK 0x07 37c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_DISALBE 0x00 38c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_8M 0x01 39c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_4M 0x02 40c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_2M 0x03 41c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_1M 0x04 42c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_512K 0x05 43c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_256K 0x06 44c0e5f4e7SRui Feng #define RTS5261_SSC_DEPTH_128K 0x07 45c0e5f4e7SRui Feng 46c0e5f4e7SRui Feng /* efuse control register*/ 47c0e5f4e7SRui Feng #define RTS5261_EFUSE_CTL 0xFC30 48c0e5f4e7SRui Feng #define RTS5261_EFUSE_ENABLE 0x80 49c0e5f4e7SRui Feng /* EFUSE_MODE: 0=READ 1=PROGRAM */ 50c0e5f4e7SRui Feng #define RTS5261_EFUSE_MODE_MASK 0x40 51c0e5f4e7SRui Feng #define RTS5261_EFUSE_PROGRAM 0x40 52c0e5f4e7SRui Feng 53c0e5f4e7SRui Feng #define RTS5261_EFUSE_ADDR 0xFC31 54c0e5f4e7SRui Feng #define RTS5261_EFUSE_ADDR_MASK 0x3F 55c0e5f4e7SRui Feng 56c0e5f4e7SRui Feng #define RTS5261_EFUSE_WRITE_DATA 0xFC32 57c0e5f4e7SRui Feng #define RTS5261_EFUSE_READ_DATA 0xFC34 58c0e5f4e7SRui Feng 59c0e5f4e7SRui Feng /* DMACTL 0xFE2C */ 60c0e5f4e7SRui Feng #define RTS5261_DMA_PACK_SIZE_MASK 0xF0 61c0e5f4e7SRui Feng 62c0e5f4e7SRui Feng /* FW status register */ 63c0e5f4e7SRui Feng #define RTS5261_FW_STATUS 0xFF56 64c0e5f4e7SRui Feng #define RTS5261_EXPRESS_LINK_FAIL_MASK (0x01<<7) 65c0e5f4e7SRui Feng 66c0e5f4e7SRui Feng /* FW control register */ 67c0e5f4e7SRui Feng #define RTS5261_FW_CTL 0xFF5F 68c0e5f4e7SRui Feng #define RTS5261_INFORM_RTD3_COLD (0x01<<5) 69c0e5f4e7SRui Feng 70c0e5f4e7SRui Feng #define RTS5261_REG_FPDCTL 0xFF60 71c0e5f4e7SRui Feng 72c0e5f4e7SRui Feng #define RTS5261_REG_LDO12_CFG 0xFF6E 73c0e5f4e7SRui Feng #define RTS5261_LDO12_VO_TUNE_MASK (0x07<<1) 74c0e5f4e7SRui Feng #define RTS5261_LDO12_115 (0x03<<1) 75c0e5f4e7SRui Feng #define RTS5261_LDO12_120 (0x04<<1) 76c0e5f4e7SRui Feng #define RTS5261_LDO12_125 (0x05<<1) 77c0e5f4e7SRui Feng #define RTS5261_LDO12_130 (0x06<<1) 78c0e5f4e7SRui Feng #define RTS5261_LDO12_135 (0x07<<1) 79c0e5f4e7SRui Feng 80c0e5f4e7SRui Feng /* LDO control register */ 81c0e5f4e7SRui Feng #define RTS5261_CARD_PWR_CTL 0xFD50 82c0e5f4e7SRui Feng #define RTS5261_SD_CLK_ISO (0x01<<7) 83c0e5f4e7SRui Feng #define RTS5261_PAD_SD_DAT_FW_CTRL (0x01<<6) 84c0e5f4e7SRui Feng #define RTS5261_PUPDC (0x01<<5) 85c0e5f4e7SRui Feng #define RTS5261_SD_CMD_ISO (0x01<<4) 86c0e5f4e7SRui Feng #define RTS5261_SD_DAT_ISO_MASK (0x0F<<0) 87c0e5f4e7SRui Feng 88c0e5f4e7SRui Feng #define RTS5261_LDO1233318_POW_CTL 0xFF70 89c0e5f4e7SRui Feng #define RTS5261_LDO3318_POWERON (0x01<<3) 90c0e5f4e7SRui Feng #define RTS5261_LDO3_POWERON (0x01<<2) 91c0e5f4e7SRui Feng #define RTS5261_LDO2_POWERON (0x01<<1) 92c0e5f4e7SRui Feng #define RTS5261_LDO1_POWERON (0x01<<0) 93c0e5f4e7SRui Feng #define RTS5261_LDO_POWERON_MASK (0x0F<<0) 94c0e5f4e7SRui Feng 95c0e5f4e7SRui Feng #define RTS5261_DV3318_CFG 0xFF71 96c0e5f4e7SRui Feng #define RTS5261_DV3318_TUNE_MASK (0x07<<4) 97c0e5f4e7SRui Feng #define RTS5261_DV3318_18 (0x02<<4) 98c0e5f4e7SRui Feng #define RTS5261_DV3318_19 (0x04<<4) 99c0e5f4e7SRui Feng #define RTS5261_DV3318_33 (0x07<<4) 100c0e5f4e7SRui Feng 101c0e5f4e7SRui Feng /* CRD6603-433 190319 request changed */ 102c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_740 (0x00<<5) 103c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_800 (0x01<<5) 104c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_860 (0x02<<5) 105c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_920 (0x03<<5) 106c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_980 (0x04<<5) 107c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_1040 (0x05<<5) 108c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_1100 (0x06<<5) 109c0e5f4e7SRui Feng #define RTS5261_LDO1_OCP_THD_1160 (0x07<<5) 110c0e5f4e7SRui Feng 111c0e5f4e7SRui Feng #define RTS5261_LDO1_LMT_THD_450 (0x00<<2) 112c0e5f4e7SRui Feng #define RTS5261_LDO1_LMT_THD_1000 (0x01<<2) 113c0e5f4e7SRui Feng #define RTS5261_LDO1_LMT_THD_1500 (0x02<<2) 114c0e5f4e7SRui Feng #define RTS5261_LDO1_LMT_THD_2000 (0x03<<2) 115c0e5f4e7SRui Feng 116c0e5f4e7SRui Feng #define RTS5261_LDO1_CFG1 0xFF73 117c0e5f4e7SRui Feng #define RTS5261_LDO1_TUNE_MASK (0x07<<1) 118c0e5f4e7SRui Feng #define RTS5261_LDO1_18 (0x05<<1) 119c0e5f4e7SRui Feng #define RTS5261_LDO1_33 (0x07<<1) 120c0e5f4e7SRui Feng #define RTS5261_LDO1_PWD_MASK (0x01<<0) 121c0e5f4e7SRui Feng 122c0e5f4e7SRui Feng #define RTS5261_LDO2_CFG0 0xFF74 123c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_MASK (0x07<<5) 124c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_EN (0x01<<4) 125c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_LMT_THD_MASK (0x03<<2) 126c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_LMT_EN (0x01<<1) 127c0e5f4e7SRui Feng 128c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_620 (0x00<<5) 129c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_650 (0x01<<5) 130c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_680 (0x02<<5) 131c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_720 (0x03<<5) 132c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_750 (0x04<<5) 133c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_780 (0x05<<5) 134c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_810 (0x06<<5) 135c0e5f4e7SRui Feng #define RTS5261_LDO2_OCP_THD_840 (0x07<<5) 136c0e5f4e7SRui Feng 137c0e5f4e7SRui Feng #define RTS5261_LDO2_CFG1 0xFF75 138c0e5f4e7SRui Feng #define RTS5261_LDO2_TUNE_MASK (0x07<<1) 139c0e5f4e7SRui Feng #define RTS5261_LDO2_18 (0x05<<1) 140c0e5f4e7SRui Feng #define RTS5261_LDO2_33 (0x07<<1) 141c0e5f4e7SRui Feng #define RTS5261_LDO2_PWD_MASK (0x01<<0) 142c0e5f4e7SRui Feng 143c0e5f4e7SRui Feng #define RTS5261_LDO3_CFG0 0xFF76 144c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_MASK (0x07<<5) 145c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_EN (0x01<<4) 146c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_LMT_THD_MASK (0x03<<2) 147c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_LMT_EN (0x01<<1) 148c0e5f4e7SRui Feng 149c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_620 (0x00<<5) 150c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_650 (0x01<<5) 151c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_680 (0x02<<5) 152c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_720 (0x03<<5) 153c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_750 (0x04<<5) 154c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_780 (0x05<<5) 155c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_810 (0x06<<5) 156c0e5f4e7SRui Feng #define RTS5261_LDO3_OCP_THD_840 (0x07<<5) 157c0e5f4e7SRui Feng 158c0e5f4e7SRui Feng #define RTS5261_LDO3_CFG1 0xFF77 159c0e5f4e7SRui Feng #define RTS5261_LDO3_TUNE_MASK (0x07<<1) 160c0e5f4e7SRui Feng #define RTS5261_LDO3_18 (0x05<<1) 161c0e5f4e7SRui Feng #define RTS5261_LDO3_33 (0x07<<1) 162c0e5f4e7SRui Feng #define RTS5261_LDO3_PWD_MASK (0x01<<0) 163c0e5f4e7SRui Feng 164c0e5f4e7SRui Feng #define RTS5261_REG_PME_FORCE_CTL 0xFF78 165c0e5f4e7SRui Feng #define FORCE_PM_CONTROL 0x20 166c0e5f4e7SRui Feng #define FORCE_PM_VALUE 0x10 167c0e5f4e7SRui Feng #define REG_EFUSE_BYPASS 0x08 168c0e5f4e7SRui Feng #define REG_EFUSE_POR 0x04 169c0e5f4e7SRui Feng #define REG_EFUSE_POWER_MASK 0x03 170c0e5f4e7SRui Feng #define REG_EFUSE_POWERON 0x03 171c0e5f4e7SRui Feng #define REG_EFUSE_POWEROFF 0x00 172c0e5f4e7SRui Feng 173c0e5f4e7SRui Feng 174c0e5f4e7SRui Feng /* Single LUN, support SD/SD EXPRESS */ 175c0e5f4e7SRui Feng #define DEFAULT_SINGLE 0 176c0e5f4e7SRui Feng #define SD_LUN 1 177c0e5f4e7SRui Feng #define SD_EXPRESS_LUN 2 178c0e5f4e7SRui Feng 179c0e5f4e7SRui Feng /* For Change_FPGA_SSCClock Function */ 180c0e5f4e7SRui Feng #define MULTIPLY_BY_1 0x00 181c0e5f4e7SRui Feng #define MULTIPLY_BY_2 0x01 182c0e5f4e7SRui Feng #define MULTIPLY_BY_3 0x02 183c0e5f4e7SRui Feng #define MULTIPLY_BY_4 0x03 184c0e5f4e7SRui Feng #define MULTIPLY_BY_5 0x04 185c0e5f4e7SRui Feng #define MULTIPLY_BY_6 0x05 186c0e5f4e7SRui Feng #define MULTIPLY_BY_7 0x06 187c0e5f4e7SRui Feng #define MULTIPLY_BY_8 0x07 188c0e5f4e7SRui Feng #define MULTIPLY_BY_9 0x08 189c0e5f4e7SRui Feng #define MULTIPLY_BY_10 0x09 190c0e5f4e7SRui Feng 191c0e5f4e7SRui Feng #define DIVIDE_BY_2 0x01 192c0e5f4e7SRui Feng #define DIVIDE_BY_3 0x02 193c0e5f4e7SRui Feng #define DIVIDE_BY_4 0x03 194c0e5f4e7SRui Feng #define DIVIDE_BY_5 0x04 195c0e5f4e7SRui Feng #define DIVIDE_BY_6 0x05 196c0e5f4e7SRui Feng #define DIVIDE_BY_7 0x06 197c0e5f4e7SRui Feng #define DIVIDE_BY_8 0x07 198c0e5f4e7SRui Feng #define DIVIDE_BY_9 0x08 199c0e5f4e7SRui Feng #define DIVIDE_BY_10 0x09 200c0e5f4e7SRui Feng 201c0e5f4e7SRui Feng int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock, 202c0e5f4e7SRui Feng u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk); 203c0e5f4e7SRui Feng 204c0e5f4e7SRui Feng #endif /* RTS5261_H */ 205