msm-mmrm: check if mmrm driver has initialized properly, avoid bootup crashes

Change-Id: I973a52eca4ee4ce8283d0ad1b6576ec7f527d037
This commit is contained in:
mbao
2021-04-22 09:36:04 -07:00
parent caa0d033a2
commit 0b89bee6d0

View File

@@ -43,6 +43,11 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
goto err_exit; goto err_exit;
} }
if (drv_data == (void *) -EPROBE_DEFER) {
d_mpr_e("%s: mmrm probe_init not done\n", __func__);
goto err_exit;
}
/* check for client type, then register */ /* check for client type, then register */
if (client_desc->client_type == MMRM_CLIENT_CLOCK) { if (client_desc->client_type == MMRM_CLIENT_CLOCK) {
client = mmrm_clk_client_register( client = mmrm_clk_client_register(
@@ -61,7 +66,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
return client; return client;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return client; return client;
} }
EXPORT_SYMBOL(mmrm_client_register); EXPORT_SYMBOL(mmrm_client_register);
@@ -79,6 +84,11 @@ int mmrm_client_deregister(struct mmrm_client *client)
goto err_exit; goto err_exit;
} }
if (drv_data == (void *) -EPROBE_DEFER) {
d_mpr_e("%s: mmrm probe_init not done\n", __func__);
goto err_exit;
}
/* check for client type, then deregister */ /* check for client type, then deregister */
if (client->client_type == MMRM_CLIENT_CLOCK) { if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_deregister(drv_data->clk_mgr, client); rc = mmrm_clk_client_deregister(drv_data->clk_mgr, client);
@@ -95,7 +105,7 @@ int mmrm_client_deregister(struct mmrm_client *client)
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_deregister); EXPORT_SYMBOL(mmrm_client_deregister);
@@ -115,6 +125,11 @@ int mmrm_client_set_value(struct mmrm_client *client,
goto err_exit; goto err_exit;
} }
if (drv_data == (void *) -EPROBE_DEFER) {
d_mpr_e("%s: mmrm probe_init not done\n", __func__);
goto err_exit;
}
/* check for client type, then set value */ /* check for client type, then set value */
if (client->client_type == MMRM_CLIENT_CLOCK) { if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_setval(drv_data->clk_mgr, client, rc = mmrm_clk_client_setval(drv_data->clk_mgr, client,
@@ -132,7 +147,7 @@ int mmrm_client_set_value(struct mmrm_client *client,
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_set_value); EXPORT_SYMBOL(mmrm_client_set_value);
@@ -154,6 +169,11 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
goto err_exit; goto err_exit;
} }
if (drv_data == (void *) -EPROBE_DEFER) {
d_mpr_e("%s: mmrm probe_init not done\n", __func__);
goto err_exit;
}
/* check for client type, then set value */ /* check for client type, then set value */
if (client->client_type == MMRM_CLIENT_CLOCK) { if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_setval_inrange(drv_data->clk_mgr, rc = mmrm_clk_client_setval_inrange(drv_data->clk_mgr,
@@ -171,7 +191,7 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_set_value_in_range); EXPORT_SYMBOL(mmrm_client_set_value_in_range);
@@ -191,6 +211,11 @@ int mmrm_client_get_value(struct mmrm_client *client,
goto err_exit; goto err_exit;
} }
if (drv_data == (void *) -EPROBE_DEFER) {
d_mpr_e("%s: mmrm probe_init not done\n", __func__);
goto err_exit;
}
/* check for client type, then get value */ /* check for client type, then get value */
if (client->client_type == MMRM_CLIENT_CLOCK) { if (client->client_type == MMRM_CLIENT_CLOCK) {
rc = mmrm_clk_client_getval(drv_data->clk_mgr, rc = mmrm_clk_client_getval(drv_data->clk_mgr,
@@ -208,7 +233,7 @@ int mmrm_client_get_value(struct mmrm_client *client,
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
EXPORT_SYMBOL(mmrm_client_get_value); EXPORT_SYMBOL(mmrm_client_get_value);
@@ -265,7 +290,7 @@ err_read_pltfrm_rsc:
err_get_drv_data: err_get_drv_data:
RESET_DRV_DATA(drv_data); RESET_DRV_DATA(drv_data);
err_no_mem: err_no_mem:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
@@ -284,7 +309,7 @@ static int msm_mmrm_probe(struct platform_device *pdev)
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
@@ -310,7 +335,7 @@ static int msm_mmrm_remove(struct platform_device *pdev)
return rc; return rc;
err_exit: err_exit:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }
@@ -347,7 +372,7 @@ static int __init msm_mmrm_init(void)
return rc; return rc;
err_platform_drv_reg: err_platform_drv_reg:
d_mpr_h("%s: error exit\n", __func__); d_mpr_e("%s: error exit\n", __func__);
return rc; return rc;
} }