• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/i2c/busses/

Lines Matching defs:cpm

14  * Converted to of_platform_device. Renamed to i2c-cpm.c.
47 #include <asm/cpm.h>
129 struct cpm_i2c *cpm;
134 cpm = i2c_get_adapdata(dev_id);
135 i2c_reg = cpm->i2c_reg;
143 wake_up(&cpm->i2c_wait);
148 static void cpm_reset_i2c_params(struct cpm_i2c *cpm)
150 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram;
153 out_be16(&i2c_ram->tbase, (u8 __iomem *)cpm->tbase - DPRAM_BASE);
154 out_be16(&i2c_ram->rbase, (u8 __iomem *)cpm->rbase - DPRAM_BASE);
156 if (cpm->version == 1) {
180 struct cpm_i2c *cpm = i2c_get_adapdata(adap);
181 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg;
185 cpm_command(cpm->cp_command, CPM_CR_CLOSE_RX_BD);
199 struct cpm_i2c *cpm = i2c_get_adapdata(adap);
201 tbdf = cpm->tbase + tx;
202 rbdf = cpm->rbase + rx;
208 tb = cpm->txbuf[tx];
209 rb = cpm->rxbuf[rx];
259 struct cpm_i2c *cpm = i2c_get_adapdata(adap);
261 tbdf = cpm->tbase + tx;
262 rbdf = cpm->rbase + rx;
264 tb = cpm->txbuf[tx];
265 rb = cpm->rxbuf[rx];
311 struct cpm_i2c *cpm = i2c_get_adapdata(adap);
312 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg;
313 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram;
335 tbdf = cpm->tbase;
336 rbdf = cpm->rbase;
367 ret = wait_event_timeout(cpm->i2c_wait,
372 ret = wait_event_timeout(cpm->i2c_wait,
425 .name = "i2c-cpm",
429 static int __devinit cpm_i2c_setup(struct cpm_i2c *cpm)
431 struct platform_device *ofdev = cpm->ofdev;
439 dev_dbg(&cpm->ofdev->dev, "cpm_i2c_setup()\n");
441 init_waitqueue_head(&cpm->i2c_wait);
443 cpm->irq = of_irq_to_resource(ofdev->dev.of_node, 0, NULL);
444 if (!cpm->irq)
448 ret = request_irq(cpm->irq, cpm_i2c_interrupt, 0, "cpm_i2c",
449 &cpm->adap);
463 cpm->i2c_ram = i2c_base;
464 cpm->i2c_addr = in_be16(&cpm->i2c_ram->rpbase);
470 if (cpm->i2c_addr) {
471 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr);
475 cpm->version = 1;
478 cpm->i2c_addr = cpm_muram_alloc(sizeof(struct i2c_ram), 64);
479 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr);
480 out_be16(i2c_base, cpm->i2c_addr);
483 cpm->version = 2;
492 cpm->i2c_reg = of_iomap(ofdev->dev.of_node, 0);
493 if (cpm->i2c_reg == NULL) {
498 data = of_get_property(ofdev->dev.of_node, "fsl,cpm-command", &len);
503 cpm->cp_command = *data;
507 cpm->adap.class = *data;
511 cpm->freq = *data;
513 cpm->freq = 60000; /* use 60kHz i2c clock by default */
519 cpm->dp_addr = cpm_muram_alloc(sizeof(cbd_t) * 2 * CPM_MAXBD, 8);
520 if (!cpm->dp_addr) {
525 cpm->tbase = cpm_muram_addr(cpm->dp_addr);
526 cpm->rbase = cpm_muram_addr(cpm->dp_addr + sizeof(cbd_t) * CPM_MAXBD);
530 tbdf = cpm->tbase;
531 rbdf = cpm->rbase;
534 cpm->rxbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev,
536 &cpm->rxdma[i], GFP_KERNEL);
537 if (!cpm->rxbuf[i]) {
541 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1));
543 cpm->txbuf[i] = (unsigned char *)dma_alloc_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, &cpm->txdma[i], GFP_KERNEL);
544 if (!cpm->txbuf[i]) {
548 out_be32(&tbdf[i].cbd_bufaddr, cpm->txdma[i]);
553 cpm_reset_i2c_params(cpm);
555 dev_dbg(&cpm->ofdev->dev, "i2c_ram 0x%p, i2c_addr 0x%04x, freq %d\n",
556 cpm->i2c_ram, cpm->i2c_addr, cpm->freq);
557 dev_dbg(&cpm->ofdev->dev, "tbase 0x%04x, rbase 0x%04x\n",
558 (u8 __iomem *)cpm->tbase - DPRAM_BASE,
559 (u8 __iomem *)cpm->rbase - DPRAM_BASE);
561 cpm_command(cpm->cp_command, CPM_CR_INIT_TRX);
566 out_8(&cpm->i2c_reg->i2add, 0x7f << 1);
573 brg = get_brgfreq() / (32 * 2 * cpm->freq) - 3;
574 out_8(&cpm->i2c_reg->i2brg, brg);
576 out_8(&cpm->i2c_reg->i2mod, 0x00);
577 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); /* Master mode */
580 out_8(&cpm->i2c_reg->i2cmr, 0);
581 out_8(&cpm->i2c_reg->i2cer, 0xff);
587 if (cpm->rxbuf[i])
588 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
589 cpm->rxbuf[i], cpm->rxdma[i]);
590 if (cpm->txbuf[i])
591 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
592 cpm->txbuf[i], cpm->txdma[i]);
594 cpm_muram_free(cpm->dp_addr);
596 iounmap(cpm->i2c_reg);
598 if ((cpm->version == 1) && (!cpm->i2c_addr))
599 iounmap(cpm->i2c_ram);
600 if (cpm->version == 2)
601 cpm_muram_free(cpm->i2c_addr);
603 free_irq(cpm->irq, &cpm->adap);
607 static void cpm_i2c_shutdown(struct cpm_i2c *cpm)
612 clrbits8(&cpm->i2c_reg->i2mod, I2MOD_EN);
615 out_8(&cpm->i2c_reg->i2cmr, 0);
616 out_8(&cpm->i2c_reg->i2cer, 0xff);
618 free_irq(cpm->irq, &cpm->adap);
622 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
623 cpm->rxbuf[i], cpm->rxdma[i]);
624 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
625 cpm->txbuf[i], cpm->txdma[i]);
628 cpm_muram_free(cpm->dp_addr);
629 iounmap(cpm->i2c_reg);
631 if ((cpm->version == 1) && (!cpm->i2c_addr))
632 iounmap(cpm->i2c_ram);
633 if (cpm->version == 2)
634 cpm_muram_free(cpm->i2c_addr);
641 struct cpm_i2c *cpm;
644 cpm = kzalloc(sizeof(struct cpm_i2c), GFP_KERNEL);
645 if (!cpm)
648 cpm->ofdev = ofdev;
650 dev_set_drvdata(&ofdev->dev, cpm);
652 cpm->adap = cpm_ops;
653 i2c_set_adapdata(&cpm->adap, cpm);
654 cpm->adap.dev.parent = &ofdev->dev;
655 cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node);
657 result = cpm_i2c_setup(cpm);
667 cpm->adap.nr = *data;
668 result = i2c_add_numbered_adapter(&cpm->adap);
670 result = i2c_add_adapter(&cpm->adap);
678 cpm->adap.name);
683 of_i2c_register_devices(&cpm->adap);
687 cpm_i2c_shutdown(cpm);
690 kfree(cpm);
697 struct cpm_i2c *cpm = dev_get_drvdata(&ofdev->dev);
699 i2c_del_adapter(&cpm->adap);
701 cpm_i2c_shutdown(cpm);
704 kfree(cpm);
725 .name = "fsl-i2c-cpm",