Lines Matching defs:riic
107 static inline void riic_clear_set_bit(struct riic_dev *riic, u8 clear, u8 set, u8 reg)
109 writeb((readb(riic->base + reg) & ~clear) | set, riic->base + reg);
114 struct riic_dev *riic = i2c_get_adapdata(adap);
121 if (readb(riic->base + RIIC_ICCR2) & ICCR2_BBSY) {
122 riic->err = -EBUSY;
126 reinit_completion(&riic->msg_done);
127 riic->err = 0;
129 writeb(0, riic->base + RIIC_ICSR2);
132 riic->bytes_left = RIIC_INIT_MSG;
133 riic->buf = msgs[i].buf;
134 riic->msg = &msgs[i];
135 riic->is_last = (i == num - 1);
137 writeb(ICIER_NAKIE | ICIER_TIE, riic->base + RIIC_ICIER);
139 writeb(start_bit, riic->base + RIIC_ICCR2);
141 time_left = wait_for_completion_timeout(&riic->msg_done, riic->adapter.timeout);
143 riic->err = -ETIMEDOUT;
145 if (riic->err)
154 return riic->err ?: num;
159 struct riic_dev *riic = data;
162 if (!riic->bytes_left)
165 if (riic->bytes_left == RIIC_INIT_MSG) {
166 if (riic->msg->flags & I2C_M_RD)
168 riic_clear_set_bit(riic, ICIER_TIE, ICIER_RIE, RIIC_ICIER);
171 riic->bytes_left = riic->msg->len;
173 val = i2c_8bit_addr_from_msg(riic->msg);
175 val = *riic->buf;
176 riic->buf++;
177 riic->bytes_left--;
185 if (riic->bytes_left == 0)
186 riic_clear_set_bit(riic, ICIER_TIE, ICIER_TEIE, RIIC_ICIER);
193 writeb(val, riic->base + RIIC_ICDRT);
200 struct riic_dev *riic = data;
202 if (readb(riic->base + RIIC_ICSR2) & ICSR2_NACKF) {
204 readb(riic->base + RIIC_ICDRR); /* dummy read */
205 riic_clear_set_bit(riic, ICSR2_NACKF, 0, RIIC_ICSR2);
206 riic->err = -ENXIO;
207 } else if (riic->bytes_left) {
211 if (riic->is_last || riic->err) {
212 riic_clear_set_bit(riic, ICIER_TEIE, ICIER_SPIE, RIIC_ICIER);
213 writeb(ICCR2_SP, riic->base + RIIC_ICCR2);
216 riic_clear_set_bit(riic, ICIER_TEIE, 0, RIIC_ICIER);
217 complete(&riic->msg_done);
225 struct riic_dev *riic = data;
227 if (!riic->bytes_left)
230 if (riic->bytes_left == RIIC_INIT_MSG) {
231 riic->bytes_left = riic->msg->len;
232 readb(riic->base + RIIC_ICDRR); /* dummy read */
236 if (riic->bytes_left == 1) {
238 if (riic->is_last) {
239 riic_clear_set_bit(riic, 0, ICIER_SPIE, RIIC_ICIER);
240 writeb(ICCR2_SP, riic->base + RIIC_ICCR2);
243 riic_clear_set_bit(riic, 0, ICMR3_ACKBT, RIIC_ICMR3);
246 riic_clear_set_bit(riic, ICMR3_ACKBT, 0, RIIC_ICMR3);
250 *riic->buf = readb(riic->base + RIIC_ICDRR);
251 riic->buf++;
252 riic->bytes_left--;
259 struct riic_dev *riic = data;
262 writeb(0, riic->base + RIIC_ICSR2);
263 readb(riic->base + RIIC_ICSR2);
264 writeb(0, riic->base + RIIC_ICIER);
265 readb(riic->base + RIIC_ICIER);
267 complete(&riic->msg_done);
282 static int riic_init_hw(struct riic_dev *riic, struct i2c_timings *t)
288 pm_runtime_get_sync(riic->adapter.dev.parent);
291 dev_err(&riic->adapter.dev,
298 rate = clk_get_rate(riic->clk);
331 dev_err(&riic->adapter.dev, "invalid speed (%lu). Too slow.\n",
361 pr_debug("i2c-riic: freq=%lu, duty=%d, fall=%lu, rise=%lu, cks=%d, brl=%d, brh=%d\n",
367 writeb(ICCR1_IICRST | ICCR1_SOWP, riic->base + RIIC_ICCR1);
368 riic_clear_set_bit(riic, 0, ICCR1_ICE, RIIC_ICCR1);
370 writeb(ICMR1_CKS(cks), riic->base + RIIC_ICMR1);
371 writeb(brh | ICBR_RESERVED, riic->base + RIIC_ICBRH);
372 writeb(brl | ICBR_RESERVED, riic->base + RIIC_ICBRL);
374 writeb(0, riic->base + RIIC_ICSER);
375 writeb(ICMR3_ACKWP | ICMR3_RDRFS, riic->base + RIIC_ICMR3);
377 riic_clear_set_bit(riic, ICCR1_IICRST, 0, RIIC_ICCR1);
380 pm_runtime_put(riic->adapter.dev.parent);
385 { .res_num = 0, .isr = riic_tend_isr, .name = "riic-tend" },
386 { .res_num = 1, .isr = riic_rdrf_isr, .name = "riic-rdrf" },
387 { .res_num = 2, .isr = riic_tdre_isr, .name = "riic-tdre" },
388 { .res_num = 3, .isr = riic_stop_isr, .name = "riic-stop" },
389 { .res_num = 5, .isr = riic_tend_isr, .name = "riic-nack" },
394 struct riic_dev *riic;
400 riic = devm_kzalloc(&pdev->dev, sizeof(*riic), GFP_KERNEL);
401 if (!riic)
405 riic->base = devm_ioremap_resource(&pdev->dev, res);
406 if (IS_ERR(riic->base))
407 return PTR_ERR(riic->base);
409 riic->clk = devm_clk_get(&pdev->dev, NULL);
410 if (IS_ERR(riic->clk)) {
412 return PTR_ERR(riic->clk);
421 0, riic_irqs[i].name, riic);
428 adap = &riic->adapter;
429 i2c_set_adapdata(adap, riic);
436 init_completion(&riic->msg_done);
442 ret = riic_init_hw(riic, &i2c_t);
450 platform_set_drvdata(pdev, riic);
463 struct riic_dev *riic = platform_get_drvdata(pdev);
466 writeb(0, riic->base + RIIC_ICIER);
468 i2c_del_adapter(&riic->adapter);
475 { .compatible = "renesas,riic-rz" },
483 .name = "i2c-riic",