Lines Matching refs:wrp

1217 	int (*pwrap_read)(struct pmic_wrapper *wrp, u32 adr, u32 *rdata);
1218 int (*pwrap_write)(struct pmic_wrapper *wrp, u32 adr, u32 wdata);
1255 int (*init_reg_clock)(struct pmic_wrapper *wrp);
1256 int (*init_soc_specific)(struct pmic_wrapper *wrp);
1259 static u32 pwrap_readl(struct pmic_wrapper *wrp, enum pwrap_regs reg) in pwrap_readl() argument
1261 return readl(wrp->base + wrp->master->regs[reg]); in pwrap_readl()
1264 static void pwrap_writel(struct pmic_wrapper *wrp, u32 val, enum pwrap_regs reg) in pwrap_writel() argument
1266 writel(val, wrp->base + wrp->master->regs[reg]); in pwrap_writel()
1269 static u32 pwrap_get_fsm_state(struct pmic_wrapper *wrp) in pwrap_get_fsm_state() argument
1273 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_get_fsm_state()
1274 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_get_fsm_state()
1280 static bool pwrap_is_fsm_idle(struct pmic_wrapper *wrp) in pwrap_is_fsm_idle() argument
1282 return pwrap_get_fsm_state(wrp) == PWRAP_WACS_FSM_IDLE; in pwrap_is_fsm_idle()
1285 static bool pwrap_is_fsm_vldclr(struct pmic_wrapper *wrp) in pwrap_is_fsm_vldclr() argument
1287 return pwrap_get_fsm_state(wrp) == PWRAP_WACS_FSM_WFVLDCLR; in pwrap_is_fsm_vldclr()
1298 static inline void pwrap_leave_fsm_vldclr(struct pmic_wrapper *wrp) in pwrap_leave_fsm_vldclr() argument
1300 if (pwrap_is_fsm_vldclr(wrp)) in pwrap_leave_fsm_vldclr()
1301 pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); in pwrap_leave_fsm_vldclr()
1304 static bool pwrap_is_sync_idle(struct pmic_wrapper *wrp) in pwrap_is_sync_idle() argument
1306 return pwrap_readl(wrp, PWRAP_WACS2_RDATA) & PWRAP_STATE_SYNC_IDLE0; in pwrap_is_sync_idle()
1309 static bool pwrap_is_fsm_idle_and_sync_idle(struct pmic_wrapper *wrp) in pwrap_is_fsm_idle_and_sync_idle() argument
1311 u32 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_is_fsm_idle_and_sync_idle()
1317 static int pwrap_read16(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) in pwrap_read16() argument
1323 ret = readx_poll_timeout(pwrap_is_fsm_idle, wrp, tmp, tmp, in pwrap_read16()
1326 pwrap_leave_fsm_vldclr(wrp); in pwrap_read16()
1330 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_read16()
1334 pwrap_writel(wrp, val, PWRAP_WACS2_CMD); in pwrap_read16()
1336 ret = readx_poll_timeout(pwrap_is_fsm_vldclr, wrp, tmp, tmp, in pwrap_read16()
1341 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_read16()
1342 val = pwrap_readl(wrp, PWRAP_SWINF_2_RDATA_31_0); in pwrap_read16()
1344 val = pwrap_readl(wrp, PWRAP_WACS2_RDATA); in pwrap_read16()
1347 pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); in pwrap_read16()
1352 static int pwrap_read32(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) in pwrap_read32() argument
1359 ret = readx_poll_timeout(pwrap_is_fsm_idle, wrp, tmp, tmp, in pwrap_read32()
1363 pwrap_leave_fsm_vldclr(wrp); in pwrap_read32()
1367 pwrap_writel(wrp, ((msb << 30) | (adr << 16)), in pwrap_read32()
1370 ret = readx_poll_timeout(pwrap_is_fsm_vldclr, wrp, tmp, tmp, in pwrap_read32()
1375 *rdata += (PWRAP_GET_WACS_RDATA(pwrap_readl(wrp, in pwrap_read32()
1378 pwrap_writel(wrp, 1, PWRAP_WACS2_VLDCLR); in pwrap_read32()
1384 static int pwrap_read(struct pmic_wrapper *wrp, u32 adr, u32 *rdata) in pwrap_read() argument
1386 return wrp->slave->regops->pwrap_read(wrp, adr, rdata); in pwrap_read()
1389 static int pwrap_write16(struct pmic_wrapper *wrp, u32 adr, u32 wdata) in pwrap_write16() argument
1394 ret = readx_poll_timeout(pwrap_is_fsm_idle, wrp, tmp, tmp, in pwrap_write16()
1397 pwrap_leave_fsm_vldclr(wrp); in pwrap_write16()
1401 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) { in pwrap_write16()
1402 pwrap_writel(wrp, wdata, PWRAP_SWINF_2_WDATA_31_0); in pwrap_write16()
1403 pwrap_writel(wrp, BIT(29) | adr, PWRAP_WACS2_CMD); in pwrap_write16()
1405 pwrap_writel(wrp, BIT(31) | ((adr >> 1) << 16) | wdata, in pwrap_write16()
1412 static int pwrap_write32(struct pmic_wrapper *wrp, u32 adr, u32 wdata) in pwrap_write32() argument
1418 ret = readx_poll_timeout(pwrap_is_fsm_idle, wrp, tmp, tmp, in pwrap_write32()
1421 pwrap_leave_fsm_vldclr(wrp); in pwrap_write32()
1425 pwrap_writel(wrp, (1 << 31) | (msb << 30) | (adr << 16) | in pwrap_write32()
1437 pwrap_read(wrp, adr, &rdata); in pwrap_write32()
1443 static int pwrap_write(struct pmic_wrapper *wrp, u32 adr, u32 wdata) in pwrap_write() argument
1445 return wrp->slave->regops->pwrap_write(wrp, adr, wdata); in pwrap_write()
1458 static int pwrap_reset_spislave(struct pmic_wrapper *wrp) in pwrap_reset_spislave() argument
1463 pwrap_writel(wrp, 0, PWRAP_HIPRIO_ARB_EN); in pwrap_reset_spislave()
1464 pwrap_writel(wrp, 0, PWRAP_WRAP_EN); in pwrap_reset_spislave()
1465 pwrap_writel(wrp, 1, PWRAP_MUX_SEL); in pwrap_reset_spislave()
1466 pwrap_writel(wrp, 1, PWRAP_MAN_EN); in pwrap_reset_spislave()
1467 pwrap_writel(wrp, 0, PWRAP_DIO_EN); in pwrap_reset_spislave()
1469 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSL, in pwrap_reset_spislave()
1471 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1473 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSH, in pwrap_reset_spislave()
1477 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1480 ret = readx_poll_timeout(pwrap_is_sync_idle, wrp, tmp, tmp, in pwrap_reset_spislave()
1483 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_reset_spislave()
1487 pwrap_writel(wrp, 0, PWRAP_MAN_EN); in pwrap_reset_spislave()
1488 pwrap_writel(wrp, 0, PWRAP_MUX_SEL); in pwrap_reset_spislave()
1499 static int pwrap_init_sidly(struct pmic_wrapper *wrp) in pwrap_init_sidly() argument
1509 pwrap_writel(wrp, i, PWRAP_SIDLY); in pwrap_init_sidly()
1510 pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], in pwrap_init_sidly()
1513 dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); in pwrap_init_sidly()
1519 dev_err(wrp->dev, "sidly pass range 0x%x not continuous\n", in pwrap_init_sidly()
1524 pwrap_writel(wrp, dly[pass], PWRAP_SIDLY); in pwrap_init_sidly()
1529 static int pwrap_init_dual_io(struct pmic_wrapper *wrp) in pwrap_init_dual_io() argument
1536 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); in pwrap_init_dual_io()
1539 ret = readx_poll_timeout(pwrap_is_fsm_idle_and_sync_idle, wrp, tmp, tmp, in pwrap_init_dual_io()
1542 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_init_dual_io()
1546 pwrap_writel(wrp, 1, PWRAP_DIO_EN); in pwrap_init_dual_io()
1549 pwrap_read(wrp, in pwrap_init_dual_io()
1550 wrp->slave->dew_regs[PWRAP_DEW_READ_TEST], &rdata); in pwrap_init_dual_io()
1552 dev_err(wrp->dev, in pwrap_init_dual_io()
1565 static void pwrap_init_chip_select_ext(struct pmic_wrapper *wrp, u8 hext_write, in pwrap_init_chip_select_ext() argument
1574 pwrap_writel(wrp, hext_write, PWRAP_CSHEXT_WRITE); in pwrap_init_chip_select_ext()
1575 pwrap_writel(wrp, hext_read, PWRAP_CSHEXT_READ); in pwrap_init_chip_select_ext()
1582 pwrap_writel(wrp, lext_start, PWRAP_CSLEXT_START); in pwrap_init_chip_select_ext()
1583 pwrap_writel(wrp, lext_end, PWRAP_CSLEXT_END); in pwrap_init_chip_select_ext()
1586 static int pwrap_common_init_reg_clock(struct pmic_wrapper *wrp) in pwrap_common_init_reg_clock() argument
1588 switch (wrp->master->type) { in pwrap_common_init_reg_clock()
1590 pwrap_init_chip_select_ext(wrp, 0, 4, 2, 2); in pwrap_common_init_reg_clock()
1593 pwrap_writel(wrp, 0x4, PWRAP_CSHEXT); in pwrap_common_init_reg_clock()
1594 pwrap_init_chip_select_ext(wrp, 0, 4, 0, 0); in pwrap_common_init_reg_clock()
1603 static int pwrap_mt2701_init_reg_clock(struct pmic_wrapper *wrp) in pwrap_mt2701_init_reg_clock() argument
1605 switch (wrp->slave->type) { in pwrap_mt2701_init_reg_clock()
1607 pwrap_writel(wrp, 0xc, PWRAP_RDDMY); in pwrap_mt2701_init_reg_clock()
1608 pwrap_init_chip_select_ext(wrp, 4, 0, 2, 2); in pwrap_mt2701_init_reg_clock()
1612 pwrap_writel(wrp, 0x8, PWRAP_RDDMY); in pwrap_mt2701_init_reg_clock()
1613 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_RDDMY_NO], in pwrap_mt2701_init_reg_clock()
1615 pwrap_init_chip_select_ext(wrp, 5, 0, 2, 2); in pwrap_mt2701_init_reg_clock()
1624 static bool pwrap_is_cipher_ready(struct pmic_wrapper *wrp) in pwrap_is_cipher_ready() argument
1626 return pwrap_readl(wrp, PWRAP_CIPHER_RDY) & 1; in pwrap_is_cipher_ready()
1629 static bool pwrap_is_pmic_cipher_ready(struct pmic_wrapper *wrp) in pwrap_is_pmic_cipher_ready() argument
1634 ret = pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_RDY], in pwrap_is_pmic_cipher_ready()
1642 static int pwrap_init_cipher(struct pmic_wrapper *wrp) in pwrap_init_cipher() argument
1648 pwrap_writel(wrp, 0x1, PWRAP_CIPHER_SWRST); in pwrap_init_cipher()
1649 pwrap_writel(wrp, 0x0, PWRAP_CIPHER_SWRST); in pwrap_init_cipher()
1650 pwrap_writel(wrp, 0x1, PWRAP_CIPHER_KEY_SEL); in pwrap_init_cipher()
1651 pwrap_writel(wrp, 0x2, PWRAP_CIPHER_IV_SEL); in pwrap_init_cipher()
1653 switch (wrp->master->type) { in pwrap_init_cipher()
1655 pwrap_writel(wrp, 1, PWRAP_CIPHER_LOAD); in pwrap_init_cipher()
1656 pwrap_writel(wrp, 1, PWRAP_CIPHER_START); in pwrap_init_cipher()
1666 pwrap_writel(wrp, 1, PWRAP_CIPHER_EN); in pwrap_init_cipher()
1669 pwrap_writel(wrp, 0, PWRAP_CIPHER_EN); in pwrap_init_cipher()
1678 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x1); in pwrap_init_cipher()
1679 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x0); in pwrap_init_cipher()
1680 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_KEY_SEL], 0x1); in pwrap_init_cipher()
1681 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_IV_SEL], 0x2); in pwrap_init_cipher()
1683 switch (wrp->slave->type) { in pwrap_init_cipher()
1685 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_LOAD], in pwrap_init_cipher()
1687 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_START], in pwrap_init_cipher()
1693 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_EN], in pwrap_init_cipher()
1701 ret = readx_poll_timeout(pwrap_is_cipher_ready, wrp, tmp, tmp, in pwrap_init_cipher()
1704 dev_err(wrp->dev, "cipher data ready@AP fail, ret=%d\n", ret); in pwrap_init_cipher()
1709 ret = readx_poll_timeout(pwrap_is_pmic_cipher_ready, wrp, tmp, tmp, in pwrap_init_cipher()
1712 dev_err(wrp->dev, in pwrap_init_cipher()
1718 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_MODE], 0x1); in pwrap_init_cipher()
1719 ret = readx_poll_timeout(pwrap_is_fsm_idle_and_sync_idle, wrp, tmp, tmp, in pwrap_init_cipher()
1722 dev_err(wrp->dev, "cipher mode idle fail, ret=%d\n", ret); in pwrap_init_cipher()
1726 pwrap_writel(wrp, 1, PWRAP_CIPHER_MODE); in pwrap_init_cipher()
1729 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1731 pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1734 dev_err(wrp->dev, "rdata=0x%04X\n", rdata); in pwrap_init_cipher()
1741 static int pwrap_init_security(struct pmic_wrapper *wrp) in pwrap_init_security() argument
1746 ret = pwrap_init_cipher(wrp); in pwrap_init_security()
1751 if (pwrap_write(wrp, in pwrap_init_security()
1752 wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1)) in pwrap_init_security()
1755 pwrap_writel(wrp, 0x1, PWRAP_CRC_EN); in pwrap_init_security()
1756 pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE); in pwrap_init_security()
1757 pwrap_writel(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL], in pwrap_init_security()
1759 pwrap_writel(wrp, in pwrap_init_security()
1760 wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init_security()
1765 static int pwrap_mt8135_init_soc_specific(struct pmic_wrapper *wrp) in pwrap_mt8135_init_soc_specific() argument
1768 pwrap_writel(wrp, 0x1, PWRAP_EVENT_IN_EN); in pwrap_mt8135_init_soc_specific()
1769 pwrap_writel(wrp, 0xffff, PWRAP_EVENT_DST_EN); in pwrap_mt8135_init_soc_specific()
1770 writel(0x7f, wrp->bridge_base + PWRAP_MT8135_BRIDGE_IORD_ARB_EN); in pwrap_mt8135_init_soc_specific()
1771 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS3_EN); in pwrap_mt8135_init_soc_specific()
1772 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS4_EN); in pwrap_mt8135_init_soc_specific()
1773 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_UNIT); in pwrap_mt8135_init_soc_specific()
1774 writel(0xffff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_SRC_EN); in pwrap_mt8135_init_soc_specific()
1775 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_TIMER_EN); in pwrap_mt8135_init_soc_specific()
1776 writel(0x7ff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INT_EN); in pwrap_mt8135_init_soc_specific()
1779 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8135_init_soc_specific()
1781 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8135_init_soc_specific()
1783 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8135_init_soc_specific()
1790 static int pwrap_mt8173_init_soc_specific(struct pmic_wrapper *wrp) in pwrap_mt8173_init_soc_specific() argument
1793 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8173_init_soc_specific()
1795 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8173_init_soc_specific()
1797 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8173_init_soc_specific()
1804 static int pwrap_mt2701_init_soc_specific(struct pmic_wrapper *wrp) in pwrap_mt2701_init_soc_specific() argument
1807 switch (wrp->slave->type) { in pwrap_mt2701_init_soc_specific()
1809 pwrap_writel(wrp, 0x076c, PWRAP_ADC_CMD_ADDR); in pwrap_mt2701_init_soc_specific()
1810 pwrap_writel(wrp, 0x8000, PWRAP_PWRAP_ADC_CMD); in pwrap_mt2701_init_soc_specific()
1811 pwrap_writel(wrp, 0x072c, PWRAP_ADC_RDY_ADDR); in pwrap_mt2701_init_soc_specific()
1812 pwrap_writel(wrp, 0x072e, PWRAP_ADC_RDATA_ADDR1); in pwrap_mt2701_init_soc_specific()
1813 pwrap_writel(wrp, 0x0730, PWRAP_ADC_RDATA_ADDR2); in pwrap_mt2701_init_soc_specific()
1822 static int pwrap_mt7622_init_soc_specific(struct pmic_wrapper *wrp) in pwrap_mt7622_init_soc_specific() argument
1824 pwrap_writel(wrp, 0, PWRAP_STAUPD_PRD); in pwrap_mt7622_init_soc_specific()
1826 pwrap_writel(wrp, 0x8000000, PWRAP_SPI2_CTRL); in pwrap_mt7622_init_soc_specific()
1831 static int pwrap_mt8183_init_soc_specific(struct pmic_wrapper *wrp) in pwrap_mt8183_init_soc_specific() argument
1833 pwrap_writel(wrp, 0xf5, PWRAP_STAUPD_GRPEN); in pwrap_mt8183_init_soc_specific()
1835 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1); in pwrap_mt8183_init_soc_specific()
1836 pwrap_writel(wrp, 1, PWRAP_CRC_EN); in pwrap_mt8183_init_soc_specific()
1837 pwrap_writel(wrp, 0x416, PWRAP_SIG_ADR); in pwrap_mt8183_init_soc_specific()
1838 pwrap_writel(wrp, 0x42e, PWRAP_EINT_STA0_ADR); in pwrap_mt8183_init_soc_specific()
1840 pwrap_writel(wrp, 1, PWRAP_WACS_P2P_EN); in pwrap_mt8183_init_soc_specific()
1841 pwrap_writel(wrp, 1, PWRAP_WACS_MD32_EN); in pwrap_mt8183_init_soc_specific()
1842 pwrap_writel(wrp, 1, PWRAP_INIT_DONE_P2P); in pwrap_mt8183_init_soc_specific()
1843 pwrap_writel(wrp, 1, PWRAP_INIT_DONE_MD32); in pwrap_mt8183_init_soc_specific()
1848 static int pwrap_init(struct pmic_wrapper *wrp) in pwrap_init() argument
1852 if (wrp->rstc) in pwrap_init()
1853 reset_control_reset(wrp->rstc); in pwrap_init()
1854 if (wrp->rstc_bridge) in pwrap_init()
1855 reset_control_reset(wrp->rstc_bridge); in pwrap_init()
1857 if (wrp->master->type == PWRAP_MT8173) { in pwrap_init()
1859 pwrap_writel(wrp, 3, PWRAP_DCM_EN); in pwrap_init()
1860 pwrap_writel(wrp, 0, PWRAP_DCM_DBC_PRD); in pwrap_init()
1863 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
1865 ret = pwrap_reset_spislave(wrp); in pwrap_init()
1870 pwrap_writel(wrp, 1, PWRAP_WRAP_EN); in pwrap_init()
1872 pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init()
1874 pwrap_writel(wrp, 1, PWRAP_WACS2_EN); in pwrap_init()
1876 ret = wrp->master->init_reg_clock(wrp); in pwrap_init()
1880 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
1882 ret = pwrap_init_sidly(wrp); in pwrap_init()
1887 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_DUALIO)) { in pwrap_init()
1889 ret = pwrap_init_dual_io(wrp); in pwrap_init()
1894 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SECURITY)) { in pwrap_init()
1896 ret = pwrap_init_security(wrp); in pwrap_init()
1901 if (wrp->master->type == PWRAP_MT8135) in pwrap_init()
1902 pwrap_writel(wrp, 0x7, PWRAP_RRARB_EN); in pwrap_init()
1904 pwrap_writel(wrp, 0x1, PWRAP_WACS0_EN); in pwrap_init()
1905 pwrap_writel(wrp, 0x1, PWRAP_WACS1_EN); in pwrap_init()
1906 pwrap_writel(wrp, 0x1, PWRAP_WACS2_EN); in pwrap_init()
1907 pwrap_writel(wrp, 0x5, PWRAP_STAUPD_PRD); in pwrap_init()
1908 pwrap_writel(wrp, 0xff, PWRAP_STAUPD_GRPEN); in pwrap_init()
1910 if (wrp->master->init_soc_specific) { in pwrap_init()
1911 ret = wrp->master->init_soc_specific(wrp); in pwrap_init()
1917 pwrap_writel(wrp, 1, PWRAP_INIT_DONE2); in pwrap_init()
1918 pwrap_writel(wrp, 1, PWRAP_INIT_DONE0); in pwrap_init()
1919 pwrap_writel(wrp, 1, PWRAP_INIT_DONE1); in pwrap_init()
1921 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_init()
1922 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE3); in pwrap_init()
1923 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE4); in pwrap_init()
1932 struct pmic_wrapper *wrp = dev_id; in pwrap_interrupt() local
1934 rdata = pwrap_readl(wrp, PWRAP_INT_FLG); in pwrap_interrupt()
1935 dev_err(wrp->dev, "unexpected interrupt int=0x%x\n", rdata); in pwrap_interrupt()
1936 pwrap_writel(wrp, 0xffffffff, PWRAP_INT_CLR); in pwrap_interrupt()
1938 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) { in pwrap_interrupt()
1939 rdata = pwrap_readl(wrp, PWRAP_INT1_FLG); in pwrap_interrupt()
1940 dev_err(wrp->dev, "unexpected interrupt int1=0x%x\n", rdata); in pwrap_interrupt()
1941 pwrap_writel(wrp, 0xffffffff, PWRAP_INT1_CLR); in pwrap_interrupt()
2233 struct pmic_wrapper *wrp; in pwrap_probe() local
2245 wrp = devm_kzalloc(&pdev->dev, sizeof(*wrp), GFP_KERNEL); in pwrap_probe()
2246 if (!wrp) in pwrap_probe()
2249 platform_set_drvdata(pdev, wrp); in pwrap_probe()
2251 wrp->master = of_device_get_match_data(&pdev->dev); in pwrap_probe()
2252 wrp->slave = of_slave_id->data; in pwrap_probe()
2253 wrp->dev = &pdev->dev; in pwrap_probe()
2255 wrp->base = devm_platform_ioremap_resource_byname(pdev, "pwrap"); in pwrap_probe()
2256 if (IS_ERR(wrp->base)) in pwrap_probe()
2257 return PTR_ERR(wrp->base); in pwrap_probe()
2259 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_RESET)) { in pwrap_probe()
2260 wrp->rstc = devm_reset_control_get(wrp->dev, "pwrap"); in pwrap_probe()
2261 if (IS_ERR(wrp->rstc)) { in pwrap_probe()
2262 ret = PTR_ERR(wrp->rstc); in pwrap_probe()
2263 dev_dbg(wrp->dev, "cannot get pwrap reset: %d\n", ret); in pwrap_probe()
2268 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_probe()
2269 wrp->bridge_base = devm_platform_ioremap_resource_byname(pdev, "pwrap-bridge"); in pwrap_probe()
2270 if (IS_ERR(wrp->bridge_base)) in pwrap_probe()
2271 return PTR_ERR(wrp->bridge_base); in pwrap_probe()
2273 wrp->rstc_bridge = devm_reset_control_get(wrp->dev, in pwrap_probe()
2275 if (IS_ERR(wrp->rstc_bridge)) { in pwrap_probe()
2276 ret = PTR_ERR(wrp->rstc_bridge); in pwrap_probe()
2277 dev_dbg(wrp->dev, in pwrap_probe()
2283 wrp->clk_spi = devm_clk_get(wrp->dev, "spi"); in pwrap_probe()
2284 if (IS_ERR(wrp->clk_spi)) { in pwrap_probe()
2285 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2286 PTR_ERR(wrp->clk_spi)); in pwrap_probe()
2287 return PTR_ERR(wrp->clk_spi); in pwrap_probe()
2290 wrp->clk_wrap = devm_clk_get(wrp->dev, "wrap"); in pwrap_probe()
2291 if (IS_ERR(wrp->clk_wrap)) { in pwrap_probe()
2292 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2293 PTR_ERR(wrp->clk_wrap)); in pwrap_probe()
2294 return PTR_ERR(wrp->clk_wrap); in pwrap_probe()
2297 wrp->clk_sys = devm_clk_get_optional(wrp->dev, "sys"); in pwrap_probe()
2298 if (IS_ERR(wrp->clk_sys)) { in pwrap_probe()
2299 return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_sys), in pwrap_probe()
2301 wrp->clk_sys); in pwrap_probe()
2304 wrp->clk_tmr = devm_clk_get_optional(wrp->dev, "tmr"); in pwrap_probe()
2305 if (IS_ERR(wrp->clk_tmr)) { in pwrap_probe()
2306 return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_tmr), in pwrap_probe()
2308 wrp->clk_tmr); in pwrap_probe()
2311 ret = clk_prepare_enable(wrp->clk_spi); in pwrap_probe()
2315 ret = clk_prepare_enable(wrp->clk_wrap); in pwrap_probe()
2319 ret = clk_prepare_enable(wrp->clk_sys); in pwrap_probe()
2323 ret = clk_prepare_enable(wrp->clk_tmr); in pwrap_probe()
2328 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_DCM)) { in pwrap_probe()
2329 pwrap_writel(wrp, 1, PWRAP_DCM_EN); in pwrap_probe()
2330 pwrap_writel(wrp, 0, PWRAP_DCM_DBC_PRD); in pwrap_probe()
2337 if (!pwrap_readl(wrp, PWRAP_INIT_DONE2)) { in pwrap_probe()
2338 ret = pwrap_init(wrp); in pwrap_probe()
2340 dev_dbg(wrp->dev, "init failed with %d\n", ret); in pwrap_probe()
2345 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2347 else if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB_MT8186)) in pwrap_probe()
2352 if (!(pwrap_readl(wrp, PWRAP_WACS2_RDATA) & mask_done)) { in pwrap_probe()
2353 dev_dbg(wrp->dev, "initialization isn't finished\n"); in pwrap_probe()
2359 if (!HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2360 pwrap_writel(wrp, 0xf, PWRAP_WDT_UNIT); in pwrap_probe()
2366 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN); in pwrap_probe()
2367 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_WDT_SRC1)) in pwrap_probe()
2368 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN_1); in pwrap_probe()
2370 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2371 pwrap_writel(wrp, 0x3, PWRAP_TIMER_EN); in pwrap_probe()
2373 pwrap_writel(wrp, 0x1, PWRAP_TIMER_EN); in pwrap_probe()
2375 pwrap_writel(wrp, wrp->master->int_en_all, PWRAP_INT_EN); in pwrap_probe()
2380 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) in pwrap_probe()
2381 pwrap_writel(wrp, wrp->master->int1_en_all, PWRAP_INT1_EN); in pwrap_probe()
2389 ret = devm_request_irq(wrp->dev, irq, pwrap_interrupt, in pwrap_probe()
2391 "mt-pmic-pwrap", wrp); in pwrap_probe()
2395 wrp->regmap = devm_regmap_init(wrp->dev, NULL, wrp, wrp->slave->regops->regmap); in pwrap_probe()
2396 if (IS_ERR(wrp->regmap)) { in pwrap_probe()
2397 ret = PTR_ERR(wrp->regmap); in pwrap_probe()
2401 ret = of_platform_populate(np, NULL, NULL, wrp->dev); in pwrap_probe()
2403 dev_dbg(wrp->dev, "failed to create child devices at %pOF\n", in pwrap_probe()
2411 clk_disable_unprepare(wrp->clk_tmr); in pwrap_probe()
2413 clk_disable_unprepare(wrp->clk_sys); in pwrap_probe()
2415 clk_disable_unprepare(wrp->clk_wrap); in pwrap_probe()
2417 clk_disable_unprepare(wrp->clk_spi); in pwrap_probe()