• Home
  • Raw
  • Download

Lines Matching refs:smbus

52 static inline void reg_write(struct pasemi_smbus *smbus, int reg, int val)  in reg_write()  argument
54 dev_dbg(&smbus->dev->dev, "smbus write reg %lx val %08x\n", in reg_write()
55 smbus->base + reg, val); in reg_write()
56 outl(val, smbus->base + reg); in reg_write()
59 static inline int reg_read(struct pasemi_smbus *smbus, int reg) in reg_read() argument
62 ret = inl(smbus->base + reg); in reg_read()
63 dev_dbg(&smbus->dev->dev, "smbus read reg %lx val %08x\n", in reg_read()
64 smbus->base + reg, ret); in reg_read()
68 #define TXFIFO_WR(smbus, reg) reg_write((smbus), REG_MTXFIFO, (reg)) argument
69 #define RXFIFO_RD(smbus) reg_read((smbus), REG_MRXFIFO) argument
71 static void pasemi_smb_clear(struct pasemi_smbus *smbus) in pasemi_smb_clear() argument
75 status = reg_read(smbus, REG_SMSTA); in pasemi_smb_clear()
76 reg_write(smbus, REG_SMSTA, status); in pasemi_smb_clear()
79 static int pasemi_smb_waitready(struct pasemi_smbus *smbus) in pasemi_smb_waitready() argument
84 status = reg_read(smbus, REG_SMSTA); in pasemi_smb_waitready()
88 status = reg_read(smbus, REG_SMSTA); in pasemi_smb_waitready()
96 dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status); in pasemi_smb_waitready()
97 reg_write(smbus, REG_SMSTA, status); in pasemi_smb_waitready()
102 reg_write(smbus, REG_SMSTA, SMSTA_XEN); in pasemi_smb_waitready()
110 struct pasemi_smbus *smbus = adapter->algo_data; in pasemi_i2c_xfer_msg() local
116 TXFIFO_WR(smbus, MTXFIFO_START | i2c_8bit_addr_from_msg(msg)); in pasemi_i2c_xfer_msg()
119 TXFIFO_WR(smbus, msg->len | MTXFIFO_READ | in pasemi_i2c_xfer_msg()
122 err = pasemi_smb_waitready(smbus); in pasemi_i2c_xfer_msg()
127 rd = RXFIFO_RD(smbus); in pasemi_i2c_xfer_msg()
136 TXFIFO_WR(smbus, msg->buf[i]); in pasemi_i2c_xfer_msg()
138 TXFIFO_WR(smbus, msg->buf[msg->len-1] | in pasemi_i2c_xfer_msg()
142 err = pasemi_smb_waitready(smbus); in pasemi_i2c_xfer_msg()
151 reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR | in pasemi_i2c_xfer_msg()
159 struct pasemi_smbus *smbus = adapter->algo_data; in pasemi_i2c_xfer() local
162 pasemi_smb_clear(smbus); in pasemi_i2c_xfer()
176 struct pasemi_smbus *smbus = adapter->algo_data; in pasemi_smb_xfer() local
185 pasemi_smb_clear(smbus); in pasemi_smb_xfer()
189 TXFIFO_WR(smbus, addr | read_flag | MTXFIFO_START | in pasemi_smb_xfer()
193 TXFIFO_WR(smbus, addr | read_flag | MTXFIFO_START); in pasemi_smb_xfer()
195 TXFIFO_WR(smbus, 1 | MTXFIFO_STOP | MTXFIFO_READ); in pasemi_smb_xfer()
197 TXFIFO_WR(smbus, MTXFIFO_STOP | command); in pasemi_smb_xfer()
200 TXFIFO_WR(smbus, addr | MTXFIFO_START); in pasemi_smb_xfer()
201 TXFIFO_WR(smbus, command); in pasemi_smb_xfer()
203 TXFIFO_WR(smbus, addr | I2C_SMBUS_READ | MTXFIFO_START); in pasemi_smb_xfer()
204 TXFIFO_WR(smbus, 1 | MTXFIFO_READ | MTXFIFO_STOP); in pasemi_smb_xfer()
206 TXFIFO_WR(smbus, MTXFIFO_STOP | data->byte); in pasemi_smb_xfer()
210 TXFIFO_WR(smbus, addr | MTXFIFO_START); in pasemi_smb_xfer()
211 TXFIFO_WR(smbus, command); in pasemi_smb_xfer()
213 TXFIFO_WR(smbus, addr | I2C_SMBUS_READ | MTXFIFO_START); in pasemi_smb_xfer()
214 TXFIFO_WR(smbus, 2 | MTXFIFO_READ | MTXFIFO_STOP); in pasemi_smb_xfer()
216 TXFIFO_WR(smbus, data->word & MTXFIFO_DATA_M); in pasemi_smb_xfer()
217 TXFIFO_WR(smbus, MTXFIFO_STOP | (data->word >> 8)); in pasemi_smb_xfer()
221 TXFIFO_WR(smbus, addr | MTXFIFO_START); in pasemi_smb_xfer()
222 TXFIFO_WR(smbus, command); in pasemi_smb_xfer()
224 TXFIFO_WR(smbus, addr | I2C_SMBUS_READ | MTXFIFO_START); in pasemi_smb_xfer()
225 TXFIFO_WR(smbus, 1 | MTXFIFO_READ); in pasemi_smb_xfer()
226 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
229 TXFIFO_WR(smbus, len | MTXFIFO_READ | in pasemi_smb_xfer()
233 TXFIFO_WR(smbus, len); in pasemi_smb_xfer()
235 TXFIFO_WR(smbus, data->block[i]); in pasemi_smb_xfer()
236 TXFIFO_WR(smbus, data->block[len] | MTXFIFO_STOP); in pasemi_smb_xfer()
241 TXFIFO_WR(smbus, addr | MTXFIFO_START); in pasemi_smb_xfer()
242 TXFIFO_WR(smbus, command); in pasemi_smb_xfer()
243 TXFIFO_WR(smbus, data->word & MTXFIFO_DATA_M); in pasemi_smb_xfer()
244 TXFIFO_WR(smbus, (data->word >> 8) & MTXFIFO_DATA_M); in pasemi_smb_xfer()
245 TXFIFO_WR(smbus, addr | I2C_SMBUS_READ | MTXFIFO_START); in pasemi_smb_xfer()
246 TXFIFO_WR(smbus, 2 | MTXFIFO_STOP | MTXFIFO_READ); in pasemi_smb_xfer()
251 TXFIFO_WR(smbus, addr | MTXFIFO_START); in pasemi_smb_xfer()
252 TXFIFO_WR(smbus, command); in pasemi_smb_xfer()
253 TXFIFO_WR(smbus, len); in pasemi_smb_xfer()
255 TXFIFO_WR(smbus, data->block[i]); in pasemi_smb_xfer()
256 TXFIFO_WR(smbus, addr | I2C_SMBUS_READ); in pasemi_smb_xfer()
257 TXFIFO_WR(smbus, MTXFIFO_READ | 1); in pasemi_smb_xfer()
258 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
261 TXFIFO_WR(smbus, len | MTXFIFO_READ | MTXFIFO_STOP); in pasemi_smb_xfer()
269 err = pasemi_smb_waitready(smbus); in pasemi_smb_xfer()
279 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
288 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
294 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
305 rd = RXFIFO_RD(smbus); in pasemi_smb_xfer()
318 reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR | in pasemi_smb_xfer()
340 struct pasemi_smbus *smbus; in pasemi_smb_probe() local
346 smbus = kzalloc(sizeof(struct pasemi_smbus), GFP_KERNEL); in pasemi_smb_probe()
347 if (!smbus) in pasemi_smb_probe()
350 smbus->dev = dev; in pasemi_smb_probe()
351 smbus->base = pci_resource_start(dev, 0); in pasemi_smb_probe()
352 smbus->size = pci_resource_len(dev, 0); in pasemi_smb_probe()
354 if (!request_region(smbus->base, smbus->size, in pasemi_smb_probe()
360 smbus->adapter.owner = THIS_MODULE; in pasemi_smb_probe()
361 snprintf(smbus->adapter.name, sizeof(smbus->adapter.name), in pasemi_smb_probe()
362 "PA Semi SMBus adapter at 0x%lx", smbus->base); in pasemi_smb_probe()
363 smbus->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; in pasemi_smb_probe()
364 smbus->adapter.algo = &smbus_algorithm; in pasemi_smb_probe()
365 smbus->adapter.algo_data = smbus; in pasemi_smb_probe()
368 smbus->adapter.dev.parent = &dev->dev; in pasemi_smb_probe()
370 reg_write(smbus, REG_CTL, (CTL_MTR | CTL_MRR | in pasemi_smb_probe()
373 error = i2c_add_adapter(&smbus->adapter); in pasemi_smb_probe()
377 pci_set_drvdata(dev, smbus); in pasemi_smb_probe()
382 release_region(smbus->base, smbus->size); in pasemi_smb_probe()
384 kfree(smbus); in pasemi_smb_probe()
390 struct pasemi_smbus *smbus = pci_get_drvdata(dev); in pasemi_smb_remove() local
392 i2c_del_adapter(&smbus->adapter); in pasemi_smb_remove()
393 release_region(smbus->base, smbus->size); in pasemi_smb_remove()
394 kfree(smbus); in pasemi_smb_remove()