static ssize_t scenario_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value; int ret; ret = strict_strtoul(buf, 0, (unsigned long *)&value); dev_info(dev, "%s :: value=%d\n", __func__, value); if (!SCENARIO_IS_VALID(value)) value = UI_MODE; #if defined(CONFIG_FB_MDNIE_PWM) if (value >= SCENARIO_MAX) value = UI_MODE; #endif mutex_lock(&mdnie->lock); mdnie->scenario = value; mutex_unlock(&mdnie->lock); set_mdnie_value(mdnie, 0); #if defined(CONFIG_FB_MDNIE_PWM) if ((mdnie->enable) && (mdnie->bd_enable)) update_brightness(mdnie); #endif return count; }
static int s6d6aa1_set_brightness(struct backlight_device *bd) { int ret = 0; int brightness = bd->props.brightness; struct lcd_info *lcd = bl_get_data(bd); /* dev_info(&lcd->ld->dev, "%s: brightness=%d\n", __func__, brightness); */ if (brightness < MIN_BRIGHTNESS || brightness > bd->props.max_brightness) { dev_err(&bd->dev, "lcd brightness should be %d to %d. now %d\n", MIN_BRIGHTNESS, MAX_BRIGHTNESS, brightness); return -EINVAL; } if (lcd->ldi_enable) { ret = update_brightness(lcd, 0); if (ret < 0) { dev_err(lcd->dev, "err in %s\n", __func__); return -EINVAL; } } return ret; }
static ssize_t auto_brightness_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct mdnie_info *mdnie = dev_get_drvdata(dev); int value; int rc; rc = strict_strtoul(buf, (unsigned int)0, (unsigned long *)&value); if (rc < 0) return rc; else { if (mdnie->auto_brightness != value) { dev_info(dev, "%s - %d -> %d\n", __func__, mdnie->auto_brightness, value); mutex_lock(&mdnie->dev_lock); mdnie->auto_brightness = value; #if defined(CONFIG_FB_S5P_S6C1372) mutex_lock(&mdnie->lock); mdnie->cabc = (value) ? CABC_ON : CABC_OFF; mutex_unlock(&mdnie->lock); #endif if (mdnie->auto_brightness >= 5) mdnie->power_lut_idx = LUT_LEVEL_OUTDOOR_2; else if (mdnie->auto_brightness == 4) mdnie->power_lut_idx = LUT_LEVEL_OUTDOOR_1; else mdnie->power_lut_idx = LUT_LEVEL_MANUAL_AND_INDOOR; mutex_unlock(&mdnie->dev_lock); set_mdnie_value(mdnie, 0); if (mdnie->bd_enable) update_brightness(mdnie); } } return size; }
static ssize_t cabc_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value; int ret; ret = strict_strtoul(buf, 0, (unsigned long *)&value); dev_info(dev, "%s :: value=%d\n", __func__, value); if (value >= CABC_MAX) value = CABC_OFF; value = (value) ? CABC_ON : CABC_OFF; mutex_lock(&mdnie->lock); mdnie->cabc = value; mutex_unlock(&mdnie->lock); set_mdnie_value(mdnie, 0); if ((mdnie->enable) && (mdnie->bd_enable)) update_brightness(mdnie); return count; }
static int s6d6aa1_power_on(struct lcd_info *lcd) { int ret = 0; struct lcd_platform_data *pd = NULL; pd = lcd->lcd_pd; /* dev_info(&lcd->ld->dev, "%s\n", __func__); */ ret = s6d6aa1_ldi_init(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to initialize ldi.\n"); goto err; } ret = s6d6aa1_ldi_enable(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to enable ldi.\n"); goto err; } lcd->ldi_enable = 1; update_brightness(lcd, 1); err: return ret; }
static int ltn101al03_power_on(struct omap_dss_device *dssdev) { struct ltn101al03 *lcd = dev_get_drvdata(&dssdev->dev); int ret = 0; pr_info("(%s): called (@%d)\n", __func__, __LINE__); if (lcd->enabled != 1) { if (lcd->pdata->set_power) lcd->pdata->set_power(true); mdelay(10); ret = omapdss_dpi_display_enable(dssdev); if (ret) { dev_err(&dssdev->dev, "failed to enable DPI\n"); goto err; } /* reset ltn101al03 bridge */ if (!dssdev->skip_init) { ltn101al03_hw_reset(dssdev); msleep(100); update_brightness(dssdev); } lcd->enabled = 1; } if (dssdev->skip_init) dssdev->skip_init = false; err: return ret; }
static int ltn101al03_set_brightness(struct backlight_device *bd) { struct omap_dss_device *dssdev = dev_get_drvdata(&bd->dev); struct ltn101al03 *lcd = dev_get_drvdata(&dssdev->dev); int bl = bd->props.brightness; int ret = 0; if (bl < BRIGHTNESS_OFF) bl = BRIGHTNESS_OFF; else if (bl > BRIGHTNESS_MAX) bl = BRIGHTNESS_MAX; lcd->bl = get_gamma_value_from_bl(bl); mutex_lock(&lcd->lock); if ((dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) && (lcd->enabled) && (lcd->current_brightness != lcd->bl)) { update_brightness(dssdev); dev_info(&bd->dev, " brightness=%d, bl=%d\n", bd->props.brightness, lcd->bl); } mutex_unlock(&lcd->lock); return ret; }
static void mdnie_late_resume(struct early_suspend *h) { struct mdnie_info *mdnie = container_of(h, struct mdnie_info, early_suspend); #if defined(CONFIG_FB_MDNIE_PWM) struct lcd_platform_data *pd = mdnie->lcd_pd; #endif dev_info(mdnie->dev, "+%s\n", __func__); #if defined(CONFIG_FB_MDNIE_PWM) if (mdnie->enable) mdnie_pwm_control(mdnie, 0); if (pd && pd->power_on) pd->power_on(NULL, 1); if (mdnie->enable) { dev_info(&mdnie->bd->dev, "brightness=%d\n", mdnie->bd->props.brightness); update_brightness(mdnie); } mdnie->bd_enable = TRUE; #endif mdnie_update(mdnie); dev_info(mdnie->dev, "-%s\n", __func__); return; }
void mdnie_late_resume(struct early_suspend *h) { struct mdnie_info *mdnie = container_of(h, struct mdnie_info, early_suspend); struct lcd_platform_data *pd = NULL; dev_info(mdnie->dev, "+%s\n", __func__); pd = mdnie->lcd_pd; if (mdnie->enable) mdnie_pwm_control(mdnie, 0); if (!pd) dev_info(&mdnie->bd->dev, "platform data is NULL.\n"); if (!pd->power_on) dev_info(&mdnie->bd->dev, "power_on is NULL.\n"); else pd->power_on(NULL, 1); if (mdnie->enable) { dev_info(&mdnie->bd->dev, "brightness=%d\n", mdnie->bd->props.brightness); update_brightness(mdnie); } mdnie->bd_enable = TRUE; dev_info(mdnie->dev, "-%s\n", __func__); return ; }
static int s5p_bl_update_status(struct backlight_device *bd) { struct s5p_lcd *lcd = bl_get_data(bd); int bl = bd->props.brightness; pr_debug("\nupdate status brightness %d\n", bd->props.brightness); if (bl < 0 || bl > 255) return -EINVAL; mutex_lock(&lcd->lock); lcd->bl = bl; if (lcd->ldi_enable) { pr_debug("\n bl :%d\n", bl); printk(KERN_INFO "bl : [%d] \n", bl); update_brightness(lcd); } mutex_unlock(&lcd->lock); return 0; }
static void tl2796_ldi_enable(struct s5p_lcd *lcd) { // struct s5p_panel_data *pdata = lcd->data; mutex_lock(&lcd->lock); switch (lcd->lcd_type) { case 1: break; case 2: break; case 3: s6e63m0_panel_send_sequence(lcd,LG4573_SEQ_SETTING_TYPE_3); break; case 0: default: s6e63m0_panel_send_sequence(lcd,LG4573_SEQ_SETTING_TYPE_0); break; } s6e63m0_panel_send_sequence(lcd,LG4573_SEQ_SLEEP_OFF); update_brightness(lcd); lcd->ldi_enable = 1; mutex_unlock(&lcd->lock); }
static ssize_t mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value; int ret; ret = strict_strtoul(buf, 0, (unsigned long *)&value); dev_info(dev, "%s :: value=%d\n", __func__, value); if (value >= MODE_MAX) { value = STANDARD; return -EINVAL; } mutex_lock(&mdnie->lock); mdnie->mode = value; mutex_unlock(&mdnie->lock); set_mdnie_value(mdnie, 0); #if defined(CONFIG_FB_MDNIE_PWM) if ((mdnie->enable) && (mdnie->bd_enable)) update_brightness(mdnie); #endif return count; }
static void init_lcd(struct mipi_dsim_device *dsim) { while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)apply_level_2_key, ARRAY_SIZE(apply_level_2_key)) == -1) dev_err(dsim->dev, "fail to send apply_level_2_key command.\n"); usleep_range(16000, 16000); s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0); usleep_range(16000, 16000); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)panel_condition_set, ARRAY_SIZE(panel_condition_set)) == -1) dev_err(dsim->dev, "fail to send panel_condition_set command.\n"); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)display_condition_set, ARRAY_SIZE(display_condition_set)) == -1) dev_err(dsim->dev, "fail to send display_condition_set command.\n"); update_brightness(bd->props.brightness); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)etc_set_source_ctrl, ARRAY_SIZE(etc_set_source_ctrl)) == -1) dev_err(dsim->dev, "fail to send set_source_ctrl command.\n"); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)etc_set_pentile_ctrl, ARRAY_SIZE(etc_set_pentile_ctrl)) == -1) dev_err(dsim->dev, "fail to send set_pentile_ctrl command.\n"); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)etc_set_power_ctrl, ARRAY_SIZE(etc_set_power_ctrl)) == -1) dev_err(dsim->dev, "fail to send set_power_ctrl command.\n"); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)elvss_NVM_set, ARRAY_SIZE(elvss_NVM_set)) == -1) dev_err(dsim->dev, "fail to send elvss_NVM_set command.\n"); while (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)elvss_ctrl_set, ARRAY_SIZE(elvss_ctrl_set)) == -1) dev_err(dsim->dev, "fail to send elvss_ctrl_set command.\n"); msleep(120); s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0); }
static int s6e3fa0_set_brightness(struct backlight_device *bd) { int brightness = bd->props.brightness; if (brightness < MIN_BRIGHTNESS || brightness > MAX_BRIGHTNESS) { printk(KERN_ALERT "Brightness should be in the range of 0 ~ 255\n"); return -EINVAL; } update_brightness(brightness); return 1; }
static void tl2796_ldi_enable(struct s5p_lcd *lcd) { struct s5p_panel_data *pdata = lcd->data; mutex_lock(&lcd->lock); s6e63m0_panel_send_sequence(lcd, pdata->seq_display_set); update_brightness(lcd); s6e63m0_panel_send_sequence(lcd, pdata->seq_etc_set); lcd->ldi_enable = 1; mutex_unlock(&lcd->lock); }
static int s6e3hf2_set_brightness(struct backlight_device *bd) { struct dsim_device *dsim; struct panel_private *priv = bl_get_data(bd); int brightness = bd->props.brightness; dsim = container_of(priv, struct dsim_device, priv); if (brightness < MIN_BRIGHTNESS || brightness > MAX_BRIGHTNESS) { printk(KERN_ALERT "Brightness should be in the range of 0 ~ 255\n"); return -EINVAL; } update_brightness(brightness); return 0; }
static int s6e8aa0_panel_init(struct device *dev) { msleep(5); lcd.panel_initialized = 1; lcd.ldi_enable= 1; lcd_panel_init(); update_brightness(); if(lcd.partial_mode) s6e8aa0_partial_mode_on(dev, lcd.partial_mode); /* this function should be called after partial mode call(if any)*/ return 0; }
static ssize_t mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); unsigned int value = 0; int ret; #if !defined(CONFIG_FB_MDNIE_PWM) int result[5] = {0,}; #endif ret = kstrtoul(buf, 0, (unsigned long *)&value); if (ret < 0) return ret; dev_info(dev, "%s: value=%d\n", __func__, value); if (value >= MODE_MAX) { value = STANDARD; return -EINVAL; } mutex_lock(&mdnie->lock); mdnie->mode = value; mutex_unlock(&mdnie->lock); #if !defined(CONFIG_FB_MDNIE_PWM) if (!mdnie->color_correction) { ret = get_panel_coordinate(mdnie, result); if (ret > 0) update_color_position(mdnie, ret - 1); } #endif mdnie_update(mdnie); #if defined(CONFIG_FB_MDNIE_PWM) if ((mdnie->enable) && (mdnie->bd_enable)) update_brightness(mdnie); #endif return count; }
static int mdnie_set_brightness(struct backlight_device *bd) { struct mdnie_info *mdnie = bl_get_data(bd); int ret = 0; if (bd->props.brightness < MIN_BRIGHTNESS || bd->props.brightness > bd->props.max_brightness) { dev_err(&bd->dev, "lcd brightness should be %d to %d. now %d\n", MIN_BRIGHTNESS, bd->props.max_brightness, bd->props.brightness); bd->props.brightness = bd->props.max_brightness; } if ((mdnie->enable) && (mdnie->bd_enable)) { ret = update_brightness(mdnie); dev_info(&bd->dev, "brightness=%d\n", bd->props.brightness); if (ret < 0) return -EINVAL; } return ret; }
void mdnie_late_resume(struct early_suspend *h) { u32 i; struct mdnie_info *mdnie = container_of(h, struct mdnie_info, early_suspend); struct lcd_platform_data *pd = NULL; dev_info(mdnie->dev, "+%s\n", __func__); #if defined(CONFIG_FB_MDNIE_PWM) pd = mdnie->lcd_pd; if (mdnie->enable) mdnie_pwm_control(mdnie, 0); if (!pd) dev_info(&mdnie->bd->dev, "platform data is NULL.\n"); if (!pd->power_on) dev_info(&mdnie->bd->dev, "power_on is NULL.\n"); else pd->power_on(NULL, 1); if (mdnie->enable) { dev_info(&mdnie->bd->dev, "brightness=%d\n", mdnie->bd->props.brightness); update_brightness(mdnie); } mdnie->bd_enable = TRUE; #endif set_mdnie_value(mdnie, 1); dev_info(mdnie->dev, "-%s\n", __func__); for (i = 0; i < 5; i++) { if (negative[i].enable) dev_info(mdnie->dev, "pid=%d, %s, %s\n", negative[i].pid, negative[i].comm, negative[i].time); } return ; }
static ssize_t power_reduce_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct lcd_info *lcd = dev_get_drvdata(dev); int value; int rc; rc = strict_strtoul(buf, (unsigned int)0, (unsigned long *)&value); if (rc < 0) return rc; else { if (lcd->acl_enable != value) { dev_info(dev, "%s - %d, %d\n", __func__, lcd->acl_enable, value); mutex_lock(&lcd->bl_lock); lcd->acl_enable = value; mutex_unlock(&lcd->bl_lock); if (lcd->ldi_enable) update_brightness(lcd, 1); } } return size; }
static int ana38401_ldi_init(struct lcd_info *lcd) { int ret = 0; lcd->connected = 1; /* 8. Wait 1ms */ usleep_range(1000, 1100); /* 9. INTR Setting */ ana38401_write(lcd, SEQ_INTR_SETTING_1, ARRAY_SIZE(SEQ_INTR_SETTING_1)); ana38401_write(lcd, SEQ_INTR_SETTING_2, ARRAY_SIZE(SEQ_INTR_SETTING_2)); /* 10. Module Information READ */ ana38401_read_id(lcd, lcd->id); /* 11. Common Setting */ ana38401_write(lcd, SEQ_TSP_SETTING_1, ARRAY_SIZE(SEQ_TSP_SETTING_1)); ana38401_write(lcd, SEQ_TSP_SETTING_2, ARRAY_SIZE(SEQ_TSP_SETTING_2)); ana38401_write(lcd, SEQ_TEAR_SCANLINE, ARRAY_SIZE(SEQ_TEAR_SCANLINE)); ana38401_write(lcd, SEQ_GAMMA_UPDATE_1, ARRAY_SIZE(SEQ_GAMMA_UPDATE_1)); ana38401_write(lcd, SEQ_GAMMA_UPDATE_2, ARRAY_SIZE(SEQ_GAMMA_UPDATE_2)); /* 11-2. Change Gamma_Offset_Index */ ana38401_write(lcd, SEQ_CHANGE_GAMMA_OFFSET_INDEX_1, ARRAY_SIZE(SEQ_CHANGE_GAMMA_OFFSET_INDEX_1)); ana38401_write(lcd, SEQ_CHANGE_GAMMA_OFFSET_INDEX_2, ARRAY_SIZE(SEQ_CHANGE_GAMMA_OFFSET_INDEX_2)); /* 12. Brightness Setting */ /* 13. ELVSS Temp Compensation */ update_brightness(lcd, 1); /* temporary patch to check manufacture date without ramdump */ usleep_range(5000, 6000); ana38401_read_date(lcd); return ret; }
static int ltn101al03_power_on(struct omap_dss_device *dssdev) { struct ltn101al03 *lcd = dev_get_drvdata(&dssdev->dev); int ret = 0; if (lcd->enabled != 1) { if (lcd->pdata->set_power) lcd->pdata->set_power(true); ret = omapdss_dpi_display_enable(dssdev); if (ret) { dev_err(&dssdev->dev, "failed to enable DPI\n"); goto err; } /* reset ltn101al03 bridge */ if (!dssdev->skip_init) { ltn101al03_hw_reset(dssdev); msleep(100); gpio_set_value(lcd->pdata->led_backlight_reset_gpio, 1); mdelay(10); omap_dm_timer_start(lcd->gptimer); usleep_range(2000, 2100); update_brightness(dssdev); } lcd->enabled = 1; } if (dssdev->skip_init) dssdev->skip_init = false; err: return ret; }
static ssize_t temperature_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct lcd_info *lcd = dev_get_drvdata(dev); int value, rc, temperature = 0; rc = kstrtoint(buf, 10, &value); if (rc < 0) return rc; else { switch (value) { case 1: temperature = TEMP_ABOVE_MINUS_00_DEGREE; break; case 0: case -19: temperature = TEMP_ABOVE_MINUS_20_DEGREE; break; case -20: temperature = TEMP_BELOW_MINUS_20_DEGREE; break; } mutex_lock(&lcd->bl_lock); lcd->temperature = temperature; mutex_unlock(&lcd->bl_lock); if (lcd->ldi_enable) update_brightness(lcd, 1); dev_info(dev, "%s: %d, %d\n", __func__, value, lcd->temperature); } return size; }
static ssize_t upadate_brightness_cmd_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct s5p_lcd *lcd = dev_get_drvdata(dev); int brightness = 0; sscanf(buf, "%d", &brightness); if ( ! (lcd->ldi_enable) ) { printk(KERN_ERR "[LCD] (%s) LDI not enabled \n", __func__); return 0; } /* Sanity check */ /* if(brightness < 0) brightness = 0; if(brightness > lcd->bl_dev->props.max_brightness) brightness = lcd->bl_dev->props.max_brightness; */ lcd->bl = brightness; update_brightness(lcd); return 0; }
static void init_lcd(struct mipi_dsim_device *dsim) { if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)SEQ_TEST_KEY_ON_F0, ARRAY_SIZE(SEQ_TEST_KEY_ON_F0)) == -1) dev_err(dsim->dev, "fail to send SEQ_TEST_KEY_ON_F0 command.\n"); msleep(12); if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)SEQ_TEST_KEY_ON_F1, ARRAY_SIZE(SEQ_TEST_KEY_ON_F1)) == -1) dev_err(dsim->dev, "fail to send SEQ_TEST_KEY_ON_FC command.\n"); msleep(12); if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)SEQ_TEST_KEY_ON_FC, ARRAY_SIZE(SEQ_TEST_KEY_ON_FC)) == -1) dev_err(dsim->dev, "fail to send SEQ_TEST_KEY_ON_FC command.\n"); msleep(12); if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)ED, ARRAY_SIZE(ED)) == -1) dev_err(dsim->dev, "fail to send SEQ_TOUCHKEY_OFF command.\n"); msleep(12); #ifdef CONFIG_FB_I80_COMMAND_MODE if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)FD, ARRAY_SIZE(FD)) == -1) dev_err(dsim->dev, "fail to send FD command.\n"); msleep(12); s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xF6, 0x08); mdelay(12); #else if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)E7, ARRAY_SIZE(E7)) == -1) dev_err(dsim->dev, "fail to send SEQ_GLOBAL_PARAM_SOURCE_AMP command.\n"); msleep(120); #endif #ifdef CONFIG_DECON_MIC s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xF9, 0x2B); #endif mdelay(20); s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0); mdelay(20); #ifndef CONFIG_FB_I80_COMMAND_MODE s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0); mdelay(120); s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xF2, 0x02); mdelay(12); #endif if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)EB, ARRAY_SIZE(EB)) == -1) dev_err(dsim->dev, "fail to send SEQ_TEST_KEY_OFF_FC command.\n"); mdelay(12); if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)C0, ARRAY_SIZE(C0)) == -1) dev_err(dsim->dev, "fail to send SEQ_DISPCTL command.\n"); mdelay(12); #ifdef CONFIG_FB_I80_COMMAND_MODE s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_SHORT_WRITE, 0x35, 0x0); mdelay(12); #else if (s5p_mipi_dsi_wr_data(dsim, MIPI_DSI_DCS_LONG_WRITE, (unsigned int)D29, ARRAY_SIZE(D29)) == -1) dev_err(dsim->dev, "fail to send SEQ_DISPCTL command.\n"); #endif mdelay(12); update_brightness(bd->props.brightness); }
static int ltn101al03_panel_probe(struct omap_dss_device *dssdev) { int ret = 0; struct ltn101al03 *lcd = NULL; struct backlight_properties props = { .brightness = BRIGHTNESS_DEFAULT, .max_brightness = 255, .type = BACKLIGHT_RAW, }; pr_info("(%s): called (@%d)\n", __func__, __LINE__); dev_dbg(&dssdev->dev, "ltn101al03_probe\n"); lcd = kzalloc(sizeof(*lcd), GFP_KERNEL); if (!lcd) return -ENOMEM; if (dssdev->data == NULL) { dev_err(&dssdev->dev, "no platform data!\n"); ret = -EINVAL; goto err_no_platform_data; } dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS /*| OMAP_DSS_LCD_IEO */ | OMAP_DSS_LCD_IPC | OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_ONOFF; dssdev->panel.acb = 0; lcd->dssdev = dssdev; lcd->pdata = dssdev->data; ltn101al03_brightness_data = lcd->pdata->brightness_table; lcd->bl = get_gamma_value_from_bl(props.brightness); ret = gpio_request(lcd->pdata->lvds_nshdn_gpio, "lvds_nshdn"); if (ret < 0) { dev_err(&dssdev->dev, "gpio_request %d failed!\n", lcd->pdata->lvds_nshdn_gpio); goto err_no_platform_data; } gpio_direction_output(lcd->pdata->lvds_nshdn_gpio, 1); ret = gpio_request(lcd->pdata->led_backlight_reset_gpio, "led_backlight_reset"); if (ret < 0) { dev_err(&dssdev->dev, "gpio_request %d failed!\n", lcd->pdata->led_backlight_reset_gpio); goto err_backlight_reset_gpio_request; } gpio_direction_output(lcd->pdata->led_backlight_reset_gpio, 1); mutex_init(&lcd->lock); dev_set_drvdata(&dssdev->dev, lcd); /* Register DSI backlight control */ lcd->bd = backlight_device_register("panel", &dssdev->dev, dssdev, <n101al03_backlight_ops, &props); if (IS_ERR(lcd->bd)) { ret = PTR_ERR(lcd->bd); goto err_backlight_device_register; } lcd->lcd_class = class_create(THIS_MODULE, "lcd"); if (IS_ERR(lcd->lcd_class)) { pr_err("Failed to create lcd_class!"); goto err_class_create; } lcd->dev = device_create(lcd->lcd_class, NULL, 0, NULL, "panel"); if (IS_ERR(lcd->dev)) { pr_err("Failed to create device(panel)!\n"); goto err_device_create; } dev_set_drvdata(lcd->dev, &dssdev->dev); ret = device_create_file(lcd->dev, &dev_attr_lcd_type); if (ret < 0) { dev_err(&dssdev->dev, "failed to add 'lcd_type' sysfs entries\n"); goto err_lcd_device; } ret = device_create_file(lcd->dev, &dev_attr_lcd_power); if (ret < 0) { dev_err(&dssdev->dev, "failed to add 'lcd_power' sysfs entries\n"); goto err_lcd_type; } ret = backlight_gptimer_init(dssdev); if (ret < 0) { dev_err(&dssdev->dev, "backlight_gptimer_init failed!\n"); goto err_gptimer_init; } /* * if lcd panel was on from bootloader like u-boot then * do not lcd on. */ if (dssdev->skip_init) lcd->enabled = 1; update_brightness(dssdev); dev_dbg(&dssdev->dev, "%s\n", __func__); return ret; err_gptimer_init: device_remove_file(&(lcd->bd->dev), &dev_attr_lcd_power); err_lcd_type: device_remove_file(&(lcd->bd->dev), &dev_attr_lcd_type); err_lcd_device: device_destroy(lcd->lcd_class, 0); err_device_create: class_destroy(lcd->lcd_class); err_class_create: backlight_device_unregister(lcd->bd); err_backlight_device_register: mutex_destroy(&lcd->lock); gpio_free(lcd->pdata->led_backlight_reset_gpio); err_backlight_reset_gpio_request: gpio_free(lcd->pdata->lvds_nshdn_gpio); err_no_platform_data: kfree(lcd); return ret; } static void ltn101al03_panel_remove(struct omap_dss_device *dssdev) { struct ltn101al03 *lcd = dev_get_drvdata(&dssdev->dev); device_remove_file(&(lcd->bd->dev), &dev_attr_lcd_power); device_remove_file(&(lcd->bd->dev), &dev_attr_lcd_type); device_destroy(lcd->lcd_class, 0); class_destroy(lcd->lcd_class); backlight_device_unregister(lcd->bd); mutex_destroy(&lcd->lock); gpio_free(lcd->pdata->led_backlight_reset_gpio); gpio_free(lcd->pdata->lvds_nshdn_gpio); kfree(lcd); } static int ltn101al03_start(struct omap_dss_device *dssdev) { int r = 0; r = ltn101al03_power_on(dssdev); if (r) { dev_dbg(&dssdev->dev, "enable failed\n"); dssdev->state = OMAP_DSS_DISPLAY_DISABLED; } else { dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; dssdev->manager->enable(dssdev->manager); } return r; }
static int ea8061_probe(struct device *dev) { int ret = 0, i; struct lcd_info *lcd; #ifdef SMART_DIMMING u8 mtp_data[LDI_MTP_LENGTH] = {0,}; #endif lcd = kzalloc(sizeof(struct lcd_info), GFP_KERNEL); if (!lcd) { pr_err("failed to allocate for lcd\n"); ret = -ENOMEM; goto err_alloc; } g_lcd = lcd; lcd->ld = lcd_device_register("panel", dev, lcd, &ea8061_lcd_ops); if (IS_ERR(lcd->ld)) { pr_err("failed to register lcd device\n"); ret = PTR_ERR(lcd->ld); goto out_free_lcd; } lcd->bd = backlight_device_register("panel", dev, lcd, &ea8061_backlight_ops, NULL); if (IS_ERR(lcd->bd)) { pr_err("failed to register backlight device\n"); ret = PTR_ERR(lcd->bd); goto out_free_backlight; } lcd->dev = dev; lcd->dsim = (struct dsim_global *)dev_get_drvdata(dev->parent); lcd->bd->props.max_brightness = MAX_BRIGHTNESS; lcd->bd->props.brightness = DEFAULT_BRIGHTNESS; lcd->bl = DEFAULT_GAMMA_LEVEL; lcd->current_bl = lcd->bl; lcd->acl_enable = 0; lcd->current_acl = 0; lcd->power = FB_BLANK_UNBLANK; lcd->ldi_enable = 1; lcd->connected = 1; lcd->auto_brightness = 0; ret = device_create_file(&lcd->ld->dev, &dev_attr_power_reduce); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_lcd_type); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_window_type); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_gamma_table); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->bd->dev, &dev_attr_auto_brightness); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); dev_set_drvdata(dev, lcd); mutex_init(&lcd->lock); mutex_init(&lcd->bl_lock); ea8061_read_id(lcd, lcd->id); dev_info(&lcd->ld->dev, "ID: %x, %x, %x\n", lcd->id[0], lcd->id[1], lcd->id[2]); dev_info(&lcd->ld->dev, "%s lcd panel driver has been probed.\n", dev_name(dev)); #ifdef SMART_DIMMING for (i = 0; i < LDI_ID_LEN; i++) lcd->smart.panelid[i] = lcd->id[i]; init_table_info_ea8061(&lcd->smart); ret = ea8061_read_mtp(lcd, mtp_data); /* for (i = 0; i < LDI_MTP_LENGTH ; i++) printk(" %dth mtp value is %x\n", i, mtp_data[i]); */ if (!ret) printk(KERN_ERR "[LCD:ERROR] : %s read mtp failed\n", __func__); calc_voltage_table_ea8061(&lcd->smart, mtp_data); ret = init_elvss_table(lcd); ret += init_gamma_table(lcd, mtp_data); ret += init_aid_dimming_table(lcd); if (ret) printk(KERN_ERR "gamma table generation is failed\n"); update_brightness(lcd, 1); #endif #if defined(GPIO_ERR_FG) if (lcd->connected) { INIT_DELAYED_WORK(&lcd->err_fg_detection, err_fg_detection_work); /* lcd->gpio = GPIO_OLED_DET; */ lcd->gpio = GPIO_ERR_FG; lcd->irq = gpio_to_irq(lcd->gpio); s3c_gpio_cfgpin(lcd->gpio, S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(lcd->gpio, S3C_GPIO_PULL_NONE); if (request_irq(lcd->irq, err_fg_detection_int, IRQF_TRIGGER_FALLING, "err_fg_detection", lcd)) pr_err("failed to reqeust irq. %d\n", lcd->irq); } #endif lcd_early_suspend = ea8061_early_suspend; lcd_late_resume = ea8061_late_resume; return 0; out_free_backlight: lcd_device_unregister(lcd->ld); kfree(lcd); return ret; out_free_lcd: kfree(lcd); return ret; err_alloc: return ret; }
/** main function */ int main(void) { init_output(); init_pwm(); #if SERIAL_UART init_uart(); #endif #if RC5_DECODER init_rc5(); #endif #if I2C init_i2c(); #endif global_pwm.channels[0].brightness = 50; global_pwm.channels[0].target_brightness = 50; #if STATIC_SCRIPTS init_script_threads(); #if RS485_CTRL == 0 /* start the example scripts */ script_threads[0].handler.execute = &memory_handler_flash; script_threads[0].handler.position = (uint16_t) &colorchange_red; script_threads[0].flags.disabled = 0; //script_threads[1].handler.execute = &memory_handler_flash; //script_threads[1].handler.position = (uint16_t) &testscript_flash2; //script_threads[1].flags.disabled = 0; // //script_threads[2].handler.execute = &memory_handler_eeprom; //script_threads[2].handler.position = (uint16_t) &testscript_eeprom; //script_threads[2].flags.disabled = 0; //script_threads[0].handler.execute = &memory_handler_flash; //script_threads[0].handler.position = (uint16_t) &blinken; //script_threads[0].flags.disabled = 0; #endif #endif #if I2C_MASTER i2c_global.send_messages[0].command.size = 4; i2c_global.send_messages[0].command.code = COMMAND_SET_COLOR; i2c_global.send_messages[0].command.set_color_parameters.colors[0] = 0x10; i2c_global.send_messages[0].command.set_color_parameters.colors[1] = 0x10; i2c_global.send_messages[0].command.set_color_parameters.colors[2] = 0x10; i2c_global.send_messages_count = 1; #endif #if RS485_CTRL /* init command bus */ UCSR0A = _BV(MPCM0); /* enable multi-processor communication mode */ UCSR0C = _BV(UCSZ00) | _BV(UCSZ01); /* 9 bit frame size */ #define UART_UBRR 8 /* 115200 baud at 16mhz */ UBRR0H = HIGH(UART_UBRR); UBRR0L = LOW(UART_UBRR); UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(UCSZ02); /* enable receiver and transmitter */ #endif /* enable interrupts globally */ sei(); while (1) { /* after the last pwm timeslot, rebuild the timeslot table */ if (global.flags.last_pulse) { global.flags.last_pulse = 0; update_pwm_timeslots(); } /* at the beginning of each pwm cycle, call the fading engine and * execute all script threads */ if (global.flags.new_cycle) { global.flags.new_cycle = 0; update_brightness(); #if STATIC_SCRIPTS execute_script_threads(); #endif continue; } #if SERIAL_UART /* check if we received something via uart */ if (fifo_fill(&global_uart.rx_fifo) > 0) { check_serial_input(fifo_load(&global_uart.rx_fifo)); continue; } #endif #if RC5_DECODER /* check if we received something via ir */ if (global_rc5.new_data) { static uint8_t toggle_bit = 2; /* if key has been pressed again */ if (global_rc5.received_command.toggle_bit != toggle_bit) { /* if code is 0x01 (key '1' on a default remote) */ if (global_rc5.received_command.code == 0x01) { /* install script into thread 1 */ script_threads[1].handler.execute = &memory_handler_flash; script_threads[1].handler.position = (uint16_t) &green_flash; script_threads[1].flags.disabled = 0; script_threads[1].handler_stack_offset = 0; } /* store new toggle bit state */ toggle_bit = global_rc5.received_command.toggle_bit; } /* reset the new_data flag, so that new commands can be received */ global_rc5.new_data = 0; continue; } #endif #if RS485_CTRL if (UCSR0A & _BV(RXC0)) { uint8_t address = UCSR0B & _BV(RXB80); /* read nineth bit, zero if data, one if address */ uint8_t data = UDR0; static uint8_t buffer[8]; static uint8_t fill = 0; if (UCSR0A & _BV(MPCM0) || address) { /* if MPCM mode is still active, or ninth bit set, this is an address packet */ /* check if we are ment */ if (data == 0 || data == RS485_ADDRESS) { /* remove MPCM flag and reset buffer fill counter */ UCSR0A &= ~_BV(MPCM0); fill = 0; continue; } else {/* turn on MPCM */ UCSR0A |= _BV(MPCM0); continue; } } /* else this is a data packet, put data into buffer */ buffer[fill++] = data; if (buffer[0] == 0x01) { /* soft reset */ jump_to_bootloader(); } else if (buffer[0] == 0x02 && fill == 4) { /* set color */ for (uint8_t pos = 0; pos < 3; pos++) { global_pwm.channels[pos].target_brightness = buffer[pos + 1]; global_pwm.channels[pos].brightness = buffer[pos + 1]; } UCSR0A |= _BV(MPCM0); /* return to MPCM mode */ } else if (buffer[0] == 0x03 && fill == 6) { /* fade to color */ for (uint8_t pos = 0; pos < 3; pos++) { global_pwm.channels[pos].speed_h = buffer[1]; global_pwm.channels[pos].speed_l = buffer[2]; global_pwm.channels[pos].target_brightness = buffer[pos + 3]; } UCSR0A |= _BV(MPCM0); /* return to MPCM mode */ } } #endif #if I2C_MASTER i2c_master_check_queue(); #endif } }
static int s6e8ax0_probe(struct device *dev) { int ret = 0; struct lcd_info *lcd; #ifdef SMART_DIMMING u8 mtp_data[LDI_MTP_LENGTH] = {0,}; #endif lcd = kzalloc(sizeof(struct lcd_info), GFP_KERNEL); if (!lcd) { pr_err("failed to allocate for lcd\n"); ret = -ENOMEM; goto err_alloc; } g_lcd = lcd; lcd->ld = lcd_device_register("panel", dev, lcd, &s6e8ax0_lcd_ops); if (IS_ERR(lcd->ld)) { pr_err("failed to register lcd device\n"); ret = PTR_ERR(lcd->ld); goto out_free_lcd; } lcd->bd = backlight_device_register("panel", dev, lcd, &s6e8ax0_backlight_ops, NULL); if (IS_ERR(lcd->bd)) { pr_err("failed to register backlight device\n"); ret = PTR_ERR(lcd->bd); goto out_free_backlight; } lcd->dev = dev; lcd->dsim = (struct dsim_global *)dev_get_drvdata(dev->parent); lcd->bd->props.max_brightness = MAX_BRIGHTNESS; lcd->bd->props.brightness = DEFAULT_BRIGHTNESS; lcd->bl = DEFAULT_GAMMA_LEVEL; lcd->current_bl = lcd->bl; lcd->acl_enable = 0; lcd->siop_enable = 0; lcd->current_acl = 0; lcd->power = FB_BLANK_UNBLANK; lcd->ldi_enable = 1; lcd->connected = 1; lcd->auto_brightness = 0; ret = device_create_file(&lcd->ld->dev, &dev_attr_power_reduce); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_siop_enable); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_lcd_type); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_gamma_table); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->ld->dev, &dev_attr_read_acl); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); ret = device_create_file(&lcd->bd->dev, &dev_attr_auto_brightness); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); dev_set_drvdata(dev, lcd); mutex_init(&lcd->lock); mutex_init(&lcd->bl_lock); s6e8ax0_read_id(lcd, lcd->id); dev_info(&lcd->ld->dev, "ID: %x, %x, %x\n", lcd->id[0], lcd->id[1], lcd->id[2]); dev_info(&lcd->ld->dev, "s6e8aa0 lcd panel driver has been probed.\n"); #ifdef SMART_DIMMING s6e8aa0_check_id(lcd, lcd->id); init_table_info(&lcd->smart); ret = s6e8ax0_read_mtp(lcd, mtp_data); if (!ret) { printk(KERN_ERR "[LCD:ERROR] : %s read mtp failed\n", __func__); /*return -EPERM;*/ } calc_voltage_table(&lcd->smart, mtp_data); if (lcd->support_elvss) ret = init_elvss_table(lcd); else { lcd->elvss_table = (unsigned char **)ELVSS_TABLE; ret = 0; } ret += init_gamma_table(lcd); #ifdef CONFIG_AID_DIMMING if (lcd->id[1] == 0x20 || lcd->id[1] == 0x40 || lcd->id[1] == 0x60) { printk(KERN_INFO "AID Dimming is started. %d\n", lcd->id[1]); lcd->support_aid = 1; ret += init_aid_dimming_table(lcd); } #endif if (ret) { printk(KERN_ERR "gamma table generation is failed\n"); lcd->gamma_table = (unsigned char **)gamma22_table; lcd->elvss_table = (unsigned char **)ELVSS_TABLE; } update_brightness(lcd, 1); #endif #if defined(GPIO_OLED_DET) if (lcd->connected) { INIT_DELAYED_WORK(&lcd->oled_detection, oled_detection_work); lcd->irq = gpio_to_irq(GPIO_OLED_DET); s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf)); s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE); if (request_irq(lcd->irq, oled_detection_int, IRQF_TRIGGER_FALLING, "oled_detection", lcd)) pr_err("failed to reqeust irq. %d\n", lcd->irq); } #endif lcd_early_suspend = s6e8ax0_early_suspend; lcd_late_resume = s6e8ax0_late_resume; return 0; out_free_backlight: lcd_device_unregister(lcd->ld); kfree(lcd); return ret; out_free_lcd: kfree(lcd); return ret; err_alloc: return ret; }