Lines Matching +full:mt8173 +full:- +full:spi
1 // SPDX-License-Identifier: GPL-2.0-only
438 /* MT8173 only regs */
1346 * struct pwrap_slv_type - PMIC device wrapper definitions
1395 return readl(wrp->base + wrp->master->regs[reg]); in pwrap_readl()
1400 writel(val, wrp->base + wrp->master->regs[reg]); in pwrap_writel()
1408 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_get_fsm_state()
1464 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_read16()
1475 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_read16()
1520 return wrp->slave->regops->pwrap_read(wrp, adr, rdata); in pwrap_read()
1535 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) { in pwrap_write16()
1565 * for the synchronization between two successive 16-bit in pwrap_write32()
1566 * pwrap_writel operations composing one 32-bit bus writing. in pwrap_write32()
1567 * Otherwise, we'll find the result fails on the lower 16-bit in pwrap_write32()
1579 return wrp->slave->regops->pwrap_write(wrp, adr, wdata); in pwrap_write()
1615 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSL, in pwrap_reset_spislave()
1617 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1619 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_CSH, in pwrap_reset_spislave()
1623 pwrap_writel(wrp, wrp->master->spi_w | PWRAP_MAN_CMD_OP_OUTS, in pwrap_reset_spislave()
1629 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_reset_spislave()
1640 * pwrap_init_sidly - configure serial input delay
1651 -1, 0, 1, 0, 2, -1, 1, 1, 3, -1, -1, -1, 3, -1, 2, 1 in pwrap_init_sidly()
1656 read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, in pwrap_init_sidly()
1659 dev_dbg(wrp->dev, "[Read Test] pass, SIDLY=%x\n", i); in pwrap_init_sidly()
1665 dev_err(wrp->dev, "sidly pass range 0x%x not continuous\n", in pwrap_init_sidly()
1667 return -EIO; in pwrap_init_sidly()
1682 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); in pwrap_init_dual_io()
1683 if (wrp->slave->comp_dew_regs) in pwrap_init_dual_io()
1684 pwrap_write(wrp, wrp->slave->comp_dew_regs[PWRAP_DEW_DIO_EN], 1); in pwrap_init_dual_io()
1690 dev_err(wrp->dev, "%s fail, ret=%d\n", __func__, ret); in pwrap_init_dual_io()
1697 read_ok = pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, PWRAP_DEW_READ_TEST_VAL); in pwrap_init_dual_io()
1698 if (wrp->slave->comp_dew_regs) in pwrap_init_dual_io()
1699 comp_read_ok = pwrap_pmic_read_test(wrp, wrp->slave->comp_dew_regs, in pwrap_init_dual_io()
1702 dev_err(wrp->dev, "Read failed on DIO mode. Main PMIC %s%s\n", in pwrap_init_dual_io()
1704 wrp->slave->comp_dew_regs && !comp_read_ok ? in pwrap_init_dual_io()
1706 return -EFAULT; in pwrap_init_dual_io()
1739 switch (wrp->master->type) { in pwrap_common_init_reg_clock()
1741 if (wrp->slave->type == PMIC_MT6331) { in pwrap_common_init_reg_clock()
1742 const u32 *dew_regs = wrp->slave->dew_regs; in pwrap_common_init_reg_clock()
1746 if (wrp->slave->comp_type == PMIC_MT6332) { in pwrap_common_init_reg_clock()
1747 dew_regs = wrp->slave->comp_dew_regs; in pwrap_common_init_reg_clock()
1770 switch (wrp->slave->type) { in pwrap_mt2701_init_reg_clock()
1778 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_RDDMY_NO], in pwrap_mt2701_init_reg_clock()
1809 bool ret = __pwrap_is_pmic_cipher_ready(wrp, wrp->slave->dew_regs); in pwrap_is_pmic_cipher_ready()
1815 if (wrp->slave->comp_dew_regs) in pwrap_is_pmic_cipher_ready()
1816 ret = __pwrap_is_pmic_cipher_ready(wrp, wrp->slave->comp_dew_regs); in pwrap_is_pmic_cipher_ready()
1840 switch (wrp->master->type) { in pwrap_init_cipher()
1866 pwrap_config_cipher(wrp, wrp->slave->dew_regs); in pwrap_init_cipher()
1869 if (wrp->slave->comp_type > 0) in pwrap_init_cipher()
1870 pwrap_config_cipher(wrp, wrp->slave->comp_dew_regs); in pwrap_init_cipher()
1872 switch (wrp->slave->type) { in pwrap_init_cipher()
1874 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_LOAD], in pwrap_init_cipher()
1876 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_START], in pwrap_init_cipher()
1882 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_EN], in pwrap_init_cipher()
1893 dev_err(wrp->dev, "cipher data ready@AP fail, ret=%d\n", ret); in pwrap_init_cipher()
1901 dev_err(wrp->dev, in pwrap_init_cipher()
1907 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_MODE], 0x1); in pwrap_init_cipher()
1911 dev_err(wrp->dev, "cipher mode idle fail, ret=%d\n", ret); in pwrap_init_cipher()
1918 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1920 pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_WRITE_TEST], in pwrap_init_cipher()
1923 dev_err(wrp->dev, "rdata=0x%04X\n", rdata); in pwrap_init_cipher()
1924 return -EFAULT; in pwrap_init_cipher()
1940 /* Signature checking - using CRC */ in pwrap_init_security()
1941 ret = pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1); in pwrap_init_security()
1942 if (ret == 0 && wrp->slave->comp_dew_regs) in pwrap_init_security()
1943 ret = pwrap_write(wrp, wrp->slave->comp_dew_regs[PWRAP_DEW_CRC_EN], 0x1); in pwrap_init_security()
1949 crc_val = wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL]; in pwrap_init_security()
1950 if (wrp->slave->comp_dew_regs) in pwrap_init_security()
1951 crc_val |= wrp->slave->comp_dew_regs[PWRAP_DEW_CRC_VAL] << 16; in pwrap_init_security()
1957 wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init_security()
1967 writel(0x7f, wrp->bridge_base + PWRAP_MT8135_BRIDGE_IORD_ARB_EN); in pwrap_mt8135_init_soc_specific()
1968 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS3_EN); in pwrap_mt8135_init_soc_specific()
1969 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WACS4_EN); in pwrap_mt8135_init_soc_specific()
1970 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_UNIT); in pwrap_mt8135_init_soc_specific()
1971 writel(0xffff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_WDT_SRC_EN); in pwrap_mt8135_init_soc_specific()
1972 writel(0x1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_TIMER_EN); in pwrap_mt8135_init_soc_specific()
1973 writel(0x7ff, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INT_EN); in pwrap_mt8135_init_soc_specific()
1976 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8135_init_soc_specific()
1978 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8135_init_soc_specific()
1980 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8135_init_soc_specific()
1981 return -EFAULT; in pwrap_mt8135_init_soc_specific()
1990 if (pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_OUT_EN], in pwrap_mt8173_init_soc_specific()
1992 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_EVENT_SRC_EN], in pwrap_mt8173_init_soc_specific()
1994 dev_err(wrp->dev, "enable dewrap fail\n"); in pwrap_mt8173_init_soc_specific()
1995 return -EFAULT; in pwrap_mt8173_init_soc_specific()
2004 switch (wrp->slave->type) { in pwrap_mt2701_init_soc_specific()
2023 if (wrp->slave->type == PMIC_MT6331) in pwrap_mt6795_init_soc_specific()
2026 if (wrp->slave->comp_type == PMIC_MT6332) in pwrap_mt6795_init_soc_specific()
2035 /* enable 2wire SPI master */ in pwrap_mt7622_init_soc_specific()
2045 pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1); in pwrap_mt8183_init_soc_specific()
2062 if (wrp->rstc) in pwrap_init()
2063 reset_control_reset(wrp->rstc); in pwrap_init()
2064 if (wrp->rstc_bridge) in pwrap_init()
2065 reset_control_reset(wrp->rstc_bridge); in pwrap_init()
2067 switch (wrp->master->type) { in pwrap_init()
2079 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
2080 /* Reset SPI slave */ in pwrap_init()
2088 pwrap_writel(wrp, wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); in pwrap_init()
2092 ret = wrp->master->init_reg_clock(wrp); in pwrap_init()
2096 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SPI)) { in pwrap_init()
2103 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_DUALIO)) { in pwrap_init()
2110 if (HAS_CAP(wrp->slave->caps, PWRAP_SLV_CAP_SECURITY)) { in pwrap_init()
2117 if (wrp->master->type == PWRAP_MT8135) in pwrap_init()
2126 if (wrp->master->init_soc_specific) { in pwrap_init()
2127 ret = wrp->master->init_soc_specific(wrp); in pwrap_init()
2137 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_init()
2138 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE3); in pwrap_init()
2139 writel(1, wrp->bridge_base + PWRAP_MT8135_BRIDGE_INIT_DONE4); in pwrap_init()
2151 dev_err(wrp->dev, "unexpected interrupt int=0x%x\n", rdata); in pwrap_interrupt()
2154 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) { in pwrap_interrupt()
2156 dev_err(wrp->dev, "unexpected interrupt int1=0x%x\n", rdata); in pwrap_interrupt()
2265 { .compatible = "mediatek,mt6380-regulator", .data = &pmic_mt6380 },
2452 { .compatible = "mediatek,mt2701-pwrap", .data = &pwrap_mt2701 },
2453 { .compatible = "mediatek,mt6765-pwrap", .data = &pwrap_mt6765 },
2454 { .compatible = "mediatek,mt6779-pwrap", .data = &pwrap_mt6779 },
2455 { .compatible = "mediatek,mt6795-pwrap", .data = &pwrap_mt6795 },
2456 { .compatible = "mediatek,mt6797-pwrap", .data = &pwrap_mt6797 },
2457 { .compatible = "mediatek,mt6873-pwrap", .data = &pwrap_mt6873 },
2458 { .compatible = "mediatek,mt7622-pwrap", .data = &pwrap_mt7622 },
2459 { .compatible = "mediatek,mt8135-pwrap", .data = &pwrap_mt8135 },
2460 { .compatible = "mediatek,mt8173-pwrap", .data = &pwrap_mt8173 },
2461 { .compatible = "mediatek,mt8183-pwrap", .data = &pwrap_mt8183 },
2462 { .compatible = "mediatek,mt8186-pwrap", .data = &pwrap_mt8186 },
2463 { .compatible = "mediatek,mt8195-pwrap", .data = &pwrap_mt8195 },
2464 { .compatible = "mediatek,mt8365-pwrap", .data = &pwrap_mt8365 },
2465 { .compatible = "mediatek,mt8516-pwrap", .data = &pwrap_mt8516 },
2475 struct device_node *np = pdev->dev.of_node; in pwrap_probe()
2478 if (np->child) in pwrap_probe()
2479 of_slave_id = of_match_node(of_slave_match_tbl, np->child); in pwrap_probe()
2482 dev_dbg(&pdev->dev, "slave pmic should be defined in dts\n"); in pwrap_probe()
2483 return -EINVAL; in pwrap_probe()
2486 wrp = devm_kzalloc(&pdev->dev, sizeof(*wrp), GFP_KERNEL); in pwrap_probe()
2488 return -ENOMEM; in pwrap_probe()
2492 wrp->master = of_device_get_match_data(&pdev->dev); in pwrap_probe()
2493 wrp->slave = of_slave_id->data; in pwrap_probe()
2494 wrp->dev = &pdev->dev; in pwrap_probe()
2496 wrp->base = devm_platform_ioremap_resource_byname(pdev, "pwrap"); in pwrap_probe()
2497 if (IS_ERR(wrp->base)) in pwrap_probe()
2498 return PTR_ERR(wrp->base); in pwrap_probe()
2500 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_RESET)) { in pwrap_probe()
2501 wrp->rstc = devm_reset_control_get(wrp->dev, "pwrap"); in pwrap_probe()
2502 if (IS_ERR(wrp->rstc)) { in pwrap_probe()
2503 ret = PTR_ERR(wrp->rstc); in pwrap_probe()
2504 dev_dbg(wrp->dev, "cannot get pwrap reset: %d\n", ret); in pwrap_probe()
2509 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_BRIDGE)) { in pwrap_probe()
2510 wrp->bridge_base = devm_platform_ioremap_resource_byname(pdev, "pwrap-bridge"); in pwrap_probe()
2511 if (IS_ERR(wrp->bridge_base)) in pwrap_probe()
2512 return PTR_ERR(wrp->bridge_base); in pwrap_probe()
2514 wrp->rstc_bridge = devm_reset_control_get(wrp->dev, in pwrap_probe()
2515 "pwrap-bridge"); in pwrap_probe()
2516 if (IS_ERR(wrp->rstc_bridge)) { in pwrap_probe()
2517 ret = PTR_ERR(wrp->rstc_bridge); in pwrap_probe()
2518 dev_dbg(wrp->dev, in pwrap_probe()
2519 "cannot get pwrap-bridge reset: %d\n", ret); in pwrap_probe()
2524 wrp->clk_spi = devm_clk_get(wrp->dev, "spi"); in pwrap_probe()
2525 if (IS_ERR(wrp->clk_spi)) { in pwrap_probe()
2526 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2527 PTR_ERR(wrp->clk_spi)); in pwrap_probe()
2528 return PTR_ERR(wrp->clk_spi); in pwrap_probe()
2531 wrp->clk_wrap = devm_clk_get(wrp->dev, "wrap"); in pwrap_probe()
2532 if (IS_ERR(wrp->clk_wrap)) { in pwrap_probe()
2533 dev_dbg(wrp->dev, "failed to get clock: %ld\n", in pwrap_probe()
2534 PTR_ERR(wrp->clk_wrap)); in pwrap_probe()
2535 return PTR_ERR(wrp->clk_wrap); in pwrap_probe()
2538 wrp->clk_sys = devm_clk_get_optional(wrp->dev, "sys"); in pwrap_probe()
2539 if (IS_ERR(wrp->clk_sys)) { in pwrap_probe()
2540 return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_sys), in pwrap_probe()
2542 wrp->clk_sys); in pwrap_probe()
2545 wrp->clk_tmr = devm_clk_get_optional(wrp->dev, "tmr"); in pwrap_probe()
2546 if (IS_ERR(wrp->clk_tmr)) { in pwrap_probe()
2547 return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_tmr), in pwrap_probe()
2549 wrp->clk_tmr); in pwrap_probe()
2552 ret = clk_prepare_enable(wrp->clk_spi); in pwrap_probe()
2556 ret = clk_prepare_enable(wrp->clk_wrap); in pwrap_probe()
2560 ret = clk_prepare_enable(wrp->clk_sys); in pwrap_probe()
2564 ret = clk_prepare_enable(wrp->clk_tmr); in pwrap_probe()
2569 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_DCM)) { in pwrap_probe()
2581 dev_dbg(wrp->dev, "init failed with %d\n", ret); in pwrap_probe()
2586 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2588 else if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB_MT8186)) in pwrap_probe()
2594 dev_dbg(wrp->dev, "initialization isn't finished\n"); in pwrap_probe()
2595 ret = -ENODEV; in pwrap_probe()
2600 if (!HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2604 * Since STAUPD was not used on mt8173 platform, in pwrap_probe()
2607 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN); in pwrap_probe()
2608 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_WDT_SRC1)) in pwrap_probe()
2609 pwrap_writel(wrp, wrp->master->wdt_src, PWRAP_WDT_SRC_EN_1); in pwrap_probe()
2611 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_ARB)) in pwrap_probe()
2616 pwrap_writel(wrp, wrp->master->int_en_all, PWRAP_INT_EN); in pwrap_probe()
2621 if (HAS_CAP(wrp->master->caps, PWRAP_CAP_INT1_EN)) in pwrap_probe()
2622 pwrap_writel(wrp, wrp->master->int1_en_all, PWRAP_INT1_EN); in pwrap_probe()
2630 ret = devm_request_irq(wrp->dev, irq, pwrap_interrupt, in pwrap_probe()
2632 "mt-pmic-pwrap", wrp); in pwrap_probe()
2636 wrp->regmap = devm_regmap_init(wrp->dev, NULL, wrp, wrp->slave->regops->regmap); in pwrap_probe()
2637 if (IS_ERR(wrp->regmap)) { in pwrap_probe()
2638 ret = PTR_ERR(wrp->regmap); in pwrap_probe()
2642 ret = of_platform_populate(np, NULL, NULL, wrp->dev); in pwrap_probe()
2644 dev_dbg(wrp->dev, "failed to create child devices at %pOF\n", in pwrap_probe()
2652 clk_disable_unprepare(wrp->clk_tmr); in pwrap_probe()
2654 clk_disable_unprepare(wrp->clk_sys); in pwrap_probe()
2656 clk_disable_unprepare(wrp->clk_wrap); in pwrap_probe()
2658 clk_disable_unprepare(wrp->clk_spi); in pwrap_probe()
2665 .name = "mt-pmic-pwrap",