Lines Matching refs:adap
50 struct i2c_adapter adap; member
65 static int wait_xfer_done(struct i2c_au1550_data *adap) in wait_xfer_done() argument
70 for (i = 0; i < adap->xfer_timeout; i++) { in wait_xfer_done()
71 if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE) in wait_xfer_done()
80 static int wait_ack(struct i2c_au1550_data *adap) in wait_ack() argument
84 if (wait_xfer_done(adap)) in wait_ack()
87 stat = RD(adap, PSC_SMBEVNT); in wait_ack()
94 static int wait_master_done(struct i2c_au1550_data *adap) in wait_master_done() argument
99 for (i = 0; i < 2 * adap->xfer_timeout; i++) { in wait_master_done()
100 if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0) in wait_master_done()
109 do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q) in do_address() argument
114 stat = RD(adap, PSC_SMBSTAT); in do_address()
115 WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR); in do_address()
118 WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC); in do_address()
119 while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0) in do_address()
134 WR(adap, PSC_SMBTXRX, addr); in do_address()
135 WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS); in do_address()
136 if (wait_ack(adap)) in do_address()
138 return (q) ? wait_master_done(adap) : 0; in do_address()
141 static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out) in wait_for_rx_byte() argument
145 if (wait_xfer_done(adap)) in wait_for_rx_byte()
148 j = adap->xfer_timeout * 100; in wait_for_rx_byte()
154 if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0) in wait_for_rx_byte()
160 *out = RD(adap, PSC_SMBTXRX); in wait_for_rx_byte()
165 static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf, in i2c_read() argument
179 WR(adap, PSC_SMBTXRX, 0); in i2c_read()
180 if (wait_for_rx_byte(adap, &buf[i])) in i2c_read()
187 WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP); in i2c_read()
188 if (wait_master_done(adap)) in i2c_read()
191 buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff); in i2c_read()
195 static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf, in i2c_write() argument
207 WR(adap, PSC_SMBTXRX, data); in i2c_write()
208 if (wait_ack(adap)) in i2c_write()
216 WR(adap, PSC_SMBTXRX, data); in i2c_write()
217 if (wait_master_done(adap)) in i2c_write()
225 struct i2c_au1550_data *adap = i2c_adap->algo_data; in au1550_xfer() local
229 WR(adap, PSC_CTRL, PSC_CTRL_ENABLE); in au1550_xfer()
233 err = do_address(adap, p->addr, p->flags & I2C_M_RD, in au1550_xfer()
238 err = i2c_read(adap, p->buf, p->len); in au1550_xfer()
240 err = i2c_write(adap, p->buf, p->len); in au1550_xfer()
248 WR(adap, PSC_CTRL, PSC_CTRL_SUSPEND); in au1550_xfer()
253 static u32 au1550_func(struct i2c_adapter *adap) in au1550_func() argument
344 priv->adap.nr = pdev->id; in i2c_au1550_probe()
345 priv->adap.algo = &au1550_algo; in i2c_au1550_probe()
346 priv->adap.algo_data = priv; in i2c_au1550_probe()
347 priv->adap.dev.parent = &pdev->dev; in i2c_au1550_probe()
348 strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name)); in i2c_au1550_probe()
353 ret = i2c_add_numbered_adapter(&priv->adap); in i2c_au1550_probe()
374 i2c_del_adapter(&priv->adap); in i2c_au1550_remove()