Lines Matching full:fsi

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