All of lore.kernel.org
 help / color / mirror / Atom feed
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 --]

             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.