aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/samsung/lcdfreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/samsung/lcdfreq.c')
-rw-r--r--drivers/video/samsung/lcdfreq.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/video/samsung/lcdfreq.c b/drivers/video/samsung/lcdfreq.c
index 6895bf8..8c25c22 100644
--- a/drivers/video/samsung/lcdfreq.c
+++ b/drivers/video/samsung/lcdfreq.c
@@ -50,12 +50,7 @@ struct lcdfreq_info {
struct notifier_block pm_noti;
struct notifier_block reboot_noti;
- unsigned long time_stamp[LCDFREQ_LEVEL_END];
- unsigned long previous_time;
- unsigned long current_time;
-
struct delayed_work work;
- u32 count;
struct early_suspend early_suspend;
};
@@ -108,7 +103,7 @@ int set_div(struct s3cfb_global *ctrl, u32 div)
} while (count);
/* } while (time_before(jiffies, timeout)); */
- dev_err(ctrl->dev, "%s fail\n", __func__);
+ dev_err(ctrl->dev, "%s fail, div=%d\n", __func__, div);
return -EINVAL;
}
@@ -121,11 +116,12 @@ static int set_lcdfreq_div(struct device *dev, enum lcdfreq_level_idx level)
struct lcdfreq_info *lcdfreq = fbdev->data;
- u32 div = 0, ret = 0;
+ u32 div, ret;
mutex_lock(&lcdfreq->lock);
if (unlikely(fbdev->system_state == POWER_OFF || !lcdfreq->enable)) {
+ dev_err(dev, "%s reject. %d, %d\n", __func__, fbdev->system_state, lcdfreq->enable);
ret = -EINVAL;
goto exit;
}
@@ -135,7 +131,7 @@ static int set_lcdfreq_div(struct device *dev, enum lcdfreq_level_idx level)
ret = set_div(fbdev, div);
if (ret) {
- dev_info(dev, "fail to change lcd freq\n");
+ dev_err(dev, "fail to change lcd freq\n");
goto exit;
}
@@ -193,7 +189,6 @@ static int lcdfreq_lock_free(struct device *dev)
mutex_lock(&lcdfreq->lock);
atomic_dec(&lcdfreq->usage);
mutex_unlock(&lcdfreq->lock);
- lcdfreq->count = 0;
cancel_delayed_work(&lcdfreq->work);
}
@@ -229,7 +224,7 @@ int get_divider(struct fb_info *fb)
for (i = 0; i < LCDFREQ_LEVEL_END; i++) {
lcdfreq->table[i].cmu_clkdiv--;
- dev_info(fb->dev, "%dHz divider is %d\n",
+ dev_info(fb->dev, "%dHZ divider is %d\n",
lcdfreq->table[i].hz, lcdfreq->table[i].cmu_clkdiv);
}
@@ -256,6 +251,11 @@ static ssize_t level_show(struct device *dev,
struct s3cfb_global *fbdev = get_fimd_global(win->id);
struct lcdfreq_info *lcdfreq = fbdev->data;
+ if (unlikely(fbdev->system_state == POWER_OFF || !lcdfreq->enable)) {
+ dev_err(dev, "%s reject. %d, %d\n", __func__, fbdev->system_state, lcdfreq->enable);
+ return -EINVAL;
+ }
+
return sprintf(buf, "%dHZ, div=%d\n", lcdfreq->table[lcdfreq->level].hz, get_div(fbdev));
}
@@ -298,12 +298,10 @@ static ssize_t usage_show(struct device *dev,
static DEVICE_ATTR(level, S_IRUGO|S_IWUSR, level_show, level_store);
static DEVICE_ATTR(usage, S_IRUGO, usage_show, NULL);
-static DEVICE_ATTR(time_stamp, S_IRUGO, NULL, NULL);
static struct attribute *lcdfreq_attributes[] = {
&dev_attr_level.attr,
&dev_attr_usage.attr,
- &dev_attr_time_stamp.attr,
NULL,
};
@@ -390,17 +388,13 @@ static void lcdfreq_status_work(struct work_struct *work)
struct lcdfreq_info *lcdfreq =
container_of(work, struct lcdfreq_info, work.work);
-
u32 hz = lcdfreq->table[lcdfreq->level].hz;
cancel_delayed_work(&lcdfreq->work);
- if (!(lcdfreq->count % 2))
- dev_info(lcdfreq->dev, "\thz=%d, usage=%d\n", hz, atomic_read(&lcdfreq->usage));
-
- schedule_delayed_work(&lcdfreq->work, HZ*60);
+ dev_info(lcdfreq->dev, "\tHZ=%d, usage=%d\n", hz, atomic_read(&lcdfreq->usage));
- lcdfreq->count++;
+ schedule_delayed_work(&lcdfreq->work, HZ*120);
}
int lcdfreq_init(struct fb_info *fb)
@@ -425,7 +419,6 @@ int lcdfreq_init(struct fb_info *fb)
lcdfreq->dev = fb->dev;
lcdfreq->level = LEVEL_NORMAL;
- lcdfreq->previous_time = lcdfreq->current_time = jiffies;
vclk = (lcd->freq *
(var->left_margin + var->right_margin