Merge "ASoC: wcd-spi: Move one time initializations to component bind"
This commit is contained in:
commit
3e806839fc
1 changed files with 44 additions and 39 deletions
|
@ -631,6 +631,14 @@ static int wcd_spi_init(struct spi_device *spi)
|
|||
if (IS_ERR_VALUE(ret))
|
||||
goto err_wr_en;
|
||||
|
||||
/*
|
||||
* In case spi_init is called after component deinit,
|
||||
* it is possible hardware register state is also reset.
|
||||
* Sync the regcache here so hardware state is updated
|
||||
* to reflect the cache.
|
||||
*/
|
||||
regcache_sync(wcd_spi->regmap);
|
||||
|
||||
regmap_write(wcd_spi->regmap, WCD_SPI_SLAVE_CONFIG,
|
||||
0x0F3D0800);
|
||||
|
||||
|
@ -1093,46 +1101,12 @@ static struct regmap_config wcd_spi_regmap_cfg = {
|
|||
static int wdsp_spi_init(struct device *dev, void *priv_data)
|
||||
{
|
||||
struct spi_device *spi = to_spi_device(dev);
|
||||
struct wcd_spi_priv *wcd_spi = spi_get_drvdata(spi);
|
||||
int ret;
|
||||
|
||||
wcd_spi->reg_bytes = DIV_ROUND_UP(wcd_spi_regmap_cfg.reg_bits, 8);
|
||||
wcd_spi->val_bytes = DIV_ROUND_UP(wcd_spi_regmap_cfg.val_bits, 8);
|
||||
|
||||
wcd_spi->regmap = devm_regmap_init(&spi->dev, &wcd_spi_regmap_bus,
|
||||
&spi->dev, &wcd_spi_regmap_cfg);
|
||||
if (IS_ERR(wcd_spi->regmap)) {
|
||||
ret = PTR_ERR(wcd_spi->regmap);
|
||||
dev_err(&spi->dev, "%s: Failed to allocate regmap, err = %d\n",
|
||||
__func__, ret);
|
||||
goto err_regmap;
|
||||
}
|
||||
|
||||
if (wcd_spi_debugfs_init(spi))
|
||||
dev_err(&spi->dev, "%s: Failed debugfs init\n", __func__);
|
||||
|
||||
spi_message_init(&wcd_spi->msg1);
|
||||
spi_message_add_tail(&wcd_spi->xfer1, &wcd_spi->msg1);
|
||||
|
||||
spi_message_init(&wcd_spi->msg2);
|
||||
spi_message_add_tail(&wcd_spi->xfer2[0], &wcd_spi->msg2);
|
||||
spi_message_add_tail(&wcd_spi->xfer2[1], &wcd_spi->msg2);
|
||||
|
||||
ret = wcd_spi_init(spi);
|
||||
if (IS_ERR_VALUE(ret)) {
|
||||
if (IS_ERR_VALUE(ret))
|
||||
dev_err(&spi->dev, "%s: Init failed, err = %d\n",
|
||||
__func__, ret);
|
||||
goto err_init;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_init:
|
||||
spi_transfer_del(&wcd_spi->xfer1);
|
||||
spi_transfer_del(&wcd_spi->xfer2[0]);
|
||||
spi_transfer_del(&wcd_spi->xfer2[1]);
|
||||
|
||||
err_regmap:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1141,9 +1115,11 @@ static int wdsp_spi_deinit(struct device *dev, void *priv_data)
|
|||
struct spi_device *spi = to_spi_device(dev);
|
||||
struct wcd_spi_priv *wcd_spi = spi_get_drvdata(spi);
|
||||
|
||||
spi_transfer_del(&wcd_spi->xfer1);
|
||||
spi_transfer_del(&wcd_spi->xfer2[0]);
|
||||
spi_transfer_del(&wcd_spi->xfer2[1]);
|
||||
/*
|
||||
* Deinit means the hardware is reset. Mark the cache
|
||||
* as dirty here, so init will sync the cache
|
||||
*/
|
||||
regcache_mark_dirty(wcd_spi->regmap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1170,9 +1146,34 @@ static int wcd_spi_component_bind(struct device *dev,
|
|||
ret = wcd_spi->m_ops->register_cmpnt_ops(master, dev,
|
||||
wcd_spi,
|
||||
&wdsp_spi_ops);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(dev, "%s: register_cmpnt_ops failed, err = %d\n",
|
||||
__func__, ret);
|
||||
goto done;
|
||||
}
|
||||
|
||||
wcd_spi->reg_bytes = DIV_ROUND_UP(wcd_spi_regmap_cfg.reg_bits, 8);
|
||||
wcd_spi->val_bytes = DIV_ROUND_UP(wcd_spi_regmap_cfg.val_bits, 8);
|
||||
|
||||
wcd_spi->regmap = devm_regmap_init(&spi->dev, &wcd_spi_regmap_bus,
|
||||
&spi->dev, &wcd_spi_regmap_cfg);
|
||||
if (IS_ERR(wcd_spi->regmap)) {
|
||||
ret = PTR_ERR(wcd_spi->regmap);
|
||||
dev_err(&spi->dev, "%s: Failed to allocate regmap, err = %d\n",
|
||||
__func__, ret);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (wcd_spi_debugfs_init(spi))
|
||||
dev_err(&spi->dev, "%s: Failed debugfs init\n", __func__);
|
||||
|
||||
spi_message_init(&wcd_spi->msg1);
|
||||
spi_message_add_tail(&wcd_spi->xfer1, &wcd_spi->msg1);
|
||||
|
||||
spi_message_init(&wcd_spi->msg2);
|
||||
spi_message_add_tail(&wcd_spi->xfer2[0], &wcd_spi->msg2);
|
||||
spi_message_add_tail(&wcd_spi->xfer2[1], &wcd_spi->msg2);
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1185,6 +1186,10 @@ static void wcd_spi_component_unbind(struct device *dev,
|
|||
|
||||
wcd_spi->m_dev = NULL;
|
||||
wcd_spi->m_ops = NULL;
|
||||
|
||||
spi_transfer_del(&wcd_spi->xfer1);
|
||||
spi_transfer_del(&wcd_spi->xfer2[0]);
|
||||
spi_transfer_del(&wcd_spi->xfer2[1]);
|
||||
}
|
||||
|
||||
static const struct component_ops wcd_spi_component_ops = {
|
||||
|
|
Loading…
Add table
Reference in a new issue