Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.0-rc5 114 lines 2.8 kB view raw
1/* 2 * Generic Backlight Driver 3 * 4 * Copyright (c) 2004-2008 Richard Purdie 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 */ 11 12#include <linux/module.h> 13#include <linux/kernel.h> 14#include <linux/init.h> 15#include <linux/platform_device.h> 16#include <linux/mutex.h> 17#include <linux/fb.h> 18#include <linux/backlight.h> 19 20static int genericbl_intensity; 21static struct backlight_device *generic_backlight_device; 22static struct generic_bl_info *bl_machinfo; 23 24static int genericbl_send_intensity(struct backlight_device *bd) 25{ 26 int intensity = bd->props.brightness; 27 28 if (bd->props.power != FB_BLANK_UNBLANK) 29 intensity = 0; 30 if (bd->props.state & BL_CORE_FBBLANK) 31 intensity = 0; 32 if (bd->props.state & BL_CORE_SUSPENDED) 33 intensity = 0; 34 35 bl_machinfo->set_bl_intensity(intensity); 36 37 genericbl_intensity = intensity; 38 39 if (bl_machinfo->kick_battery) 40 bl_machinfo->kick_battery(); 41 42 return 0; 43} 44 45static int genericbl_get_intensity(struct backlight_device *bd) 46{ 47 return genericbl_intensity; 48} 49 50static const struct backlight_ops genericbl_ops = { 51 .options = BL_CORE_SUSPENDRESUME, 52 .get_brightness = genericbl_get_intensity, 53 .update_status = genericbl_send_intensity, 54}; 55 56static int genericbl_probe(struct platform_device *pdev) 57{ 58 struct backlight_properties props; 59 struct generic_bl_info *machinfo = dev_get_platdata(&pdev->dev); 60 const char *name = "generic-bl"; 61 struct backlight_device *bd; 62 63 bl_machinfo = machinfo; 64 if (!machinfo->limit_mask) 65 machinfo->limit_mask = -1; 66 67 if (machinfo->name) 68 name = machinfo->name; 69 70 memset(&props, 0, sizeof(struct backlight_properties)); 71 props.type = BACKLIGHT_RAW; 72 props.max_brightness = machinfo->max_intensity; 73 bd = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, 74 NULL, &genericbl_ops, &props); 75 if (IS_ERR(bd)) 76 return PTR_ERR(bd); 77 78 platform_set_drvdata(pdev, bd); 79 80 bd->props.power = FB_BLANK_UNBLANK; 81 bd->props.brightness = machinfo->default_intensity; 82 backlight_update_status(bd); 83 84 generic_backlight_device = bd; 85 86 dev_info(&pdev->dev, "Generic Backlight Driver Initialized.\n"); 87 return 0; 88} 89 90static int genericbl_remove(struct platform_device *pdev) 91{ 92 struct backlight_device *bd = platform_get_drvdata(pdev); 93 94 bd->props.power = 0; 95 bd->props.brightness = 0; 96 backlight_update_status(bd); 97 98 dev_info(&pdev->dev, "Generic Backlight Driver Unloaded\n"); 99 return 0; 100} 101 102static struct platform_driver genericbl_driver = { 103 .probe = genericbl_probe, 104 .remove = genericbl_remove, 105 .driver = { 106 .name = "generic-bl", 107 }, 108}; 109 110module_platform_driver(genericbl_driver); 111 112MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>"); 113MODULE_DESCRIPTION("Generic Backlight Driver"); 114MODULE_LICENSE("GPL");