Lines Matching refs:dev

44 	struct device		*dev;  member
57 static inline void highlander_i2c_irq_enable(struct highlander_i2c_dev *dev) in highlander_i2c_irq_enable() argument
59 iowrite16(ioread16(dev->base + SMCR) | SMCR_IEIC, dev->base + SMCR); in highlander_i2c_irq_enable()
62 static inline void highlander_i2c_irq_disable(struct highlander_i2c_dev *dev) in highlander_i2c_irq_disable() argument
64 iowrite16(ioread16(dev->base + SMCR) & ~SMCR_IEIC, dev->base + SMCR); in highlander_i2c_irq_disable()
67 static inline void highlander_i2c_start(struct highlander_i2c_dev *dev) in highlander_i2c_start() argument
69 iowrite16(ioread16(dev->base + SMCR) | SMCR_START, dev->base + SMCR); in highlander_i2c_start()
72 static inline void highlander_i2c_done(struct highlander_i2c_dev *dev) in highlander_i2c_done() argument
74 iowrite16(ioread16(dev->base + SMCR) | SMCR_IRIC, dev->base + SMCR); in highlander_i2c_done()
77 static void highlander_i2c_setup(struct highlander_i2c_dev *dev) in highlander_i2c_setup() argument
81 smmr = ioread16(dev->base + SMMR); in highlander_i2c_setup()
89 iowrite16(smmr, dev->base + SMMR); in highlander_i2c_setup()
114 static void highlander_i2c_command(struct highlander_i2c_dev *dev, in highlander_i2c_command() argument
123 iowrite16(cmd, dev->base + SMSADR + i); in highlander_i2c_command()
124 dev_dbg(dev->dev, "command data[%x] 0x%04x\n", i/2, cmd); in highlander_i2c_command()
128 static int highlander_i2c_wait_for_bbsy(struct highlander_i2c_dev *dev) in highlander_i2c_wait_for_bbsy() argument
133 while (ioread16(dev->base + SMCR) & SMCR_BBSY) { in highlander_i2c_wait_for_bbsy()
135 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in highlander_i2c_wait_for_bbsy()
145 static int highlander_i2c_reset(struct highlander_i2c_dev *dev) in highlander_i2c_reset() argument
147 iowrite16(ioread16(dev->base + SMCR) | SMCR_RST, dev->base + SMCR); in highlander_i2c_reset()
148 return highlander_i2c_wait_for_bbsy(dev); in highlander_i2c_reset()
151 static int highlander_i2c_wait_for_ack(struct highlander_i2c_dev *dev) in highlander_i2c_wait_for_ack() argument
153 u16 tmp = ioread16(dev->base + SMCR); in highlander_i2c_wait_for_ack()
156 dev_warn(dev->dev, "ack abnormality\n"); in highlander_i2c_wait_for_ack()
157 return highlander_i2c_reset(dev); in highlander_i2c_wait_for_ack()
165 struct highlander_i2c_dev *dev = dev_id; in highlander_i2c_irq() local
167 highlander_i2c_done(dev); in highlander_i2c_irq()
168 complete(&dev->cmd_complete); in highlander_i2c_irq()
173 static void highlander_i2c_poll(struct highlander_i2c_dev *dev) in highlander_i2c_poll() argument
180 smcr = ioread16(dev->base + SMCR); in highlander_i2c_poll()
197 dev_err(dev->dev, "polling timed out\n"); in highlander_i2c_poll()
200 static inline int highlander_i2c_wait_xfer_done(struct highlander_i2c_dev *dev) in highlander_i2c_wait_xfer_done() argument
202 if (dev->irq) in highlander_i2c_wait_xfer_done()
203 wait_for_completion_timeout(&dev->cmd_complete, in highlander_i2c_wait_xfer_done()
207 highlander_i2c_poll(dev); in highlander_i2c_wait_xfer_done()
209 return highlander_i2c_wait_for_ack(dev); in highlander_i2c_wait_xfer_done()
212 static int highlander_i2c_read(struct highlander_i2c_dev *dev) in highlander_i2c_read() argument
217 if (highlander_i2c_wait_for_bbsy(dev)) in highlander_i2c_read()
220 highlander_i2c_start(dev); in highlander_i2c_read()
222 if (highlander_i2c_wait_xfer_done(dev)) { in highlander_i2c_read()
223 dev_err(dev->dev, "Arbitration loss\n"); in highlander_i2c_read()
239 if (iic_read_delay && time_before(jiffies, dev->last_read_time + in highlander_i2c_read()
241 msleep(jiffies_to_msecs((dev->last_read_time + in highlander_i2c_read()
244 cnt = (dev->buf_len + 1) >> 1; in highlander_i2c_read()
246 data[i] = ioread16(dev->base + SMTRDR + (i * sizeof(u16))); in highlander_i2c_read()
247 dev_dbg(dev->dev, "read data[%x] 0x%04x\n", i, data[i]); in highlander_i2c_read()
250 smbus_read_data(data, dev->buf, dev->buf_len); in highlander_i2c_read()
252 dev->last_read_time = jiffies; in highlander_i2c_read()
257 static int highlander_i2c_write(struct highlander_i2c_dev *dev) in highlander_i2c_write() argument
262 smbus_write_data(dev->buf, data, dev->buf_len); in highlander_i2c_write()
264 cnt = (dev->buf_len + 1) >> 1; in highlander_i2c_write()
266 iowrite16(data[i], dev->base + SMTRDR + (i * sizeof(u16))); in highlander_i2c_write()
267 dev_dbg(dev->dev, "write data[%x] 0x%04x\n", i, data[i]); in highlander_i2c_write()
270 if (highlander_i2c_wait_for_bbsy(dev)) in highlander_i2c_write()
273 highlander_i2c_start(dev); in highlander_i2c_write()
275 return highlander_i2c_wait_xfer_done(dev); in highlander_i2c_write()
283 struct highlander_i2c_dev *dev = i2c_get_adapdata(adap); in highlander_i2c_smbus_xfer() local
286 init_completion(&dev->cmd_complete); in highlander_i2c_smbus_xfer()
288 dev_dbg(dev->dev, "addr %04x, command %02x, read_write %d, size %d\n", in highlander_i2c_smbus_xfer()
296 dev->buf = &data->byte; in highlander_i2c_smbus_xfer()
297 dev->buf_len = 1; in highlander_i2c_smbus_xfer()
300 dev->buf = &data->block[1]; in highlander_i2c_smbus_xfer()
301 dev->buf_len = data->block[0]; in highlander_i2c_smbus_xfer()
304 dev_err(dev->dev, "unsupported command %d\n", size); in highlander_i2c_smbus_xfer()
311 tmp = ioread16(dev->base + SMMR); in highlander_i2c_smbus_xfer()
314 switch (dev->buf_len) { in highlander_i2c_smbus_xfer()
328 dev_err(dev->dev, "unsupported xfer size %d\n", dev->buf_len); in highlander_i2c_smbus_xfer()
332 iowrite16(tmp, dev->base + SMMR); in highlander_i2c_smbus_xfer()
335 highlander_i2c_done(dev); in highlander_i2c_smbus_xfer()
338 iowrite16((addr << 1) | read_write, dev->base + SMSMADR); in highlander_i2c_smbus_xfer()
340 highlander_i2c_command(dev, command, dev->buf_len); in highlander_i2c_smbus_xfer()
343 return highlander_i2c_read(dev); in highlander_i2c_smbus_xfer()
345 return highlander_i2c_write(dev); in highlander_i2c_smbus_xfer()
360 struct highlander_i2c_dev *dev; in highlander_i2c_probe() local
367 dev_err(&pdev->dev, "no mem resource\n"); in highlander_i2c_probe()
371 dev = kzalloc(sizeof(struct highlander_i2c_dev), GFP_KERNEL); in highlander_i2c_probe()
372 if (unlikely(!dev)) in highlander_i2c_probe()
375 dev->base = ioremap_nocache(res->start, resource_size(res)); in highlander_i2c_probe()
376 if (unlikely(!dev->base)) { in highlander_i2c_probe()
381 dev->dev = &pdev->dev; in highlander_i2c_probe()
382 platform_set_drvdata(pdev, dev); in highlander_i2c_probe()
384 dev->irq = platform_get_irq(pdev, 0); in highlander_i2c_probe()
386 dev->irq = 0; in highlander_i2c_probe()
388 if (dev->irq) { in highlander_i2c_probe()
389 ret = request_irq(dev->irq, highlander_i2c_irq, 0, in highlander_i2c_probe()
390 pdev->name, dev); in highlander_i2c_probe()
394 highlander_i2c_irq_enable(dev); in highlander_i2c_probe()
396 dev_notice(&pdev->dev, "no IRQ, using polling mode\n"); in highlander_i2c_probe()
397 highlander_i2c_irq_disable(dev); in highlander_i2c_probe()
400 dev->last_read_time = jiffies; /* initial read jiffies */ in highlander_i2c_probe()
402 highlander_i2c_setup(dev); in highlander_i2c_probe()
404 adap = &dev->adapter; in highlander_i2c_probe()
405 i2c_set_adapdata(adap, dev); in highlander_i2c_probe()
410 adap->dev.parent = &pdev->dev; in highlander_i2c_probe()
416 ret = highlander_i2c_reset(dev); in highlander_i2c_probe()
418 dev_err(&pdev->dev, "controller didn't come up\n"); in highlander_i2c_probe()
424 dev_err(&pdev->dev, "failure adding adapter\n"); in highlander_i2c_probe()
431 if (dev->irq) in highlander_i2c_probe()
432 free_irq(dev->irq, dev); in highlander_i2c_probe()
434 iounmap(dev->base); in highlander_i2c_probe()
436 kfree(dev); in highlander_i2c_probe()
443 struct highlander_i2c_dev *dev = platform_get_drvdata(pdev); in highlander_i2c_remove() local
445 i2c_del_adapter(&dev->adapter); in highlander_i2c_remove()
447 if (dev->irq) in highlander_i2c_remove()
448 free_irq(dev->irq, dev); in highlander_i2c_remove()
450 iounmap(dev->base); in highlander_i2c_remove()
451 kfree(dev); in highlander_i2c_remove()