diff options
Diffstat (limited to 'drivers/mfd/rts5229.c')
| -rw-r--r-- | drivers/mfd/rts5229.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/mfd/rts5229.c b/drivers/mfd/rts5229.c index b9dbab266fda..ec1747adf5d3 100644 --- a/drivers/mfd/rts5229.c +++ b/drivers/mfd/rts5229.c | |||
| @@ -114,6 +114,25 @@ static int rts5229_card_power_off(struct rtsx_pcr *pcr, int card) | |||
| 114 | return rtsx_pci_send_cmd(pcr, 100); | 114 | return rtsx_pci_send_cmd(pcr, 100); |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | static int rts5229_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) | ||
| 118 | { | ||
| 119 | int err; | ||
| 120 | |||
| 121 | if (voltage == OUTPUT_3V3) { | ||
| 122 | err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4FC0 | 0x24); | ||
| 123 | if (err < 0) | ||
| 124 | return err; | ||
| 125 | } else if (voltage == OUTPUT_1V8) { | ||
| 126 | err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4C40 | 0x24); | ||
| 127 | if (err < 0) | ||
| 128 | return err; | ||
| 129 | } else { | ||
| 130 | return -EINVAL; | ||
| 131 | } | ||
| 132 | |||
| 133 | return 0; | ||
| 134 | } | ||
| 135 | |||
| 117 | static const struct pcr_ops rts5229_pcr_ops = { | 136 | static const struct pcr_ops rts5229_pcr_ops = { |
| 118 | .extra_init_hw = rts5229_extra_init_hw, | 137 | .extra_init_hw = rts5229_extra_init_hw, |
| 119 | .optimize_phy = rts5229_optimize_phy, | 138 | .optimize_phy = rts5229_optimize_phy, |
| @@ -123,6 +142,7 @@ static const struct pcr_ops rts5229_pcr_ops = { | |||
| 123 | .disable_auto_blink = rts5229_disable_auto_blink, | 142 | .disable_auto_blink = rts5229_disable_auto_blink, |
| 124 | .card_power_on = rts5229_card_power_on, | 143 | .card_power_on = rts5229_card_power_on, |
| 125 | .card_power_off = rts5229_card_power_off, | 144 | .card_power_off = rts5229_card_power_off, |
| 145 | .switch_output_voltage = rts5229_switch_output_voltage, | ||
| 126 | .cd_deglitch = NULL, | 146 | .cd_deglitch = NULL, |
| 127 | }; | 147 | }; |
| 128 | 148 | ||
