From 583d14cdd3ced0f3cba285ac7911420e45bd304a Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Tue, 4 Feb 2014 20:30:59 +0400 Subject: [PATCH] [FIX] loading swap_energy.ko ignoring unsupported LCD Change-Id: I2d68d5991c47d90977b7cda3d555b3a3fc620d0a Signed-off-by: Vyacheslav Cherkashin --- energy/debugfs_energy.c | 14 +++++++------- energy/debugfs_energy.h | 7 +++++++ energy/energy.c | 8 +++----- energy/lcd/lcd_base.c | 33 +++++++++++++++++++++++++++++++-- start.sh | 18 +++++++++++------- 5 files changed, 59 insertions(+), 21 deletions(-) diff --git a/energy/debugfs_energy.c b/energy/debugfs_energy.c index 3063c4a..e9fd342 100644 --- a/energy/debugfs_energy.c +++ b/energy/debugfs_energy.c @@ -201,9 +201,13 @@ enum { */ static struct dentry *energy_dir = NULL; +struct dentry *get_energy_dir(void) +{ + return energy_dir; +} + void exit_debugfs_energy(void) { - exit_lcd_debugfs(); if (energy_dir) debugfs_remove_recursive(energy_dir); @@ -212,7 +216,7 @@ void exit_debugfs_energy(void) int init_debugfs_energy(void) { - int i, ret = -ENOMEM; + int i; struct dentry *swap_dir, *dentry; swap_dir = get_swap_debugfs_dir(); @@ -229,13 +233,9 @@ int init_debugfs_energy(void) goto fail; } - ret = init_lcd_debugfs(energy_dir); - if (ret) - goto fail; - return 0; fail: exit_debugfs_energy(); - return ret; + return -ENOMEM; } diff --git a/energy/debugfs_energy.h b/energy/debugfs_energy.h index cfc0798..d404e76 100644 --- a/energy/debugfs_energy.h +++ b/energy/debugfs_energy.h @@ -25,7 +25,14 @@ * */ + +struct dentry; + + int init_debugfs_energy(void); void exit_debugfs_energy(void); +struct dentry *get_energy_dir(void); + + #endif /* _DEBUGFS_ENERGY_H */ diff --git a/energy/energy.c b/energy/energy.c index fbc2a8a..238762d 100644 --- a/energy/energy.c +++ b/energy/energy.c @@ -585,12 +585,10 @@ int energy_init(void) } ret = lcd_init(); - if (ret) { - printk("Cannot init LCD\n"); - uninit_feature(); - } + if (ret) + printk("Cannot init LCD, ret=%d\n", ret); - return ret; + return 0; } void energy_uninit(void) diff --git a/energy/lcd/lcd_base.c b/energy/lcd/lcd_base.c index 0c9938a..71a782f 100644 --- a/energy/lcd/lcd_base.c +++ b/energy/lcd/lcd_base.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "lcd_base.h" #include "lcd_debugfs.h" @@ -326,7 +327,7 @@ enum ST_LCD_OPS { static DEFINE_MUTEX(lcd_lock); static enum ST_LCD_OPS stat_lcd_ops[lcd_ops_cnt]; -void lcd_exit(void) +static void do_lcd_exit(void) { int i; struct lcd_ops *ops; @@ -348,7 +349,13 @@ void lcd_exit(void) mutex_unlock(&lcd_lock); } -int lcd_init(void) +void lcd_exit(void) +{ + do_lcd_exit(); + exit_lcd_debugfs(); +} + +static int do_lcd_init(void) { int i, ret, count = 0; struct lcd_ops *ops; @@ -380,7 +387,29 @@ int lcd_init(void) return count ? 0 : -EPERM; } +int lcd_init(void) +{ + int ret; + struct dentry *energy_dir; + + energy_dir = get_energy_dir(); + if (energy_dir == NULL) { + printk("Cannot energy_dir\n"); + return -ENOENT; + } + + ret = init_lcd_debugfs(energy_dir); + if (ret) + return ret; + ret = do_lcd_init(); + if (ret) { + printk("LCD is not supported\n"); + exit_lcd_debugfs(); + } + + return ret; +} diff --git a/start.sh b/start.sh index a1ed5be..5d0e6c9 100755 --- a/start.sh +++ b/start.sh @@ -41,10 +41,14 @@ echo 69998585 > /sys/kernel/debug/swap/energy/flash_read/denominator && echo 131443 > /sys/kernel/debug/swap/energy/flash_write/numerator && echo 31129333 > /sys/kernel/debug/swap/energy/flash_write/denominator && -# lcd max (white max - black max) / 2: 255 / 1 -echo 255 > `ls /sys/kernel/debug/swap/energy/lcd/*/max_num` && -echo 1000000 > `ls /sys/kernel/debug/swap/energy/lcd/*/max_denom` && - -# lcd min (white min - black min) / 2: 179 / 1 -echo 179 > `ls /sys/kernel/debug/swap/energy/lcd/*/min_num` && -echo 1000000 > `ls /sys/kernel/debug/swap/energy/lcd/*/min_denom` +# LCD: +if [ -d /sys/kernel/debug/swap/energy/lcd/ ] +then + # lcd max (white max - black max) / 2: 255 / 1 + echo 255 > `ls /sys/kernel/debug/swap/energy/lcd/*/max_num` && + echo 1000000 > `ls /sys/kernel/debug/swap/energy/lcd/*/max_denom` && + + # lcd min (white min - black min) / 2: 179 / 1 + echo 179 > `ls /sys/kernel/debug/swap/energy/lcd/*/min_num` && + echo 1000000 > `ls /sys/kernel/debug/swap/energy/lcd/*/min_denom` +fi -- 2.7.4