162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include "tw5864.h"
362306a36Sopenharmony_ci
462306a36Sopenharmony_civoid tw5864_indir_writeb(struct tw5864_dev *dev, u16 addr, u8 data)
562306a36Sopenharmony_ci{
662306a36Sopenharmony_ci	int retries = 30000;
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
962306a36Sopenharmony_ci		;
1062306a36Sopenharmony_ci	if (!retries)
1162306a36Sopenharmony_ci		dev_err(&dev->pci->dev,
1262306a36Sopenharmony_ci			"tw_indir_writel() retries exhausted before writing\n");
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci	tw_writel(TW5864_IND_DATA, data);
1562306a36Sopenharmony_ci	tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_RW | TW5864_ENABLE);
1662306a36Sopenharmony_ci}
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciu8 tw5864_indir_readb(struct tw5864_dev *dev, u16 addr)
1962306a36Sopenharmony_ci{
2062306a36Sopenharmony_ci	int retries = 30000;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
2362306a36Sopenharmony_ci		;
2462306a36Sopenharmony_ci	if (!retries)
2562306a36Sopenharmony_ci		dev_err(&dev->pci->dev,
2662306a36Sopenharmony_ci			"tw_indir_readl() retries exhausted before reading\n");
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_ENABLE);
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	retries = 30000;
3162306a36Sopenharmony_ci	while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
3262306a36Sopenharmony_ci		;
3362306a36Sopenharmony_ci	if (!retries)
3462306a36Sopenharmony_ci		dev_err(&dev->pci->dev,
3562306a36Sopenharmony_ci			"tw_indir_readl() retries exhausted at reading\n");
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	return tw_readl(TW5864_IND_DATA);
3862306a36Sopenharmony_ci}
39