From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: Re: [PATCH v3 1/4] ASoC: rockchip: add support for i2s-tdm controller
Date: Mon, 30 Aug 2021 22:41:43 +0800 [thread overview]
Message-ID: <202108302243.DvDLTbOw-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 21564 bytes --]
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210828140205.21973-2-frattaroli.nicolas@gmail.com>
References: <20210828140205.21973-2-frattaroli.nicolas@gmail.com>
TO: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
TO: Liam Girdwood <lgirdwood@gmail.com>
TO: Mark Brown <broonie@kernel.org>
TO: Jaroslav Kysela <perex@perex.cz>
TO: Takashi Iwai <tiwai@suse.com>
TO: Heiko Stuebner <heiko@sntech.de>
TO: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
TO: Philipp Zabel <p.zabel@pengutronix.de>
CC: linux-kernel(a)vger.kernel.org
CC: alsa-devel(a)alsa-project.org
CC: linux-arm-kernel(a)lists.infradead.org
Hi Nicolas,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rockchip/for-next]
[also build test WARNING on asoc/for-next sound/for-next linus/master v5.14 next-20210830]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Nicolas-Frattaroli/Rockchip-I2S-TDM-controller/20210828-220355
base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: microblaze-randconfig-m031-20210830 (attached as .config)
compiler: microblaze-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
sound/soc/rockchip/rockchip_i2s_tdm.c:1739 rockchip_i2s_tdm_probe() warn: ignoring unreachable code.
vim +1739 sound/soc/rockchip/rockchip_i2s_tdm.c
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1553
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1554 static int rockchip_i2s_tdm_probe(struct platform_device *pdev)
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1555 {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1556 struct device_node *node = pdev->dev.of_node;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1557 struct device_node *cru_node;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1558 const struct of_device_id *of_id;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1559 struct rk_i2s_tdm_dev *i2s_tdm;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1560 struct resource *res;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1561 void __iomem *regs;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1562 int ret;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1563 int val;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1564
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1565 i2s_tdm = devm_kzalloc(&pdev->dev, sizeof(*i2s_tdm), GFP_KERNEL);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1566 if (!i2s_tdm)
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1567 return -ENOMEM;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1568
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1569 i2s_tdm->dev = &pdev->dev;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1570
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1571 of_id = of_match_device(rockchip_i2s_tdm_match, &pdev->dev);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1572 if (!of_id || !of_id->data)
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1573 return -EINVAL;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1574
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1575 spin_lock_init(&i2s_tdm->lock);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1576 i2s_tdm->soc_data = (struct rk_i2s_soc_data *)of_id->data;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1577
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1578 rockchip_i2s_tdm_init_dai(i2s_tdm);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1579
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1580 i2s_tdm->frame_width = 64;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1581 if (!of_property_read_u32(node, "rockchip,frame-width", &val)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1582 if (val >= 32 && (val % 2 == 0) && val <= 512) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1583 i2s_tdm->frame_width = val;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1584 } else {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1585 dev_err(i2s_tdm->dev, "unsupported frame width: '%d'\n",
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1586 val);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1587 return -EINVAL;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1588 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1589 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1590
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1591 i2s_tdm->clk_trcm = TRCM_TXRX;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1592 if (of_property_read_bool(node, "rockchip,trcm-sync-tx-only"))
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1593 i2s_tdm->clk_trcm = TRCM_TX;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1594 if (of_property_read_bool(node, "rockchip,trcm-sync-rx-only")) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1595 if (i2s_tdm->clk_trcm) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1596 dev_err(i2s_tdm->dev, "invalid trcm-sync configuration\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1597 return -EINVAL;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1598 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1599 i2s_tdm->clk_trcm = TRCM_RX;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1600 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1601 if (i2s_tdm->clk_trcm != TRCM_TXRX)
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1602 i2s_tdm_dai.symmetric_rate = 1;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1603
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1604 i2s_tdm->tdm_fsync_half_frame =
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1605 of_property_read_bool(node, "rockchip,tdm-fsync-half-frame");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1606
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1607 i2s_tdm->grf = syscon_regmap_lookup_by_phandle(node, "rockchip,grf");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1608 if (IS_ERR(i2s_tdm->grf))
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1609 return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->grf),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1610 "Error in rockchip,grf\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1611
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1612 if (i2s_tdm->clk_trcm != TRCM_TXRX) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1613 cru_node = of_parse_phandle(node, "rockchip,cru", 0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1614 i2s_tdm->cru_base = of_iomap(cru_node, 0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1615 of_node_put(cru_node);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1616 if (!i2s_tdm->cru_base) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1617 dev_err(i2s_tdm->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1618 "Missing or unsupported rockchip,cru node\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1619 return -ENOENT;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1620 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1621
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1622 i2s_tdm->tx_reset_id = of_i2s_resetid_get(node, "tx-m");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1623 i2s_tdm->rx_reset_id = of_i2s_resetid_get(node, "rx-m");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1624 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1625
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1626 i2s_tdm->tx_reset = devm_reset_control_get_exclusive(&pdev->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1627 "tx-m");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1628 if (IS_ERR(i2s_tdm->tx_reset)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1629 ret = PTR_ERR(i2s_tdm->tx_reset);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1630 return dev_err_probe(i2s_tdm->dev, ret,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1631 "Error in tx-m reset control\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1632 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1633
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1634 i2s_tdm->rx_reset = devm_reset_control_get_exclusive(&pdev->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1635 "rx-m");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1636 if (IS_ERR(i2s_tdm->rx_reset)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1637 ret = PTR_ERR(i2s_tdm->rx_reset);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1638 return dev_err_probe(i2s_tdm->dev, ret,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1639 "Error in rx-m reset control\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1640 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1641
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1642 i2s_tdm->hclk = devm_clk_get(&pdev->dev, "hclk");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1643 if (IS_ERR(i2s_tdm->hclk)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1644 return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->hclk),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1645 "Failed to get clock hclk\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1646 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1647
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1648 i2s_tdm->mclk_tx = devm_clk_get(&pdev->dev, "mclk_tx");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1649 if (IS_ERR(i2s_tdm->mclk_tx)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1650 return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->mclk_tx),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1651 "Failed to get clock mclk_tx\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1652 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1653
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1654 i2s_tdm->mclk_rx = devm_clk_get(&pdev->dev, "mclk_rx");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1655 if (IS_ERR(i2s_tdm->mclk_rx)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1656 return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->mclk_rx),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1657 "Failed to get clock mclk_rx\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1658 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1659
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1660 i2s_tdm->io_multiplex =
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1661 of_property_read_bool(node, "rockchip,io-multiplex");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1662
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1663 i2s_tdm->mclk_calibrate =
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1664 of_property_read_bool(node, "rockchip,mclk-calibrate");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1665 if (i2s_tdm->mclk_calibrate) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1666 i2s_tdm->mclk_tx_src = devm_clk_get(&pdev->dev, "mclk_tx_src");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1667 if (IS_ERR(i2s_tdm->mclk_tx_src)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1668 return dev_err_probe(i2s_tdm->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1669 PTR_ERR(i2s_tdm->mclk_tx_src),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1670 "Failed to get clock mclk_tx_src\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1671 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1672 i2s_tdm->mclk_rx_src = devm_clk_get(&pdev->dev, "mclk_rx_src");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1673 if (IS_ERR(i2s_tdm->mclk_rx_src)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1674 return dev_err_probe(i2s_tdm->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1675 PTR_ERR(i2s_tdm->mclk_rx_src),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1676 "Failed to get clock mclk_rx_src\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1677 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1678 i2s_tdm->mclk_root0 = devm_clk_get(&pdev->dev, "mclk_root0");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1679 if (IS_ERR(i2s_tdm->mclk_root0)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1680 return dev_err_probe(i2s_tdm->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1681 PTR_ERR(i2s_tdm->mclk_root0),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1682 "Failed to get clock mclk_root0\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1683 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1684 i2s_tdm->mclk_root1 = devm_clk_get(&pdev->dev, "mclk_root1");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1685 if (IS_ERR(i2s_tdm->mclk_root1)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1686 return dev_err_probe(i2s_tdm->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1687 PTR_ERR(i2s_tdm->mclk_root1),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1688 "Failed to get clock mclk_root1\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1689 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1690 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1691
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1692 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1693 regs = devm_ioremap_resource(&pdev->dev, res);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1694 if (IS_ERR(regs)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1695 return dev_err_probe(i2s_tdm->dev, PTR_ERR(regs),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1696 "Failed to get resource IORESOURCE_MEM\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1697 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1698
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1699 i2s_tdm->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1700 &rockchip_i2s_tdm_regmap_config);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1701 if (IS_ERR(i2s_tdm->regmap)) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1702 return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->regmap),
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1703 "Failed to initialise regmap\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1704 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1705
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1706 i2s_tdm->playback_dma_data.addr = res->start + I2S_TXDR;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1707 i2s_tdm->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1708 i2s_tdm->playback_dma_data.maxburst = 8;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1709
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1710 i2s_tdm->capture_dma_data.addr = res->start + I2S_RXDR;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1711 i2s_tdm->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1712 i2s_tdm->capture_dma_data.maxburst = 8;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1713
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1714 ret = rockchip_i2s_tdm_tx_path_prepare(i2s_tdm, node);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1715 if (ret < 0) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1716 dev_err(&pdev->dev, "I2S TX path prepare failed: %d\n", ret);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1717 return ret;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1718 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1719
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1720 ret = rockchip_i2s_tdm_rx_path_prepare(i2s_tdm, node);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1721 if (ret < 0) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1722 dev_err(&pdev->dev, "I2S RX path prepare failed: %d\n", ret);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1723 return ret;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1724 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1725
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1726 atomic_set(&i2s_tdm->refcount, 0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1727 dev_set_drvdata(&pdev->dev, i2s_tdm);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1728
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1729 ret = clk_prepare_enable(i2s_tdm->hclk);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1730 if (ret) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1731 return dev_err_probe(i2s_tdm->dev, ret,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1732 "Failed to enable clock hclk\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1733 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1734
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1735 ret = i2s_tdm_prepare_enable_mclk(i2s_tdm);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1736 if (ret) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1737 return dev_err_probe(i2s_tdm->dev, ret,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1738 "Failed to enable one or more mclks\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 @1739 goto err_disable_hclk;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1740 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1741
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1742 if (i2s_tdm->mclk_calibrate) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1743 i2s_tdm->mclk_root0_initial_freq = clk_get_rate(i2s_tdm->mclk_root0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1744 i2s_tdm->mclk_root1_initial_freq = clk_get_rate(i2s_tdm->mclk_root1);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1745 i2s_tdm->mclk_root0_freq = i2s_tdm->mclk_root0_initial_freq;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1746 i2s_tdm->mclk_root1_freq = i2s_tdm->mclk_root1_initial_freq;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1747 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1748
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1749 pm_runtime_enable(&pdev->dev);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1750
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1751 regmap_update_bits(i2s_tdm->regmap, I2S_DMACR, I2S_DMACR_TDL_MASK,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1752 I2S_DMACR_TDL(16));
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1753 regmap_update_bits(i2s_tdm->regmap, I2S_DMACR, I2S_DMACR_RDL_MASK,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1754 I2S_DMACR_RDL(16));
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1755 regmap_update_bits(i2s_tdm->regmap, I2S_CKR, I2S_CKR_TRCM_MASK,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1756 i2s_tdm->clk_trcm << I2S_CKR_TRCM_SHIFT);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1757
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1758 if (i2s_tdm->soc_data && i2s_tdm->soc_data->init)
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1759 i2s_tdm->soc_data->init(&pdev->dev, res->start);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1760
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1761 ret = devm_snd_soc_register_component(&pdev->dev,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1762 &rockchip_i2s_tdm_component,
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1763 &i2s_tdm_dai, 1);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1764
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1765 if (ret) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1766 dev_err(&pdev->dev, "Could not register DAI\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1767 goto err_suspend;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1768 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1769
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1770 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1771 if (ret) {
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1772 dev_err(&pdev->dev, "Could not register PCM\n");
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1773 goto err_suspend;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1774 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1775
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1776 return 0;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1777
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1778 err_suspend:
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1779 if (!pm_runtime_status_suspended(&pdev->dev))
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1780 i2s_tdm_runtime_suspend(&pdev->dev);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1781 pm_runtime_disable(&pdev->dev);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1782
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1783 err_disable_hclk:
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1784 if (!IS_ERR(i2s_tdm->hclk))
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1785 clk_disable_unprepare(i2s_tdm->hclk);
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1786
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1787 return ret;
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1788 }
d1a262aa5c36c4 Nicolas Frattaroli 2021-08-28 1789
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29528 bytes --]
next reply other threads:[~2021-08-30 14:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-30 14:41 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-08-28 14:02 [PATCH v3 0/4] Rockchip I2S/TDM controller Nicolas Frattaroli
2021-08-28 14:02 ` [PATCH v3 1/4] ASoC: rockchip: add support for i2s-tdm controller Nicolas Frattaroli
2021-08-28 14:02 ` Nicolas Frattaroli
2021-08-28 14:02 ` Nicolas Frattaroli
2021-08-28 14:02 ` Nicolas Frattaroli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202108302243.DvDLTbOw-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.