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