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