0001
0002 #include "tw5864.h"
0003
0004 void tw5864_indir_writeb(struct tw5864_dev *dev, u16 addr, u8 data)
0005 {
0006 int retries = 30000;
0007
0008 while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
0009 ;
0010 if (!retries)
0011 dev_err(&dev->pci->dev,
0012 "tw_indir_writel() retries exhausted before writing\n");
0013
0014 tw_writel(TW5864_IND_DATA, data);
0015 tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_RW | TW5864_ENABLE);
0016 }
0017
0018 u8 tw5864_indir_readb(struct tw5864_dev *dev, u16 addr)
0019 {
0020 int retries = 30000;
0021
0022 while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
0023 ;
0024 if (!retries)
0025 dev_err(&dev->pci->dev,
0026 "tw_indir_readl() retries exhausted before reading\n");
0027
0028 tw_writel(TW5864_IND_CTL, addr << 2 | TW5864_ENABLE);
0029
0030 retries = 30000;
0031 while (tw_readl(TW5864_IND_CTL) & BIT(31) && --retries)
0032 ;
0033 if (!retries)
0034 dev_err(&dev->pci->dev,
0035 "tw_indir_readl() retries exhausted at reading\n");
0036
0037 return tw_readl(TW5864_IND_DATA);
0038 }