msm_mmrm: Add support of power prints
In order to improve debugging of mmrm issues, add support of MMRM power print and remove some unnecessary logging or decrease priority to low. Signed-off-by: Mahesh Kumar Sharma <smahesh@codeaurora.org>
This commit is contained in:
@@ -92,7 +92,7 @@ static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
|
|||||||
u32 i, j;
|
u32 i, j;
|
||||||
|
|
||||||
for (i = 0; i < MMRM_VDD_LEVEL_MAX; i++) {
|
for (i = 0; i < MMRM_VDD_LEVEL_MAX; i++) {
|
||||||
d_mpr_h("%s: csid(0x%x) corner(%s) dyn_pwr(%zu) leak_pwr(%zu) \n",
|
d_mpr_p("%s: csid(0x%x) corner(%s) dyn_pwr(%zu) leak_pwr(%zu)\n",
|
||||||
__func__,
|
__func__,
|
||||||
tbl_entry->clk_src_id,
|
tbl_entry->clk_src_id,
|
||||||
cset->corner_tbl[i].name,
|
cset->corner_tbl[i].name,
|
||||||
@@ -100,7 +100,7 @@ static void mmrm_sw_print_client_data(struct mmrm_sw_clk_mgr_info *sinfo,
|
|||||||
tbl_entry->leak_pwr[i]);
|
tbl_entry->leak_pwr[i]);
|
||||||
|
|
||||||
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) {
|
for (j = 0; j < MMRM_VDD_LEVEL_MAX; j++) {
|
||||||
d_mpr_h("%s: csid(0x%x) total_pwr(%zu) cur_ma(%zu)\n",
|
d_mpr_p("%s: csid(0x%x) total_pwr(%zu) cur_ma(%zu)\n",
|
||||||
__func__,
|
__func__,
|
||||||
tbl_entry->clk_src_id,
|
tbl_entry->clk_src_id,
|
||||||
(tbl_entry->dyn_pwr[i] + tbl_entry->leak_pwr[i]),
|
(tbl_entry->dyn_pwr[i] + tbl_entry->leak_pwr[i]),
|
||||||
@@ -190,8 +190,6 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
|
|||||||
u32 c = 0;
|
u32 c = 0;
|
||||||
u32 clk_client_src_id = 0;
|
u32 clk_client_src_id = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
mutex_lock(&sw_clk_mgr->lock);
|
mutex_lock(&sw_clk_mgr->lock);
|
||||||
|
|
||||||
/* check if entry is free in table */
|
/* check if entry is free in table */
|
||||||
@@ -286,7 +284,6 @@ static struct mmrm_client *mmrm_sw_clk_client_register(
|
|||||||
|
|
||||||
exit_found:
|
exit_found:
|
||||||
mutex_unlock(&sw_clk_mgr->lock);
|
mutex_unlock(&sw_clk_mgr->lock);
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return clk_client;
|
return clk_client;
|
||||||
|
|
||||||
err_fail_update_entry:
|
err_fail_update_entry:
|
||||||
@@ -302,7 +299,7 @@ err_nofree_entry:
|
|||||||
err_already_registered:
|
err_already_registered:
|
||||||
mutex_unlock(&sw_clk_mgr->lock);
|
mutex_unlock(&sw_clk_mgr->lock);
|
||||||
|
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,8 +310,6 @@ static int mmrm_sw_clk_client_deregister(struct mmrm_clk_mgr *sw_clk_mgr,
|
|||||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||||
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* validate the client ptr */
|
/* validate the client ptr */
|
||||||
if (!client) {
|
if (!client) {
|
||||||
d_mpr_e("%s: invalid client\n");
|
d_mpr_e("%s: invalid client\n");
|
||||||
@@ -350,11 +345,10 @@ static int mmrm_sw_clk_client_deregister(struct mmrm_clk_mgr *sw_clk_mgr,
|
|||||||
|
|
||||||
mutex_unlock(&sw_clk_mgr->lock);
|
mutex_unlock(&sw_clk_mgr->lock);
|
||||||
|
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_invalid_client:
|
err_invalid_client:
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,7 +502,6 @@ static int mmrm_sw_throttle_low_priority_client(
|
|||||||
u32 now_cur_ma, min_cur_ma;
|
u32 now_cur_ma, min_cur_ma;
|
||||||
long clk_min_level = MMRM_VDD_LEVEL_LOW_SVS;
|
long clk_min_level = MMRM_VDD_LEVEL_LOW_SVS;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
init_completion(&timeout);
|
init_completion(&timeout);
|
||||||
|
|
||||||
for (i = 0; i < sinfo->throttle_clients_data_length ; i++) {
|
for (i = 0; i < sinfo->throttle_clients_data_length ; i++) {
|
||||||
@@ -585,7 +578,6 @@ static int mmrm_sw_throttle_low_priority_client(
|
|||||||
|
|
||||||
/* Clearing the reserve flag */
|
/* Clearing the reserve flag */
|
||||||
tbl_entry_throttle_client->reserve = tbl_entry_throttle_client->reserve & 0;
|
tbl_entry_throttle_client->reserve = tbl_entry_throttle_client->reserve & 0;
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
}
|
}
|
||||||
err_clk_set_fail:
|
err_clk_set_fail:
|
||||||
return rc;
|
return rc;
|
||||||
@@ -803,7 +795,7 @@ err_invalid_client_data:
|
|||||||
err_invalid_clk_val:
|
err_invalid_clk_val:
|
||||||
err_peak_overshoot:
|
err_peak_overshoot:
|
||||||
err_clk_set_fail:
|
err_clk_set_fail:
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -812,8 +804,6 @@ static int mmrm_sw_clk_client_setval_inrange(struct mmrm_clk_mgr *sw_clk_mgr,
|
|||||||
struct mmrm_client_data *client_data,
|
struct mmrm_client_data *client_data,
|
||||||
struct mmrm_client_res_value *val)
|
struct mmrm_client_res_value *val)
|
||||||
{
|
{
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* TBD: add support for set val in range */
|
/* TBD: add support for set val in range */
|
||||||
return mmrm_sw_clk_client_setval(sw_clk_mgr, client, client_data,
|
return mmrm_sw_clk_client_setval(sw_clk_mgr, client, client_data,
|
||||||
val->cur);
|
val->cur);
|
||||||
@@ -827,8 +817,6 @@ static int mmrm_sw_clk_client_getval(struct mmrm_clk_mgr *sw_clk_mgr,
|
|||||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||||
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
struct mmrm_sw_clk_mgr_info *sinfo = &(sw_clk_mgr->data.sw_info);
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* validate input params */
|
/* validate input params */
|
||||||
if (!client) {
|
if (!client) {
|
||||||
d_mpr_e("%s: invalid client\n");
|
d_mpr_e("%s: invalid client\n");
|
||||||
@@ -856,11 +844,10 @@ static int mmrm_sw_clk_client_getval(struct mmrm_clk_mgr *sw_clk_mgr,
|
|||||||
val->cur = tbl_entry->clk_rate;
|
val->cur = tbl_entry->clk_rate;
|
||||||
val->max = tbl_entry->clk_rate;
|
val->max = tbl_entry->clk_rate;
|
||||||
|
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_invalid_client:
|
err_invalid_client:
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -880,8 +867,6 @@ static int mmrm_sw_prepare_table(struct mmrm_clk_platform_resources *cres,
|
|||||||
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
struct mmrm_sw_clk_client_tbl_entry *tbl_entry;
|
||||||
struct nom_clk_src_info *nom_tbl_entry;
|
struct nom_clk_src_info *nom_tbl_entry;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* read all resource entries */
|
/* read all resource entries */
|
||||||
for (c = 0; c < sinfo->tot_clk_clients; c++) {
|
for (c = 0; c < sinfo->tot_clk_clients; c++) {
|
||||||
tbl_entry = &sinfo->clk_client_tbl[c];
|
tbl_entry = &sinfo->clk_client_tbl[c];
|
||||||
@@ -901,7 +886,6 @@ static int mmrm_sw_prepare_table(struct mmrm_clk_platform_resources *cres,
|
|||||||
tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]);
|
tbl_entry->leak_pwr[MMRM_VDD_LEVEL_NOM]);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,8 +899,6 @@ int mmrm_init_sw_clk_mgr(void *driver_data)
|
|||||||
struct mmrm_clk_mgr *sw_clk_mgr = NULL;
|
struct mmrm_clk_mgr *sw_clk_mgr = NULL;
|
||||||
u32 tbl_size = 0;
|
u32 tbl_size = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* mmrm_sw_clk_mgr */
|
/* mmrm_sw_clk_mgr */
|
||||||
sw_clk_mgr = kzalloc(sizeof(*sw_clk_mgr), GFP_KERNEL);
|
sw_clk_mgr = kzalloc(sizeof(*sw_clk_mgr), GFP_KERNEL);
|
||||||
if (!sw_clk_mgr) {
|
if (!sw_clk_mgr) {
|
||||||
@@ -976,7 +958,6 @@ int mmrm_init_sw_clk_mgr(void *driver_data)
|
|||||||
sw_clk_mgr->clk_client_ops = &clk_client_swops;
|
sw_clk_mgr->clk_client_ops = &clk_client_swops;
|
||||||
drv_data->clk_mgr = sw_clk_mgr;
|
drv_data->clk_mgr = sw_clk_mgr;
|
||||||
|
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_fail_prep_tbl:
|
err_fail_prep_tbl:
|
||||||
@@ -985,7 +966,7 @@ err_fail_clk_tbl:
|
|||||||
kfree(sw_clk_mgr);
|
kfree(sw_clk_mgr);
|
||||||
drv_data->clk_mgr = NULL;
|
drv_data->clk_mgr = NULL;
|
||||||
err_fail_sw_clk_mgr:
|
err_fail_sw_clk_mgr:
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,8 +46,6 @@ struct dentry *msm_mmrm_debugfs_init(void)
|
|||||||
struct dentry *dir;
|
struct dentry *dir;
|
||||||
int file_val;
|
int file_val;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* create a directory in debugfs root (/sys/kernel/debug) */
|
/* create a directory in debugfs root (/sys/kernel/debug) */
|
||||||
dir = debugfs_create_dir("msm_mmrm", NULL);
|
dir = debugfs_create_dir("msm_mmrm", NULL);
|
||||||
if (IS_ERR_OR_NULL(dir)) {
|
if (IS_ERR_OR_NULL(dir)) {
|
||||||
@@ -66,17 +64,14 @@ struct dentry *msm_mmrm_debugfs_init(void)
|
|||||||
debugfs_create_u8("allow_multiple_register", 0644, dir, &msm_mmrm_allow_multiple_register);
|
debugfs_create_u8("allow_multiple_register", 0644, dir, &msm_mmrm_allow_multiple_register);
|
||||||
debugfs_create_u8("enable_throttle_feature", 0644, dir, &msm_mmrm_enable_throttle_feature);
|
debugfs_create_u8("enable_throttle_feature", 0644, dir, &msm_mmrm_enable_throttle_feature);
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return dir;
|
return dir;
|
||||||
|
|
||||||
failed_create_dir:
|
failed_create_dir:
|
||||||
d_mpr_h("%s: error exit\n", __func__);
|
d_mpr_e("%s: error\n", __func__);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void msm_mmrm_debugfs_deinit(struct dentry *dir)
|
void msm_mmrm_debugfs_deinit(struct dentry *dir)
|
||||||
{
|
{
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
debugfs_remove_recursive(dir);
|
debugfs_remove_recursive(dir);
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ enum mmrm_msg_prio {
|
|||||||
MMRM_HIGH = 0x000002,
|
MMRM_HIGH = 0x000002,
|
||||||
MMRM_LOW = 0x000004,
|
MMRM_LOW = 0x000004,
|
||||||
MMRM_WARN = 0x000008,
|
MMRM_WARN = 0x000008,
|
||||||
|
MMRM_POWER = 0x000010,
|
||||||
MMRM_PRINTK = 0x010000,
|
MMRM_PRINTK = 0x010000,
|
||||||
MMRM_FTRACE = 0x020000,
|
MMRM_FTRACE = 0x020000,
|
||||||
};
|
};
|
||||||
@@ -45,6 +46,7 @@ extern u8 msm_mmrm_allow_multiple_register;
|
|||||||
#define d_mpr_h(__fmt, ...) dprintk(MMRM_HIGH, __fmt, ##__VA_ARGS__)
|
#define d_mpr_h(__fmt, ...) dprintk(MMRM_HIGH, __fmt, ##__VA_ARGS__)
|
||||||
#define d_mpr_l(__fmt, ...) dprintk(MMRM_LOW, __fmt, ##__VA_ARGS__)
|
#define d_mpr_l(__fmt, ...) dprintk(MMRM_LOW, __fmt, ##__VA_ARGS__)
|
||||||
#define d_mpr_w(__fmt, ...) dprintk(MMRM_WARN, __fmt, ##__VA_ARGS__)
|
#define d_mpr_w(__fmt, ...) dprintk(MMRM_WARN, __fmt, ##__VA_ARGS__)
|
||||||
|
#define d_mpr_p(__fmt, ...) dprintk(MMRM_POWER, __fmt, ##__VA_ARGS__)
|
||||||
|
|
||||||
static inline char *get_debug_level_str(int level)
|
static inline char *get_debug_level_str(int level)
|
||||||
{
|
{
|
||||||
@@ -57,6 +59,8 @@ static inline char *get_debug_level_str(int level)
|
|||||||
return "low ";
|
return "low ";
|
||||||
case MMRM_WARN:
|
case MMRM_WARN:
|
||||||
return "warn";
|
return "warn";
|
||||||
|
case MMRM_POWER:
|
||||||
|
return "power";
|
||||||
default:
|
default:
|
||||||
return "????";
|
return "????";
|
||||||
}
|
}
|
||||||
|
@@ -35,7 +35,7 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
|
|||||||
{
|
{
|
||||||
struct mmrm_client *client = NULL;
|
struct mmrm_client *client = NULL;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* check for null input */
|
/* check for null input */
|
||||||
if (!client_desc) {
|
if (!client_desc) {
|
||||||
@@ -62,7 +62,6 @@ struct mmrm_client *mmrm_client_register(struct mmrm_client_desc *client_desc)
|
|||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return client;
|
return client;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
@@ -75,7 +74,6 @@ int mmrm_client_deregister(struct mmrm_client *client)
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* check for null input */
|
/* check for null input */
|
||||||
if (!client) {
|
if (!client) {
|
||||||
@@ -101,11 +99,10 @@ int mmrm_client_deregister(struct mmrm_client *client)
|
|||||||
__func__, client->client_type);
|
__func__, client->client_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mmrm_client_deregister);
|
EXPORT_SYMBOL(mmrm_client_deregister);
|
||||||
@@ -115,8 +112,6 @@ int mmrm_client_set_value(struct mmrm_client *client,
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* check for null input */
|
/* check for null input */
|
||||||
if (!client || !client_data) {
|
if (!client || !client_data) {
|
||||||
d_mpr_e("%s: invalid input client(%pK) client_data(%pK)\n",
|
d_mpr_e("%s: invalid input client(%pK) client_data(%pK)\n",
|
||||||
@@ -143,11 +138,10 @@ int mmrm_client_set_value(struct mmrm_client *client,
|
|||||||
__func__, client->client_type);
|
__func__, client->client_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mmrm_client_set_value);
|
EXPORT_SYMBOL(mmrm_client_set_value);
|
||||||
@@ -158,8 +152,6 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* check for null input */
|
/* check for null input */
|
||||||
if (!client || !client_data || !val) {
|
if (!client || !client_data || !val) {
|
||||||
d_mpr_e(
|
d_mpr_e(
|
||||||
@@ -187,11 +179,10 @@ int mmrm_client_set_value_in_range(struct mmrm_client *client,
|
|||||||
__func__, client->client_type);
|
__func__, client->client_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mmrm_client_set_value_in_range);
|
EXPORT_SYMBOL(mmrm_client_set_value_in_range);
|
||||||
@@ -201,8 +192,6 @@ int mmrm_client_get_value(struct mmrm_client *client,
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
/* check for null input */
|
/* check for null input */
|
||||||
if (!client || !val) {
|
if (!client || !val) {
|
||||||
d_mpr_e("%s: invalid input client(%pK) val(%pK)\n",
|
d_mpr_e("%s: invalid input client(%pK) val(%pK)\n",
|
||||||
@@ -229,11 +218,10 @@ int mmrm_client_get_value(struct mmrm_client *client,
|
|||||||
__func__, client->client_type);
|
__func__, client->client_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mmrm_client_get_value);
|
EXPORT_SYMBOL(mmrm_client_get_value);
|
||||||
@@ -242,8 +230,6 @@ static int msm_mmrm_probe_init(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
|
drv_data = kzalloc(sizeof(*drv_data), GFP_KERNEL);
|
||||||
if (!drv_data) {
|
if (!drv_data) {
|
||||||
d_mpr_e("%s: unable to allocate memory for mmrm driver\n",
|
d_mpr_e("%s: unable to allocate memory for mmrm driver\n",
|
||||||
@@ -280,7 +266,6 @@ static int msm_mmrm_probe_init(struct platform_device *pdev)
|
|||||||
goto err_mmrm_init;
|
goto err_mmrm_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_mmrm_init:
|
err_mmrm_init:
|
||||||
@@ -290,7 +275,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_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,18 +283,18 @@ static int msm_mmrm_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
int rc = -EINVAL;
|
int rc = -EINVAL;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
d_mpr_h("%s\n", __func__);
|
||||||
|
|
||||||
VERIFY_PDEV(pdev)
|
VERIFY_PDEV(pdev)
|
||||||
|
|
||||||
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-mmrm"))
|
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-mmrm"))
|
||||||
return msm_mmrm_probe_init(pdev);
|
return msm_mmrm_probe_init(pdev);
|
||||||
|
|
||||||
d_mpr_h("%s: exiting: no compatible device node\n", __func__);
|
d_mpr_e("%s: no compatible device node\n", __func__);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,11 +316,10 @@ static int msm_mmrm_remove(struct platform_device *pdev)
|
|||||||
dev_set_drvdata(&pdev->dev, NULL);
|
dev_set_drvdata(&pdev->dev, NULL);
|
||||||
RESET_DRV_DATA(drv_data);
|
RESET_DRV_DATA(drv_data);
|
||||||
|
|
||||||
d_mpr_h("%s: exiting with success\n", __func__);
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,8 +343,6 @@ static int __init msm_mmrm_init(void)
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
|
|
||||||
rc = platform_driver_register(&msm_mmrm_driver);
|
rc = platform_driver_register(&msm_mmrm_driver);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
d_mpr_e("%s: failed to register platform driver\n",
|
d_mpr_e("%s: failed to register platform driver\n",
|
||||||
@@ -368,19 +350,17 @@ static int __init msm_mmrm_init(void)
|
|||||||
goto err_platform_drv_reg;
|
goto err_platform_drv_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
d_mpr_h("%s: success\n", __func__);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
err_platform_drv_reg:
|
err_platform_drv_reg:
|
||||||
d_mpr_e("%s: error exit\n", __func__);
|
d_mpr_e("%s: error = %d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit msm_mmrm_exit(void)
|
static void __exit msm_mmrm_exit(void)
|
||||||
{
|
{
|
||||||
d_mpr_h("%s: entering\n", __func__);
|
|
||||||
platform_driver_unregister(&msm_mmrm_driver);
|
platform_driver_unregister(&msm_mmrm_driver);
|
||||||
d_mpr_h("%s: exiting\n", __func__);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(msm_mmrm_init);
|
module_init(msm_mmrm_init);
|
||||||
|
Reference in New Issue
Block a user