Lines Matching refs:i2s

111 static inline bool is_secondary(struct i2s_dai *i2s)  in is_secondary()  argument
113 return i2s->pri_dai ? true : false; in is_secondary()
117 static inline bool is_slave(struct i2s_dai *i2s) in is_slave() argument
119 u32 mod = readl(i2s->addr + I2SMOD); in is_slave()
120 return (mod & (1 << i2s->variant_regs->mss_off)) ? true : false; in is_slave()
124 static inline bool tx_active(struct i2s_dai *i2s) in tx_active() argument
128 if (!i2s) in tx_active()
131 active = readl(i2s->addr + I2SCON); in tx_active()
133 if (is_secondary(i2s)) in tx_active()
142 static inline struct i2s_dai *get_other_dai(struct i2s_dai *i2s) in get_other_dai() argument
144 return i2s->pri_dai ? : i2s->sec_dai; in get_other_dai()
148 static inline bool other_tx_active(struct i2s_dai *i2s) in other_tx_active() argument
150 struct i2s_dai *other = get_other_dai(i2s); in other_tx_active()
156 static inline bool any_tx_active(struct i2s_dai *i2s) in any_tx_active() argument
158 return tx_active(i2s) || other_tx_active(i2s); in any_tx_active()
162 static inline bool rx_active(struct i2s_dai *i2s) in rx_active() argument
166 if (!i2s) in rx_active()
169 active = readl(i2s->addr + I2SCON) & CON_RXDMA_ACTIVE; in rx_active()
175 static inline bool other_rx_active(struct i2s_dai *i2s) in other_rx_active() argument
177 struct i2s_dai *other = get_other_dai(i2s); in other_rx_active()
183 static inline bool any_rx_active(struct i2s_dai *i2s) in any_rx_active() argument
185 return rx_active(i2s) || other_rx_active(i2s); in any_rx_active()
189 static inline bool other_active(struct i2s_dai *i2s) in other_active() argument
191 return other_rx_active(i2s) || other_tx_active(i2s); in other_active()
195 static inline bool this_active(struct i2s_dai *i2s) in this_active() argument
197 return tx_active(i2s) || rx_active(i2s); in this_active()
201 static inline bool any_active(struct i2s_dai *i2s) in any_active() argument
203 return this_active(i2s) || other_active(i2s); in any_active()
211 static inline bool is_opened(struct i2s_dai *i2s) in is_opened() argument
213 if (i2s && (i2s->mode & DAI_OPENED)) in is_opened()
219 static inline bool is_manager(struct i2s_dai *i2s) in is_manager() argument
221 if (is_opened(i2s) && (i2s->mode & DAI_MANAGER)) in is_manager()
228 static inline unsigned get_rfs(struct i2s_dai *i2s) in get_rfs() argument
231 rfs = readl(i2s->addr + I2SMOD) >> i2s->variant_regs->rfs_off; in get_rfs()
232 rfs &= i2s->variant_regs->rfs_mask; in get_rfs()
247 static inline void set_rfs(struct i2s_dai *i2s, unsigned rfs) in set_rfs() argument
249 u32 mod = readl(i2s->addr + I2SMOD); in set_rfs()
250 int rfs_shift = i2s->variant_regs->rfs_off; in set_rfs()
252 mod &= ~(i2s->variant_regs->rfs_mask << rfs_shift); in set_rfs()
281 writel(mod, i2s->addr + I2SMOD); in set_rfs()
285 static inline unsigned get_bfs(struct i2s_dai *i2s) in get_bfs() argument
288 bfs = readl(i2s->addr + I2SMOD) >> i2s->variant_regs->bfs_off; in get_bfs()
289 bfs &= i2s->variant_regs->bfs_mask; in get_bfs()
305 static inline void set_bfs(struct i2s_dai *i2s, unsigned bfs) in set_bfs() argument
307 u32 mod = readl(i2s->addr + I2SMOD); in set_bfs()
308 int tdm = i2s->quirks & QUIRK_SUPPORTS_TDM; in set_bfs()
309 int bfs_shift = i2s->variant_regs->bfs_off; in set_bfs()
313 dev_err(&i2s->pdev->dev, "Unsupported BCLK divider\n"); in set_bfs()
317 mod &= ~(i2s->variant_regs->bfs_mask << bfs_shift); in set_bfs()
348 dev_err(&i2s->pdev->dev, "Wrong BCLK Divider!\n"); in set_bfs()
352 writel(mod, i2s->addr + I2SMOD); in set_bfs()
356 static inline int get_blc(struct i2s_dai *i2s) in get_blc() argument
358 int blc = readl(i2s->addr + I2SMOD); in get_blc()
370 static void i2s_txctrl(struct i2s_dai *i2s, int on) in i2s_txctrl() argument
372 void __iomem *addr = i2s->addr; in i2s_txctrl()
373 int txr_off = i2s->variant_regs->txr_off; in i2s_txctrl()
381 if (is_secondary(i2s)) { in i2s_txctrl()
389 if (any_rx_active(i2s)) in i2s_txctrl()
394 if (is_secondary(i2s)) { in i2s_txctrl()
402 if (other_tx_active(i2s)) { in i2s_txctrl()
409 if (any_rx_active(i2s)) in i2s_txctrl()
420 static void i2s_rxctrl(struct i2s_dai *i2s, int on) in i2s_rxctrl() argument
422 void __iomem *addr = i2s->addr; in i2s_rxctrl()
423 int txr_off = i2s->variant_regs->txr_off; in i2s_rxctrl()
431 if (any_tx_active(i2s)) in i2s_rxctrl()
439 if (any_tx_active(i2s)) in i2s_rxctrl()
450 static inline void i2s_fifo(struct i2s_dai *i2s, u32 flush) in i2s_fifo() argument
455 if (!i2s) in i2s_fifo()
458 if (is_secondary(i2s)) in i2s_fifo()
459 fic = i2s->addr + I2SFICS; in i2s_fifo()
461 fic = i2s->addr + I2SFIC; in i2s_fifo()
477 struct i2s_dai *i2s = to_info(dai); in i2s_set_sysclk() local
478 struct i2s_dai *other = get_other_dai(i2s); in i2s_set_sysclk()
479 const struct samsung_i2s_variant_regs *i2s_regs = i2s->variant_regs; in i2s_set_sysclk()
485 spin_lock_irqsave(i2s->lock, flags); in i2s_set_sysclk()
486 mod = readl(i2s->addr + I2SMOD); in i2s_set_sysclk()
487 spin_unlock_irqrestore(i2s->lock, flags); in i2s_set_sysclk()
501 (any_active(i2s) && in i2s_set_sysclk()
506 dev_err(&i2s->pdev->dev, in i2s_set_sysclk()
514 i2s->rfs = rfs; in i2s_set_sysclk()
521 if ((i2s->quirks & QUIRK_NO_MUXPSR) in i2s_set_sysclk()
527 if (!any_active(i2s)) { in i2s_set_sysclk()
528 if (i2s->op_clk && !IS_ERR(i2s->op_clk)) { in i2s_set_sysclk()
531 clk_disable_unprepare(i2s->op_clk); in i2s_set_sysclk()
532 clk_put(i2s->op_clk); in i2s_set_sysclk()
534 i2s->rclk_srcrate = in i2s_set_sysclk()
535 clk_get_rate(i2s->op_clk); in i2s_set_sysclk()
541 i2s->op_clk = clk_get(&i2s->pdev->dev, in i2s_set_sysclk()
544 i2s->op_clk = clk_get(&i2s->pdev->dev, in i2s_set_sysclk()
547 if (WARN_ON(IS_ERR(i2s->op_clk))) in i2s_set_sysclk()
548 return PTR_ERR(i2s->op_clk); in i2s_set_sysclk()
550 clk_prepare_enable(i2s->op_clk); in i2s_set_sysclk()
551 i2s->rclk_srcrate = clk_get_rate(i2s->op_clk); in i2s_set_sysclk()
555 other->op_clk = i2s->op_clk; in i2s_set_sysclk()
556 other->rclk_srcrate = i2s->rclk_srcrate; in i2s_set_sysclk()
560 dev_err(&i2s->pdev->dev, in i2s_set_sysclk()
565 i2s->op_clk = other->op_clk; in i2s_set_sysclk()
566 i2s->rclk_srcrate = other->rclk_srcrate; in i2s_set_sysclk()
574 dev_err(&i2s->pdev->dev, "We don't serve that!\n"); in i2s_set_sysclk()
578 spin_lock_irqsave(i2s->lock, flags); in i2s_set_sysclk()
579 mod = readl(i2s->addr + I2SMOD); in i2s_set_sysclk()
581 writel(mod, i2s->addr + I2SMOD); in i2s_set_sysclk()
582 spin_unlock_irqrestore(i2s->lock, flags); in i2s_set_sysclk()
590 struct i2s_dai *i2s = to_info(dai); in i2s_set_fmt() local
595 lrp_shift = i2s->variant_regs->lrp_off; in i2s_set_fmt()
596 sdf_shift = i2s->variant_regs->sdf_off; in i2s_set_fmt()
597 mod_slave = 1 << i2s->variant_regs->mss_off; in i2s_set_fmt()
616 dev_err(&i2s->pdev->dev, "Format not supported\n"); in i2s_set_fmt()
634 dev_err(&i2s->pdev->dev, "Polarity not supported\n"); in i2s_set_fmt()
644 if (i2s->rclk_srcrate == 0) in i2s_set_fmt()
649 dev_err(&i2s->pdev->dev, "master/slave format not supported\n"); in i2s_set_fmt()
653 spin_lock_irqsave(i2s->lock, flags); in i2s_set_fmt()
654 mod = readl(i2s->addr + I2SMOD); in i2s_set_fmt()
659 if (any_active(i2s) && in i2s_set_fmt()
661 spin_unlock_irqrestore(i2s->lock, flags); in i2s_set_fmt()
662 dev_err(&i2s->pdev->dev, in i2s_set_fmt()
669 writel(mod, i2s->addr + I2SMOD); in i2s_set_fmt()
670 spin_unlock_irqrestore(i2s->lock, flags); in i2s_set_fmt()
678 struct i2s_dai *i2s = to_info(dai); in i2s_hw_params() local
682 if (!is_secondary(i2s)) in i2s_hw_params()
693 i2s->dma_playback.dma_size = 4; in i2s_hw_params()
695 i2s->dma_capture.dma_size = 4; in i2s_hw_params()
699 i2s->dma_playback.dma_size = 2; in i2s_hw_params()
701 i2s->dma_capture.dma_size = 2; in i2s_hw_params()
705 dev_err(&i2s->pdev->dev, "%d channels not supported\n", in i2s_hw_params()
710 if (is_secondary(i2s)) in i2s_hw_params()
715 if (is_manager(i2s)) in i2s_hw_params()
720 if (is_secondary(i2s)) in i2s_hw_params()
724 if (is_manager(i2s)) in i2s_hw_params()
728 if (is_secondary(i2s)) in i2s_hw_params()
732 if (is_manager(i2s)) in i2s_hw_params()
736 if (is_secondary(i2s)) in i2s_hw_params()
740 if (is_manager(i2s)) in i2s_hw_params()
744 dev_err(&i2s->pdev->dev, "Format(%d) not supported\n", in i2s_hw_params()
749 spin_lock_irqsave(i2s->lock, flags); in i2s_hw_params()
750 mod = readl(i2s->addr + I2SMOD); in i2s_hw_params()
752 writel(mod, i2s->addr + I2SMOD); in i2s_hw_params()
753 spin_unlock_irqrestore(i2s->lock, flags); in i2s_hw_params()
755 samsung_asoc_init_dma_data(dai, &i2s->dma_playback, &i2s->dma_capture); in i2s_hw_params()
757 i2s->frmclk = params_rate(params); in i2s_hw_params()
766 struct i2s_dai *i2s = to_info(dai); in i2s_startup() local
767 struct i2s_dai *other = get_other_dai(i2s); in i2s_startup()
772 i2s->mode |= DAI_OPENED; in i2s_startup()
775 i2s->mode &= ~DAI_MANAGER; in i2s_startup()
777 i2s->mode |= DAI_MANAGER; in i2s_startup()
779 if (!any_active(i2s) && (i2s->quirks & QUIRK_NEED_RSTCLR)) in i2s_startup()
780 writel(CON_RSTCLR, i2s->addr + I2SCON); in i2s_startup()
790 struct i2s_dai *i2s = to_info(dai); in i2s_shutdown() local
791 struct i2s_dai *other = get_other_dai(i2s); in i2s_shutdown()
796 i2s->mode &= ~DAI_OPENED; in i2s_shutdown()
797 i2s->mode &= ~DAI_MANAGER; in i2s_shutdown()
803 i2s->rfs = 0; in i2s_shutdown()
804 i2s->bfs = 0; in i2s_shutdown()
809 static int config_setup(struct i2s_dai *i2s) in config_setup() argument
811 struct i2s_dai *other = get_other_dai(i2s); in config_setup()
815 blc = get_blc(i2s); in config_setup()
817 bfs = i2s->bfs; in config_setup()
826 rfs = i2s->rfs; in config_setup()
832 dev_err(&i2s->pdev->dev, in config_setup()
845 if (any_active(i2s) && (get_rfs(i2s) != rfs || get_bfs(i2s) != bfs)) { in config_setup()
846 dev_err(&i2s->pdev->dev, in config_setup()
851 set_bfs(i2s, bfs); in config_setup()
852 set_rfs(i2s, rfs); in config_setup()
855 if (is_slave(i2s)) in config_setup()
858 if (!(i2s->quirks & QUIRK_NO_MUXPSR)) { in config_setup()
859 psr = i2s->rclk_srcrate / i2s->frmclk / rfs; in config_setup()
860 writel(((psr - 1) << 8) | PSR_PSREN, i2s->addr + I2SPSR); in config_setup()
861 dev_dbg(&i2s->pdev->dev, in config_setup()
863 i2s->rclk_srcrate, psr, rfs, bfs); in config_setup()
874 struct i2s_dai *i2s = to_info(rtd->cpu_dai); in i2s_trigger() local
881 spin_lock_irqsave(i2s->lock, flags); in i2s_trigger()
883 if (config_setup(i2s)) { in i2s_trigger()
884 spin_unlock_irqrestore(i2s->lock, flags); in i2s_trigger()
889 i2s_rxctrl(i2s, 1); in i2s_trigger()
891 i2s_txctrl(i2s, 1); in i2s_trigger()
893 spin_unlock_irqrestore(i2s->lock, flags); in i2s_trigger()
898 spin_lock_irqsave(i2s->lock, flags); in i2s_trigger()
901 i2s_rxctrl(i2s, 0); in i2s_trigger()
902 i2s_fifo(i2s, FIC_RXFLUSH); in i2s_trigger()
904 i2s_txctrl(i2s, 0); in i2s_trigger()
905 i2s_fifo(i2s, FIC_TXFLUSH); in i2s_trigger()
908 spin_unlock_irqrestore(i2s->lock, flags); in i2s_trigger()
918 struct i2s_dai *i2s = to_info(dai); in i2s_set_clkdiv() local
919 struct i2s_dai *other = get_other_dai(i2s); in i2s_set_clkdiv()
923 if ((any_active(i2s) && div && (get_bfs(i2s) != div)) in i2s_set_clkdiv()
925 dev_err(&i2s->pdev->dev, in i2s_set_clkdiv()
929 i2s->bfs = div; in i2s_set_clkdiv()
932 dev_err(&i2s->pdev->dev, in i2s_set_clkdiv()
943 struct i2s_dai *i2s = to_info(dai); in i2s_delay() local
944 u32 reg = readl(i2s->addr + I2SFIC); in i2s_delay()
946 const struct samsung_i2s_variant_regs *i2s_regs = i2s->variant_regs; in i2s_delay()
950 else if (is_secondary(i2s)) in i2s_delay()
951 delay = FICS_TXCOUNT(readl(i2s->addr + I2SFICS)); in i2s_delay()
961 struct i2s_dai *i2s = to_info(dai); in i2s_suspend() local
963 i2s->suspend_i2smod = readl(i2s->addr + I2SMOD); in i2s_suspend()
964 i2s->suspend_i2scon = readl(i2s->addr + I2SCON); in i2s_suspend()
965 i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR); in i2s_suspend()
972 struct i2s_dai *i2s = to_info(dai); in i2s_resume() local
974 writel(i2s->suspend_i2scon, i2s->addr + I2SCON); in i2s_resume()
975 writel(i2s->suspend_i2smod, i2s->addr + I2SMOD); in i2s_resume()
976 writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR); in i2s_resume()
987 struct i2s_dai *i2s = to_info(dai); in samsung_i2s_dai_probe() local
988 struct i2s_dai *other = get_other_dai(i2s); in samsung_i2s_dai_probe()
991 if (is_secondary(i2s)) { /* If this is probe on the secondary DAI */ in samsung_i2s_dai_probe()
995 samsung_asoc_init_dma_data(dai, &i2s->dma_playback, in samsung_i2s_dai_probe()
996 &i2s->dma_capture); in samsung_i2s_dai_probe()
998 if (i2s->quirks & QUIRK_NEED_RSTCLR) in samsung_i2s_dai_probe()
999 writel(CON_RSTCLR, i2s->addr + I2SCON); in samsung_i2s_dai_probe()
1001 if (i2s->quirks & QUIRK_SUPPORTS_IDMA) in samsung_i2s_dai_probe()
1002 idma_reg_addr_init(i2s->addr, in samsung_i2s_dai_probe()
1003 i2s->sec_dai->idma_playback.dma_addr); in samsung_i2s_dai_probe()
1007 i2s->rfs = 0; in samsung_i2s_dai_probe()
1008 i2s->bfs = 0; in samsung_i2s_dai_probe()
1009 i2s->rclk_srcrate = 0; in samsung_i2s_dai_probe()
1011 spin_lock_irqsave(i2s->lock, flags); in samsung_i2s_dai_probe()
1012 i2s_txctrl(i2s, 0); in samsung_i2s_dai_probe()
1013 i2s_rxctrl(i2s, 0); in samsung_i2s_dai_probe()
1014 i2s_fifo(i2s, FIC_TXFLUSH); in samsung_i2s_dai_probe()
1016 i2s_fifo(i2s, FIC_RXFLUSH); in samsung_i2s_dai_probe()
1017 spin_unlock_irqrestore(i2s->lock, flags); in samsung_i2s_dai_probe()
1029 struct i2s_dai *i2s = snd_soc_dai_get_drvdata(dai); in samsung_i2s_dai_remove() local
1031 if (!is_secondary(i2s)) { in samsung_i2s_dai_remove()
1032 if (i2s->quirks & QUIRK_NEED_RSTCLR) { in samsung_i2s_dai_remove()
1033 spin_lock(i2s->lock); in samsung_i2s_dai_remove()
1034 writel(0, i2s->addr + I2SCON); in samsung_i2s_dai_remove()
1035 spin_unlock(i2s->lock); in samsung_i2s_dai_remove()
1065 struct i2s_dai *i2s; in i2s_alloc_dai() local
1068 i2s = devm_kzalloc(&pdev->dev, sizeof(struct i2s_dai), GFP_KERNEL); in i2s_alloc_dai()
1069 if (i2s == NULL) in i2s_alloc_dai()
1072 i2s->pdev = pdev; in i2s_alloc_dai()
1073 i2s->pri_dai = NULL; in i2s_alloc_dai()
1074 i2s->sec_dai = NULL; in i2s_alloc_dai()
1075 i2s->i2s_dai_drv.symmetric_rates = 1; in i2s_alloc_dai()
1076 i2s->i2s_dai_drv.probe = samsung_i2s_dai_probe; in i2s_alloc_dai()
1077 i2s->i2s_dai_drv.remove = samsung_i2s_dai_remove; in i2s_alloc_dai()
1078 i2s->i2s_dai_drv.ops = &samsung_i2s_dai_ops; in i2s_alloc_dai()
1079 i2s->i2s_dai_drv.suspend = i2s_suspend; in i2s_alloc_dai()
1080 i2s->i2s_dai_drv.resume = i2s_resume; in i2s_alloc_dai()
1081 i2s->i2s_dai_drv.playback.channels_min = 1; in i2s_alloc_dai()
1082 i2s->i2s_dai_drv.playback.channels_max = 2; in i2s_alloc_dai()
1083 i2s->i2s_dai_drv.playback.rates = SAMSUNG_I2S_RATES; in i2s_alloc_dai()
1084 i2s->i2s_dai_drv.playback.formats = SAMSUNG_I2S_FMTS; in i2s_alloc_dai()
1087 i2s->i2s_dai_drv.capture.channels_min = 1; in i2s_alloc_dai()
1088 i2s->i2s_dai_drv.capture.channels_max = 2; in i2s_alloc_dai()
1089 i2s->i2s_dai_drv.capture.rates = SAMSUNG_I2S_RATES; in i2s_alloc_dai()
1090 i2s->i2s_dai_drv.capture.formats = SAMSUNG_I2S_FMTS; in i2s_alloc_dai()
1091 dev_set_drvdata(&i2s->pdev->dev, i2s); in i2s_alloc_dai()
1093 i2s->pdev = platform_device_alloc("samsung-i2s-sec", -1); in i2s_alloc_dai()
1094 if (!i2s->pdev) in i2s_alloc_dai()
1097 i2s->pdev->dev.parent = &pdev->dev; in i2s_alloc_dai()
1099 platform_set_drvdata(i2s->pdev, i2s); in i2s_alloc_dai()
1100 ret = platform_device_add(i2s->pdev); in i2s_alloc_dai()
1105 return i2s; in i2s_alloc_dai()
1126 struct i2s_dai *i2s = dev_get_drvdata(dev); in i2s_runtime_suspend() local
1128 clk_disable_unprepare(i2s->clk); in i2s_runtime_suspend()
1135 struct i2s_dai *i2s = dev_get_drvdata(dev); in i2s_runtime_resume() local
1137 clk_prepare_enable(i2s->clk); in i2s_runtime_resume()
1143 static void i2s_unregister_clocks(struct i2s_dai *i2s) in i2s_unregister_clocks() argument
1147 for (i = 0; i < i2s->clk_data.clk_num; i++) { in i2s_unregister_clocks()
1148 if (!IS_ERR(i2s->clk_table[i])) in i2s_unregister_clocks()
1149 clk_unregister(i2s->clk_table[i]); in i2s_unregister_clocks()
1155 struct i2s_dai *i2s = dev_get_drvdata(&pdev->dev); in i2s_unregister_clock_provider() local
1158 i2s_unregister_clocks(i2s); in i2s_unregister_clock_provider()
1164 struct i2s_dai *i2s = dev_get_drvdata(dev); in i2s_register_clock_provider() local
1167 const struct samsung_i2s_variant_regs *reg_info = i2s->variant_regs; in i2s_register_clock_provider()
1184 if (!(i2s->quirks & QUIRK_NO_MUXPSR)) { in i2s_register_clock_provider()
1186 u32 val = readl(i2s->addr + I2SPSR); in i2s_register_clock_provider()
1187 writel(val | PSR_PSREN, i2s->addr + I2SPSR); in i2s_register_clock_provider()
1189 i2s->clk_table[CLK_I2S_RCLK_SRC] = clk_register_mux(NULL, in i2s_register_clock_provider()
1192 i2s->addr + I2SMOD, reg_info->rclksrc_off, in i2s_register_clock_provider()
1193 1, 0, i2s->lock); in i2s_register_clock_provider()
1195 i2s->clk_table[CLK_I2S_RCLK_PSR] = clk_register_divider(NULL, in i2s_register_clock_provider()
1198 i2s->addr + I2SPSR, 8, 6, 0, i2s->lock); in i2s_register_clock_provider()
1201 i2s->clk_data.clk_num = 2; in i2s_register_clock_provider()
1206 i2s->clk_table[CLK_I2S_CDCLK] = clk_register_gate(NULL, clk_name[0], in i2s_register_clock_provider()
1208 i2s->addr + I2SMOD, reg_info->cdclkcon_off, in i2s_register_clock_provider()
1209 CLK_GATE_SET_TO_DISABLE, i2s->lock); in i2s_register_clock_provider()
1211 i2s->clk_data.clk_num += 1; in i2s_register_clock_provider()
1212 i2s->clk_data.clks = i2s->clk_table; in i2s_register_clock_provider()
1215 &i2s->clk_data); in i2s_register_clock_provider()
1218 i2s_unregister_clocks(i2s); in i2s_register_clock_provider()
1272 i2s_cfg = &i2s_pdata->type.i2s; in samsung_i2s_probe()
1363 struct i2s_dai *i2s, *other; in samsung_i2s_remove() local
1365 i2s = dev_get_drvdata(&pdev->dev); in samsung_i2s_remove()
1366 other = get_other_dai(i2s); in samsung_i2s_remove()
1375 if (!is_secondary(i2s)) { in samsung_i2s_remove()
1377 clk_disable_unprepare(i2s->clk); in samsung_i2s_remove()
1380 i2s->pri_dai = NULL; in samsung_i2s_remove()
1381 i2s->sec_dai = NULL; in samsung_i2s_remove()