public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@ucw.cz>
To: Richard Purdie <rpurdie@rpsys.net>
Cc: lenz@cs.wisc.edu, kernel list <linux-kernel@vger.kernel.org>,
	patches@arm.linux.org.uk,
	Bompart Cedric <cedric.bompart@thales-is.com>
Subject: Re: Hook collie frontlight into sysfs
Date: Fri, 31 Mar 2006 01:30:05 +0200	[thread overview]
Message-ID: <20060330233005.GE1663@elf.ucw.cz> (raw)
In-Reply-To: <1143759565.6418.74.camel@localhost.localdomain>

Hi!

> > Hook backlight handling into backlight subsystem, so that backlight is
> > controllable using /sys . I had to shuffle code around a bit in order
> > to avoid prototypes.
> 
> Hi Pavel,
> 
> There are a few issues with this. Firstly,

>  CC      arch/arm/common/locomo.o
> arch/arm/common/locomo.c: In function `locomo_frontlight_set':
> arch/arm/common/locomo.c:1061: error: `LOCOMO_ALC_EN' undeclared (first use in this function)
> arch/arm/common/locomo.c:1061: error: (Each undeclared identifier is reported only once
> arch/arm/common/locomo.c:1061: error: for each function it appears in.)
> make[1]: *** [arch/arm/common/locomo.o] Error 1

Oops, too much hand editing, probably.

> > +static int set_intensity(struct backlight_device *bd, int intensity)
> > +{
> > +	switch (intensity) {
> > +	/* AC and non-AC are handled differently, but produce same results in sharp code? */
> > +	case 0: locomo_frontlight_set(locomolcd_dev, 0, 0, 161); break;
> > +	case 1: locomo_frontlight_set(locomolcd_dev, 117, 0, 161); break;
> > +	case 2: locomo_frontlight_set(locomolcd_dev, 163, 0, 148); break;
> > +	case 3: locomo_frontlight_set(locomolcd_dev, 194, 0, 161); break;
> > +	case 4: locomo_frontlight_set(locomolcd_dev, 194, 1, 161); break;
> > +
> > +	default:
> > +		locomo_frontlight_set(locomolcd_dev, intensity, 0, 148); break;
> > +	}
> > +	current_intensity = intensity;
> > +	return 0;
> > +}
> 
> That default statement gives cause for concern. Should it not return
> -EINVAL for intensities outside of 0-4?

Well.. I noticed that values 80..194 actually provide continuous
selection of backlights, so this was my little hack to play with.

I am not sure if it is okay to leave backlight at some state like that
for long ammount of time, nor how is third parameter related...

I guess I'll simply return -EINVAL. 

> > +static int get_intensity(struct backlight_device *bd)
> > +{
> > +	return current_intensity;
> > +}
> > +
> > +static struct backlight_properties locomobl_data = {
> > +	.owner		= THIS_MODULE,
> > +	.get_brightness = get_intensity,
> > +	.set_brightness = set_intensity,
> > +	.max_brightness = 5,
> 
> Maximum brightness is 4 above?

It seems to be ignored, anyway, but will fix.

> > @@ -147,8 +183,13 @@ static int __init poodle_lcd_init(void)
> >  
> >  #ifdef CONFIG_SA1100_COLLIE
> >  	sa1100fb_lcd_power = locomolcd_power;
> > +
> > +	backlight_device_register("collie-bl", NULL, &locomobl_data);
> >  #endif
> >  	return 0;
> >  }
> 
> Could this be changed to:
> 
> #ifdef CONFIG_SA1100_COLLIE
> 	sa1100fb_lcd_power = locomolcd_power;
> #endif
> 	backlight_device_register("locomo-bl", NULL, &locomobl_data);
> 
>  	return 0;
> 
> This means that it will also present a backlight interface on poodle. In
> fact I've already helped a poodle user test this and it works!

Good -- I had no idea if it would work. Changed.

> Also note that there are some backlight interface changes sitting in -mm
> (see the linux-fbdev-devel mailing list) which this patch isn't covered
> by. If this patch gets merged first, I'll make sure it gets adapted to
> the new interface though (which actually brings some benefits like power
> attribute implementation for free).

Perhaps I can merge it into your tree (instead of rmk's?).
								Pavel

This incremental diff should fix these issues...

Signed-off-by: Pavel Machek <pavel@suse.cz>
PATCH FOLLOWS
KernelVersion: 2.6.16-git-previouspatch

diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c
index bcce028..84b0226 100644
--- a/arch/arm/common/locomo.c
+++ b/arch/arm/common/locomo.c
@@ -1090,6 +1090,7 @@ void locomo_frontlight_set(struct locomo
 	locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
 	udelay(100);
 	locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
+#define LOCOMO_ALC_EN	0x8000
 	locomo_writel(bpwf | LOCOMO_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
 	spin_unlock_irqrestore(&lchip->lock, flags);
 }
diff --git a/drivers/video/backlight/locomolcd.c b/drivers/video/backlight/locomolcd.c
index a95cd25..d033471 100644
--- a/drivers/video/backlight/locomolcd.c
+++ b/drivers/video/backlight/locomolcd.c
@@ -120,7 +120,9 @@ static int set_intensity(struct backligh
 	case 4: locomo_frontlight_set(locomolcd_dev, 194, 1, 161); break;
 
 	default:
-		locomo_frontlight_set(locomolcd_dev, intensity, 0, 148); break;
+		return -EINVAL;
+		/* Actually, other values are possible, too. Everything between 80..194
+		   seems to work as duty parameter */
 	}
 	current_intensity = intensity;
 	return 0;
@@ -135,7 +137,7 @@ static struct backlight_properties locom
 	.owner		= THIS_MODULE,
 	.get_brightness = get_intensity,
 	.set_brightness = set_intensity,
-	.max_brightness = 5,
+	.max_brightness = 4,
 };
 
 static int poodle_lcd_probe(struct locomo_dev *dev)
@@ -183,9 +185,9 @@ static int __init poodle_lcd_init(void)
 
 #ifdef CONFIG_SA1100_COLLIE
 	sa1100fb_lcd_power = locomolcd_power;
-
-	backlight_device_register("collie-bl", NULL, &locomobl_data);
 #endif
+	backlight_device_register("collie-bl", NULL, &locomobl_data);
+
 	return 0;
 }
 device_initcall(poodle_lcd_init);

-- 
Picture of sleeping (Linux) penguin wanted...

  reply	other threads:[~2006-03-30 23:30 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-30 11:46 Hook collie frontlight into sysfs Pavel Machek
2006-03-30 22:59 ` Richard Purdie
2006-03-30 23:30   ` Pavel Machek [this message]
  -- strict thread matches above, loose matches on Subject: below --
2006-03-31  7:29 Bompart Cedric
2006-03-31  8:23 ` Pavel Machek
2006-03-31 10:13   ` Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060330233005.GE1663@elf.ucw.cz \
    --to=pavel@ucw.cz \
    --cc=cedric.bompart@thales-is.com \
    --cc=lenz@cs.wisc.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@arm.linux.org.uk \
    --cc=rpurdie@rpsys.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox