Lines Matching refs:cl

65 #define PORT_DATA_SEL_TXA(cl)	(1 << ((cl)*2))  argument
66 #define PORT_DATA_SEL_TXB(cl) (2 << ((cl)*2)) argument
111 #define REG_DMA_ADAPTER_A(cl) (0x8000 * (cl)) argument
112 #define REG_DMA_ADAPTER_B(cl) (0x8000 * (cl) + 0x4000) argument
167 static void mca_modify(struct mca_cluster *cl, int regoffset, u32 mask, u32 val) in mca_modify() argument
169 __iomem void *ptr = cl->base + regoffset; in mca_modify()
195 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_fe_early_trigger() local
205 mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, in mca_fe_early_trigger()
207 mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, in mca_fe_early_trigger()
209 mca_modify(cl, serdes_unit + REG_SERDES_STATUS, in mca_fe_early_trigger()
217 WARN_ON(readl_relaxed(cl->base + serdes_unit + REG_SERDES_STATUS) & in mca_fe_early_trigger()
219 mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, in mca_fe_early_trigger()
221 mca_modify(cl, serdes_conf, SERDES_CONF_SYNC_SEL, in mca_fe_early_trigger()
222 FIELD_PREP(SERDES_CONF_SYNC_SEL, cl->no + 1)); in mca_fe_early_trigger()
232 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_fe_trigger() local
240 mca_modify(cl, serdes_unit + REG_SERDES_STATUS, in mca_fe_trigger()
248 mca_modify(cl, serdes_unit + REG_SERDES_STATUS, in mca_fe_trigger()
259 static int mca_fe_enable_clocks(struct mca_cluster *cl) in mca_fe_enable_clocks() argument
261 struct mca_data *mca = cl->host; in mca_fe_enable_clocks()
264 ret = clk_prepare_enable(cl->clk_parent); in mca_fe_enable_clocks()
268 cl->no, ret); in mca_fe_enable_clocks()
277 cl->pd_link = device_link_add(mca->dev, cl->pd_dev, in mca_fe_enable_clocks()
280 if (!cl->pd_link) { in mca_fe_enable_clocks()
282 "cluster %d: unable to prop-up power domain\n", cl->no); in mca_fe_enable_clocks()
283 clk_disable_unprepare(cl->clk_parent); in mca_fe_enable_clocks()
287 writel_relaxed(cl->no + 1, cl->base + REG_SYNCGEN_MCLK_SEL); in mca_fe_enable_clocks()
288 mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, in mca_fe_enable_clocks()
290 mca_modify(cl, REG_STATUS, STATUS_MCLK_EN, STATUS_MCLK_EN); in mca_fe_enable_clocks()
295 static void mca_fe_disable_clocks(struct mca_cluster *cl) in mca_fe_disable_clocks() argument
297 mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0); in mca_fe_disable_clocks()
298 mca_modify(cl, REG_STATUS, STATUS_MCLK_EN, 0); in mca_fe_disable_clocks()
300 device_link_del(cl->pd_link); in mca_fe_disable_clocks()
301 clk_disable_unprepare(cl->clk_parent); in mca_fe_disable_clocks()
304 static bool mca_fe_clocks_in_use(struct mca_cluster *cl) in mca_fe_clocks_in_use() argument
306 struct mca_data *mca = cl->host; in mca_fe_clocks_in_use()
314 if (be_cl->port_driver != cl->no) in mca_fe_clocks_in_use()
331 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_be_prepare() local
332 struct mca_data *mca = cl->host; in mca_be_prepare()
336 if (cl->port_driver < 0) in mca_be_prepare()
339 fe_cl = &mca->clusters[cl->port_driver]; in mca_be_prepare()
353 cl->clocks_in_use[substream->stream] = true; in mca_be_prepare()
361 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_be_hw_free() local
362 struct mca_data *mca = cl->host; in mca_be_hw_free()
365 if (cl->port_driver < 0) in mca_be_hw_free()
373 fe_cl = &mca->clusters[cl->port_driver]; in mca_be_hw_free()
377 cl->clocks_in_use[substream->stream] = false; in mca_be_hw_free()
393 static int mca_configure_serdes(struct mca_cluster *cl, int serdes_unit, in mca_configure_serdes() argument
397 __iomem void *serdes_base = cl->base + serdes_unit; in mca_configure_serdes()
420 serdes_conf |= FIELD_PREP(SERDES_CONF_SYNC_SEL, cl->no + 1); in mca_configure_serdes()
435 mca_modify(cl, in mca_configure_serdes()
461 dev_err(cl->host->dev, in mca_configure_serdes()
470 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_fe_set_tdm_slot() local
472 cl->tdm_slots = slots; in mca_fe_set_tdm_slot()
473 cl->tdm_slot_width = slot_width; in mca_fe_set_tdm_slot()
474 cl->tdm_tx_mask = tx_mask; in mca_fe_set_tdm_slot()
475 cl->tdm_rx_mask = rx_mask; in mca_fe_set_tdm_slot()
482 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_fe_set_fmt() local
483 struct mca_data *mca = cl->host; in mca_fe_set_fmt()
522 mca_modify(cl, CLUSTER_TX_OFF + REG_TX_SERDES_CONF, in mca_fe_set_fmt()
524 mca_modify(cl, CLUSTER_RX_OFF + REG_RX_SERDES_CONF, in mca_fe_set_fmt()
527 cl->base + CLUSTER_TX_OFF + REG_TX_SERDES_BITSTART); in mca_fe_set_fmt()
529 cl->base + CLUSTER_RX_OFF + REG_RX_SERDES_BITSTART); in mca_fe_set_fmt()
540 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_set_bclk_ratio() local
542 cl->bclk_ratio = ratio; in mca_set_bclk_ratio()
569 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_fe_hw_params() local
570 struct mca_data *mca = cl->host; in mca_fe_hw_params()
580 if (!cl->tdm_slot_width) { in mca_fe_hw_params()
589 tdm_slot_width = cl->tdm_slot_width; in mca_fe_hw_params()
590 tdm_slots = cl->tdm_slots; in mca_fe_hw_params()
591 tdm_mask = is_tx ? cl->tdm_tx_mask : cl->tdm_rx_mask; in mca_fe_hw_params()
594 if (cl->bclk_ratio) in mca_fe_hw_params()
595 bclk_ratio = cl->bclk_ratio; in mca_fe_hw_params()
631 ret = mca_configure_serdes(cl, is_tx ? CLUSTER_TX_OFF : CLUSTER_RX_OFF, in mca_fe_hw_params()
650 writel_relaxed(regval, mca->switch_base + REG_DMA_ADAPTER_A(cl->no)); in mca_fe_hw_params()
654 mca->switch_base + REG_DMA_ADAPTER_A(cl->no)); in mca_fe_hw_params()
657 mca->switch_base + REG_DMA_ADAPTER_B(cl->no)); in mca_fe_hw_params()
660 if (!mca_fe_clocks_in_use(cl)) { in mca_fe_hw_params()
665 cl->base + REG_SYNCGEN_HI_PERIOD); in mca_fe_hw_params()
667 cl->base + REG_SYNCGEN_LO_PERIOD); in mca_fe_hw_params()
669 cl->base + REG_MCLK_CONF); in mca_fe_hw_params()
671 ret = clk_set_rate(cl->clk_parent, bclk_ratio * samp_rate); in mca_fe_hw_params()
674 cl->no, ret); in mca_fe_hw_params()
690 static bool mca_be_started(struct mca_cluster *cl) in mca_be_started() argument
695 if (cl->port_started[stream]) in mca_be_started()
705 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_be_startup() local
707 struct mca_data *mca = cl->host; in mca_be_startup()
726 if (mca_be_started(cl)) { in mca_be_startup()
732 if (cl->port_driver != fe_cl->no) in mca_be_startup()
735 cl->port_started[substream->stream] = true; in mca_be_startup()
740 cl->base + REG_PORT_ENABLES); in mca_be_startup()
742 cl->base + REG_PORT_CLOCK_SEL); in mca_be_startup()
744 cl->base + REG_PORT_DATA_SEL); in mca_be_startup()
746 cl->port_driver = fe_cl->no; in mca_be_startup()
748 cl->port_started[substream->stream] = true; in mca_be_startup()
756 struct mca_cluster *cl = mca_dai_to_cluster(dai); in mca_be_shutdown() local
757 struct mca_data *mca = cl->host; in mca_be_shutdown()
759 cl->port_started[substream->stream] = false; in mca_be_shutdown()
761 if (!mca_be_started(cl)) { in mca_be_shutdown()
766 writel_relaxed(0, cl->base + REG_PORT_ENABLES); in mca_be_shutdown()
767 writel_relaxed(0, cl->base + REG_PORT_DATA_SEL); in mca_be_shutdown()
769 cl->port_driver = -1; in mca_be_shutdown()
815 struct mca_cluster *cl = mca_dai_to_cluster(asoc_rtd_to_cpu(rtd, 0)); in mca_pcm_open() local
816 struct dma_chan *chan = cl->dma_chans[substream->stream]; in mca_pcm_open()
896 static struct dma_chan *mca_request_dma_channel(struct mca_cluster *cl, unsigned int stream) in mca_request_dma_channel() argument
900 char *name = devm_kasprintf(cl->host->dev, GFP_KERNEL, in mca_request_dma_channel()
901 is_tx ? "tx%da" : "rx%da", cl->no); in mca_request_dma_channel()
903 char *name = devm_kasprintf(cl->host->dev, GFP_KERNEL, in mca_request_dma_channel()
904 is_tx ? "tx%da" : "rx%db", cl->no); in mca_request_dma_channel()
906 return of_dma_request_slave_channel(cl->host->dev->of_node, name); in mca_request_dma_channel()
914 struct mca_cluster *cl = mca_dai_to_cluster(asoc_rtd_to_cpu(rtd, 0)); in mca_pcm_free() local
924 if (!substream || !cl->dma_chans[i]) in mca_pcm_free()
927 dma_release_channel(cl->dma_chans[i]); in mca_pcm_free()
928 cl->dma_chans[i] = NULL; in mca_pcm_free()
936 struct mca_cluster *cl = mca_dai_to_cluster(asoc_rtd_to_cpu(rtd, 0)); in mca_pcm_new() local
950 chan = mca_request_dma_channel(cl, i); in mca_pcm_new()
959 i, cl->no, chan); in mca_pcm_new()
966 cl->dma_chans[i] = chan; in mca_pcm_new()
991 struct mca_cluster *cl = &mca->clusters[i]; in apple_mca_release() local
993 if (!IS_ERR_OR_NULL(cl->clk_parent)) in apple_mca_release()
994 clk_put(cl->clk_parent); in apple_mca_release()
996 if (!IS_ERR_OR_NULL(cl->pd_dev)) in apple_mca_release()
997 dev_pm_domain_detach(cl->pd_dev, true); in apple_mca_release()
1068 struct mca_cluster *cl = &clusters[i]; in apple_mca_probe() local
1073 cl->host = mca; in apple_mca_probe()
1074 cl->no = i; in apple_mca_probe()
1075 cl->base = base + CLUSTER_STRIDE * i; in apple_mca_probe()
1076 cl->port_driver = -1; in apple_mca_probe()
1077 cl->clk_parent = of_clk_get(pdev->dev.of_node, i); in apple_mca_probe()
1078 if (IS_ERR(cl->clk_parent)) { in apple_mca_probe()
1080 i, PTR_ERR(cl->clk_parent)); in apple_mca_probe()
1081 ret = PTR_ERR(cl->clk_parent); in apple_mca_probe()
1084 cl->pd_dev = dev_pm_domain_attach_by_id(&pdev->dev, i + 1); in apple_mca_probe()
1085 if (IS_ERR(cl->pd_dev)) { in apple_mca_probe()
1088 PTR_ERR(cl->pd_dev)); in apple_mca_probe()
1089 ret = PTR_ERR(cl->pd_dev); in apple_mca_probe()