Lines Matching +full:ctrl +full:- +full:len

1 // SPDX-License-Identifier: GPL-2.0
10 * hisi-spmi-controller.c
11 * spmi-pmic-arb.c Copyright (c) 2021, The Linux Foundation.
36 readl_poll_timeout((spmi)->regs + (reg), (val), (cond), \
39 static inline u32 apple_spmi_pack_cmd(u8 opc, u8 sid, u16 saddr, size_t len) in apple_spmi_pack_cmd() argument
41 return opc | sid << 8 | saddr << 16 | (len - 1) | (1 << 15); in apple_spmi_pack_cmd()
45 static int apple_spmi_wait_rx_not_empty(struct spmi_controller *ctrl) in apple_spmi_wait_rx_not_empty() argument
47 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in apple_spmi_wait_rx_not_empty()
53 dev_err(&ctrl->dev, in apple_spmi_wait_rx_not_empty()
61 static int spmi_read_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid, in spmi_read_cmd() argument
62 u16 saddr, u8 *buf, size_t len) in spmi_read_cmd() argument
64 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in spmi_read_cmd()
65 u32 spmi_cmd = apple_spmi_pack_cmd(opc, sid, saddr, len); in spmi_read_cmd()
71 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_read_cmd()
73 ret = apple_spmi_wait_rx_not_empty(ctrl); in spmi_read_cmd()
78 readl(spmi->regs + SPMI_RSP_REG); in spmi_read_cmd()
81 while (len_read < len) { in spmi_read_cmd()
82 rsp = readl(spmi->regs + SPMI_RSP_REG); in spmi_read_cmd()
84 while ((len_read < len) && (i < 4)) { in spmi_read_cmd()
93 static int spmi_write_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid, in spmi_write_cmd() argument
94 u16 saddr, const u8 *buf, size_t len) in spmi_write_cmd() argument
96 struct apple_spmi *spmi = spmi_controller_get_drvdata(ctrl); in spmi_write_cmd()
97 u32 spmi_cmd = apple_spmi_pack_cmd(opc, sid, saddr, len); in spmi_write_cmd()
101 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_write_cmd()
103 while (i < len) { in spmi_write_cmd()
106 while ((j < 4) & (i < len)) in spmi_write_cmd()
109 writel(spmi_cmd, spmi->regs + SPMI_CMD_REG); in spmi_write_cmd()
112 ret = apple_spmi_wait_rx_not_empty(ctrl); in spmi_write_cmd()
117 readl(spmi->regs + SPMI_RSP_REG); in spmi_write_cmd()
125 struct spmi_controller *ctrl; in apple_spmi_probe() local
128 ctrl = devm_spmi_controller_alloc(&pdev->dev, sizeof(*spmi)); in apple_spmi_probe()
129 if (IS_ERR(ctrl)) 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()
160 .name = "apple-spmi",
166 MODULE_AUTHOR("Jean-Francois Bortolotti <jeff@borto.fr>");