static int lm3630_probe(struct i2c_client *i2c_dev, const struct i2c_device_id *id) { struct backlight_platform_data *pdata; struct lm3630_device *dev; struct backlight_device *bl_dev; struct backlight_properties props; int err; pr_info(" %s: i2c probe start\n", __func__); #ifdef CONFIG_OF if (&i2c_dev->dev.of_node) { pdata = devm_kzalloc(&i2c_dev->dev, sizeof(struct backlight_platform_data), GFP_KERNEL); if (!pdata) { pr_err("%s: Failed to allocate memory\n", __func__); return -ENOMEM; } err = lm3630_parse_dt(&i2c_dev->dev, pdata); if (err != 0) return err; } else { pdata = i2c_dev->dev.platform_data; } #else pdata = i2c_dev->dev.platform_data; #endif pr_info("%s: gpio = %d\n", __func__, pdata->gpio); if (pdata->gpio && gpio_request(pdata->gpio, "lm3630 reset") != 0) { return -ENODEV; } lm3630_i2c_client = i2c_dev; dev = kzalloc(sizeof(struct lm3630_device), GFP_KERNEL); if (dev == NULL) { dev_err(&i2c_dev->dev, "fail alloc for lm3630_device\n"); return 0; } main_lm3630_dev = dev; memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_RAW; props.max_brightness = MAX_BRIGHTNESS_LM3630; bl_dev = backlight_device_register(I2C_BL_NAME, &i2c_dev->dev, NULL, &lm3630_bl_ops, &props); bl_dev->props.max_brightness = MAX_BRIGHTNESS_LM3630; #if defined(CONFIG_B1_LGD_PANEL) if(lge_get_boot_mode() == LGE_BOOT_MODE_CHARGERLOGO) bl_dev->props.brightness = 0x99; // same to LK else if(lge_get_boot_mode() == LGE_BOOT_MODE_FACTORY || lge_get_boot_mode() == LGE_BOOT_MODE_FACTORY2 || lge_get_boot_mode() == LGE_BOOT_MODE_FACTORY3 || lge_get_boot_mode() == LGE_BOOT_MODE_PIFBOOT || lge_get_boot_mode() == LGE_BOOT_MODE_PIFBOOT2 || lge_get_boot_mode() == LGE_BOOT_MODE_PIFBOOT3) factory_boot = 1; else bl_dev->props.brightness = DEFAULT_BRIGHTNESS; #else bl_dev->props.brightness = pdata->default_brightness; #endif bl_dev->props.power = FB_BLANK_UNBLANK; dev->bl_dev = bl_dev; dev->client = i2c_dev; dev->gpio = pdata->gpio; dev->max_current = pdata->max_current; dev->min_brightness = pdata->min_brightness; dev->max_brightness = pdata->max_brightness; dev->blmap_size = pdata->blmap_size; if (dev->blmap_size) { dev->blmap = kzalloc(sizeof(char) * dev->blmap_size, GFP_KERNEL); if (!dev->blmap) { pr_err("%s: Failed to allocate memory\n", __func__); return -ENOMEM; } memcpy(dev->blmap, pdata->blmap, dev->blmap_size); } else { dev->blmap = NULL; } #ifdef CONFIG_LGE_LCD_OFF_DIMMING if ((lge_get_bootreason() == 0x77665560) || (lge_get_bootreason() == 0x77665561)) { dev->bl_dev->props.brightness = 50; pr_info("%s : fota reboot - backlight set 50\n", __func__); } #endif if (gpio_get_value(dev->gpio)) backlight_status = BL_ON; else backlight_status = BL_OFF; i2c_set_clientdata(i2c_dev, dev); mutex_init(&dev->bl_mutex); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_level); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_backlight_on_off); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_exp_min_value); #if defined(CONFIG_BACKLIGHT_CABC_DEBUG_ENABLE) err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_pwm); #endif pr_info("%s: i2c probe done\n", __func__); return 0; }
static int lm3630_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct lm3630_platform_data *pdata; struct lm3630_device *dev; struct backlight_device *bl_dev; struct backlight_properties props; struct device_node *dev_node = client->dev.of_node; int ret = 0; dev = kzalloc(sizeof(struct lm3630_device), GFP_KERNEL); if (!dev) { pr_err("%s: failed to allocate lm3630_device\n", __func__); return -ENOMEM; } if (dev_node) { ret = lm3630_parse_dt(dev_node, dev); if (ret) { pr_err("%s: failed to parse dt\n", __func__); goto err_parse_dt; } } else { pdata = client->dev.platform_data; if (pdata == NULL) { pr_err("%s: no platform data\n", __func__); goto err_parse_dt; } dev->en_gpio = pdata->en_gpio; dev->boost_ctrl_reg = pdata->boost_ctrl_reg; dev->bank_sel = pdata->bank_sel; dev->linear_map = pdata->linear_map; dev->max_current = pdata->max_current; dev->min_brightness = pdata->min_brightness; dev->default_brightness = pdata->default_brightness; dev->max_brightness = pdata->max_brightness; dev->pwm_enable = pdata->pwm_enable; dev->blmap_size = pdata->blmap_size; if (dev->blmap_size) dev->blmap = pdata->blmap; } /* initialize register values for hw reset */ lm3630_set_init_values(dev); memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_RAW; props.max_brightness = dev->max_brightness; bl_dev = backlight_device_register(I2C_BL_NAME, &client->dev, NULL, &lm3630_bl_ops, &props); if (IS_ERR(bl_dev)) { pr_err("%s: failed to register backlight\n", __func__); ret = PTR_ERR(bl_dev); goto err_bl_dev_reg; } #ifdef CONFIG_MACH_LGE /* HACK: disable fb notifier unless off-mode charge */ if (lge_get_boot_mode() != LGE_BOOT_MODE_CHARGER) fb_unregister_client(&bl_dev->fb_notif); #endif bl_dev->props.max_brightness = dev->max_brightness; bl_dev->props.brightness = dev->default_brightness; bl_dev->props.power = FB_BLANK_UNBLANK; dev->bl_dev = bl_dev; dev->client = client; i2c_set_clientdata(client, dev); if (gpio_is_valid(dev->en_gpio)) { ret = gpio_request_one(dev->en_gpio, GPIOF_OUT_INIT_HIGH, "lm3630_en"); if (ret) { pr_err("%s: failed to request en_gpio\n", __func__); goto err_gpio_request; } } ret = device_create_file(&client->dev, &dev_attr_lm3630_level); if (ret) { pr_err("%s: failed to create sysfs level\n", __func__); goto err_create_sysfs_level; } ret = lm3630_create_debugfs_entries(dev); if (ret) { pr_err("%s: lm3630_create_debugfs_entries failed\n", __func__); goto err_create_debugfs; } lm3630_dev = dev; pr_info("%s: lm3630 probed\n", __func__); return 0; err_create_debugfs: device_remove_file(&client->dev, &dev_attr_lm3630_level); err_create_sysfs_level: if (gpio_is_valid(dev->en_gpio)) gpio_free(dev->en_gpio); err_gpio_request: backlight_device_unregister(bl_dev); err_bl_dev_reg: if (dev_node && dev->blmap) kfree(dev->blmap); err_parse_dt: kfree(dev); return ret; }
static int lm3630_probe(struct i2c_client *i2c_dev, const struct i2c_device_id *id) { struct backlight_platform_data *pdata; struct lm3630_device *dev; struct backlight_device *bl_dev; struct backlight_properties props; int err; pr_info("[LCD][DEBUG] %s: i2c probe start\n", __func__); #ifdef CONFIG_OF if (&i2c_dev->dev.of_node) { pdata = devm_kzalloc(&i2c_dev->dev, sizeof(struct backlight_platform_data), GFP_KERNEL); if (!pdata) { pr_err("%s: Failed to allocate memory\n", __func__); return -ENOMEM; } err = lm3630_parse_dt(&i2c_dev->dev, pdata); if (err != 0) return err; } else { pdata = i2c_dev->dev.platform_data; } #else pdata = i2c_dev->dev.platform_data; #endif pr_debug("[LCD][DEBUG] %s: gpio = %d\n", __func__,pdata->gpio); if (pdata->gpio && gpio_request(pdata->gpio, "lm3630 reset") != 0) { return -ENODEV; } lm3630_i2c_client = i2c_dev; dev = kzalloc(sizeof(struct lm3630_device), GFP_KERNEL); if (dev == NULL) { dev_err(&i2c_dev->dev, "fail alloc for lm3630_device\n"); return 0; } main_lm3630_dev = dev; memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_RAW; props.max_brightness = MAX_BRIGHTNESS_LM3630; bl_dev = backlight_device_register(I2C_BL_NAME, &i2c_dev->dev, NULL, &lm3630_bl_ops, &props); bl_dev->props.max_brightness = MAX_BRIGHTNESS_LM3630; bl_dev->props.brightness = DEFAULT_BRIGHTNESS; bl_dev->props.power = FB_BLANK_UNBLANK; dev->bl_dev = bl_dev; dev->client = i2c_dev; dev->gpio = pdata->gpio; dev->max_current = pdata->max_current; dev->min_brightness = pdata->min_brightness; dev->default_brightness = pdata->default_brightness; dev->max_brightness = pdata->max_brightness; dev->blmap_size = pdata->blmap_size; if (dev->blmap_size) { dev->blmap = kzalloc(sizeof(char) * dev->blmap_size, GFP_KERNEL); if (!dev->blmap) { pr_err("%s: Failed to allocate memory\n", __func__); return -ENOMEM; } memcpy(dev->blmap, pdata->blmap, dev->blmap_size); } else { dev->blmap = NULL; } if (gpio_get_value(dev->gpio)) backlight_status = BL_ON; else backlight_status = BL_OFF; i2c_set_clientdata(i2c_dev, dev); mutex_init(&dev->bl_mutex); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_level); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_backlight_on_off); err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_exp_min_value); #if defined(CONFIG_BACKLIGHT_CABC_DEBUG_ENABLE) err = device_create_file(&i2c_dev->dev, &dev_attr_lm3630_pwm); #endif #if defined(CONFIG_MACH_LGE) && !defined(CONFIG_MACH_MSM8974_VU3_KR) && !defined(CONFIG_MACH_MSM8974_Z_KR) && !defined(CONFIG_MACH_MSM8974_Z_US) && !defined(CONFIG_OLED_SUPPORT) if (!lge_get_cont_splash_enabled()) lm3630_lcd_backlight_set_level(0); #endif return 0; }