mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-20 18:02:58 +07:00
mfd: rtsx: Configure to enter a deeper power-saving mode in S3
Set a bit to enable rts5227 and rts5249 to enter a deeper internal power-saving mode in S3, and recover it after resuming. Signed-off-by: Wei WANG <wei_wang@realsil.com.cn> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
0ccc0065c9
commit
eb891c65c9
@ -86,7 +86,7 @@ static void rtl8411b_fetch_vendor_settings(struct rtsx_pcr *pcr)
|
|||||||
map_sd_drive(rtl8411b_reg_to_sd30_drive_sel_3v3(reg));
|
map_sd_drive(rtl8411b_reg_to_sd30_drive_sel_3v3(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl8411_force_power_down(struct rtsx_pcr *pcr)
|
static void rtl8411_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
|
||||||
{
|
{
|
||||||
rtsx_pci_write_register(pcr, FPDCTL, 0x07, 0x07);
|
rtsx_pci_write_register(pcr, FPDCTL, 0x07, 0x07);
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rts5209_force_power_down(struct rtsx_pcr *pcr)
|
static void rts5209_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
|
||||||
{
|
{
|
||||||
rtsx_pci_write_register(pcr, FPDCTL, 0x07, 0x07);
|
rtsx_pci_write_register(pcr, FPDCTL, 0x07, 0x07);
|
||||||
}
|
}
|
||||||
|
@ -83,13 +83,16 @@ static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr)
|
|||||||
pcr->flags |= PCR_REVERSE_SOCKET;
|
pcr->flags |= PCR_REVERSE_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rts5227_force_power_down(struct rtsx_pcr *pcr)
|
static void rts5227_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
|
||||||
{
|
{
|
||||||
/* Set relink_time to 0 */
|
/* Set relink_time to 0 */
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 1, 0xFF, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 1, 0xFF, 0);
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 2, 0xFF, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 2, 0xFF, 0);
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 3, 0x01, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 3, 0x01, 0);
|
||||||
|
|
||||||
|
if (pm_state == HOST_ENTER_S3)
|
||||||
|
rtsx_pci_write_register(pcr, PM_CTRL3, 0x10, 0x10);
|
||||||
|
|
||||||
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,6 +126,7 @@ static int rts5227_extra_init_hw(struct rtsx_pcr *pcr)
|
|||||||
else
|
else
|
||||||
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
|
||||||
AUTOLOAD_CFG_BASE + 3, 0xB8, 0x88);
|
AUTOLOAD_CFG_BASE + 3, 0xB8, 0x88);
|
||||||
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CTRL3, 0x10, 0x00);
|
||||||
|
|
||||||
return rtsx_pci_send_cmd(pcr, 100);
|
return rtsx_pci_send_cmd(pcr, 100);
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr)
|
|||||||
map_sd_drive(rtsx_reg_to_sd30_drive_sel_3v3(reg));
|
map_sd_drive(rtsx_reg_to_sd30_drive_sel_3v3(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rts5229_force_power_down(struct rtsx_pcr *pcr)
|
static void rts5229_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
|
||||||
{
|
{
|
||||||
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
||||||
}
|
}
|
||||||
|
@ -88,13 +88,16 @@ static void rts5249_fetch_vendor_settings(struct rtsx_pcr *pcr)
|
|||||||
pcr->flags |= PCR_REVERSE_SOCKET;
|
pcr->flags |= PCR_REVERSE_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rts5249_force_power_down(struct rtsx_pcr *pcr)
|
static void rts5249_force_power_down(struct rtsx_pcr *pcr, u8 pm_state)
|
||||||
{
|
{
|
||||||
/* Set relink_time to 0 */
|
/* Set relink_time to 0 */
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 1, 0xFF, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 1, 0xFF, 0);
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 2, 0xFF, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 2, 0xFF, 0);
|
||||||
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 3, 0x01, 0);
|
rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 3, 0x01, 0);
|
||||||
|
|
||||||
|
if (pm_state == HOST_ENTER_S3)
|
||||||
|
rtsx_pci_write_register(pcr, PM_CTRL3, 0x10, 0x10);
|
||||||
|
|
||||||
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +122,7 @@ static int rts5249_extra_init_hw(struct rtsx_pcr *pcr)
|
|||||||
else
|
else
|
||||||
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
|
||||||
AUTOLOAD_CFG_BASE + 3, 0xB0, 0x80);
|
AUTOLOAD_CFG_BASE + 3, 0xB0, 0x80);
|
||||||
|
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CTRL3, 0x10, 0x00);
|
||||||
|
|
||||||
return rtsx_pci_send_cmd(pcr, 100);
|
return rtsx_pci_send_cmd(pcr, 100);
|
||||||
}
|
}
|
||||||
|
@ -939,7 +939,7 @@ static void rtsx_pci_power_off(struct rtsx_pcr *pcr, u8 pm_state)
|
|||||||
rtsx_pci_write_register(pcr, HOST_SLEEP_STATE, 0x03, pm_state);
|
rtsx_pci_write_register(pcr, HOST_SLEEP_STATE, 0x03, pm_state);
|
||||||
|
|
||||||
if (pcr->ops->force_power_down)
|
if (pcr->ops->force_power_down)
|
||||||
pcr->ops->force_power_down(pcr);
|
pcr->ops->force_power_down(pcr, pm_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
|
static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
|
||||||
|
@ -779,7 +779,7 @@ struct pcr_ops {
|
|||||||
unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr);
|
unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr);
|
||||||
int (*conv_clk_and_div_n)(int clk, int dir);
|
int (*conv_clk_and_div_n)(int clk, int dir);
|
||||||
void (*fetch_vendor_settings)(struct rtsx_pcr *pcr);
|
void (*fetch_vendor_settings)(struct rtsx_pcr *pcr);
|
||||||
void (*force_power_down)(struct rtsx_pcr *pcr);
|
void (*force_power_down)(struct rtsx_pcr *pcr, u8 pm_state);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN};
|
enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN};
|
||||||
|
Loading…
Reference in New Issue
Block a user