Lines Matching refs:dev

41 	struct device		*dev;  member
54 static inline void highlander_i2c_irq_enable(struct highlander_i2c_dev *dev) in highlander_i2c_irq_enable() argument
56 iowrite16(ioread16(dev->base + SMCR) | SMCR_IEIC, dev->base + SMCR); in highlander_i2c_irq_enable()
59 static inline void highlander_i2c_irq_disable(struct highlander_i2c_dev *dev) in highlander_i2c_irq_disable() argument
61 iowrite16(ioread16(dev->base + SMCR) & ~SMCR_IEIC, dev->base + SMCR); in highlander_i2c_irq_disable()
64 static inline void highlander_i2c_start(struct highlander_i2c_dev *dev) in highlander_i2c_start() argument
66 iowrite16(ioread16(dev->base + SMCR) | SMCR_START, dev->base + SMCR); in highlander_i2c_start()
69 static inline void highlander_i2c_done(struct highlander_i2c_dev *dev) in highlander_i2c_done() argument
71 iowrite16(ioread16(dev->base + SMCR) | SMCR_IRIC, dev->base + SMCR); in highlander_i2c_done()
74 static void highlander_i2c_setup(struct highlander_i2c_dev *dev) in highlander_i2c_setup() argument
78 smmr = ioread16(dev->base + SMMR); in highlander_i2c_setup()
86 iowrite16(smmr, dev->base + SMMR); in highlander_i2c_setup()
111 static void highlander_i2c_command(struct highlander_i2c_dev *dev, in highlander_i2c_command() argument
120 iowrite16(cmd, dev->base + SMSADR + i); in highlander_i2c_command()
121 dev_dbg(dev->dev, "command data[%x] 0x%04x\n", i/2, cmd); in highlander_i2c_command()
125 static int highlander_i2c_wait_for_bbsy(struct highlander_i2c_dev *dev) in highlander_i2c_wait_for_bbsy() argument
130 while (ioread16(dev->base + SMCR) & SMCR_BBSY) { in highlander_i2c_wait_for_bbsy()
132 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in highlander_i2c_wait_for_bbsy()
142 static int highlander_i2c_reset(struct highlander_i2c_dev *dev) in highlander_i2c_reset() argument
144 iowrite16(ioread16(dev->base + SMCR) | SMCR_RST, dev->base + SMCR); in highlander_i2c_reset()
145 return highlander_i2c_wait_for_bbsy(dev); in highlander_i2c_reset()
148 static int highlander_i2c_wait_for_ack(struct highlander_i2c_dev *dev) in highlander_i2c_wait_for_ack() argument
150 u16 tmp = ioread16(dev->base + SMCR); in highlander_i2c_wait_for_ack()
153 dev_warn(dev->dev, "ack abnormality\n"); in highlander_i2c_wait_for_ack()
154 return highlander_i2c_reset(dev); in highlander_i2c_wait_for_ack()
162 struct highlander_i2c_dev *dev = dev_id; in highlander_i2c_irq() local
164 highlander_i2c_done(dev); in highlander_i2c_irq()
165 complete(&dev->cmd_complete); in highlander_i2c_irq()
170 static void highlander_i2c_poll(struct highlander_i2c_dev *dev) in highlander_i2c_poll() argument
177 smcr = ioread16(dev->base + SMCR); in highlander_i2c_poll()
194 dev_err(dev->dev, "polling timed out\n"); in highlander_i2c_poll()
197 static inline int highlander_i2c_wait_xfer_done(struct highlander_i2c_dev *dev) in highlander_i2c_wait_xfer_done() argument
199 if (dev->irq) in highlander_i2c_wait_xfer_done()
200 wait_for_completion_timeout(&dev->cmd_complete, in highlander_i2c_wait_xfer_done()
204 highlander_i2c_poll(dev); in highlander_i2c_wait_xfer_done()
206 return highlander_i2c_wait_for_ack(dev); in highlander_i2c_wait_xfer_done()
209 static int highlander_i2c_read(struct highlander_i2c_dev *dev) in highlander_i2c_read() argument
214 if (highlander_i2c_wait_for_bbsy(dev)) in highlander_i2c_read()
217 highlander_i2c_start(dev); in highlander_i2c_read()
219 if (highlander_i2c_wait_xfer_done(dev)) { in highlander_i2c_read()
220 dev_err(dev->dev, "Arbitration loss\n"); in highlander_i2c_read()
236 if (iic_read_delay && time_before(jiffies, dev->last_read_time + in highlander_i2c_read()
238 msleep(jiffies_to_msecs((dev->last_read_time + in highlander_i2c_read()
241 cnt = (dev->buf_len + 1) >> 1; in highlander_i2c_read()
243 data[i] = ioread16(dev->base + SMTRDR + (i * sizeof(u16))); in highlander_i2c_read()
244 dev_dbg(dev->dev, "read data[%x] 0x%04x\n", i, data[i]); in highlander_i2c_read()
247 smbus_read_data(data, dev->buf, dev->buf_len); in highlander_i2c_read()
249 dev->last_read_time = jiffies; in highlander_i2c_read()
254 static int highlander_i2c_write(struct highlander_i2c_dev *dev) in highlander_i2c_write() argument
259 smbus_write_data(dev->buf, data, dev->buf_len); in highlander_i2c_write()
261 cnt = (dev->buf_len + 1) >> 1; in highlander_i2c_write()
263 iowrite16(data[i], dev->base + SMTRDR + (i * sizeof(u16))); in highlander_i2c_write()
264 dev_dbg(dev->dev, "write data[%x] 0x%04x\n", i, data[i]); in highlander_i2c_write()
267 if (highlander_i2c_wait_for_bbsy(dev)) in highlander_i2c_write()
270 highlander_i2c_start(dev); in highlander_i2c_write()
272 return highlander_i2c_wait_xfer_done(dev); in highlander_i2c_write()
280 struct highlander_i2c_dev *dev = i2c_get_adapdata(adap); in highlander_i2c_smbus_xfer() local
283 init_completion(&dev->cmd_complete); in highlander_i2c_smbus_xfer()
285 dev_dbg(dev->dev, "addr %04x, command %02x, read_write %d, size %d\n", in highlander_i2c_smbus_xfer()
293 dev->buf = &data->byte; in highlander_i2c_smbus_xfer()
294 dev->buf_len = 1; in highlander_i2c_smbus_xfer()
297 dev->buf = &data->block[1]; in highlander_i2c_smbus_xfer()
298 dev->buf_len = data->block[0]; in highlander_i2c_smbus_xfer()
301 dev_err(dev->dev, "unsupported command %d\n", size); in highlander_i2c_smbus_xfer()
308 tmp = ioread16(dev->base + SMMR); in highlander_i2c_smbus_xfer()
311 switch (dev->buf_len) { in highlander_i2c_smbus_xfer()
325 dev_err(dev->dev, "unsupported xfer size %zu\n", dev->buf_len); in highlander_i2c_smbus_xfer()
329 iowrite16(tmp, dev->base + SMMR); in highlander_i2c_smbus_xfer()
332 highlander_i2c_done(dev); in highlander_i2c_smbus_xfer()
335 iowrite16((addr << 1) | read_write, dev->base + SMSMADR); in highlander_i2c_smbus_xfer()
337 highlander_i2c_command(dev, command, dev->buf_len); in highlander_i2c_smbus_xfer()
340 return highlander_i2c_read(dev); in highlander_i2c_smbus_xfer()
342 return highlander_i2c_write(dev); in highlander_i2c_smbus_xfer()
357 struct highlander_i2c_dev *dev; in highlander_i2c_probe() local
364 dev_err(&pdev->dev, "no mem resource\n"); in highlander_i2c_probe()
368 dev = kzalloc(sizeof(struct highlander_i2c_dev), GFP_KERNEL); in highlander_i2c_probe()
369 if (unlikely(!dev)) in highlander_i2c_probe()
372 dev->base = ioremap(res->start, resource_size(res)); in highlander_i2c_probe()
373 if (unlikely(!dev->base)) { in highlander_i2c_probe()
378 dev->dev = &pdev->dev; in highlander_i2c_probe()
379 platform_set_drvdata(pdev, dev); in highlander_i2c_probe()
381 dev->irq = platform_get_irq(pdev, 0); in highlander_i2c_probe()
382 if (dev->irq < 0 || iic_force_poll) in highlander_i2c_probe()
383 dev->irq = 0; in highlander_i2c_probe()
385 if (dev->irq) { in highlander_i2c_probe()
386 ret = request_irq(dev->irq, highlander_i2c_irq, 0, in highlander_i2c_probe()
387 pdev->name, dev); in highlander_i2c_probe()
391 highlander_i2c_irq_enable(dev); in highlander_i2c_probe()
393 dev_notice(&pdev->dev, "no IRQ, using polling mode\n"); in highlander_i2c_probe()
394 highlander_i2c_irq_disable(dev); in highlander_i2c_probe()
397 dev->last_read_time = jiffies; /* initial read jiffies */ in highlander_i2c_probe()
399 highlander_i2c_setup(dev); in highlander_i2c_probe()
401 adap = &dev->adapter; in highlander_i2c_probe()
402 i2c_set_adapdata(adap, dev); in highlander_i2c_probe()
407 adap->dev.parent = &pdev->dev; in highlander_i2c_probe()
413 ret = highlander_i2c_reset(dev); in highlander_i2c_probe()
415 dev_err(&pdev->dev, "controller didn't come up\n"); in highlander_i2c_probe()
421 dev_err(&pdev->dev, "failure adding adapter\n"); in highlander_i2c_probe()
428 if (dev->irq) in highlander_i2c_probe()
429 free_irq(dev->irq, dev); in highlander_i2c_probe()
431 iounmap(dev->base); in highlander_i2c_probe()
433 kfree(dev); in highlander_i2c_probe()
440 struct highlander_i2c_dev *dev = platform_get_drvdata(pdev); in highlander_i2c_remove() local
442 i2c_del_adapter(&dev->adapter); in highlander_i2c_remove()
444 if (dev->irq) in highlander_i2c_remove()
445 free_irq(dev->irq, dev); in highlander_i2c_remove()
447 iounmap(dev->base); in highlander_i2c_remove()
448 kfree(dev); in highlander_i2c_remove()