void hisifb_backlight_register(struct platform_device *pdev) { struct hisi_fb_data_type *hisifd = NULL; #ifdef CONFIG_FB_BACKLIGHT struct backlight_device *pbd = NULL; struct fb_info *fbi = NULL; char name[16] = {0}; struct backlight_properties props; #endif BUG_ON(pdev == NULL); hisifd = platform_get_drvdata(pdev); BUG_ON(hisifd == NULL); hisifd->backlight.bl_updated = 0; hisifd->backlight.bl_level_old = 0; hisifd->backlight.frame_updated = 0; sema_init(&hisifd->backlight.bl_sem, 1); #ifdef CONFIG_HISI_FB_BACKLIGHT_DELAY INIT_DELAYED_WORK(&hisifd->backlight.bl_worker, hisifb_bl_workqueue_handler); #endif if (lcd_backlight_registered) return; is_recovery_mode = (int)get_boot_into_recovery_flag(); #ifdef CONFIG_FB_BACKLIGHT fbi = hisifd->fbi; snprintf(name, sizeof(name), "hisifb%d_bl", hisifd->index); props.max_brightness = FB_BACKLIGHT_LEVELS - 1; props.brightness = FB_BACKLIGHT_LEVELS - 1; pbd = backlight_device_register(name, fbi->dev, hisifd, &hisi_fb_bl_ops, &props); if (IS_ERR(pbd)) { fbi->bl_dev = NULL; HISI_FB_ERR("backlight_device_register failed!\n"); } fbi->bl_dev = pbd; fb_bl_default_curve(fbi, 0, hisifd->panel_info.bl_min, hisifd->panel_info.bl_max); #else /* android supports only one lcd-backlight/lcd for now */ if (led_classdev_register(&pdev->dev, &backlight_led)) { HISI_FB_ERR("led_classdev_register failed!\n"); return; } #endif INIT_WORK(&(hisifd->backlight.sbl_work), hisifb_sbl_work); hisifd->backlight.sbl_queue = create_singlethread_workqueue(K3_DSS_SBL_WORKQUEUE); if (!hisifd->backlight.sbl_queue) { HISI_FB_ERR("failed to create sbl_queue!\n"); return ; } lcd_backlight_registered = 1; }
void msm_fb_config_backlight(struct msm_fb_data_type *mfd) { struct msm_fb_panel_data *pdata; struct backlight_device *pbd; struct fb_info *fbi; char name[16]; struct backlight_properties props; fbi = mfd->fbi; pdata = (struct msm_fb_panel_data *)mfd->pdev->dev.platform_data; if ((pdata) && (pdata->set_backlight)) { snprintf(name, sizeof(name), "msmfb_bl%d", mfd->index); props.max_brightness = FB_BACKLIGHT_LEVELS - 1; props.brightness = FB_BACKLIGHT_LEVELS - 1; pbd = backlight_device_register(name, fbi->dev, mfd, &msm_fb_bl_ops, &props); if (!IS_ERR(pbd)) { fbi->bl_dev = pbd; fb_bl_default_curve(fbi, 0, mfd->panel_info.bl_min, mfd->panel_info.bl_max); } else { fbi->bl_dev = NULL; printk(KERN_ERR "msm_fb: backlight_device_register failed!\n"); } } }
void nvidia_bl_init(struct nvidia_par *par) { struct backlight_properties props; struct fb_info *info = pci_get_drvdata(par->pci_dev); struct backlight_device *bd; char name[12]; if (!par->FlatPanel) return; #ifdef CONFIG_PMAC_BACKLIGHT if (!machine_is(powermac) || !pmac_has_backlight_type("mnca")) return; #endif snprintf(name, sizeof(name), "nvidiabl%d", info->node); memset(&props, 0, sizeof(struct backlight_properties)); props.type = BACKLIGHT_RAW; props.max_brightness = FB_BACKLIGHT_LEVELS - 1; bd = backlight_device_register(name, info->dev, par, &nvidia_bl_ops, &props); if (IS_ERR(bd)) { info->bl_dev = NULL; printk(KERN_WARNING "nvidia: Backlight registration failed\n"); goto error; } info->bl_dev = bd; fb_bl_default_curve(info, 0, 0x158 * FB_BACKLIGHT_MAX / MAX_LEVEL, 0x534 * FB_BACKLIGHT_MAX / MAX_LEVEL); bd->props.brightness = bd->props.max_brightness; bd->props.power = FB_BLANK_UNBLANK; backlight_update_status(bd); printk("nvidia: Backlight initialized (%s)\n", name); return; error: return; }
void radeonfb_bl_init(struct radeonfb_info *rinfo) { struct backlight_device *bd; struct radeon_bl_privdata *pdata; char name[12]; if (rinfo->mon1_type != MT_LCD) return; #ifdef CONFIG_PMAC_BACKLIGHT if (!pmac_has_backlight_type("ati") && !pmac_has_backlight_type("mnca")) return; #endif pdata = kmalloc(sizeof(struct radeon_bl_privdata), GFP_KERNEL); if (!pdata) { printk("radeonfb: Memory allocation failed\n"); goto error; } snprintf(name, sizeof(name), "radeonbl%d", rinfo->info->node); bd = backlight_device_register(name, rinfo->info->dev, pdata, &radeon_bl_data); if (IS_ERR(bd)) { rinfo->info->bl_dev = NULL; printk("radeonfb: Backlight registration failed\n"); goto error; } pdata->rinfo = rinfo; /* Pardon me for that hack... maybe some day we can figure out in what * direction backlight should work on a given panel? */ pdata->negative = (rinfo->family != CHIP_FAMILY_RV200 && rinfo->family != CHIP_FAMILY_RV250 && rinfo->family != CHIP_FAMILY_RV280 && rinfo->family != CHIP_FAMILY_RV350); #ifdef CONFIG_PMAC_BACKLIGHT pdata->negative = pdata->negative || of_machine_is_compatible("PowerBook4,3") || of_machine_is_compatible("PowerBook6,3") || of_machine_is_compatible("PowerBook6,5"); #endif rinfo->info->bl_dev = bd; fb_bl_default_curve(rinfo->info, 0, 63 * FB_BACKLIGHT_MAX / MAX_RADEON_LEVEL, 217 * FB_BACKLIGHT_MAX / MAX_RADEON_LEVEL); bd->props.max_brightness = FB_BACKLIGHT_LEVELS - 1; bd->props.brightness = bd->props.max_brightness; bd->props.power = FB_BLANK_UNBLANK; backlight_update_status(bd); printk("radeonfb: Backlight initialized (%s)\n", name); return; error: kfree(pdata); return; }