mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
Merge "soc: add support to read swr physical addr from dt"
This commit is contained in:
commit
4aa9a95519
2 changed files with 46 additions and 19 deletions
|
|
@ -83,6 +83,8 @@
|
|||
|
||||
#define SWR_OVERFLOW_RETRY_COUNT 30
|
||||
|
||||
#define SWRM_PHY_ADDR_MAP_COUNT 2
|
||||
|
||||
/* pm runtime auto suspend timer in msecs */
|
||||
static int auto_suspend_timer = 500;
|
||||
module_param(auto_suspend_timer, int, 0664);
|
||||
|
|
@ -131,21 +133,12 @@ static void swr_master_write(struct swr_mstr_ctrl *swrm, u16 reg_addr, u32 val);
|
|||
static int swrm_runtime_resume(struct device *dev);
|
||||
static void swrm_wait_for_fifo_avail(struct swr_mstr_ctrl *swrm, int swrm_rd_wr);
|
||||
|
||||
static u64 swrm_phy_dev[] = {
|
||||
0,
|
||||
0xd01170223,
|
||||
0x858350223,
|
||||
0x858350222,
|
||||
0x858350221,
|
||||
0x858350220,
|
||||
};
|
||||
|
||||
static u8 swrm_get_device_id(struct swr_mstr_ctrl *swrm, u8 devnum)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < (swrm->num_dev + 1); i++) {
|
||||
if (swrm->logical_dev[devnum] == swrm_phy_dev[i])
|
||||
if (swrm->logical_dev[devnum] == swrm->phy_dev[i])
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1380,6 +1373,7 @@ static void swrm_get_device_frame_shape(struct swr_mstr_ctrl *swrm,
|
|||
struct port_params *pp_port;
|
||||
|
||||
if ((swrm->master_id == MASTER_ID_TX) &&
|
||||
(swrm->use_custom_phy_addr) &&
|
||||
((swrm->bus_clk == SWR_CLK_RATE_9P6MHZ) ||
|
||||
(swrm->bus_clk == SWR_CLK_RATE_0P6MHZ) ||
|
||||
(swrm->bus_clk == SWR_CLK_RATE_4P8MHZ))) {
|
||||
|
|
@ -2599,7 +2593,6 @@ static int swrm_probe(struct platform_device *pdev)
|
|||
int ret = 0;
|
||||
struct clk *lpass_core_hw_vote = NULL;
|
||||
struct clk *lpass_core_audio = NULL;
|
||||
u32 is_wcd937x = 0;
|
||||
u32 swrm_hw_ver = 0;
|
||||
|
||||
/* Allocate soundwire master driver structure */
|
||||
|
|
@ -2641,13 +2634,6 @@ static int swrm_probe(struct platform_device *pdev)
|
|||
dev_err(&pdev->dev, "%s: failed to get master id\n", __func__);
|
||||
goto err_pdata_fail;
|
||||
}
|
||||
/* update the physical device address if wcd937x. */
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "qcom,is_wcd937x",
|
||||
&is_wcd937x);
|
||||
if (ret)
|
||||
dev_dbg(&pdev->dev, "%s: failed to get wcd info\n", __func__);
|
||||
else if (is_wcd937x)
|
||||
swrm_phy_dev[1] = 0xa01170223;
|
||||
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "qcom,dynamic-port-map-supported",
|
||||
&swrm->dynamic_port_map_supported);
|
||||
|
|
@ -2724,6 +2710,45 @@ static int swrm_probe(struct platform_device *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
/* Parse soundwire slave physical address(es) */
|
||||
swrm->phy_dev[0] = 0;
|
||||
swrm->use_custom_phy_addr = false;
|
||||
if (of_find_property(pdev->dev.of_node, "qcom,swr-phy-dev-addr",
|
||||
&map_size)) {
|
||||
map_length = map_size / (SWRM_PHY_ADDR_MAP_COUNT * sizeof(u32));
|
||||
if (map_length > SWRM_NUM_AUTO_ENUM_SLAVES) {
|
||||
map_length = SWRM_NUM_AUTO_ENUM_SLAVES;
|
||||
map_size = map_length *
|
||||
(SWRM_PHY_ADDR_MAP_COUNT * sizeof(u32));
|
||||
}
|
||||
|
||||
temp = devm_kzalloc(&pdev->dev, map_size, GFP_KERNEL);
|
||||
if (!temp) {
|
||||
ret = -ENOMEM;
|
||||
goto err_pdata_fail;
|
||||
}
|
||||
ret = of_property_read_u32_array(pdev->dev.of_node,
|
||||
"qcom,swr-phy-dev-addr", temp,
|
||||
SWRM_PHY_ADDR_MAP_COUNT * map_length);
|
||||
if (ret) {
|
||||
dev_dbg(swrm->dev,
|
||||
"%s: Failed to read swr-phy-dev-addr\n",
|
||||
__func__);
|
||||
} else {
|
||||
for (i = 0; i < map_length; i++) {
|
||||
swrm->phy_dev[i + 1] =
|
||||
temp[SWRM_PHY_ADDR_MAP_COUNT * i];
|
||||
swrm->phy_dev[i + 1] <<= 32;
|
||||
swrm->phy_dev[i + 1] |=
|
||||
temp[SWRM_PHY_ADDR_MAP_COUNT * i + 1];
|
||||
}
|
||||
swrm->use_custom_phy_addr = true;
|
||||
}
|
||||
devm_kfree(&pdev->dev, temp);
|
||||
} else
|
||||
dev_dbg(swrm->dev, "%s: Failed to find swr-phy-dev-addr\n",
|
||||
__func__);
|
||||
|
||||
/* Parse soundwire port mapping */
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "qcom,swr-num-ports",
|
||||
&num_ports);
|
||||
|
|
|
|||
|
|
@ -193,7 +193,9 @@ struct swr_mstr_ctrl {
|
|||
u32 rd_fifo_depth;
|
||||
u32 wr_fifo_depth;
|
||||
bool enable_slave_irq;
|
||||
u64 logical_dev[SWRM_NUM_AUTO_ENUM_SLAVES];
|
||||
u64 logical_dev[SWRM_NUM_AUTO_ENUM_SLAVES + 1];
|
||||
u64 phy_dev[SWRM_NUM_AUTO_ENUM_SLAVES + 1];
|
||||
bool use_custom_phy_addr;
|
||||
u32 is_always_on;
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_swrm_dent;
|
||||
|
|
|
|||
Loading…
Reference in a new issue