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()
331 tbdf = cpm->tbase; in cpm_i2c_xfer()
332 rbdf = cpm->rbase; in cpm_i2c_xfer()
342 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); in cpm_i2c_xfer()
371 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
376 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
433 static int cpm_i2c_setup(struct cpm_i2c *cpm) in cpm_i2c_setup() argument
435 struct platform_device *ofdev = cpm->ofdev; in cpm_i2c_setup()
443 dev_dbg(&cpm->ofdev->dev, "cpm_i2c_setup()\n"); in cpm_i2c_setup()
445 init_waitqueue_head(&cpm->i2c_wait); in cpm_i2c_setup()
447 cpm->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); in cpm_i2c_setup()
448 if (!cpm->irq) in cpm_i2c_setup()
452 ret = request_irq(cpm->irq, cpm_i2c_interrupt, 0, "cpm_i2c", in cpm_i2c_setup()
453 &cpm->adap); in cpm_i2c_setup()
467 cpm->i2c_ram = i2c_base; in cpm_i2c_setup()
468 cpm->i2c_addr = in_be16(&cpm->i2c_ram->rpbase); in cpm_i2c_setup()
474 if (cpm->i2c_addr) { in cpm_i2c_setup()
475 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
479 cpm->version = 1; in cpm_i2c_setup()
482 cpm->i2c_addr = cpm_muram_alloc(sizeof(struct i2c_ram), 64); in cpm_i2c_setup()
483 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
484 out_be16(i2c_base, cpm->i2c_addr); in cpm_i2c_setup()
487 cpm->version = 2; in cpm_i2c_setup()
496 cpm->i2c_reg = of_iomap(ofdev->dev.of_node, 0); in cpm_i2c_setup()
497 if (cpm->i2c_reg == NULL) { in cpm_i2c_setup()
507 cpm->cp_command = *data; in cpm_i2c_setup()
511 cpm->adap.class = *data; in cpm_i2c_setup()
515 cpm->freq = *data; in cpm_i2c_setup()
517 cpm->freq = 60000; /* use 60kHz i2c clock by default */ in cpm_i2c_setup()
523 cpm->dp_addr = cpm_muram_alloc(sizeof(cbd_t) * 2 * CPM_MAXBD, 8); in cpm_i2c_setup()
524 if (!cpm->dp_addr) { in cpm_i2c_setup()
529 cpm->tbase = cpm_muram_addr(cpm->dp_addr); in cpm_i2c_setup()
530 cpm->rbase = cpm_muram_addr(cpm->dp_addr + sizeof(cbd_t) * CPM_MAXBD); in cpm_i2c_setup()
534 tbdf = cpm->tbase; in cpm_i2c_setup()
535 rbdf = cpm->rbase; in cpm_i2c_setup()
538 cpm->rxbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev, in cpm_i2c_setup()
540 &cpm->rxdma[i], GFP_KERNEL); in cpm_i2c_setup()
541 if (!cpm->rxbuf[i]) { in cpm_i2c_setup()
545 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1)); in cpm_i2c_setup()
547 …cpm->txbuf[i] = (unsigned char *)dma_alloc_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, &cpm->txdm… in cpm_i2c_setup()
548 if (!cpm->txbuf[i]) { in cpm_i2c_setup()
552 out_be32(&tbdf[i].cbd_bufaddr, cpm->txdma[i]); in cpm_i2c_setup()
557 cpm_reset_i2c_params(cpm); in cpm_i2c_setup()
559 dev_dbg(&cpm->ofdev->dev, "i2c_ram 0x%p, i2c_addr 0x%04x, freq %d\n", in cpm_i2c_setup()
560 cpm->i2c_ram, cpm->i2c_addr, cpm->freq); in cpm_i2c_setup()
561 dev_dbg(&cpm->ofdev->dev, "tbase 0x%04x, rbase 0x%04x\n", in cpm_i2c_setup()
562 (u8 __iomem *)cpm->tbase - DPRAM_BASE, in cpm_i2c_setup()
563 (u8 __iomem *)cpm->rbase - DPRAM_BASE); in cpm_i2c_setup()
565 cpm_command(cpm->cp_command, CPM_CR_INIT_TRX); in cpm_i2c_setup()
570 out_8(&cpm->i2c_reg->i2add, 0x7f << 1); in cpm_i2c_setup()
577 brg = get_brgfreq() / (32 * 2 * cpm->freq) - 3; in cpm_i2c_setup()
578 out_8(&cpm->i2c_reg->i2brg, brg); in cpm_i2c_setup()
580 out_8(&cpm->i2c_reg->i2mod, 0x00); in cpm_i2c_setup()
581 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); /* Master mode */ in cpm_i2c_setup()
584 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_setup()
585 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_setup()
591 if (cpm->rxbuf[i]) in cpm_i2c_setup()
592 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
593 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_setup()
594 if (cpm->txbuf[i]) in cpm_i2c_setup()
595 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
596 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_setup()
598 cpm_muram_free(cpm->dp_addr); in cpm_i2c_setup()
600 iounmap(cpm->i2c_reg); in cpm_i2c_setup()
602 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_setup()
603 iounmap(cpm->i2c_ram); in cpm_i2c_setup()
604 if (cpm->version == 2) in cpm_i2c_setup()
605 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_setup()
607 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_setup()
611 static void cpm_i2c_shutdown(struct cpm_i2c *cpm) in cpm_i2c_shutdown() argument
616 clrbits8(&cpm->i2c_reg->i2mod, I2MOD_EN); in cpm_i2c_shutdown()
619 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_shutdown()
620 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_shutdown()
622 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_shutdown()
626 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
627 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_shutdown()
628 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
629 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_shutdown()
632 cpm_muram_free(cpm->dp_addr); in cpm_i2c_shutdown()
633 iounmap(cpm->i2c_reg); in cpm_i2c_shutdown()
635 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_shutdown()
636 iounmap(cpm->i2c_ram); in cpm_i2c_shutdown()
637 if (cpm->version == 2) in cpm_i2c_shutdown()
638 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_shutdown()
644 struct cpm_i2c *cpm; in cpm_i2c_probe() local
647 cpm = kzalloc(sizeof(struct cpm_i2c), GFP_KERNEL); in cpm_i2c_probe()
648 if (!cpm) in cpm_i2c_probe()
651 cpm->ofdev = ofdev; in cpm_i2c_probe()
653 platform_set_drvdata(ofdev, cpm); in cpm_i2c_probe()
655 cpm->adap = cpm_ops; in cpm_i2c_probe()
656 i2c_set_adapdata(&cpm->adap, cpm); in cpm_i2c_probe()
657 cpm->adap.dev.parent = &ofdev->dev; in cpm_i2c_probe()
658 cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node); in cpm_i2c_probe()
660 result = cpm_i2c_setup(cpm); in cpm_i2c_probe()
669 cpm->adap.nr = (data && len == 4) ? be32_to_cpup(data) : -1; in cpm_i2c_probe()
670 result = i2c_add_numbered_adapter(&cpm->adap); in cpm_i2c_probe()
678 cpm->adap.name); in cpm_i2c_probe()
682 cpm_i2c_shutdown(cpm); in cpm_i2c_probe()
684 kfree(cpm); in cpm_i2c_probe()
691 struct cpm_i2c *cpm = platform_get_drvdata(ofdev); in cpm_i2c_remove() local
693 i2c_del_adapter(&cpm->adap); in cpm_i2c_remove()
695 cpm_i2c_shutdown(cpm); in cpm_i2c_remove()
697 kfree(cpm); in cpm_i2c_remove()