Lines Matching refs:adap
110 struct i2c_adapter adap; member
116 static inline void pic32_i2c_start(struct pic32_i2c_platform_data *adap) in pic32_i2c_start() argument
118 pic32_bus_writel(PIC32_I2CCON_SEN, adap->base + PIC32_I2CxCONSET); in pic32_i2c_start()
121 static inline void pic32_i2c_stop(struct pic32_i2c_platform_data *adap) in pic32_i2c_stop() argument
123 pic32_bus_writel(PIC32_I2CCON_PEN, adap->base + PIC32_I2CxCONSET); in pic32_i2c_stop()
126 static inline void pic32_i2c_ack(struct pic32_i2c_platform_data *adap) in pic32_i2c_ack() argument
128 pic32_bus_writel(PIC32_I2CCON_ACKDT, adap->base + PIC32_I2CxCONCLR); in pic32_i2c_ack()
129 pic32_bus_writel(PIC32_I2CCON_ACKEN, adap->base + PIC32_I2CxCONSET); in pic32_i2c_ack()
132 static inline void pic32_i2c_nack(struct pic32_i2c_platform_data *adap) in pic32_i2c_nack() argument
134 pic32_bus_writel(PIC32_I2CCON_ACKDT, adap->base + PIC32_I2CxCONSET); in pic32_i2c_nack()
135 pic32_bus_writel(PIC32_I2CCON_ACKEN, adap->base + PIC32_I2CxCONSET); in pic32_i2c_nack()
138 static inline int pic32_i2c_idle(struct pic32_i2c_platform_data *adap) in pic32_i2c_idle() argument
142 for (i = 0; i < adap->ctl_timeout; i++) { in pic32_i2c_idle()
143 if (((pic32_bus_readl(adap->base + PIC32_I2CxCON) & in pic32_i2c_idle()
147 ((pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & in pic32_i2c_idle()
155 static inline u32 pic32_i2c_master_write(struct pic32_i2c_platform_data *adap, in pic32_i2c_master_write() argument
158 pic32_bus_writel(byte, adap->base + PIC32_I2CxTRN); in pic32_i2c_master_write()
159 return pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & in pic32_i2c_master_write()
163 static inline u32 pic32_i2c_master_read(struct pic32_i2c_platform_data *adap) in pic32_i2c_master_read() argument
165 pic32_bus_writel(PIC32_I2CCON_RCEN, adap->base + PIC32_I2CxCONSET); in pic32_i2c_master_read()
166 while (pic32_bus_readl(adap->base + PIC32_I2CxCON) & PIC32_I2CCON_RCEN) in pic32_i2c_master_read()
168 pic32_bus_writel(PIC32_I2CSTAT_I2COV, adap->base + PIC32_I2CxSTATCLR); in pic32_i2c_master_read()
169 return pic32_bus_readl(adap->base + PIC32_I2CxRCV); in pic32_i2c_master_read()
172 static int pic32_i2c_address(struct pic32_i2c_platform_data *adap, in pic32_i2c_address() argument
175 pic32_i2c_idle(adap); in pic32_i2c_address()
176 pic32_i2c_start(adap); in pic32_i2c_address()
177 pic32_i2c_idle(adap); in pic32_i2c_address()
183 if (pic32_i2c_master_write(adap, addr)) in pic32_i2c_address()
185 pic32_i2c_idle(adap); in pic32_i2c_address()
186 if (pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & in pic32_i2c_address()
192 static int sead3_i2c_read(struct pic32_i2c_platform_data *adap, in sead3_i2c_read() argument
200 data = pic32_i2c_master_read(adap); in sead3_i2c_read()
203 pic32_i2c_ack(adap); in sead3_i2c_read()
205 pic32_i2c_nack(adap); in sead3_i2c_read()
208 pic32_i2c_stop(adap); in sead3_i2c_read()
209 pic32_i2c_idle(adap); in sead3_i2c_read()
213 static int sead3_i2c_write(struct pic32_i2c_platform_data *adap, in sead3_i2c_write() argument
222 if (pic32_i2c_master_write(adap, data)) in sead3_i2c_write()
224 pic32_i2c_idle(adap); in sead3_i2c_write()
225 if (pic32_bus_readl(adap->base + PIC32_I2CxSTAT) & in sead3_i2c_write()
231 pic32_i2c_stop(adap); in sead3_i2c_write()
232 pic32_i2c_idle(adap); in sead3_i2c_write()
239 struct pic32_i2c_platform_data *adap = i2c_adap->algo_data; in sead3_pic32_platform_xfer() local
265 err = pic32_i2c_address(adap, p->addr, p->flags & I2C_M_RD); in sead3_pic32_platform_xfer()
269 err = sead3_i2c_read(adap, p->buf, p->len); in sead3_pic32_platform_xfer()
271 err = sead3_i2c_write(adap, p->buf, p->len); in sead3_pic32_platform_xfer()
281 static u32 sead3_pic32_platform_func(struct i2c_adapter *adap) in sead3_pic32_platform_func() argument
328 priv->adap.nr = pdev->id; in sead3_i2c_platform_probe()
329 priv->adap.algo = &sead3_platform_algo; in sead3_i2c_platform_probe()
330 priv->adap.algo_data = priv; in sead3_i2c_platform_probe()
331 priv->adap.dev.parent = &pdev->dev; in sead3_i2c_platform_probe()
332 strlcpy(priv->adap.name, "SEAD3 PIC32", sizeof(priv->adap.name)); in sead3_i2c_platform_probe()
336 ret = i2c_add_numbered_adapter(&priv->adap); in sead3_i2c_platform_probe()
353 i2c_del_adapter(&priv->adap); in sead3_i2c_platform_remove()