Lines Matching refs:cpm
119 struct cpm_i2c *cpm; in cpm_i2c_interrupt() local
124 cpm = i2c_get_adapdata(dev_id); in cpm_i2c_interrupt()
125 i2c_reg = cpm->i2c_reg; in cpm_i2c_interrupt()
133 wake_up(&cpm->i2c_wait); in cpm_i2c_interrupt()
138 static void cpm_reset_i2c_params(struct cpm_i2c *cpm) in cpm_reset_i2c_params() argument
140 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram; in cpm_reset_i2c_params()
143 out_be16(&i2c_ram->tbase, (u8 __iomem *)cpm->tbase - DPRAM_BASE); in cpm_reset_i2c_params()
144 out_be16(&i2c_ram->rbase, (u8 __iomem *)cpm->rbase - DPRAM_BASE); in cpm_reset_i2c_params()
146 if (cpm->version == 1) { in cpm_reset_i2c_params()
170 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_force_close() local
171 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg; in cpm_i2c_force_close()
175 cpm_command(cpm->cp_command, CPM_CR_CLOSE_RX_BD); in cpm_i2c_force_close()
189 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_parse_message() local
191 tbdf = cpm->tbase + tx; in cpm_i2c_parse_message()
192 rbdf = cpm->rbase + rx; in cpm_i2c_parse_message()
196 tb = cpm->txbuf[tx]; in cpm_i2c_parse_message()
197 rb = cpm->rxbuf[rx]; in cpm_i2c_parse_message()
247 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_check_message() local
249 tbdf = cpm->tbase + tx; in cpm_i2c_check_message()
250 rbdf = cpm->rbase + rx; in cpm_i2c_check_message()
252 tb = cpm->txbuf[tx]; in cpm_i2c_check_message()
253 rb = cpm->rxbuf[rx]; in cpm_i2c_check_message()
299 struct cpm_i2c *cpm = i2c_get_adapdata(adap); in cpm_i2c_xfer() local
300 struct i2c_reg __iomem *i2c_reg = cpm->i2c_reg; in cpm_i2c_xfer()
301 struct i2c_ram __iomem *i2c_ram = cpm->i2c_ram; in cpm_i2c_xfer()
313 tbdf = cpm->tbase; in cpm_i2c_xfer()
314 rbdf = cpm->rbase; in cpm_i2c_xfer()
324 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); in cpm_i2c_xfer()
353 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
358 ret = wait_event_timeout(cpm->i2c_wait, in cpm_i2c_xfer()
423 static int cpm_i2c_setup(struct cpm_i2c *cpm) in cpm_i2c_setup() argument
425 struct platform_device *ofdev = cpm->ofdev; in cpm_i2c_setup()
433 dev_dbg(&cpm->ofdev->dev, "cpm_i2c_setup()\n"); in cpm_i2c_setup()
435 init_waitqueue_head(&cpm->i2c_wait); in cpm_i2c_setup()
437 cpm->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); in cpm_i2c_setup()
438 if (!cpm->irq) in cpm_i2c_setup()
442 ret = request_irq(cpm->irq, cpm_i2c_interrupt, 0, "cpm_i2c", in cpm_i2c_setup()
443 &cpm->adap); in cpm_i2c_setup()
457 cpm->i2c_ram = i2c_base; in cpm_i2c_setup()
458 cpm->i2c_addr = in_be16(&cpm->i2c_ram->rpbase); in cpm_i2c_setup()
464 if (cpm->i2c_addr) { in cpm_i2c_setup()
465 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
469 cpm->version = 1; in cpm_i2c_setup()
472 cpm->i2c_addr = cpm_muram_alloc(sizeof(struct i2c_ram), 64); in cpm_i2c_setup()
473 cpm->i2c_ram = cpm_muram_addr(cpm->i2c_addr); in cpm_i2c_setup()
474 out_be16(i2c_base, cpm->i2c_addr); in cpm_i2c_setup()
477 cpm->version = 2; in cpm_i2c_setup()
486 cpm->i2c_reg = of_iomap(ofdev->dev.of_node, 0); in cpm_i2c_setup()
487 if (cpm->i2c_reg == NULL) { in cpm_i2c_setup()
497 cpm->cp_command = *data; in cpm_i2c_setup()
501 cpm->adap.class = *data; in cpm_i2c_setup()
505 cpm->freq = *data; in cpm_i2c_setup()
507 cpm->freq = 60000; /* use 60kHz i2c clock by default */ in cpm_i2c_setup()
513 cpm->dp_addr = cpm_muram_alloc(sizeof(cbd_t) * 2 * CPM_MAXBD, 8); in cpm_i2c_setup()
514 if (!cpm->dp_addr) { in cpm_i2c_setup()
519 cpm->tbase = cpm_muram_addr(cpm->dp_addr); in cpm_i2c_setup()
520 cpm->rbase = cpm_muram_addr(cpm->dp_addr + sizeof(cbd_t) * CPM_MAXBD); in cpm_i2c_setup()
524 tbdf = cpm->tbase; in cpm_i2c_setup()
525 rbdf = cpm->rbase; in cpm_i2c_setup()
528 cpm->rxbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev, in cpm_i2c_setup()
530 &cpm->rxdma[i], GFP_KERNEL); in cpm_i2c_setup()
531 if (!cpm->rxbuf[i]) { in cpm_i2c_setup()
535 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1)); in cpm_i2c_setup()
537 cpm->txbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev, in cpm_i2c_setup()
539 &cpm->txdma[i], GFP_KERNEL); in cpm_i2c_setup()
540 if (!cpm->txbuf[i]) { in cpm_i2c_setup()
544 out_be32(&tbdf[i].cbd_bufaddr, cpm->txdma[i]); in cpm_i2c_setup()
549 cpm_reset_i2c_params(cpm); in cpm_i2c_setup()
551 dev_dbg(&cpm->ofdev->dev, "i2c_ram 0x%p, i2c_addr 0x%04x, freq %d\n", in cpm_i2c_setup()
552 cpm->i2c_ram, cpm->i2c_addr, cpm->freq); in cpm_i2c_setup()
553 dev_dbg(&cpm->ofdev->dev, "tbase 0x%04x, rbase 0x%04x\n", in cpm_i2c_setup()
554 (u8 __iomem *)cpm->tbase - DPRAM_BASE, in cpm_i2c_setup()
555 (u8 __iomem *)cpm->rbase - DPRAM_BASE); in cpm_i2c_setup()
557 cpm_command(cpm->cp_command, CPM_CR_INIT_TRX); in cpm_i2c_setup()
562 out_8(&cpm->i2c_reg->i2add, 0x7f << 1); in cpm_i2c_setup()
569 brg = get_brgfreq() / (32 * 2 * cpm->freq) - 3; in cpm_i2c_setup()
570 out_8(&cpm->i2c_reg->i2brg, brg); in cpm_i2c_setup()
572 out_8(&cpm->i2c_reg->i2mod, 0x00); in cpm_i2c_setup()
573 out_8(&cpm->i2c_reg->i2com, I2COM_MASTER); /* Master mode */ in cpm_i2c_setup()
576 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_setup()
577 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_setup()
583 if (cpm->rxbuf[i]) in cpm_i2c_setup()
584 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
585 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_setup()
586 if (cpm->txbuf[i]) in cpm_i2c_setup()
587 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_setup()
588 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_setup()
590 cpm_muram_free(cpm->dp_addr); in cpm_i2c_setup()
592 iounmap(cpm->i2c_reg); in cpm_i2c_setup()
594 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_setup()
595 iounmap(cpm->i2c_ram); in cpm_i2c_setup()
596 if (cpm->version == 2) in cpm_i2c_setup()
597 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_setup()
599 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_setup()
603 static void cpm_i2c_shutdown(struct cpm_i2c *cpm) in cpm_i2c_shutdown() argument
608 clrbits8(&cpm->i2c_reg->i2mod, I2MOD_EN); in cpm_i2c_shutdown()
611 out_8(&cpm->i2c_reg->i2cmr, 0); in cpm_i2c_shutdown()
612 out_8(&cpm->i2c_reg->i2cer, 0xff); in cpm_i2c_shutdown()
614 free_irq(cpm->irq, &cpm->adap); in cpm_i2c_shutdown()
618 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
619 cpm->rxbuf[i], cpm->rxdma[i]); in cpm_i2c_shutdown()
620 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, in cpm_i2c_shutdown()
621 cpm->txbuf[i], cpm->txdma[i]); in cpm_i2c_shutdown()
624 cpm_muram_free(cpm->dp_addr); in cpm_i2c_shutdown()
625 iounmap(cpm->i2c_reg); in cpm_i2c_shutdown()
627 if ((cpm->version == 1) && (!cpm->i2c_addr)) in cpm_i2c_shutdown()
628 iounmap(cpm->i2c_ram); in cpm_i2c_shutdown()
629 if (cpm->version == 2) in cpm_i2c_shutdown()
630 cpm_muram_free(cpm->i2c_addr); in cpm_i2c_shutdown()
636 struct cpm_i2c *cpm; in cpm_i2c_probe() local
639 cpm = kzalloc(sizeof(struct cpm_i2c), GFP_KERNEL); in cpm_i2c_probe()
640 if (!cpm) in cpm_i2c_probe()
643 cpm->ofdev = ofdev; in cpm_i2c_probe()
645 platform_set_drvdata(ofdev, cpm); in cpm_i2c_probe()
647 cpm->adap = cpm_ops; in cpm_i2c_probe()
648 i2c_set_adapdata(&cpm->adap, cpm); in cpm_i2c_probe()
649 cpm->adap.dev.parent = &ofdev->dev; in cpm_i2c_probe()
650 cpm->adap.dev.of_node = of_node_get(ofdev->dev.of_node); in cpm_i2c_probe()
652 result = cpm_i2c_setup(cpm); in cpm_i2c_probe()
661 cpm->adap.nr = (data && len == 4) ? be32_to_cpup(data) : -1; in cpm_i2c_probe()
662 result = i2c_add_numbered_adapter(&cpm->adap); in cpm_i2c_probe()
668 cpm->adap.name); in cpm_i2c_probe()
672 cpm_i2c_shutdown(cpm); in cpm_i2c_probe()
674 kfree(cpm); in cpm_i2c_probe()
681 struct cpm_i2c *cpm = platform_get_drvdata(ofdev); in cpm_i2c_remove() local
683 i2c_del_adapter(&cpm->adap); in cpm_i2c_remove()
685 cpm_i2c_shutdown(cpm); in cpm_i2c_remove()
687 kfree(cpm); in cpm_i2c_remove()