Configurando o brilho da luz de fundo PWM na inicialização

Configurando o brilho da luz de fundo PWM na inicialização

Estou trabalhando com Linux versão 3.10.17, usando a árvore de dispositivos para inicializar o kernel.

Na árvore de dispositivos, defino um driver compatível com "pwm-backlight". O driver define uma variável,default-brightness-level

Na inicialização, o driver aplica esse valor ao valor de "brilho" do driver.

Gostaria de saber se existe uma maneira de salvar um valor e usá-lo em vez do "nível de brilho padrão". O objetivo é poder salvar um valor de brilho e utilizá-lo na próxima inicialização do Linux.

Responder1

Usando sysfs

Deveria ser possível usar sysfs para definir um valor para o brightnessarquivo. Dê uma olhada abaixo /sys/class/backlight; provavelmente há um subdiretório com seu dispositivo de luz de fundo. Nesse diretório deve haver um arquivo brightness.

Canalize um valor correspondente ao índice do valor (in brightness-levels) que você deseja usar para esse arquivo. Por exemplo:

me@mydevice:/ $ echo 3 > /sys/class/backlight/backlight_lvds.0/brightness

Isso deve definir o valor para a quarta entrada em brightness-levels.

Este arquivo também pode ser consultado:

me@mydevice:/ $ cat  /sys/class/backlight/backlight_lvds.0/brightness
3

Responder2

Usando um arquivo dtb personalizado (portátil)

Nota: eu sei que você mencionouem vez do "nível de brilho padrão", mas se um arquivo dtb for criado, então ele poderá ser usado para salvar a configuração que é salva fora do kernel (ou seja, pode ser trocada por um arquivo diferente sem reconstruir o kernel).

Se você tiver acesso ao arquivo dtsi com o qual o Kernel foi construído, poderá modificar o valor na seção apropriada. Este arquivo deve estar no arch/arm/boot/dtsdiretório da fonte do kernel.

No mesmo nível do compatible = "pwm-backlight", também existe um default-brightness-levelparâmetro. Altere este valor para um valor de sua preferência (corresponde ao índice do brightness-levelsarray. Por exemplo:

backlight_lvds {
        compatible = "pwm-backlight";
        pwms = <&pwm4 0 500000>;
        brightness-levels = <100 75 60 50 40 30 20 10 5 0>;
        /* Default brightness level (index into the array defined by the "brightness-levels" property) */
        default-brightness-level = <5>;
        status = "okay";
    };

Você pode então compilar o dtsi em um arquivo dtb incluído na sua partição de inicialização. Compile usando o make dtbscomando. Algo como:

cd ~/MyOS/kernel_imx 
export CROSS_COMPILE=`pwd`/../prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- 
make myboard_defconfig 
make dtbs

O arquivo dtb de saída é então referenciado no script do bootloader. Por exemplo, para UBoot, é:

setenv dtbname myCustom.dtb

myCustom.dtbé a saída do make dtbscomando.

Responder3

O kernel não fará isso para você (salve um valor de luz de fundo e aplique-o na próxima reinicialização), mas se o seu kernel tiver suporte a sysfs, você poderá manter o valor atual em um arquivo de configuração (pode ser, por exemplo, /etc/backlight.conf) e aplique-o na inicialização.

Sempre que você altera a luz de fundo:

echo <newvalue> > /sys/class/backlight/<subdir>/brightness
echo <newvalue> > /etc/backlight.conf

Na inicialização:

if [ -f /etc/backlight.conf ]; then
    cat /etc/backlight.conf > /sys/class/backlight/<subdir>/brightness
fi

informação relacionada