Lines Matching +full:half +full:- +full:length
1 // SPDX-License-Identifier: GPL-2.0+
5 * (C) Copyright 2014-2015 DENX Software Engineering GmbH
6 * Written-by: Albert ARIBAUD - 3ADEV <albert.aribaud@3adev.fr>
59 return -EINVAL; in __i2c_set_bus_speed()
65 return -EINVAL; in __i2c_set_bus_speed()
69 return -EINVAL; in __i2c_set_bus_speed()
72 writel(half_period, &base->clk_hi); in __i2c_set_bus_speed()
73 writel(half_period, &base->clk_lo); in __i2c_set_bus_speed()
81 /* soft reset (auto-clears) */ in __i2c_init()
82 writel(LPC32XX_I2C_SOFT_RESET, &base->ctrl); in __i2c_init()
83 /* set HI and LO periods for half of the default speed */ in __i2c_init()
92 /* Soft-reset the controller */ in __i2c_probe_chip()
93 writel(LPC32XX_I2C_SOFT_RESET, &base->ctrl); in __i2c_probe_chip()
94 while (readl(&base->ctrl) & LPC32XX_I2C_SOFT_RESET) in __i2c_probe_chip()
98 &base->tx); in __i2c_probe_chip()
100 while (!((stat = readl(&base->stat)) & LPC32XX_I2C_STAT_TDI)) in __i2c_probe_chip()
103 return (stat & LPC32XX_I2C_STAT_NAI) ? -1 : 0; in __i2c_probe_chip()
111 int alen, u8 *data, int length) in __i2c_read() argument
115 /* Soft-reset the controller */ in __i2c_read()
116 writel(LPC32XX_I2C_SOFT_RESET, &base->ctrl); in __i2c_read()
117 while (readl(&base->ctrl) & LPC32XX_I2C_SOFT_RESET) in __i2c_read()
122 writel((dev<<1) | LPC32XX_I2C_TX_START, &base->tx); in __i2c_read()
124 while (alen--) { in __i2c_read()
130 writel(a, &base->tx); in __i2c_read()
133 while (!((stat = readl(&base->stat)) & LPC32XX_I2C_STAT_TDI)) in __i2c_read()
135 /* clear end-of-transaction flag */ in __i2c_read()
136 writel(1, &base->stat); in __i2c_read()
139 if (length) { in __i2c_read()
141 writel(1 | (dev<<1) | LPC32XX_I2C_TX_START, &base->tx); in __i2c_read()
142 wlen = length; in __i2c_read()
144 while (length | wlen) { in __i2c_read()
146 stat = readl(&base->stat); in __i2c_read()
150 wlen--; in __i2c_read()
153 LPC32XX_I2C_TX_STOP, &base->tx); in __i2c_read()
156 if ((length > 0) in __i2c_read()
158 length--; in __i2c_read()
160 *(data++) = readl(&base->rx); in __i2c_read()
164 while (!((stat = readl(&base->stat)) & LPC32XX_I2C_STAT_TDI)) in __i2c_read()
166 /* clear end-of-transaction flag */ in __i2c_read()
167 writel(1, &base->stat); in __i2c_read()
178 int alen, u8 *data, int length) in __i2c_write() argument
182 /* Soft-reset the controller */ in __i2c_write()
183 writel(LPC32XX_I2C_SOFT_RESET, &base->ctrl); in __i2c_write()
184 while (readl(&base->ctrl) & LPC32XX_I2C_SOFT_RESET) in __i2c_write()
187 if (alen | length) in __i2c_write()
189 writel((dev<<1) | LPC32XX_I2C_TX_START, &base->tx); in __i2c_write()
195 stat = readl(&base->stat); in __i2c_write()
197 alen--; in __i2c_write()
199 if (!(alen | length)) in __i2c_write()
202 writel(a, &base->tx); in __i2c_write()
205 while (length) { in __i2c_write()
207 stat = readl(&base->stat); in __i2c_write()
209 /* compute data byte, add stop if length==0 */ in __i2c_write()
210 length--; in __i2c_write()
212 if (!length) in __i2c_write()
215 writel(d, &base->tx); in __i2c_write()
219 while (!((stat = readl(&base->stat)) & LPC32XX_I2C_STAT_TDI)) in __i2c_write()
221 /* clear end-of-transaction flag */ in __i2c_write()
222 writel(1, &base->stat); in __i2c_write()
230 __i2c_init(lpc32xx_i2c[adap->hwadapnr], requested_speed, slaveadd, in lpc32xx_i2c_init()
231 adap->hwadapnr); in lpc32xx_i2c_init()
236 return __i2c_probe_chip(lpc32xx_i2c[adap->hwadapnr], dev); in lpc32xx_i2c_probe_chip()
240 int alen, u8 *data, int length) in lpc32xx_i2c_read() argument
242 return __i2c_read(lpc32xx_i2c[adap->hwadapnr], dev, addr, in lpc32xx_i2c_read()
243 alen, data, length); in lpc32xx_i2c_read()
247 int alen, u8 *data, int length) in lpc32xx_i2c_write() argument
249 return __i2c_write(lpc32xx_i2c[adap->hwadapnr], dev, addr, in lpc32xx_i2c_write()
250 alen, data, length); in lpc32xx_i2c_write()
256 return __i2c_set_bus_speed(lpc32xx_i2c[adap->hwadapnr], speed, in lpc32xx_i2c_set_bus_speed()
257 adap->hwadapnr); in lpc32xx_i2c_set_bus_speed()
284 bus->seq = dev->index;
286 __i2c_init(dev->base, dev->speed, 0, dev->index);
294 return __i2c_probe_chip(dev->base, chip_addr);
311 return -1;
318 address = omsg->buf[0];
319 for (i = 1; i < omsg->len; i++)
320 address = (address << 8) + omsg->buf[i];
322 if (dmsg->flags & I2C_M_RD)
323 return __i2c_read(dev->base, dmsg->addr, address,
324 omsg->len, dmsg->buf, dmsg->len);
326 return __i2c_write(dev->base, dmsg->addr, address,
327 omsg->len, dmsg->buf, dmsg->len);
333 return __i2c_set_bus_speed(dev->base, speed, dev->index);
340 __i2c_init(dev->base, dev->speed, 0, dev->index);