Lines Matching refs:fsi

241 			struct fsi_priv *fsi);
269 int (*init)(struct fsi_priv *fsi, struct fsi_stream *io);
270 int (*quit)(struct fsi_priv *fsi, struct fsi_stream *io);
271 int (*probe)(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev);
272 int (*transfer)(struct fsi_priv *fsi, struct fsi_stream *io);
273 int (*remove)(struct fsi_priv *fsi, struct fsi_stream *io);
274 int (*start_stop)(struct fsi_priv *fsi, struct fsi_stream *io,
300 static inline int fsi_stream_is_play(struct fsi_priv *fsi,
303 return &fsi->playback == io;
377 static struct fsi_master *fsi_get_master(struct fsi_priv *fsi)
379 return fsi->master;
382 static int fsi_is_clk_master(struct fsi_priv *fsi)
384 return fsi->clk_master;
387 static int fsi_is_port_a(struct fsi_priv *fsi)
389 return fsi->master->base == fsi->base;
392 static int fsi_is_spdif(struct fsi_priv *fsi)
394 return fsi->spdif;
397 static int fsi_is_enable_stream(struct fsi_priv *fsi)
399 return fsi->enable_stream;
429 static u32 fsi_get_port_shift(struct fsi_priv *fsi, struct fsi_stream *io)
431 int is_play = fsi_stream_is_play(fsi, io);
432 int is_porta = fsi_is_port_a(fsi);
443 static int fsi_frame2sample(struct fsi_priv *fsi, int frames)
445 return frames * fsi->chan_num;
448 static int fsi_sample2frame(struct fsi_priv *fsi, int samples)
450 return samples / fsi->chan_num;
453 static int fsi_get_current_fifo_samples(struct fsi_priv *fsi,
456 int is_play = fsi_stream_is_play(fsi, io);
461 fsi_reg_read(fsi, DOFF_ST) :
462 fsi_reg_read(fsi, DIFF_ST);
466 return fsi_frame2sample(fsi, frames);
469 static void fsi_count_fifo_err(struct fsi_priv *fsi)
471 u32 ostatus = fsi_reg_read(fsi, DOFF_ST);
472 u32 istatus = fsi_reg_read(fsi, DIFF_ST);
475 fsi->playback.oerr_num++;
478 fsi->playback.uerr_num++;
481 fsi->capture.oerr_num++;
484 fsi->capture.uerr_num++;
486 fsi_reg_write(fsi, DOFF_ST, 0);
487 fsi_reg_write(fsi, DIFF_ST, 0);
493 static inline struct fsi_stream *fsi_stream_get(struct fsi_priv *fsi,
496 return fsi_is_play(substream) ? &fsi->playback : &fsi->capture;
499 static int fsi_stream_is_working(struct fsi_priv *fsi,
502 struct fsi_master *master = fsi_get_master(fsi);
518 static void fsi_stream_init(struct fsi_priv *fsi,
523 struct fsi_master *master = fsi_get_master(fsi);
528 io->buff_sample_capa = fsi_frame2sample(fsi, runtime->buffer_size);
530 io->period_samples = fsi_frame2sample(fsi, runtime->period_size);
536 fsi_stream_handler_call(io, init, fsi, io);
540 static void fsi_stream_quit(struct fsi_priv *fsi, struct fsi_stream *io)
543 struct fsi_master *master = fsi_get_master(fsi);
554 fsi_stream_handler_call(io, quit, fsi, io);
569 struct fsi_priv *fsi = fsi_stream_to_priv(io);
570 if (!fsi)
573 return fsi_stream_handler_call(io, transfer, fsi, io);
576 #define fsi_stream_start(fsi, io)\
577 fsi_stream_handler_call(io, start_stop, fsi, io, 1)
579 #define fsi_stream_stop(fsi, io)\
580 fsi_stream_handler_call(io, start_stop, fsi, io, 0)
582 static int fsi_stream_probe(struct fsi_priv *fsi, struct device *dev)
587 io = &fsi->playback;
588 ret1 = fsi_stream_handler_call(io, probe, fsi, io, dev);
590 io = &fsi->capture;
591 ret2 = fsi_stream_handler_call(io, probe, fsi, io, dev);
601 static int fsi_stream_remove(struct fsi_priv *fsi)
606 io = &fsi->playback;
607 ret1 = fsi_stream_handler_call(io, remove, fsi, io);
609 io = &fsi->capture;
610 ret2 = fsi_stream_handler_call(io, remove, fsi, io);
623 static void fsi_format_bus_setup(struct fsi_priv *fsi, struct fsi_stream *io,
626 struct fsi_master *master = fsi_get_master(fsi);
627 int is_play = fsi_stream_is_play(fsi, io);
628 u32 fmt = fsi->fmt;
656 fsi_reg_write(fsi, OUT_DMAC, dma);
658 fsi_reg_write(fsi, IN_DMAC, dma);
662 fsi_reg_write(fsi, DO_FMT, fmt);
664 fsi_reg_write(fsi, DI_FMT, fmt);
671 static void fsi_irq_enable(struct fsi_priv *fsi, struct fsi_stream *io)
673 u32 data = AB_IO(1, fsi_get_port_shift(fsi, io));
674 struct fsi_master *master = fsi_get_master(fsi);
680 static void fsi_irq_disable(struct fsi_priv *fsi, struct fsi_stream *io)
682 u32 data = AB_IO(1, fsi_get_port_shift(fsi, io));
683 struct fsi_master *master = fsi_get_master(fsi);
694 static void fsi_irq_clear_status(struct fsi_priv *fsi)
697 struct fsi_master *master = fsi_get_master(fsi);
699 data |= AB_IO(1, fsi_get_port_shift(fsi, &fsi->playback));
700 data |= AB_IO(1, fsi_get_port_shift(fsi, &fsi->capture));
711 static void fsi_spdif_clk_ctrl(struct fsi_priv *fsi, int enable)
713 struct fsi_master *master = fsi_get_master(fsi);
719 fsi_is_port_a(fsi) ?
728 struct fsi_priv *fsi,
733 struct fsi_priv *fsi))
735 struct fsi_clk *clock = &fsi->clock;
736 int is_porta = fsi_is_port_a(fsi);
791 #define fsi_clk_invalid(fsi) fsi_clk_valid(fsi, 0)
792 static void fsi_clk_valid(struct fsi_priv *fsi, unsigned long rate)
794 fsi->clock.rate = rate;
797 static int fsi_clk_is_valid(struct fsi_priv *fsi)
799 return fsi->clock.set_rate &&
800 fsi->clock.rate;
804 struct fsi_priv *fsi)
806 struct fsi_clk *clock = &fsi->clock;
809 if (!fsi_clk_is_valid(fsi))
813 ret = clock->set_rate(dev, fsi);
815 fsi_clk_invalid(fsi);
843 struct fsi_priv *fsi)
845 struct fsi_clk *clock = &fsi->clock;
847 if (!fsi_clk_is_valid(fsi))
860 struct fsi_priv *fsi,
920 fsi_reg_mask_set(fsi, CKG1, (ACKMD_MASK | BPFMD_MASK) , data);
927 struct fsi_priv *fsi)
929 struct clk *xck = fsi->clock.xck;
930 struct clk *ick = fsi->clock.ick;
931 unsigned long rate = fsi->clock.rate;
946 bpfmd = fsi->chan_num * 32;
951 ret = fsi_clk_set_ackbpf(dev, fsi, ackmd, bpfmd);
959 struct fsi_priv *fsi)
961 struct clk *ick = fsi->clock.ick;
962 struct clk *div = fsi->clock.div;
963 unsigned long rate = fsi->clock.rate;
981 bpfmd = fsi->chan_num * 32;
983 ret = fsi_clk_set_ackbpf(dev, fsi, ackmd, bpfmd);
1067 static void fsi_pio_push16(struct fsi_priv *fsi, u8 *_buf, int samples)
1071 if (fsi_is_enable_stream(fsi)) {
1080 fsi_reg_write(fsi, DODT, buf[i]);
1086 fsi_reg_write(fsi, DODT, ((u32)*(buf + i) << 8));
1090 static void fsi_pio_pop16(struct fsi_priv *fsi, u8 *_buf, int samples)
1096 *(buf + i) = (u16)(fsi_reg_read(fsi, DIDT) >> 8);
1099 static void fsi_pio_push32(struct fsi_priv *fsi, u8 *_buf, int samples)
1105 fsi_reg_write(fsi, DODT, *(buf + i));
1108 static void fsi_pio_pop32(struct fsi_priv *fsi, u8 *_buf, int samples)
1114 *(buf + i) = fsi_reg_read(fsi, DIDT);
1117 static u8 *fsi_pio_get_area(struct fsi_priv *fsi, struct fsi_stream *io)
1125 static int fsi_pio_transfer(struct fsi_priv *fsi, struct fsi_stream *io,
1126 void (*run16)(struct fsi_priv *fsi, u8 *buf, int samples),
1127 void (*run32)(struct fsi_priv *fsi, u8 *buf, int samples),
1132 if (!fsi_stream_is_working(fsi, io))
1135 buf = fsi_pio_get_area(fsi, io);
1139 run16(fsi, buf, samples);
1142 run32(fsi, buf, samples);
1153 static int fsi_pio_pop(struct fsi_priv *fsi, struct fsi_stream *io)
1159 sample_residues = fsi_get_current_fifo_samples(fsi, io);
1164 return fsi_pio_transfer(fsi, io,
1170 static int fsi_pio_push(struct fsi_priv *fsi, struct fsi_stream *io)
1178 fsi_get_current_fifo_samples(fsi, io);
1182 return fsi_pio_transfer(fsi, io,
1188 static int fsi_pio_start_stop(struct fsi_priv *fsi, struct fsi_stream *io,
1191 struct fsi_master *master = fsi_get_master(fsi);
1192 u32 clk = fsi_is_port_a(fsi) ? CRA : CRB;
1195 fsi_irq_enable(fsi, io);
1197 fsi_irq_disable(fsi, io);
1199 if (fsi_is_clk_master(fsi))
1205 static int fsi_pio_push_init(struct fsi_priv *fsi, struct fsi_stream *io)
1214 if (fsi_is_enable_stream(fsi))
1223 static int fsi_pio_pop_init(struct fsi_priv *fsi, struct fsi_stream *io)
1275 static int fsi_dma_init(struct fsi_priv *fsi, struct fsi_stream *io)
1290 struct fsi_priv *fsi = fsi_stream_to_priv(io);
1294 fsi_count_fifo_err(fsi);
1297 static int fsi_dma_transfer(struct fsi_priv *fsi, struct fsi_stream *io)
1302 int is_play = fsi_stream_is_play(fsi, io);
1342 if (ERR_OVER & fsi_reg_read(fsi, DIFF_ST)) {
1343 fsi_reg_mask_set(fsi, DIFF_CTL, FIFO_CLR, FIFO_CLR);
1344 fsi_reg_write(fsi, DIFF_ST, 0);
1354 static int fsi_dma_push_start_stop(struct fsi_priv *fsi, struct fsi_stream *io,
1357 struct fsi_master *master = fsi_get_master(fsi);
1358 u32 clk = fsi_is_port_a(fsi) ? CRA : CRB;
1361 fsi_reg_mask_set(fsi, OUT_DMAC, DMA_ON, enable);
1365 if (fsi_is_clk_master(fsi))
1371 static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev)
1373 int is_play = fsi_stream_is_play(fsi, io);
1390 cfg.dst_addr = fsi->phys + REG_DODT;
1394 cfg.src_addr = fsi->phys + REG_DIDT;
1410 fsi->playback.handler = &fsi_pio_push_handler;
1412 fsi->capture.handler = &fsi_pio_pop_handler;
1417 return fsi_stream_probe(fsi, dev);
1423 static int fsi_dma_remove(struct fsi_priv *fsi, struct fsi_stream *io)
1425 fsi_stream_stop(fsi, io);
1445 static void fsi_fifo_init(struct fsi_priv *fsi,
1449 struct fsi_master *master = fsi_get_master(fsi);
1450 int is_play = fsi_stream_is_play(fsi, io);
1456 shift >>= fsi_get_port_shift(fsi, io);
1480 for (i = 1; i < fsi->chan_num; i <<= 1)
1483 fsi->chan_num, frame_capa);
1485 io->fifo_sample_capa = fsi_frame2sample(fsi, frame_capa);
1492 fsi_reg_write(fsi, DOFF_CTL, IRQ_HALF);
1493 fsi_reg_mask_set(fsi, DOFF_CTL, FIFO_CLR, FIFO_CLR);
1495 fsi_reg_write(fsi, DIFF_CTL, IRQ_HALF);
1496 fsi_reg_mask_set(fsi, DIFF_CTL, FIFO_CLR, FIFO_CLR);
1500 static int fsi_hw_startup(struct fsi_priv *fsi,
1507 if (fsi_is_clk_master(fsi))
1510 fsi_reg_mask_set(fsi, CKG1, (DIMD | DOMD), data);
1514 if (fsi->bit_clk_inv)
1516 if (fsi->lr_clk_inv)
1518 if (fsi_is_clk_master(fsi))
1520 fsi_reg_write(fsi, CKG2, data);
1523 if (fsi_is_spdif(fsi)) {
1524 fsi_spdif_clk_ctrl(fsi, 1);
1525 fsi_reg_mask_set(fsi, OUT_SEL, DMMD, DMMD);
1540 fsi_format_bus_setup(fsi, io, data, dev);
1543 fsi_irq_disable(fsi, io);
1544 fsi_irq_clear_status(fsi);
1547 fsi_fifo_init(fsi, io, dev);
1550 if (fsi_is_clk_master(fsi))
1551 return fsi_clk_enable(dev, fsi);
1556 static int fsi_hw_shutdown(struct fsi_priv *fsi,
1560 if (fsi_is_clk_master(fsi))
1561 return fsi_clk_disable(dev, fsi);
1569 struct fsi_priv *fsi = fsi_get_priv(substream);
1571 fsi_clk_invalid(fsi);
1579 struct fsi_priv *fsi = fsi_get_priv(substream);
1581 fsi_clk_invalid(fsi);
1587 struct fsi_priv *fsi = fsi_get_priv(substream);
1588 struct fsi_stream *io = fsi_stream_get(fsi, substream);
1593 fsi_stream_init(fsi, io, substream);
1595 ret = fsi_hw_startup(fsi, io, dai->dev);
1597 ret = fsi_stream_start(fsi, io);
1603 ret = fsi_hw_shutdown(fsi, dai->dev);
1604 fsi_stream_stop(fsi, io);
1605 fsi_stream_quit(fsi, io);
1612 static int fsi_set_fmt_dai(struct fsi_priv *fsi, unsigned int fmt)
1616 fsi->fmt = CR_I2S;
1617 fsi->chan_num = 2;
1620 fsi->fmt = CR_PCM;
1621 fsi->chan_num = 2;
1630 static int fsi_set_fmt_spdif(struct fsi_priv *fsi)
1632 struct fsi_master *master = fsi_get_master(fsi);
1637 fsi->fmt = CR_DTMD_SPDIF_PCM | CR_PCM;
1638 fsi->chan_num = 2;
1645 struct fsi_priv *fsi = fsi_get_priv_frm_dai(dai);
1653 fsi->clk_master = 1; /* cpu is master */
1662 fsi->bit_clk_inv = 0;
1663 fsi->lr_clk_inv = 1;
1666 fsi->bit_clk_inv = 1;
1667 fsi->lr_clk_inv = 0;
1670 fsi->bit_clk_inv = 1;
1671 fsi->lr_clk_inv = 1;
1675 fsi->bit_clk_inv = 0;
1676 fsi->lr_clk_inv = 0;
1680 if (fsi_is_clk_master(fsi)) {
1681 if (fsi->clk_cpg)
1682 fsi_clk_init(dai->dev, fsi, 0, 1, 1,
1685 fsi_clk_init(dai->dev, fsi, 1, 1, 0,
1690 if (fsi_is_spdif(fsi))
1691 ret = fsi_set_fmt_spdif(fsi);
1693 ret = fsi_set_fmt_dai(fsi, fmt & SND_SOC_DAIFMT_FORMAT_MASK);
1702 struct fsi_priv *fsi = fsi_get_priv(substream);
1704 if (fsi_is_clk_master(fsi))
1705 fsi_clk_valid(fsi, params_rate(params));
1766 struct fsi_priv *fsi = fsi_get_priv(substream);
1767 struct fsi_stream *io = fsi_stream_get(fsi, substream);
1769 return fsi_sample2frame(fsi, io->buff_sample_pos);
1830 .name = "fsi",
1866 static void fsi_port_info_init(struct fsi_priv *fsi,
1870 fsi->spdif = 1;
1873 fsi->clk_cpg = 1;
1876 fsi->enable_stream = 1;
1879 static void fsi_handler_init(struct fsi_priv *fsi,
1882 fsi->playback.handler = &fsi_pio_push_handler; /* default PIO */
1883 fsi->playback.priv = fsi;
1884 fsi->capture.handler = &fsi_pio_pop_handler; /* default PIO */
1885 fsi->capture.priv = fsi;
1888 fsi->playback.dma_id = info->tx_id;
1889 fsi->playback.handler = &fsi_dma_push_handler;
1932 struct fsi_priv *fsi;
1954 dev_err(&pdev->dev, "unknown fsi device\n");
1980 fsi = &master->fsia;
1981 fsi->base = master->base;
1982 fsi->phys = res->start;
1983 fsi->master = master;
1984 fsi_port_info_init(fsi, &info.port_a);
1985 fsi_handler_init(fsi, &info.port_a);
1986 ret = fsi_stream_probe(fsi, &pdev->dev);
1993 fsi = &master->fsib;
1994 fsi->base = master->base + 0x40;
1995 fsi->phys = res->start + 0x40;
1996 fsi->master = master;
1997 fsi_port_info_init(fsi, &info.port_b);
1998 fsi_handler_init(fsi, &info.port_b);
1999 ret = fsi_stream_probe(fsi, &pdev->dev);
2045 static void __fsi_suspend(struct fsi_priv *fsi,
2049 if (!fsi_stream_is_working(fsi, io))
2052 fsi_stream_stop(fsi, io);
2053 fsi_hw_shutdown(fsi, dev);
2056 static void __fsi_resume(struct fsi_priv *fsi,
2060 if (!fsi_stream_is_working(fsi, io))
2063 fsi_hw_startup(fsi, io, dev);
2064 fsi_stream_start(fsi, io);
2104 .name = "fsi-pcm-audio",
2118 MODULE_ALIAS("platform:fsi-pcm-audio");