static int rt9396_probe(struct i2c_client *i2c_dev, const struct i2c_device_id *i2c_dev_id) { struct lge_backlight_platform_data *pdata; struct rt9396_driver_data *drvdata; struct backlight_device *bd; int err; rt9396_powerstate = NORMAL_STATE; dprintk("start, client addr=0x%x\n", i2c_dev->addr); pdata = i2c_dev->dev.platform_data; if(!pdata) return -EINVAL; drvdata = kzalloc(sizeof(struct rt9396_driver_data), GFP_KERNEL); if (!drvdata) { dev_err(&i2c_dev->dev, "failed to allocate memory\n"); return -ENOMEM; } if (pdata && pdata->platform_init) pdata->platform_init(); drvdata->client = i2c_dev; drvdata->gpio = pdata->gpio; drvdata->max_intensity = LCD_LED_MAX; if (pdata->max_current > 0) drvdata->max_intensity = pdata->max_current; drvdata->intensity = LCD_LED_MIN; drvdata->mode = NORMAL_MODE; drvdata->state = UNINIT_STATE; drvdata->version = pdata->version; if(rt9396_setup_version(drvdata) != 0) { eprintk("Error while requesting gpio %d\n", drvdata->gpio); kfree(drvdata); return -ENODEV; } if (drvdata->gpio && gpio_request(drvdata->gpio, "rt9396_en") != 0) { eprintk("Error while requesting gpio %d\n", drvdata->gpio); kfree(drvdata); return -ENODEV; } gpio_tlmm_config(GPIO_CFG(drvdata->gpio, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); bd = backlight_device_register("rt9396-bl", &i2c_dev->dev, NULL, &rt9396_ops, NULL); if (bd == NULL) { eprintk("entering rt9396 probe function error \n"); kfree(drvdata); return -1; } bd->props.power = FB_BLANK_UNBLANK; bd->props.brightness = drvdata->intensity; bd->props.max_brightness = drvdata->max_intensity; drvdata->bd = bd; if (led_classdev_register(&i2c_dev->dev, &rt9396_led_dev) == 0) { eprintk("Registering led class dev successfully.\n"); drvdata->led = &rt9396_led_dev; err = device_create_file(drvdata->led->dev, &dev_attr_alc); err = device_create_file(drvdata->led->dev, &dev_attr_reg); err = device_create_file(drvdata->led->dev, &dev_attr_drvstat); err = device_create_file(drvdata->led->dev, &dev_attr_chargerlogo); } // [Caio99BR][[email protected]] Workaround for bug of screen still awake after lock #ifndef CONFIG_MACH_LGE_2ND_GEN_KK_WORKAROUD if (led_classdev_register(&i2c_dev->dev, &rt9396_keyled_dev) == 0) { eprintk("Registering led class dev successfully.\n"); drvdata->led = &rt9396_keyled_dev; } #endif i2c_set_clientdata(i2c_dev, drvdata); i2c_set_adapdata(i2c_dev->adapter, i2c_dev); rt9396_device_init(drvdata); rt9396_send_intensity(drvdata, RT9396BL_DEFAULT_BRIGHTNESS); #ifdef CONFIG_HAS_EARLYSUSPEND drvdata->early_suspend.suspend = rt9396_early_suspend; drvdata->early_suspend.resume = rt9396_late_resume; drvdata->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN - 40; register_early_suspend(&drvdata->early_suspend); #endif rt9396_ref = drvdata; eprintk("done\n"); return 0; }
static void leds_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { struct rt9396_driver_data *drvdata = dev_get_drvdata(led_cdev->dev->parent); int brightness; int next; if (!drvdata) { eprintk("Error getting drvier data\n"); return; } brightness = rt9396_get_intensity(drvdata); if(!value) next = value; else if(value !=0 && value < HAL_MIN_VALUE) value = HAL_MIN_VALUE; if(value == HAL_MIN_VALUE) { next = RT9396BL_MIN_BRIGHTNESS; } else if(value > HAL_MIN_VALUE && value <= HAL_20PER_VALUE) { next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_20PER_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS) *(value-HAL_MIN_VALUE)/( HAL_20PER_VALUE - HAL_MIN_VALUE); } else if(value > HAL_20PER_VALUE && value <= HAL_40PER_VALUE) { next = RT9396BL_20PER_BRIGHTNESS + (RT9396BL_40PER_BRIGHTNESS - RT9396BL_20PER_BRIGHTNESS) *(value-HAL_20PER_VALUE)/( HAL_40PER_VALUE - HAL_20PER_VALUE); } else if(value > HAL_40PER_VALUE && value <= HAL_60PER_VALUE) { next = RT9396BL_40PER_BRIGHTNESS + (RT9396BL_60PER_BRIGHTNESS - RT9396BL_40PER_BRIGHTNESS) *(value-HAL_40PER_VALUE)/( HAL_60PER_VALUE - HAL_40PER_VALUE); } else if(value > HAL_60PER_VALUE && value <= HAL_80PER_VALUE) { next = RT9396BL_60PER_BRIGHTNESS + (RT9396BL_80PER_BRIGHTNESS - RT9396BL_60PER_BRIGHTNESS) *(value-HAL_60PER_VALUE)/( HAL_80PER_VALUE - HAL_60PER_VALUE); } else if(value > HAL_80PER_VALUE) { if(value > HAL_MAX_VALUE) { value = HAL_MAX_VALUE; } if(value == HAL_MAX_VALUE) { next = RT9396BL_MAX_BRIGHTNESS; } else { next = RT9396BL_80PER_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS - RT9396BL_80PER_BRIGHTNESS) *(value-HAL_80PER_VALUE)/( HAL_MAX_VALUE - HAL_80PER_VALUE); } } if (brightness != next) { rt9396_send_intensity(drvdata, next); } }
static int rt9396_probe(struct i2c_client *i2c_dev, const struct i2c_device_id *i2c_dev_id) { struct lge_backlight_platform_data *pdata; struct rt9396_driver_data *drvdata; struct backlight_device *bd; int err; rt9396_powerstate = NORMAL_STATE; dprintk("start, client addr=0x%x\n", i2c_dev->addr); pdata = i2c_dev->dev.platform_data; if(!pdata) return -EINVAL; drvdata = kzalloc(sizeof(struct rt9396_driver_data), GFP_KERNEL); if (!drvdata) { dev_err(&i2c_dev->dev, "failed to allocate memory\n"); return -ENOMEM; } if (pdata && pdata->platform_init) pdata->platform_init(); drvdata->client = i2c_dev; drvdata->gpio = pdata->gpio; drvdata->max_intensity = LCD_LED_MAX; if (pdata->max_current > 0) drvdata->max_intensity = pdata->max_current; drvdata->intensity = LCD_LED_MIN; drvdata->mode = NORMAL_MODE; drvdata->state = UNINIT_STATE; drvdata->version = pdata->version; if(rt9396_setup_version(drvdata) != 0) { eprintk("Error while requesting gpio %d\n", drvdata->gpio); kfree(drvdata); return -ENODEV; } //[V3][junghoon79.kim][2012.9.10] #if 0 -> #if 1 #if 1 //not use enable pin in rt9396 if (drvdata->gpio && gpio_request(drvdata->gpio, "rt9396_en") != 0) { eprintk("Error while requesting gpio %d\n", drvdata->gpio); kfree(drvdata); return -ENODEV; } gpio_tlmm_config(GPIO_CFG(drvdata->gpio, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE); #endif //[V3][junghoon79.kim][2012.9.10]- end bd = backlight_device_register("rt9396-bl", &i2c_dev->dev, NULL, &rt9396_ops, NULL); if (bd == NULL) { eprintk("entering rt9396 probe function error \n"); //if (gpio_is_valid(drvdata->gpio)) // gpio_free(drvdata->gpio); kfree(drvdata); return -1; } bd->props.power = FB_BLANK_UNBLANK; bd->props.brightness = drvdata->intensity; bd->props.max_brightness = drvdata->max_intensity; drvdata->bd = bd; #ifdef CONFIG_BACKLIGHT_LEDS_CLASS if (led_classdev_register(&i2c_dev->dev, &rt9396_led_dev) == 0) { eprintk("Registering led class dev successfully.\n"); drvdata->led = &rt9396_led_dev; err = device_create_file(drvdata->led->dev, &dev_attr_alc); err = device_create_file(drvdata->led->dev, &dev_attr_reg); err = device_create_file(drvdata->led->dev, &dev_attr_drvstat); err = device_create_file(drvdata->led->dev, &dev_attr_chargerlogo); } /*2012-09-26 junghoon-kim([email protected]) porting from bu61800 driver [START]*/ #ifdef USE_BUTTON_BACKLIGHT /* [email protected] */ if (led_classdev_register(&i2c_dev->dev, &rt9396_keyled_dev) == 0) { eprintk("Registering led class dev successfully.\n"); drvdata->led = &rt9396_keyled_dev; } /* [email protected] */ #endif /*2012-09-26 junghoon-kim([email protected]) porting from bu61800 driver [END]*/ #endif i2c_set_clientdata(i2c_dev, drvdata); i2c_set_adapdata(i2c_dev->adapter, i2c_dev); rt9396_device_init(drvdata); rt9396_send_intensity(drvdata, RT9396BL_DEFAULT_BRIGHTNESS); #ifdef CONFIG_HAS_EARLYSUSPEND drvdata->early_suspend.suspend = rt9396_early_suspend; drvdata->early_suspend.resume = rt9396_late_resume; drvdata->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN - 40; register_early_suspend(&drvdata->early_suspend); #endif rt9396_ref = drvdata; eprintk("done\n"); return 0; }
static int rt9396_set_brightness(struct backlight_device *bd) { struct rt9396_driver_data *drvdata = dev_get_drvdata(bd->dev.parent); return rt9396_send_intensity(drvdata, bd->props.brightness); }
static void leds_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { struct rt9396_driver_data *drvdata = dev_get_drvdata(led_cdev->dev->parent); int brightness; int next; if (!drvdata) { eprintk("Error getting drvier data\n"); return; } brightness = rt9396_get_intensity(drvdata); #if 1//2012-11-14 junghoon.kim([email protected]) HW brightness tuning.[START] if(!value) next = value; else if(value !=0 && value < HAL_MIN_VALUE) value = HAL_MIN_VALUE; if(value == HAL_MIN_VALUE) { next = RT9396BL_MIN_BRIGHTNESS; } else if(value > HAL_MIN_VALUE && value <= HAL_20PER_VALUE) { next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_20PER_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS) *(value-HAL_MIN_VALUE)/( HAL_20PER_VALUE - HAL_MIN_VALUE); } else if(value > HAL_20PER_VALUE && value <= HAL_40PER_VALUE) { next = RT9396BL_20PER_BRIGHTNESS + (RT9396BL_40PER_BRIGHTNESS - RT9396BL_20PER_BRIGHTNESS) *(value-HAL_20PER_VALUE)/( HAL_40PER_VALUE - HAL_20PER_VALUE); } else if(value > HAL_40PER_VALUE && value <= HAL_60PER_VALUE) { next = RT9396BL_40PER_BRIGHTNESS + (RT9396BL_60PER_BRIGHTNESS - RT9396BL_40PER_BRIGHTNESS) *(value-HAL_40PER_VALUE)/( HAL_60PER_VALUE - HAL_40PER_VALUE); } else if(value > HAL_60PER_VALUE && value <= HAL_80PER_VALUE) { next = RT9396BL_60PER_BRIGHTNESS + (RT9396BL_80PER_BRIGHTNESS - RT9396BL_60PER_BRIGHTNESS) *(value-HAL_60PER_VALUE)/( HAL_80PER_VALUE - HAL_60PER_VALUE); } else if(value > HAL_80PER_VALUE) { if(value > HAL_MAX_VALUE) { value = HAL_MAX_VALUE; } if(value == HAL_MAX_VALUE) { next = RT9396BL_MAX_BRIGHTNESS; } else { next = RT9396BL_80PER_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS - RT9396BL_80PER_BRIGHTNESS) *(value-HAL_80PER_VALUE)/( HAL_MAX_VALUE - HAL_80PER_VALUE); } } #else if(value < MIN_VALUE) { if(value<0) { printk("%s, old value: %d\n", __func__,value ); value=0; } next = value*RT9396BL_MIN_BRIGHTNESS/MIN_VALUE; } else if(value >= MIN_VALUE && value <= DEFAULT_VALUE) { next = RT9396BL_MIN_BRIGHTNESS + (RT9396BL_DEFAULT_BRIGHTNESS - RT9396BL_MIN_BRIGHTNESS) *(value-MIN_VALUE)/( DEFAULT_VALUE - MIN_VALUE); } else if(value >DEFAULT_VALUE) { if(value>MAX_VALUE) { printk("%s, old value: %d\n", __func__,value ); value=MAX_VALUE; } next = RT9396BL_DEFAULT_BRIGHTNESS + (RT9396BL_MAX_BRIGHTNESS - RT9396BL_DEFAULT_BRIGHTNESS) *(value-DEFAULT_VALUE)/(MAX_VALUE - DEFAULT_VALUE); } #endif//2012-11-14 junghoon.kim([email protected]) HW brightness tuning.[END] if (brightness != next) { //printk("%s, value: %d,after tuning next: %d \n", __func__, value, next ); rt9396_send_intensity(drvdata, next); } }