Lines Matching refs:ssbi
74 struct ssbi { struct
79 int (*read)(struct ssbi *, u16 addr, u8 *buf, int len); argument
80 int (*write)(struct ssbi *, u16 addr, const u8 *buf, int len); argument
85 static inline u32 ssbi_readl(struct ssbi *ssbi, u32 reg) in ssbi_readl() argument
87 return readl(ssbi->base + reg); in ssbi_readl()
90 static inline void ssbi_writel(struct ssbi *ssbi, u32 val, u32 reg) in ssbi_writel() argument
92 writel(val, ssbi->base + reg); in ssbi_writel()
104 static int ssbi_wait_mask(struct ssbi *ssbi, u32 set_mask, u32 clr_mask) in ssbi_wait_mask() argument
110 val = ssbi_readl(ssbi, SSBI2_STATUS); in ssbi_wait_mask()
120 ssbi_read_bytes(struct ssbi *ssbi, u16 addr, u8 *buf, int len) in ssbi_read_bytes() argument
125 if (ssbi->controller_type == MSM_SBI_CTRL_SSBI2) { in ssbi_read_bytes()
126 u32 mode2 = ssbi_readl(ssbi, SSBI2_MODE2); in ssbi_read_bytes()
128 ssbi_writel(ssbi, mode2, SSBI2_MODE2); in ssbi_read_bytes()
132 ret = ssbi_wait_mask(ssbi, SSBI_STATUS_READY, 0); in ssbi_read_bytes()
136 ssbi_writel(ssbi, cmd, SSBI2_CMD); in ssbi_read_bytes()
137 ret = ssbi_wait_mask(ssbi, SSBI_STATUS_RD_READY, 0); in ssbi_read_bytes()
140 *buf++ = ssbi_readl(ssbi, SSBI2_RD) & 0xff; in ssbi_read_bytes()
149 ssbi_write_bytes(struct ssbi *ssbi, u16 addr, const u8 *buf, int len) in ssbi_write_bytes() argument
153 if (ssbi->controller_type == MSM_SBI_CTRL_SSBI2) { in ssbi_write_bytes()
154 u32 mode2 = ssbi_readl(ssbi, SSBI2_MODE2); in ssbi_write_bytes()
156 ssbi_writel(ssbi, mode2, SSBI2_MODE2); in ssbi_write_bytes()
160 ret = ssbi_wait_mask(ssbi, SSBI_STATUS_READY, 0); in ssbi_write_bytes()
164 ssbi_writel(ssbi, ((addr & 0xff) << 16) | *buf, SSBI2_CMD); in ssbi_write_bytes()
165 ret = ssbi_wait_mask(ssbi, 0, SSBI_STATUS_MCHN_BUSY); in ssbi_write_bytes()
181 ssbi_pa_transfer(struct ssbi *ssbi, u32 cmd, u8 *data) in ssbi_pa_transfer() argument
186 ssbi_writel(ssbi, cmd, SSBI_PA_CMD); in ssbi_pa_transfer()
189 rd_status = ssbi_readl(ssbi, SSBI_PA_RD_STATUS); in ssbi_pa_transfer()
206 ssbi_pa_read_bytes(struct ssbi *ssbi, u16 addr, u8 *buf, int len) in ssbi_pa_read_bytes() argument
214 ret = ssbi_pa_transfer(ssbi, cmd, buf); in ssbi_pa_read_bytes()
226 ssbi_pa_write_bytes(struct ssbi *ssbi, u16 addr, const u8 *buf, int len) in ssbi_pa_write_bytes() argument
233 ret = ssbi_pa_transfer(ssbi, cmd, NULL); in ssbi_pa_write_bytes()
246 struct ssbi *ssbi = to_ssbi(dev); in ssbi_read() local
250 spin_lock_irqsave(&ssbi->lock, flags); in ssbi_read()
251 ret = ssbi->read(ssbi, addr, buf, len); in ssbi_read()
252 spin_unlock_irqrestore(&ssbi->lock, flags); in ssbi_read()
260 struct ssbi *ssbi = to_ssbi(dev); in ssbi_write() local
264 spin_lock_irqsave(&ssbi->lock, flags); in ssbi_write()
265 ret = ssbi->write(ssbi, addr, buf, len); in ssbi_write()
266 spin_unlock_irqrestore(&ssbi->lock, flags); in ssbi_write()
276 struct ssbi *ssbi; in ssbi_probe() local
279 ssbi = devm_kzalloc(&pdev->dev, sizeof(*ssbi), GFP_KERNEL); in ssbi_probe()
280 if (!ssbi) in ssbi_probe()
284 ssbi->base = devm_ioremap_resource(&pdev->dev, mem_res); in ssbi_probe()
285 if (IS_ERR(ssbi->base)) in ssbi_probe()
286 return PTR_ERR(ssbi->base); in ssbi_probe()
288 platform_set_drvdata(pdev, ssbi); in ssbi_probe()
297 ssbi->controller_type = MSM_SBI_CTRL_SSBI; in ssbi_probe()
299 ssbi->controller_type = MSM_SBI_CTRL_SSBI2; in ssbi_probe()
301 ssbi->controller_type = MSM_SBI_CTRL_PMIC_ARBITER; in ssbi_probe()
307 if (ssbi->controller_type == MSM_SBI_CTRL_PMIC_ARBITER) { in ssbi_probe()
308 ssbi->read = ssbi_pa_read_bytes; in ssbi_probe()
309 ssbi->write = ssbi_pa_write_bytes; in ssbi_probe()
311 ssbi->read = ssbi_read_bytes; in ssbi_probe()
312 ssbi->write = ssbi_write_bytes; in ssbi_probe()
315 spin_lock_init(&ssbi->lock); in ssbi_probe()