diff options
author | mbao <mbao@codeaurora.org> | 2021-04-22 09:36:04 -0700 |
---|---|---|
committer | mbao <mbao@codeaurora.org> | 2021-05-27 19:10:04 -0700 |
commit | 0b89bee6d082a08cec8edec121259490aecdaf7b (patch) | |
tree | a0e24e71408513ff839f616c14df7b99aa8779af | |
parent | caa0d033a2dbce42bb047686d01f585b152dc9d2 (diff) | |
download | mmrm-0b89bee6d082a08cec8edec121259490aecdaf7b.tar.gz |
msm-mmrm: check if mmrm driver has initialized properly, avoid bootup crashes
Change-Id: I973a52eca4ee4ce8283d0ad1b6576ec7f527d037
-rw-r--r-- | driver/src/msm_mmrm.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/driver/src/msm_mmrm.c b/driver/src/msm_mmrm.c index 1d2a86b..5ce639f 100644 --- a/driver/src/msm_mmrm.c +++ b/driver/src/msm_mmrm.c @@ -43,6 +43,11 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc) 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 */ if (client_desc->client_type == MMRM_CLIENT_CLOCK) { client = mmrm_clk_client_register( @@ -61,7 +66,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc) return client; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return client; } EXPORT_SYMBOL(mmrm_client_register); @@ -79,6 +84,11 @@ int mmrm_client_deregister(struct mmrm_client *client) 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 */ if (client->client_type == MMRM_CLIENT_CLOCK) { rc = mmrm_clk_client_deregister(drv_data->clk_mgr, client); @@ -95,7 +105,7 @@ int mmrm_client_deregister(struct mmrm_client *client) return rc; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } EXPORT_SYMBOL(mmrm_client_deregister); @@ -115,6 +125,11 @@ int mmrm_client_set_value(struct mmrm_client *client, 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 */ if (client->client_type == MMRM_CLIENT_CLOCK) { 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; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } EXPORT_SYMBOL(mmrm_client_set_value); @@ -154,6 +169,11 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client, 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 */ if (client->client_type == MMRM_CLIENT_CLOCK) { 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; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } EXPORT_SYMBOL(mmrm_client_set_value_in_range); @@ -191,6 +211,11 @@ int mmrm_client_get_value(struct mmrm_client *client, 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 */ if (client->client_type == MMRM_CLIENT_CLOCK) { rc = mmrm_clk_client_getval(drv_data->clk_mgr, @@ -208,7 +233,7 @@ int mmrm_client_get_value(struct mmrm_client *client, return rc; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } EXPORT_SYMBOL(mmrm_client_get_value); @@ -265,7 +290,7 @@ err_read_pltfrm_rsc: err_get_drv_data: RESET_DRV_DATA(drv_data); err_no_mem: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } @@ -284,7 +309,7 @@ static int msm_mmrm_probe(struct platform_device *pdev) return rc; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } @@ -310,7 +335,7 @@ static int msm_mmrm_remove(struct platform_device *pdev) return rc; err_exit: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } @@ -347,7 +372,7 @@ static int __init msm_mmrm_init(void) return rc; err_platform_drv_reg: - d_mpr_h("%s: error exit\n", __func__); + d_mpr_e("%s: error exit\n", __func__); return rc; } |