Lines Matching refs:cpm
125 struct cpm_i2c *cpm; in cpm_i2c_interrupt() local
130 cpm = i2c_get_adapdata(dev_id); in cpm_i2c_interrupt()
131 i2c_reg = cpm->i2c_reg; in cpm_i2c_interrupt()
139 wake_up(&cpm->i2c_wait); in cpm_i2c_interrupt()
144 static void cpm_reset_i2c_params(struct cpm_i2c *cpm) in cpm_reset_i2c_params() argument
146 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram; in cpm_reset_i2c_params()
149 out_be16(&i2c_ram->tbase, (u8 __iomem *)cpm->tbase - DPRAM_BASE); in cpm_reset_i2c_params()
150 out_be16(&i2c_ram->rbase, (u8 __iomem *)cpm->rbase - DPRAM_BASE); in cpm_reset_i2c_params()
152 if (cpm->version == 1) { in cpm_reset_i2c_params()
176 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_force_close() local
177 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg; in cpm_i2c_force_close()
181 cpm_command(cpm->cp_command, CPM_CR_CLOSE_RX_BD); in cpm_i2c_force_close()
195 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_parse_message() local
197 tbdf = cpm->tbase + tx; in cpm_i2c_parse_message()
198 rbdf = cpm->rbase + rx; in cpm_i2c_parse_message()
204 tb = cpm->txbuf[tx]; in cpm_i2c_parse_message()
205 rb = cpm->rxbuf[rx]; in cpm_i2c_parse_message()
255 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_check_message() local
257 tbdf = cpm->tbase + tx; in cpm_i2c_check_message()
258 rbdf = cpm->rbase + rx; in cpm_i2c_check_message()
260 tb = cpm->txbuf[tx]; in cpm_i2c_check_message()
261 rb = cpm->rxbuf[rx]; in cpm_i2c_check_message()
307 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_xfer() local
308 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg; in cpm_i2c_xfer()
309 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram; in cpm_i2c_xfer()
321 tbdf = cpm->tbase; in cpm_i2c_xfer()
322 rbdf = cpm->rbase; in cpm_i2c_xfer()
332 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); in cpm_i2c_xfer()
361 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
366 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
431 static int cpm_i2c_setup(struct cpm_i2c *cpm) in cpm_i2c_setup() argument
433 struct platform_device *ofdev = cpm->ofdev; in cpm_i2c_setup()
441 dev_dbg(&cpm->ofdev->dev, "cpm_i2c_setup()\n"); in cpm_i2c_setup()
443 init_waitqueue_head(&cpm->i2c_wait); in cpm_i2c_setup()
445 cpm->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); in cpm_i2c_setup()
446 if (!cpm->irq) in cpm_i2c_setup()
450 ret = request_irq(cpm->irq, cpm_i2c_interrupt, 0, "cpm_i2c", in cpm_i2c_setup()
451 &cpm->adap); in cpm_i2c_setup()
465 cpm->i2c_ram = i2c_base; in cpm_i2c_setup()
466 cpm->i2c_addr = in_be16(&cpm->i2c_ram->rpbase); in cpm_i2c_setup()
472 if (cpm->i2c_addr) { in cpm_i2c_setup()
473 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
477 cpm->version = 1; in cpm_i2c_setup()
480 cpm->i2c_addr = cpm_muram_alloc(sizeof(struct i2c_ram), 64); in cpm_i2c_setup()
481 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
482 out_be16(i2c_base, cpm->i2c_addr); in cpm_i2c_setup()
485 cpm->version = 2; in cpm_i2c_setup()
494 cpm->i2c_reg = of_iomap(ofdev->dev.of_node, 0); in cpm_i2c_setup()
495 if (cpm->i2c_reg == NULL) { in cpm_i2c_setup()
505 cpm->cp_command = *data; in cpm_i2c_setup()
509 cpm->adap.class = *data; in cpm_i2c_setup()
513 cpm->freq = *data; in cpm_i2c_setup()
515 cpm->freq = 60000; /* use 60kHz i2c clock by default */ in cpm_i2c_setup()
521 cpm->dp_addr = cpm_muram_alloc(sizeof(cbd_t) * 2 * CPM_MAXBD, 8); in cpm_i2c_setup()
522 if (!cpm->dp_addr) { in cpm_i2c_setup()
527 cpm->tbase = cpm_muram_addr(cpm->dp_addr); in cpm_i2c_setup()
528 cpm->rbase = cpm_muram_addr(cpm->dp_addr + sizeof(cbd_t) * CPM_MAXBD); in cpm_i2c_setup()
532 tbdf = cpm->tbase; in cpm_i2c_setup()
533 rbdf = cpm->rbase; in cpm_i2c_setup()
536 cpm->rxbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev, in cpm_i2c_setup()
538 &cpm->rxdma[i], GFP_KERNEL); in cpm_i2c_setup()
539 if (!cpm->rxbuf[i]) { in cpm_i2c_setup()
543 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1)); in cpm_i2c_setup()
545 …cpm->txbuf[i] = (unsigned char *)dma_alloc_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, &cpm->txdm… in cpm_i2c_setup()
546 if (!cpm->txbuf[i]) { in cpm_i2c_setup()
550 out_be32(&tbdf[i].cbd_bufaddr, cpm->txdma[i]); in cpm_i2c_setup()
555 cpm_reset_i2c_params(cpm); in cpm_i2c_setup()
557 dev_dbg(&cpm->ofdev->dev, "i2c_ram 0x%p, i2c_addr 0x%04x, freq %d\n", in cpm_i2c_setup()
558 cpm->i2c_ram, cpm->i2c_addr, cpm->freq); in cpm_i2c_setup()
559 dev_dbg(&cpm->ofdev->dev, "tbase 0x%04x, rbase 0x%04x\n", in cpm_i2c_setup()
560 (u8 __iomem *)cpm->tbase - DPRAM_BASE, in cpm_i2c_setup()
561 (u8 __iomem *)cpm->rbase - DPRAM_BASE); in cpm_i2c_setup()
563 cpm_command(cpm->cp_command, CPM_CR_INIT_TRX); in cpm_i2c_setup()
568 out_8(&cpm->i2c_reg->i2add, 0x7f << 1); in cpm_i2c_setup()
575 brg = get_brgfreq() / (32 * 2 * cpm->freq) - 3; in cpm_i2c_setup()
576 out_8(&cpm->i2c_reg->i2brg, brg); in cpm_i2c_setup()
578 out_8(&cpm->i2c_reg->i2mod, 0x00); in cpm_i2c_setup()
579 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); /* Master mode */ in cpm_i2c_setup()
582 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_setup()
583 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_setup()
589 if (cpm->rxbuf[i]) in cpm_i2c_setup()
590 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
591 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_setup()
592 if (cpm->txbuf[i]) in cpm_i2c_setup()
593 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
594 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_setup()
596 cpm_muram_free(cpm->dp_addr); in cpm_i2c_setup()
598 iounmap(cpm->i2c_reg); in cpm_i2c_setup()
600 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_setup()
601 iounmap(cpm->i2c_ram); in cpm_i2c_setup()
602 if (cpm->version == 2) in cpm_i2c_setup()
603 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_setup()
605 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_setup()
609 static void cpm_i2c_shutdown(struct cpm_i2c *cpm) in cpm_i2c_shutdown() argument
614 clrbits8(&cpm->i2c_reg->i2mod, I2MOD_EN); in cpm_i2c_shutdown()
617 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_shutdown()
618 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_shutdown()
620 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_shutdown()
624 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
625 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_shutdown()
626 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
627 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_shutdown()
630 cpm_muram_free(cpm->dp_addr); in cpm_i2c_shutdown()
631 iounmap(cpm->i2c_reg); in cpm_i2c_shutdown()
633 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_shutdown()
634 iounmap(cpm->i2c_ram); in cpm_i2c_shutdown()
635 if (cpm->version == 2) in cpm_i2c_shutdown()
636 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_shutdown()
642 struct cpm_i2c *cpm; in cpm_i2c_probe() local
645 cpm = kzalloc(sizeof(struct cpm_i2c), GFP_KERNEL); in cpm_i2c_probe()
646 if (!cpm) in cpm_i2c_probe()
649 cpm->ofdev = ofdev; in cpm_i2c_probe()
651 platform_set_drvdata(ofdev, cpm); in cpm_i2c_probe()
653 cpm->adap = cpm_ops; in cpm_i2c_probe()
654 i2c_set_adapdata(&cpm->adap, cpm); in cpm_i2c_probe()
655 cpm->adap.dev.parent = &ofdev->dev; in cpm_i2c_probe()
656 cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node); in cpm_i2c_probe()
658 result = cpm_i2c_setup(cpm); in cpm_i2c_probe()
667 cpm->adap.nr = (data && len == 4) ? be32_to_cpup(data) : -1; in cpm_i2c_probe()
668 result = i2c_add_numbered_adapter(&cpm->adap); in cpm_i2c_probe()
676 cpm->adap.name); in cpm_i2c_probe()
680 cpm_i2c_shutdown(cpm); in cpm_i2c_probe()
682 kfree(cpm); in cpm_i2c_probe()
689 struct cpm_i2c *cpm = platform_get_drvdata(ofdev); in cpm_i2c_remove() local
691 i2c_del_adapter(&cpm->adap); in cpm_i2c_remove()
693 cpm_i2c_shutdown(cpm); in cpm_i2c_remove()
695 kfree(cpm); in cpm_i2c_remove()