Lines Matching +full:spmi +full:- +full:pmic +full:- +full:arb

1 // SPDX-License-Identifier: GPL-2.0
3 * Apple SoC SPMI device driver
10 * hisi-spmi-controller.c
11 * spmi-pmic-arb.c Copyright (c) 2021, The Linux Foundation.
19 #include <linux/spmi.h>
21 /* SPMI Controller Registers */
35 #define poll_reg(spmi, reg, val, cond) \ argument
36 readl_poll_timeout((spmi)->regs + (reg), (val), (cond), \
41 return opc | sid << 8 | saddr << 16 | (len - 1) | (1 << 15); in apple_spmi_pack_cmd()
47 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in apple_spmi_wait_rx_not_empty() local
51 ret = poll_reg(spmi, SPMI_STATUS_REG, status, !(status & SPMI_RX_FIFO_EMPTY)); in apple_spmi_wait_rx_not_empty()
53 dev_err(&ctrl->dev, in apple_spmi_wait_rx_not_empty()
64 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in spmi_read_cmd() local
71 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_read_cmd()
77 /* Discard SPMI reply status */ in spmi_read_cmd()
78 readl(spmi->regs + SPMI_RSP_REG); in spmi_read_cmd()
80 /* Read SPMI data reply */ in spmi_read_cmd()
82 rsp = readl(spmi->regs + SPMI_RSP_REG); in spmi_read_cmd()
96 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in spmi_write_cmd() local
101 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_write_cmd()
109 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_write_cmd()
117 readl(spmi->regs + SPMI_RSP_REG); in spmi_write_cmd()
124 struct apple_spmi *spmi; in apple_spmi_probe() local
128 ctrl = devm_spmi_controller_alloc(&pdev->dev, sizeof(*spmi)); in apple_spmi_probe()
130 return -ENOMEM; in apple_spmi_probe()
132 spmi = spmi_controller_get_drvdata(ctrl); in apple_spmi_probe()
134 spmi->regs = devm_platform_ioremap_resource(pdev, 0); in apple_spmi_probe()
135 if (IS_ERR(spmi->regs)) in apple_spmi_probe()
136 return PTR_ERR(spmi->regs); in apple_spmi_probe()
138 ctrl->dev.of_node = pdev->dev.of_node; in apple_spmi_probe()
140 ctrl->read_cmd = spmi_read_cmd; in apple_spmi_probe()
141 ctrl->write_cmd = spmi_write_cmd; in apple_spmi_probe()
143 ret = devm_spmi_controller_add(&pdev->dev, ctrl); in apple_spmi_probe()
145 return dev_err_probe(&pdev->dev, ret, in apple_spmi_probe()
152 { .compatible = "apple,spmi", },
160 .name = "apple-spmi",
166 MODULE_AUTHOR("Jean-Francois Bortolotti <jeff@borto.fr>");
167 MODULE_DESCRIPTION("Apple SoC SPMI driver");