diff options
Diffstat (limited to 'drivers/mfd/rtl8411.c')
| -rw-r--r-- | drivers/mfd/rtl8411.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/mfd/rtl8411.c b/drivers/mfd/rtl8411.c index 89f046ca9e41..3d3b4addf81a 100644 --- a/drivers/mfd/rtl8411.c +++ b/drivers/mfd/rtl8411.c | |||
| @@ -112,6 +112,21 @@ static int rtl8411_card_power_off(struct rtsx_pcr *pcr, int card) | |||
| 112 | BPP_LDO_POWB, BPP_LDO_SUSPEND); | 112 | BPP_LDO_POWB, BPP_LDO_SUSPEND); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | static int rtl8411_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) | ||
| 116 | { | ||
| 117 | u8 mask, val; | ||
| 118 | |||
| 119 | mask = (BPP_REG_TUNED18 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_MASK; | ||
| 120 | if (voltage == OUTPUT_3V3) | ||
| 121 | val = (BPP_ASIC_3V3 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_3V3; | ||
| 122 | else if (voltage == OUTPUT_1V8) | ||
| 123 | val = (BPP_ASIC_1V8 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_1V8; | ||
| 124 | else | ||
| 125 | return -EINVAL; | ||
| 126 | |||
| 127 | return rtsx_pci_write_register(pcr, LDO_CTL, mask, val); | ||
| 128 | } | ||
| 129 | |||
| 115 | static unsigned int rtl8411_cd_deglitch(struct rtsx_pcr *pcr) | 130 | static unsigned int rtl8411_cd_deglitch(struct rtsx_pcr *pcr) |
| 116 | { | 131 | { |
| 117 | unsigned int card_exist; | 132 | unsigned int card_exist; |
| @@ -163,6 +178,18 @@ static unsigned int rtl8411_cd_deglitch(struct rtsx_pcr *pcr) | |||
| 163 | return card_exist; | 178 | return card_exist; |
| 164 | } | 179 | } |
| 165 | 180 | ||
| 181 | static int rtl8411_conv_clk_and_div_n(int input, int dir) | ||
| 182 | { | ||
| 183 | int output; | ||
| 184 | |||
| 185 | if (dir == CLK_TO_DIV_N) | ||
| 186 | output = input * 4 / 5 - 2; | ||
| 187 | else | ||
| 188 | output = (input + 2) * 5 / 4; | ||
| 189 | |||
| 190 | return output; | ||
| 191 | } | ||
| 192 | |||
| 166 | static const struct pcr_ops rtl8411_pcr_ops = { | 193 | static const struct pcr_ops rtl8411_pcr_ops = { |
| 167 | .extra_init_hw = rtl8411_extra_init_hw, | 194 | .extra_init_hw = rtl8411_extra_init_hw, |
| 168 | .optimize_phy = NULL, | 195 | .optimize_phy = NULL, |
| @@ -172,7 +199,9 @@ static const struct pcr_ops rtl8411_pcr_ops = { | |||
| 172 | .disable_auto_blink = rtl8411_disable_auto_blink, | 199 | .disable_auto_blink = rtl8411_disable_auto_blink, |
| 173 | .card_power_on = rtl8411_card_power_on, | 200 | .card_power_on = rtl8411_card_power_on, |
| 174 | .card_power_off = rtl8411_card_power_off, | 201 | .card_power_off = rtl8411_card_power_off, |
| 202 | .switch_output_voltage = rtl8411_switch_output_voltage, | ||
| 175 | .cd_deglitch = rtl8411_cd_deglitch, | 203 | .cd_deglitch = rtl8411_cd_deglitch, |
| 204 | .conv_clk_and_div_n = rtl8411_conv_clk_and_div_n, | ||
| 176 | }; | 205 | }; |
| 177 | 206 | ||
| 178 | /* SD Pull Control Enable: | 207 | /* SD Pull Control Enable: |
