Lines Matching refs:adap

55 	struct i2c_adapter adap;
70 static int wait_xfer_done(struct i2c_au1550_data *adap)
75 for (i = 0; i < adap->xfer_timeout; i++) {
76 if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE)
85 static int wait_ack(struct i2c_au1550_data *adap)
89 if (wait_xfer_done(adap))
92 stat = RD(adap, PSC_SMBEVNT);
99 static int wait_master_done(struct i2c_au1550_data *adap)
104 for (i = 0; i < 2 * adap->xfer_timeout; i++) {
105 if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0)
114 do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q)
119 stat = RD(adap, PSC_SMBSTAT);
120 WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR);
123 WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC);
124 while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0)
139 WR(adap, PSC_SMBTXRX, addr);
140 WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS);
141 if (wait_ack(adap))
143 return (q) ? wait_master_done(adap) : 0;
146 static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out)
150 if (wait_xfer_done(adap))
153 j = adap->xfer_timeout * 100;
159 if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0)
165 *out = RD(adap, PSC_SMBTXRX);
170 static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf,
184 WR(adap, PSC_SMBTXRX, 0);
185 if (wait_for_rx_byte(adap, &buf[i]))
192 WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP);
193 if (wait_master_done(adap))
196 buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff);
200 static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf,
212 WR(adap, PSC_SMBTXRX, data);
213 if (wait_ack(adap))
221 WR(adap, PSC_SMBTXRX, data);
222 if (wait_master_done(adap))
230 struct i2c_au1550_data *adap = i2c_adap->algo_data;
234 WR(adap, PSC_CTRL, PSC_CTRL_ENABLE);
238 err = do_address(adap, p->addr, p->flags & I2C_M_RD,
243 err = i2c_read(adap, p->buf, p->len);
245 err = i2c_write(adap, p->buf, p->len);
253 WR(adap, PSC_CTRL, PSC_CTRL_SUSPEND);
258 static u32 au1550_func(struct i2c_adapter *adap)
349 priv->adap.nr = pdev->id;
350 priv->adap.algo = &au1550_algo;
351 priv->adap.algo_data = priv;
352 priv->adap.dev.parent = &pdev->dev;
353 strlcpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name));
358 ret = i2c_add_numbered_adapter(&priv->adap);
380 i2c_del_adapter(&priv->adap);