static int mecha_sharp_panel_unblank(struct msm_lcdc_panel_ops *ops) { struct spi_msg set_brightness = { .cmd = 0x51, .len = 1, .data = (unsigned char *)&last_val, }; LCMDBG("\n"); if (color_enhancement == 0) { mecha_mdp_color_enhancement(mdp_pdata.mdp_dev); color_enhancement = 1; } mutex_lock(&panel_lock); qspi_send_9bit(&set_brightness); lcm_sharp_write_seq(sharp_turn_on_backlight, ARRAY_SIZE(sharp_turn_on_backlight)); mutex_unlock(&panel_lock); return 0; } static int mecha_sharp_panel_blank(struct msm_lcdc_panel_ops *ops) { LCMDBG("\n"); mutex_lock(&panel_lock); lcm_sharp_write_seq(sharp_blank_seq, ARRAY_SIZE(sharp_blank_seq)); hr_msleep(100); mutex_unlock(&panel_lock); return 0; }
static int mecha_sharp_panel_init(struct msm_lcdc_panel_ops *ops) { LCMDBG("\n"); mutex_lock(&panel_lock); mecha_sharp_panel_power(1); if (panel_type == PANEL_SHARP) { lcm_sharp_write_seq(sharp_init_seq, ARRAY_SIZE(sharp_init_seq)); if (panel_rev == 0) lcm_sharp_write_seq(sharp_gamma_seq, ARRAY_SIZE(sharp_gamma_seq)); } else lcm_sharp_write_seq(sharp565_init_seq, ARRAY_SIZE(sharp565_init_seq)); mutex_unlock(&panel_lock); return 0; }
static int spade_sharp_panel_shutdown(struct msm_lcdc_panel_ops *ops) { lcm_sharp_write_seq(sharp_uninit_seq, ARRAY_SIZE(sharp_uninit_seq)); spade_sharp_panel_power(0); return 0; }
/*----------------------------------------------------------------------------*/ int spade_panel_sleep_in(void) { int ret; LCMDBG(", screen=%s\n", screen_on ? "on" : "off"); if (screen_on) return 0; mutex_lock(&panel_lock); switch (panel_type) { case PANEL_AUO: spade_auo_panel_power(1); lcm_auo_write_seq(auo_sleep_in_seq, ARRAY_SIZE(auo_sleep_in_seq)); ret = 0; break; case PANEL_SHARP: spade_sharp_panel_power(1); lcm_sharp_write_seq(sharp_uninit_seq, ARRAY_SIZE(sharp_uninit_seq)); ret = 0; break; default: ret = -EINVAL; break; } mutex_unlock(&panel_lock); return ret; }
static int spade_sharp_panel_init(struct msm_lcdc_panel_ops *ops) { LCMDBG("\n"); mutex_lock(&panel_lock); spade_sharp_panel_power(1); lcm_sharp_write_seq(sharp_init_seq, ARRAY_SIZE(sharp_init_seq)); mutex_unlock(&panel_lock); return 0; }
static void mecha_brightness_set(struct led_classdev *led_cdev, enum led_brightness val) { struct spi_msg set_brightness = { .cmd = 0x51, .len = 1, .data = (unsigned char *)&val, }; uint8_t shrink_br; mutex_lock(&panel_lock); if (val < 30) shrink_br = 8; else if ((val >= 30) && (val <= 143)) shrink_br = 151 * (val - 30) / 113 + 8; else shrink_br = 96 * (val - 143) / 112 + 159; if (panel_type == PANEL_AUO) { qspi_send_16bit(0x1, 0x51); qspi_send_16bit(0x0, 0x00); qspi_send_16bit(0x2, shrink_br); } else { set_brightness.data = (unsigned char *)&shrink_br; qspi_send_9bit(&set_brightness); } last_val = shrink_br; mutex_unlock(&panel_lock); } static int mecha_cabc_switch(int on) { if (test_bit(CABC_STATE, &status) == on) return 1; if (on) { printk(KERN_DEBUG "turn on CABC\n"); set_bit(CABC_STATE, &status); mutex_lock(&panel_lock); if (panel_type == PANEL_AUO) lcm_auo_write_seq(auo_enable_cabc, ARRAY_SIZE(auo_enable_cabc)); else lcm_sharp_write_seq(sharp_enable_cabc, ARRAY_SIZE(sharp_enable_cabc)); mutex_unlock(&panel_lock); } else { printk(KERN_DEBUG "turn off CABC\n"); clear_bit(CABC_STATE, &status); mutex_lock(&panel_lock); if (panel_type == PANEL_AUO) lcm_auo_write_seq(auo_disable_cabc, ARRAY_SIZE(auo_disable_cabc)); else lcm_sharp_write_seq(sharp_disable_cabc, ARRAY_SIZE(sharp_disable_cabc)); mutex_unlock(&panel_lock); } return 1; } static ssize_t auto_backlight_show(struct device *dev, struct device_attribute *attr, char *buf); static ssize_t auto_backlight_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); #define CABC_ATTR(name) __ATTR(name, 0644, auto_backlight_show, auto_backlight_store) static struct device_attribute auto_attr = CABC_ATTR(auto); static ssize_t auto_backlight_show(struct device *dev, struct device_attribute *attr, char *buf) { int i = 0; i += scnprintf(buf + i, PAGE_SIZE - 1, "%d\n", test_bit(CABC_STATE, &status)); return i; }