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