[nexus7-flo] backlight brightness

Vinay Simha simhavcs at gmail.com
Tue May 3 04:56:51 UTC 2016


On Mon, May 2, 2016 at 12:56 PM, Thierry Reding
<thierry.reding at gmail.com> wrote:
> On Fri, Apr 29, 2016 at 08:04:09AM -0400, Rob Clark wrote:
>> On Fri, Apr 29, 2016 at 1:32 AM, Vinay Simha <simhavcs at gmail.com> wrote:
>> > hi,
>> >
>> > In nx7, backlight brightness control is controlled by dcs commands of
>> > MIPI_DCS_SET_DISPLAY_BRIGHTNESS.
>> > there is no PWM going to panel interface directly as we have in ifc6410/nx5
>>
>> afaiu it is not uncommon to need to control backlight via panel (ie, I
>> think basically all adaptive-backlight panels).  I think the answer is
>> for these panels, the panel driver would register it's own backlight
>> driver, rather than get a (pwm, etc) backlight via dt bindings.
>
> Yes, that'd be my recommendation as well.
>
>> Possibly if the backlight commands are standardized enough then we
>> could implement a single drm_panel_dsi_backlight helper which could be
>> created by any of the dsi adaptive-backlight panels (ie. pass in a
>> 'struct mipi_dsi_device *').. something like:
>>
>> struct drm_panel_dsi_backlight {
>>     struct mipi_panel_dsi_device *link;
>>     ...
>> }
>>
>> struct backlight_device *drm_panel_create_dsi_backlight(struct
>> mipi_panel_dsi_device *link)
>> {
>>     struct drm_panel_dsi_backlight *dsi_bl;
>>     ...
>>     return devm_backlight_device_register(&link->dev, ..., dsi_bl,
>> dsi_bl_ops, props);
>> }

struct backlight_device *devm_backlight_device_register(struct device *dev,
        const char *name, struct device *parent, void *devdata,
        const struct backlight_ops *ops,
        const struct backlight_properties *props)

struct device *dev = &jdi->dsi->dev;

 devm_backlight_device_register(
                                 dev,
                                 dev_name(dev),
                                 dev,
                                 jdi,
                                 &dsi_bl_ops, &props);

Here does the parent also should be jdi->dsi->dev ? because the
backlight is not mapped to fb of android ( android->
settings->brightness) , even though i can change the brightness value
from sysfs and it works only when the display is off. When it
awakes(power button press) panel_enable calls, backlight_update_status
will have the latest brightness value.

if echo the brightness value when the display is awake, dsi fails for
brightness control.
echo 100 > /sys/class/backlight/4700000.qcom,mdss_dsi.0/brightness
[  152.865949] dsi_cmds2buf_tx: cmd dma tx failed, type=0x15, data0=0x51, len=4

static int dsi_bl_update_status(struct backlight_device *bl)
{
        struct jdi_panel *jdi = bl_get_data(bl);
        struct mipi_dsi_device *dsi = jdi->dsi;
        int ret;
        u8 brightness = bl->props.brightness;

        ret = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
                                &brightness, sizeof(brightness));
        if (ret < 0)
                return ret;

        return 0;
}

static const struct backlight_ops dsi_bl_ops = {
        .update_status = dsi_bl_update_status,
 };

john,
for android fb do we need to map the backlight in userspace? As i have
seen in 3.4 kernel when we register the backlight using
platform_device_register, backlight used to map with the
userspace(ubuntu/fedora) settings->brightness.

>
> I agree it would make sense to have a DCS specific helper for backlight.
> I'm somewhat sceptical about the standardization, even though these seem
> to be part of DCS 1.3. But perhaps we can start by being optimistic.
>
> Thierry



-- 
Regards,

Vinay Simha.B.N.


More information about the dri-devel mailing list