On 10/23/2013 06:54 PM, Thierry Reding wrote: > On Wed, Oct 23, 2013 at 06:31:30PM +0800, Mark Zhang wrote: >> On 10/23/2013 05:09 PM, Thierry Reding wrote: >>> On Wed, Oct 23, 2013 at 04:49:29PM +0800, Mark Zhang wrote: >>>> On 10/23/2013 04:00 PM, Thierry Reding wrote: >>>>> On Wed, Oct 23, 2013 at 10:16:24AM +0800, Mark Zhang wrote: >>>>>> On 10/22/2013 08:49 PM, Thierry Reding wrote: >>>>>>> On Tue, Oct 22, 2013 at 04:55:09PM +0800, Mark Zhang wrote: >>>>>>>> On 10/22/2013 03:24 PM, Thierry Reding wrote: >>>>>>>>> On Fri, Oct 18, 2013 at 12:48:12PM +0800, Mark Zhang wrote: >>>>>>>> [...] >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Okay, I just want to set the "notify" function pointer in "struct >>>>>>>>>> platform_pwm_backlight_data", because I want to tune the brightness >>>>>>>>>> value before the pwm-bl sets the brightness to hardware. I don't know >>>>>>>>>> how to do that, unless we define the platform data explicitly. >>>>>>>>> >>>>>>>>> Okay, my question should have been what you need the functions for and >>>>>>>>> why you think you need them. >>>>>>>>> >>>>>>>> >>>>>>>> If I understanding you correctly, I suppose I've said that: "because I >>>>>>>> want to tune the brightness value before the pwm-bl sets the brightness >>>>>>>> to hardware". >>>>>>> >>>>>>> Why do you want to tune the brightness value? What are you trying to >>>>>>> achieve? >>>>>>> >>>>>> >>>>>> Oh, Tegra has a feature named PRISM(aka SmartDimmer). It changes the >>>>>> color value to make the display looks bright so that we can reduce the >>>>>> backlight brightness to save power. So everytime PRISM is triggered, we >>>>>> call "backlight_update_status", then in the "notify" callback, we change >>>>>> the brightness value which pwm-bl provides by considering the PRISM >>>>>> compensations. >>>>> >>>>> If you automatically call backlight_update_status() everytime PRISM >>>>> gives you new data, can't you just pass the correct value in in the >>>>> first place so that you don't have to tweak it in the .notify() >>>>> callback? >>>> >>>> OK, how to do that? -- "pass the correct value in in the first place"? >>> >>> Well, if you call backlight_update_status(), then you can pass in a >>> brightness value, right? You usually do that by setting the backlight's >>> props.brightness field. >>> >>> So when PRISM gives you new data, you could just read out the current >>> brightness, compute the new one based on the current one and the PRISM >>> data, set the props.brightness field to that value and then call >>> backlight_update_status(). >>> >> >> The param of "backlight_update_status" is "struct backlight_device *". >> So you mean after I get a pointer of correct backlight device, just set >> the brightness value I want to it's "props.brightness" directly? > > Yes. > >> I think the "struct backlight_device" should be opaque(although it's >> definition is in include/linux/backlight.h, I know that), so it's better >> not to touch it's member directly, that's why I wanna use that "notify" >> callback. > > Well, backlight_update_status() is the only way to change the brightness > of a backlight. If nobody ever calls backlight_update_status() then the > .notify() callback will never be called either. > Yes, so this is exactly my understanding before I posted this thread. I think "struct backlight_device" is a handle, we get it and call "backlight_update_status", then if we wanna change it's default behavior or brightness value, we overwrite the fops it provides. > By the way, what method do you use to control the backlight brightness? > Do you use the sysfs interface from userspace? > Yes. Mark > Thierry > -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html