Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b64dc5a4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight

* 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight:
  backlight: Rename the corgi backlight driver to generic
  backlight: add support for Toppoly TDO35S series to tdo24m lcd driver
  backlight: Add suspend/resume support to the backlight core
  bd->props.brightness doesn't reflect the actual backlight level.
  backlight: Support VGA/QVGA mode switching in tosa_lcd
  backlight: Catch invalid input in sysfs attributes
  backlight: Value of ILI9320_RGB_IF2 register should not be hardcoded
  backlight: crbllcd_bl - Use platform_device_register_simple()
  backlight: progear_bl - Use platform_device_register_simple()
  backlight: hp680_bl - Use platform_device_register_simple()
parents 73d59314 d00ba726
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -52,11 +52,11 @@ config LCD_ILI9320
	  then say y to include a power driver for it.

config LCD_TDO24M
	tristate "Toppoly TDO24M LCD Panels support"
	tristate "Toppoly TDO24M  and TDO35S LCD Panels support"
	depends on LCD_CLASS_DEVICE && SPI_MASTER
	default n
	help
	  If you have a Toppoly TDO24M series LCD panel, say y here to
	  If you have a Toppoly TDO24M/TDO35S series LCD panel, say y here to
	  include the support for it.

config LCD_VGG2432A4
@@ -123,17 +123,14 @@ config BACKLIGHT_ATMEL_PWM
	  To compile this driver as a module, choose M here: the module will be
	  called atmel-pwm-bl.

config BACKLIGHT_CORGI
	tristate "Generic (aka Sharp Corgi) Backlight Driver (DEPRECATED)"
config BACKLIGHT_GENERIC
	tristate "Generic (aka Sharp Corgi) Backlight Driver"
	depends on BACKLIGHT_CLASS_DEVICE
	default n
	default y
	help
	  Say y to enable the generic platform backlight driver previously
	  known as the Corgi backlight driver. If you have a Sharp Zaurus
	  SL-C7xx, SL-Cxx00 or SL-6000x say y. Most users can say n.

	  Note: this driver is marked as deprecated, try enable SPI and
	  use the new corgi_lcd driver with integrated backlight control
	  SL-C7xx, SL-Cxx00 or SL-6000x say y.

config BACKLIGHT_LOCOMO
	tristate "Sharp LOCOMO LCD/Backlight Driver"
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ obj-$(CONFIG_LCD_TOSA) += tosa_lcd.o

obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
obj-$(CONFIG_BACKLIGHT_ATMEL_PWM)    += atmel-pwm-bl.o
obj-$(CONFIG_BACKLIGHT_CORGI)	+= corgi_bl.o
obj-$(CONFIG_BACKLIGHT_GENERIC)	+= generic_bl.o
obj-$(CONFIG_BACKLIGHT_HP680)	+= hp680_bl.o
obj-$(CONFIG_BACKLIGHT_LOCOMO)	+= locomolcd.o
obj-$(CONFIG_BACKLIGHT_OMAP1)	+= omap1_bl.o
+51 −22
Original line number Diff line number Diff line
@@ -40,6 +40,10 @@ static int fb_notifier_callback(struct notifier_block *self,
		if (!bd->ops->check_fb ||
		    bd->ops->check_fb(evdata->info)) {
			bd->props.fb_blank = *(int *)evdata->data;
			if (bd->props.fb_blank == FB_BLANK_UNBLANK)
				bd->props.state &= ~BL_CORE_FBBLANK;
			else
				bd->props.state |= BL_CORE_FBBLANK;
			backlight_update_status(bd);
		}
	mutex_unlock(&bd->ops_lock);
@@ -80,20 +84,18 @@ static ssize_t backlight_show_power(struct device *dev,
static ssize_t backlight_store_power(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t count)
{
	int rc = -ENXIO;
	char *endp;
	int rc;
	struct backlight_device *bd = to_backlight_device(dev);
	int power = simple_strtoul(buf, &endp, 0);
	size_t size = endp - buf;
	unsigned long power;

	if (*endp && isspace(*endp))
		size++;
	if (size != count)
		return -EINVAL;
	rc = strict_strtoul(buf, 0, &power);
	if (rc)
		return rc;

	rc = -ENXIO;
	mutex_lock(&bd->ops_lock);
	if (bd->ops) {
		pr_debug("backlight: set power to %d\n", power);
		pr_debug("backlight: set power to %lu\n", power);
		if (bd->props.power != power) {
			bd->props.power = power;
			backlight_update_status(bd);
@@ -116,28 +118,25 @@ static ssize_t backlight_show_brightness(struct device *dev,
static ssize_t backlight_store_brightness(struct device *dev,
		struct device_attribute *attr, const char *buf, size_t count)
{
	int rc = -ENXIO;
	char *endp;
	int rc;
	struct backlight_device *bd = to_backlight_device(dev);
	int brightness = simple_strtoul(buf, &endp, 0);
	size_t size = endp - buf;
	unsigned long brightness;

	rc = strict_strtoul(buf, 0, &brightness);
	if (rc)
		return rc;

	if (*endp && isspace(*endp))
		size++;
	if (size != count)
		return -EINVAL;
	rc = -ENXIO;

	mutex_lock(&bd->ops_lock);
	if (bd->ops) {
		if (brightness > bd->props.max_brightness)
			rc = -EINVAL;
		else {
			pr_debug("backlight: set brightness to %d\n",
			pr_debug("backlight: set brightness to %lu\n",
				 brightness);
			if (bd->props.brightness != brightness) {
			bd->props.brightness = brightness;
			backlight_update_status(bd);
			}
			rc = count;
		}
	}
@@ -170,6 +169,34 @@ static ssize_t backlight_show_actual_brightness(struct device *dev,

static struct class *backlight_class;

static int backlight_suspend(struct device *dev, pm_message_t state)
{
	struct backlight_device *bd = to_backlight_device(dev);

	if (bd->ops->options & BL_CORE_SUSPENDRESUME) {
		mutex_lock(&bd->ops_lock);
		bd->props.state |= BL_CORE_SUSPENDED;
		backlight_update_status(bd);
		mutex_unlock(&bd->ops_lock);
	}

	return 0;
}

static int backlight_resume(struct device *dev)
{
	struct backlight_device *bd = to_backlight_device(dev);

	if (bd->ops->options & BL_CORE_SUSPENDRESUME) {
		mutex_lock(&bd->ops_lock);
		bd->props.state &= ~BL_CORE_SUSPENDED;
		backlight_update_status(bd);
		mutex_unlock(&bd->ops_lock);
	}

	return 0;
}

static void bl_device_release(struct device *dev)
{
	struct backlight_device *bd = to_backlight_device(dev);
@@ -286,6 +313,8 @@ static int __init backlight_class_init(void)
	}

	backlight_class->dev_attrs = bl_device_attributes;
	backlight_class->suspend = backlight_suspend;
	backlight_class->resume = backlight_resume;
	return 0;
}

+7 −11
Original line number Diff line number Diff line
@@ -259,22 +259,18 @@ static int __init cr_backlight_init(void)
{
	int ret = platform_driver_register(&cr_backlight_driver);

	if (!ret) {
		crp = platform_device_alloc("cr_backlight", -1);
		if (!crp)
			return -ENOMEM;

		ret = platform_device_add(crp);
	if (ret)
		return ret;

		if (ret) {
			platform_device_put(crp);
	crp = platform_device_register_simple("cr_backlight", -1, NULL, 0);
	if (IS_ERR(crp)) {
		platform_driver_unregister(&cr_backlight_driver);
		}
		return PTR_ERR(crp);
	}

	printk("Carillo Ranch Backlight Driver Initialized.\n");

	return ret;
	return 0;
}

static void __exit cr_backlight_exit(void)
+147 −0
Original line number Diff line number Diff line
/*
 *  Backlight Driver for Sharp Zaurus Handhelds (various models)
 *  Generic Backlight Driver
 *
 *  Copyright (c) 2004-2006 Richard Purdie
 *
 *  Based on Sharp's 2.4 Backlight Driver
 *  Copyright (c) 2004-2008 Richard Purdie
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
@@ -19,31 +17,29 @@
#include <linux/fb.h>
#include <linux/backlight.h>

static int corgibl_intensity;
static struct backlight_properties corgibl_data;
static struct backlight_device *corgi_backlight_device;
static int genericbl_intensity;
static struct backlight_device *generic_backlight_device;
static struct generic_bl_info *bl_machinfo;

static unsigned long corgibl_flags;
#define CORGIBL_SUSPENDED     0x01
#define CORGIBL_BATTLOW       0x02
/* Flag to signal when the battery is low */
#define GENERICBL_BATTLOW       BL_CORE_DRIVER1

static int corgibl_send_intensity(struct backlight_device *bd)
static int genericbl_send_intensity(struct backlight_device *bd)
{
	int intensity = bd->props.brightness;

	if (bd->props.power != FB_BLANK_UNBLANK)
		intensity = 0;
	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
	if (bd->props.state & BL_CORE_FBBLANK)
		intensity = 0;
	if (corgibl_flags & CORGIBL_SUSPENDED)
	if (bd->props.state & BL_CORE_SUSPENDED)
		intensity = 0;
	if (corgibl_flags & CORGIBL_BATTLOW)
	if (bd->props.state & GENERICBL_BATTLOW)
		intensity &= bl_machinfo->limit_mask;

	bl_machinfo->set_bl_intensity(intensity);

	corgibl_intensity = intensity;
	genericbl_intensity = intensity;

	if (bl_machinfo->kick_battery)
		bl_machinfo->kick_battery();
@@ -51,32 +47,9 @@ static int corgibl_send_intensity(struct backlight_device *bd)
	return 0;
}

#ifdef CONFIG_PM
static int corgibl_suspend(struct platform_device *pdev, pm_message_t state)
static int genericbl_get_intensity(struct backlight_device *bd)
{
	struct backlight_device *bd = platform_get_drvdata(pdev);

	corgibl_flags |= CORGIBL_SUSPENDED;
	backlight_update_status(bd);
	return 0;
}

static int corgibl_resume(struct platform_device *pdev)
{
	struct backlight_device *bd = platform_get_drvdata(pdev);

	corgibl_flags &= ~CORGIBL_SUSPENDED;
	backlight_update_status(bd);
	return 0;
}
#else
#define corgibl_suspend	NULL
#define corgibl_resume	NULL
#endif

static int corgibl_get_intensity(struct backlight_device *bd)
{
	return corgibl_intensity;
	return genericbl_intensity;
}

/*
@@ -85,24 +58,29 @@ static int corgibl_get_intensity(struct backlight_device *bd)
 */
void corgibl_limit_intensity(int limit)
{
	struct backlight_device *bd = generic_backlight_device;

	mutex_lock(&bd->ops_lock);
	if (limit)
		corgibl_flags |= CORGIBL_BATTLOW;
		bd->props.state |= GENERICBL_BATTLOW;
	else
		corgibl_flags &= ~CORGIBL_BATTLOW;
	backlight_update_status(corgi_backlight_device);
		bd->props.state &= ~GENERICBL_BATTLOW;
	backlight_update_status(generic_backlight_device);
	mutex_unlock(&bd->ops_lock);
}
EXPORT_SYMBOL(corgibl_limit_intensity);


static struct backlight_ops corgibl_ops = {
	.get_brightness = corgibl_get_intensity,
	.update_status  = corgibl_send_intensity,
static struct backlight_ops genericbl_ops = {
	.options = BL_CORE_SUSPENDRESUME,
	.get_brightness = genericbl_get_intensity,
	.update_status  = genericbl_send_intensity,
};

static int corgibl_probe(struct platform_device *pdev)
static int genericbl_probe(struct platform_device *pdev)
{
	struct generic_bl_info *machinfo = pdev->dev.platform_data;
	const char *name = "generic-bl";
	struct backlight_device *bd;

	bl_machinfo = machinfo;
	if (!machinfo->limit_mask)
@@ -111,59 +89,59 @@ static int corgibl_probe(struct platform_device *pdev)
	if (machinfo->name)
		name = machinfo->name;

	corgi_backlight_device = backlight_device_register (name,
		&pdev->dev, NULL, &corgibl_ops);
	if (IS_ERR (corgi_backlight_device))
		return PTR_ERR (corgi_backlight_device);
	bd = backlight_device_register (name,
		&pdev->dev, NULL, &genericbl_ops);
	if (IS_ERR (bd))
		return PTR_ERR (bd);

	platform_set_drvdata(pdev, corgi_backlight_device);
	platform_set_drvdata(pdev, bd);

	bd->props.max_brightness = machinfo->max_intensity;
	bd->props.power = FB_BLANK_UNBLANK;
	bd->props.brightness = machinfo->default_intensity;
	backlight_update_status(bd);

	corgi_backlight_device->props.max_brightness = machinfo->max_intensity;
	corgi_backlight_device->props.power = FB_BLANK_UNBLANK;
	corgi_backlight_device->props.brightness = machinfo->default_intensity;
	backlight_update_status(corgi_backlight_device);
	generic_backlight_device = bd;

	printk("Corgi Backlight Driver Initialized.\n");
	printk("Generic Backlight Driver Initialized.\n");
	return 0;
}

static int corgibl_remove(struct platform_device *pdev)
static int genericbl_remove(struct platform_device *pdev)
{
	struct backlight_device *bd = platform_get_drvdata(pdev);

	corgibl_data.power = 0;
	corgibl_data.brightness = 0;
	bd->props.power = 0;
	bd->props.brightness = 0;
	backlight_update_status(bd);

	backlight_device_unregister(bd);

	printk("Corgi Backlight Driver Unloaded\n");
	printk("Generic Backlight Driver Unloaded\n");
	return 0;
}

static struct platform_driver corgibl_driver = {
	.probe		= corgibl_probe,
	.remove		= corgibl_remove,
	.suspend	= corgibl_suspend,
	.resume		= corgibl_resume,
static struct platform_driver genericbl_driver = {
	.probe		= genericbl_probe,
	.remove		= genericbl_remove,
	.driver		= {
		.name	= "generic-bl",
	},
};

static int __init corgibl_init(void)
static int __init genericbl_init(void)
{
	return platform_driver_register(&corgibl_driver);
	return platform_driver_register(&genericbl_driver);
}

static void __exit corgibl_exit(void)
static void __exit genericbl_exit(void)
{
	platform_driver_unregister(&corgibl_driver);
	platform_driver_unregister(&genericbl_driver);
}

module_init(corgibl_init);
module_exit(corgibl_exit);
module_init(genericbl_init);
module_exit(genericbl_exit);

MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
MODULE_DESCRIPTION("Corgi Backlight Driver");
MODULE_DESCRIPTION("Generic Backlight Driver");
MODULE_LICENSE("GPL");
Loading