18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include "tw5864.h"
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_civoid tw5864_indir_writeb(struct tw5864_dev *dev, u16 addr, u8 data)
58c2ecf20Sopenharmony_ci{
68c2ecf20Sopenharmony_ci	int retries = 30000;
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
98c2ecf20Sopenharmony_ci		;
108c2ecf20Sopenharmony_ci	if (!retries)
118c2ecf20Sopenharmony_ci		dev_err(&dev->pci->dev,
128c2ecf20Sopenharmony_ci			"tw_indir_writel() retries exhausted before writing\n");
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci	tw_writel(TW5864_IND_DATA, data);
158c2ecf20Sopenharmony_ci	tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_RW | TW5864_ENABLE);
168c2ecf20Sopenharmony_ci}
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciu8 tw5864_indir_readb(struct tw5864_dev *dev, u16 addr)
198c2ecf20Sopenharmony_ci{
208c2ecf20Sopenharmony_ci	int retries = 30000;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
238c2ecf20Sopenharmony_ci		;
248c2ecf20Sopenharmony_ci	if (!retries)
258c2ecf20Sopenharmony_ci		dev_err(&dev->pci->dev,
268c2ecf20Sopenharmony_ci			"tw_indir_readl() retries exhausted before reading\n");
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci	tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_ENABLE);
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	retries = 30000;
318c2ecf20Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
328c2ecf20Sopenharmony_ci		;
338c2ecf20Sopenharmony_ci	if (!retries)
348c2ecf20Sopenharmony_ci		dev_err(&dev->pci->dev,
358c2ecf20Sopenharmony_ci			"tw_indir_readl() retries exhausted at reading\n");
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci	return tw_readl(TW5864_IND_DATA);
388c2ecf20Sopenharmony_ci}
39