• Home
  • Raw
  • Download

Lines Matching refs:adap

50 	struct i2c_adapter adap;  member
64 static int wait_xfer_done(struct i2c_au1550_data *adap) in wait_xfer_done() argument
69 for (i = 0; i < adap->xfer_timeout; i++) { in wait_xfer_done()
70 if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE) in wait_xfer_done()
79 static int wait_ack(struct i2c_au1550_data *adap) in wait_ack() argument
83 if (wait_xfer_done(adap)) in wait_ack()
86 stat = RD(adap, PSC_SMBEVNT); in wait_ack()
93 static int wait_master_done(struct i2c_au1550_data *adap) in wait_master_done() argument
98 for (i = 0; i < 2 * adap->xfer_timeout; i++) { in wait_master_done()
99 if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0) in wait_master_done()
108 do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q) in do_address() argument
113 stat = RD(adap, PSC_SMBSTAT); in do_address()
114 WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR); in do_address()
117 WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC); in do_address()
118 while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0) in do_address()
133 WR(adap, PSC_SMBTXRX, addr); in do_address()
134 WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS); in do_address()
135 if (wait_ack(adap)) in do_address()
137 return (q) ? wait_master_done(adap) : 0; in do_address()
140 static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out) in wait_for_rx_byte() argument
144 if (wait_xfer_done(adap)) in wait_for_rx_byte()
147 j = adap->xfer_timeout * 100; in wait_for_rx_byte()
153 if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0) in wait_for_rx_byte()
159 *out = RD(adap, PSC_SMBTXRX); in wait_for_rx_byte()
164 static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf, in i2c_read() argument
178 WR(adap, PSC_SMBTXRX, 0); in i2c_read()
179 if (wait_for_rx_byte(adap, &buf[i])) in i2c_read()
186 WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP); in i2c_read()
187 if (wait_master_done(adap)) in i2c_read()
190 buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff); in i2c_read()
194 static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf, in i2c_write() argument
206 WR(adap, PSC_SMBTXRX, data); in i2c_write()
207 if (wait_ack(adap)) in i2c_write()
215 WR(adap, PSC_SMBTXRX, data); in i2c_write()
216 if (wait_master_done(adap)) in i2c_write()
224 struct i2c_au1550_data *adap = i2c_adap->algo_data; in au1550_xfer() local
228 WR(adap, PSC_CTRL, PSC_CTRL_ENABLE); in au1550_xfer()
232 err = do_address(adap, p->addr, p->flags & I2C_M_RD, in au1550_xfer()
237 err = i2c_read(adap, p->buf, p->len); in au1550_xfer()
239 err = i2c_write(adap, p->buf, p->len); in au1550_xfer()
247 WR(adap, PSC_CTRL, PSC_CTRL_SUSPEND); in au1550_xfer()
252 static u32 au1550_func(struct i2c_adapter *adap) in au1550_func() argument
329 priv->adap.nr = pdev->id; in i2c_au1550_probe()
330 priv->adap.algo = &au1550_algo; in i2c_au1550_probe()
331 priv->adap.algo_data = priv; in i2c_au1550_probe()
332 priv->adap.dev.parent = &pdev->dev; in i2c_au1550_probe()
333 strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name)); in i2c_au1550_probe()
338 ret = i2c_add_numbered_adapter(&priv->adap); in i2c_au1550_probe()
352 i2c_del_adapter(&priv->adap); in i2c_au1550_remove()