Lines Matching defs:riic

108 static inline void riic_clear_set_bit(struct riic_dev *riic, u8 clear, u8 set, u8 reg)
110 writeb((readb(riic->base + reg) & ~clear) | set, riic->base + reg);
115 struct riic_dev *riic = i2c_get_adapdata(adap);
122 if (readb(riic->base + RIIC_ICCR2) & ICCR2_BBSY) {
123 riic->err = -EBUSY;
127 reinit_completion(&riic->msg_done);
128 riic->err = 0;
130 writeb(0, riic->base + RIIC_ICSR2);
133 riic->bytes_left = RIIC_INIT_MSG;
134 riic->buf = msgs[i].buf;
135 riic->msg = &msgs[i];
136 riic->is_last = (i == num - 1);
138 writeb(ICIER_NAKIE | ICIER_TIE, riic->base + RIIC_ICIER);
140 writeb(start_bit, riic->base + RIIC_ICCR2);
142 time_left = wait_for_completion_timeout(&riic->msg_done, riic->adapter.timeout);
144 riic->err = -ETIMEDOUT;
146 if (riic->err)
155 return riic->err ?: num;
160 struct riic_dev *riic = data;
163 if (!riic->bytes_left)
166 if (riic->bytes_left == RIIC_INIT_MSG) {
167 if (riic->msg->flags & I2C_M_RD)
169 riic_clear_set_bit(riic, ICIER_TIE, ICIER_RIE, RIIC_ICIER);
172 riic->bytes_left = riic->msg->len;
174 val = i2c_8bit_addr_from_msg(riic->msg);
176 val = *riic->buf;
177 riic->buf++;
178 riic->bytes_left--;
186 if (riic->bytes_left == 0)
187 riic_clear_set_bit(riic, ICIER_TIE, ICIER_TEIE, RIIC_ICIER);
194 writeb(val, riic->base + RIIC_ICDRT);
201 struct riic_dev *riic = data;
203 if (readb(riic->base + RIIC_ICSR2) & ICSR2_NACKF) {
205 readb(riic->base + RIIC_ICDRR); /* dummy read */
206 riic_clear_set_bit(riic, ICSR2_NACKF, 0, RIIC_ICSR2);
207 riic->err = -ENXIO;
208 } else if (riic->bytes_left) {
212 if (riic->is_last || riic->err) {
213 riic_clear_set_bit(riic, ICIER_TEIE, ICIER_SPIE, RIIC_ICIER);
214 writeb(ICCR2_SP, riic->base + RIIC_ICCR2);
217 riic_clear_set_bit(riic, ICIER_TEIE, 0, RIIC_ICIER);
218 complete(&riic->msg_done);
226 struct riic_dev *riic = data;
228 if (!riic->bytes_left)
231 if (riic->bytes_left == RIIC_INIT_MSG) {
232 riic->bytes_left = riic->msg->len;
233 readb(riic->base + RIIC_ICDRR); /* dummy read */
237 if (riic->bytes_left == 1) {
239 if (riic->is_last) {
240 riic_clear_set_bit(riic, 0, ICIER_SPIE, RIIC_ICIER);
241 writeb(ICCR2_SP, riic->base + RIIC_ICCR2);
244 riic_clear_set_bit(riic, 0, ICMR3_ACKBT, RIIC_ICMR3);
247 riic_clear_set_bit(riic, ICMR3_ACKBT, 0, RIIC_ICMR3);
251 *riic->buf = readb(riic->base + RIIC_ICDRR);
252 riic->buf++;
253 riic->bytes_left--;
260 struct riic_dev *riic = data;
263 writeb(0, riic->base + RIIC_ICSR2);
264 readb(riic->base + RIIC_ICSR2);
265 writeb(0, riic->base + RIIC_ICIER);
266 readb(riic->base + RIIC_ICIER);
268 complete(&riic->msg_done);
283 static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t)
289 pm_runtime_get_sync(riic->adapter.dev.parent);
292 dev_err(&riic->adapter.dev,
299 rate = clk_get_rate(riic->clk);
332 dev_err(&riic->adapter.dev, "invalid speed (%lu). Too slow.\n",
362 pr_debug("i2c-riic: freq=%lu, duty=%d, fall=%lu, rise=%lu, cks=%d, brl=%d, brh=%d\n",
368 writeb(ICCR1_IICRST | ICCR1_SOWP, riic->base + RIIC_ICCR1);
369 riic_clear_set_bit(riic, 0, ICCR1_ICE, RIIC_ICCR1);
371 writeb(ICMR1_CKS(cks), riic->base + RIIC_ICMR1);
372 writeb(brh | ICBR_RESERVED, riic->base + RIIC_ICBRH);
373 writeb(brl | ICBR_RESERVED, riic->base + RIIC_ICBRL);
375 writeb(0, riic->base + RIIC_ICSER);
376 writeb(ICMR3_ACKWP | ICMR3_RDRFS, riic->base + RIIC_ICMR3);
378 riic_clear_set_bit(riic, ICCR1_IICRST, 0, RIIC_ICCR1);
381 pm_runtime_put(riic->adapter.dev.parent);
386 { .res_num = 0, .isr = riic_tend_isr, .name = "riic-tend" },
387 { .res_num = 1, .isr = riic_rdrf_isr, .name = "riic-rdrf" },
388 { .res_num = 2, .isr = riic_tdre_isr, .name = "riic-tdre" },
389 { .res_num = 3, .isr = riic_stop_isr, .name = "riic-stop" },
390 { .res_num = 5, .isr = riic_tend_isr, .name = "riic-nack" },
400 struct riic_dev *riic;
406 riic = devm_kzalloc(&pdev->dev, sizeof(*riic), GFP_KERNEL);
407 if (!riic)
410 riic->base = devm_platform_ioremap_resource(pdev, 0);
411 if (IS_ERR(riic->base))
412 return PTR_ERR(riic->base);
414 riic->clk = devm_clk_get(&pdev->dev, NULL);
415 if (IS_ERR(riic->clk)) {
417 return PTR_ERR(riic->clk);
439 0, riic_irqs[i].name, riic);
446 adap = &riic->adapter;
447 i2c_set_adapdata(adap, riic);
454 init_completion(&riic->msg_done);
460 ret = riic_init_hw(riic, &i2c_t);
468 platform_set_drvdata(pdev, riic);
481 struct riic_dev *riic = platform_get_drvdata(pdev);
484 writeb(0, riic->base + RIIC_ICIER);
486 i2c_del_adapter(&riic->adapter);
491 { .compatible = "renesas,riic-rz", },
499 .name = "i2c-riic",