Lines Matching refs:adap

41 	struct i2c_adapter adap;
55 static int wait_xfer_done(struct i2c_au1550_data *adap)
60 for (i = 0; i < adap->xfer_timeout; i++) {
61 if (RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_TE)
70 static int wait_ack(struct i2c_au1550_data *adap)
74 if (wait_xfer_done(adap))
77 stat = RD(adap, PSC_SMBEVNT);
84 static int wait_master_done(struct i2c_au1550_data *adap)
89 for (i = 0; i < 2 * adap->xfer_timeout; i++) {
90 if ((RD(adap, PSC_SMBEVNT) & PSC_SMBEVNT_MD) != 0)
99 do_address(struct i2c_au1550_data *adap, unsigned int addr, int rd, int q)
104 stat = RD(adap, PSC_SMBSTAT);
105 WR(adap, PSC_SMBEVNT, PSC_SMBEVNT_ALLCLR);
108 WR(adap, PSC_SMBPCR, PSC_SMBPCR_DC);
109 while ((RD(adap, PSC_SMBPCR) & PSC_SMBPCR_DC) != 0)
124 WR(adap, PSC_SMBTXRX, addr);
125 WR(adap, PSC_SMBPCR, PSC_SMBPCR_MS);
126 if (wait_ack(adap))
128 return (q) ? wait_master_done(adap) : 0;
131 static int wait_for_rx_byte(struct i2c_au1550_data *adap, unsigned char *out)
135 if (wait_xfer_done(adap))
138 j = adap->xfer_timeout * 100;
144 if ((RD(adap, PSC_SMBSTAT) & PSC_SMBSTAT_RE) == 0)
150 *out = RD(adap, PSC_SMBTXRX);
155 static int i2c_read(struct i2c_au1550_data *adap, unsigned char *buf,
169 WR(adap, PSC_SMBTXRX, 0);
170 if (wait_for_rx_byte(adap, &buf[i]))
177 WR(adap, PSC_SMBTXRX, PSC_SMBTXRX_STP);
178 if (wait_master_done(adap))
181 buf[i] = (unsigned char)(RD(adap, PSC_SMBTXRX) & 0xff);
185 static int i2c_write(struct i2c_au1550_data *adap, unsigned char *buf,
197 WR(adap, PSC_SMBTXRX, data);
198 if (wait_ack(adap))
206 WR(adap, PSC_SMBTXRX, data);
207 if (wait_master_done(adap))
215 struct i2c_au1550_data *adap = i2c_adap->algo_data;
219 WR(adap, PSC_CTRL, PSC_CTRL_ENABLE);
223 err = do_address(adap, p->addr, p->flags & I2C_M_RD,
228 err = i2c_read(adap, p->buf, p->len);
230 err = i2c_write(adap, p->buf, p->len);
238 WR(adap, PSC_CTRL, PSC_CTRL_SUSPEND);
243 static u32 au1550_func(struct i2c_adapter *adap)
318 priv->adap.nr = pdev->id;
319 priv->adap.algo = &au1550_algo;
320 priv->adap.algo_data = priv;
321 priv->adap.dev.parent = &pdev->dev;
322 strscpy(priv->adap.name, "Au1xxx PSC I2C", sizeof(priv->adap.name));
327 ret = i2c_add_numbered_adapter(&priv->adap);
341 i2c_del_adapter(&priv->adap);