Lines Matching refs:base
69 static void i2c_reset(struct mv_i2c *base) in i2c_reset() argument
74 icr_mode = readl(&base->icr) & ICR_MODE_MASK; in i2c_reset()
75 writel(readl(&base->icr) & ~ICR_IUE, &base->icr); /* disable unit */ in i2c_reset()
76 writel(readl(&base->icr) | ICR_UR, &base->icr); /* reset the unit */ in i2c_reset()
78 writel(readl(&base->icr) & ~ICR_IUE, &base->icr); /* disable unit */ in i2c_reset()
82 writel(CONFIG_SYS_I2C_SLAVE, &base->isar); /* set our slave address */ in i2c_reset()
84 writel(I2C_ICR_INIT | icr_mode, &base->icr); in i2c_reset()
85 writel(I2C_ISR_INIT, &base->isr); /* set clear interrupt bits */ in i2c_reset()
86 writel(readl(&base->icr) | ICR_IUE, &base->icr); /* enable unit */ in i2c_reset()
96 static int i2c_isr_set_cleared(struct mv_i2c *base, unsigned long set_mask, in i2c_isr_set_cleared() argument
102 isr = readl(&base->isr); in i2c_isr_set_cleared()
126 static int i2c_transfer(struct mv_i2c *base, struct mv_i2c_msg *msg) in i2c_transfer() argument
136 if (!i2c_isr_set_cleared(base, 0, ISR_IBB)) in i2c_transfer()
140 writel(readl(&base->icr) & ~ICR_START, &base->icr); in i2c_transfer()
141 writel(readl(&base->icr) & ~ICR_STOP, &base->icr); in i2c_transfer()
142 writel(msg->data, &base->idbr); in i2c_transfer()
144 writel(readl(&base->icr) | ICR_START, &base->icr); in i2c_transfer()
146 writel(readl(&base->icr) | ICR_STOP, &base->icr); in i2c_transfer()
148 writel(readl(&base->icr) | ICR_ACKNAK, &base->icr); in i2c_transfer()
150 writel(readl(&base->icr) & ~ICR_ACKNAK, &base->icr); in i2c_transfer()
151 writel(readl(&base->icr) & ~ICR_ALDIE, &base->icr); in i2c_transfer()
152 writel(readl(&base->icr) | ICR_TB, &base->icr); in i2c_transfer()
155 if (!i2c_isr_set_cleared(base, ISR_ITE, 0)) in i2c_transfer()
159 writel(readl(&base->isr) | ISR_ITE, &base->isr); in i2c_transfer()
163 if (!i2c_isr_set_cleared(base, 0, ISR_ACKNAK)) in i2c_transfer()
170 if (!i2c_isr_set_cleared(base, 0, ISR_IBB)) in i2c_transfer()
174 writel(readl(&base->icr) & ~ICR_START, &base->icr); in i2c_transfer()
175 writel(readl(&base->icr) & ~ICR_STOP, &base->icr); in i2c_transfer()
177 writel(readl(&base->icr) | ICR_START, &base->icr); in i2c_transfer()
179 writel(readl(&base->icr) | ICR_STOP, &base->icr); in i2c_transfer()
181 writel(readl(&base->icr) | ICR_ACKNAK, &base->icr); in i2c_transfer()
183 writel(readl(&base->icr) & ~ICR_ACKNAK, &base->icr); in i2c_transfer()
184 writel(readl(&base->icr) & ~ICR_ALDIE, &base->icr); in i2c_transfer()
185 writel(readl(&base->icr) | ICR_TB, &base->icr); in i2c_transfer()
188 if (!i2c_isr_set_cleared(base, ISR_IRF, 0)) in i2c_transfer()
191 msg->data = readl(&base->idbr); in i2c_transfer()
194 writel(readl(&base->isr) | ISR_IRF, &base->isr); in i2c_transfer()
233 debug("i2c_transfer: ISR: 0x%04x\n", readl(&base->isr)); in i2c_transfer()
234 i2c_reset(base); in i2c_transfer()
238 static int __i2c_read(struct mv_i2c *base, uchar chip, u8 *addr, int alen, in __i2c_read() argument
251 i2c_reset(base); in __i2c_read()
260 if (i2c_transfer(base, &msg)) in __i2c_read()
274 if (i2c_transfer(base, &msg)) in __i2c_read()
285 if (i2c_transfer(base, &msg)) in __i2c_read()
300 if (i2c_transfer(base, &msg)) in __i2c_read()
309 i2c_reset(base); in __i2c_read()
314 static int __i2c_write(struct mv_i2c *base, uchar chip, u8 *addr, int alen, in __i2c_write() argument
322 i2c_reset(base); in __i2c_write()
331 if (i2c_transfer(base, &msg)) in __i2c_write()
345 if (i2c_transfer(base, &msg)) in __i2c_write()
363 if (i2c_transfer(base, &msg)) in __i2c_write()
367 i2c_reset(base); in __i2c_write()
376 static void i2c_board_init(struct mv_i2c *base) in i2c_board_init() argument
388 icr = readl(&base->icr); in i2c_board_init()
389 writel(readl(&base->icr) & ~(ICR_SCLE | ICR_IUE), &base->icr); in i2c_board_init()
393 writel(icr, &base->icr); in i2c_board_init()
447 static int __i2c_probe_chip(struct mv_i2c *base, uchar chip) in __i2c_probe_chip() argument
451 i2c_reset(base); in __i2c_probe_chip()
457 if (i2c_transfer(base, &msg)) in __i2c_probe_chip()
464 if (i2c_transfer(base, &msg)) in __i2c_probe_chip()
534 struct mv_i2c *base; member
557 return __i2c_read(i2c->base, dmsg->addr, omsg->buf, in mv_i2c_xfer()
560 return __i2c_write(i2c->base, dmsg->addr, omsg->buf, in mv_i2c_xfer()
573 clrsetbits_le32(&priv->base->icr, ICR_MODE_MASK, val); in mv_i2c_set_bus_speed()
582 priv->base = (void *)devfdt_get_addr_ptr(bus); in mv_i2c_probe()