Skip to content

Patch that adding the i2c device driver to stm32mp1-openstlinux for changing backlight brightness

License

Notifications You must be signed in to change notification settings

TheBraveBurjak/backlight_patch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

STM32 Backlight Sensor Driver Patch

Linux kernel driver for "I2C Touch Sensor Device", which controls the display brightness via backlight subsystem.

My learning project for writing linux kernel drivers.

Idea is to change brightness of STM32MP157F-DK2 board display. By touching linear sensor on STM32F072B-Disco board.

I2C Touch Sensor Device

STM32F072B-Disco board project. Linear touch sensor detects position of finger on it. When touched sensor generates GPIO Output signal and writes position value in its register.

Connection map

+----------------------------------+     +----------------------+
|   STM32MP157-DK2                 |     |   STM32F072B-Disco   |
|                                  |     |                      |
|  [1] I2C5_SCL     CN13/D15 <-----+-----+--> P2/PB6 (I2C1_SCL) |
|  [2] I2C5_SDA     CN13/D14 <-----+-----+--> P2/PB7 (I2C1_SDA) |
|  [3] GPIOG3 IRQ   CN13/D8  <-----+-----+--- P2/PB9            |
|  [4] VDD_5V       CN16/5V  ------+-----+--> P2/5V             |
|  [5] GND          CN16/GND ------+-----+--> P2/GND            |
|                                  |     |                      |
+----------------------------------+     +----------------------+

STM32F072B-Disco can be replaced with anything else, just keep powering from main board and common ground.

Expected Register map

Register map is very simple. Only two one-byte read-only register.

Address (hex) Name Size Access Reset Description
0x00 STATUS uint8_t R 0x00 0 / 1
0x01 POS uint8_t R 0x00 0 ... 100

How it works

Linear sensor writing position of finger to inner regs and generating PB9 GPIO output. Signal on CN13/D8 reads PB9 signal and triggering interrupt on main board. In this interrupt handler main board reading 0x00 and 0x01 registers from slave device.

If touch state is 1 then device changes its display brightness.

GET STARTED

  1. Follow guide to download developer-package with source code of main linux project. Build it for the first time https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP157x-DK2/Develop_on_Arm%C2%AE_Cortex%C2%AE-A7

  2. Add I2C Device to Device-Tree

&i2c5 {
    backlight_sensor@2c {
        compatible = "hometrustvendor,backlight-sensor";
        reg = <0x2c>;
        interrupt-parent = <&gpiog>;
        interrupts = <3 IRQ_TYPE_EDGE_RISING>;
        status = "okay";
        backlight = <&panel_otm8009a>;
    };
};
  1. Add Driver file to kernel drivers\misc\backlight_sensor.c

  2. Add Kkonfig

config BACKLIGHT_SENSOR
    tristate "Backlight sensor driver"
    depends on I2C
    help
      Simple I2C backlight sensor with IRQ support.
  1. Add row to makefile
obj-$(CONFIG_BACKLIGHT_SENSOR) += backlight_sensor.o
  1. Follow guide to rebuild and reload dts and uimage to board

https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_boards/STM32MP157x-DK2/Develop_on_Arm%C2%AE_Cortex%C2%AE-A7/Modify,_rebuild_and_reload_the_Linux%C2%AE_kernel

  1. After reboot check if works, in terminal
dmesg | grep -i "backlight"

Output should have probe and interrupt prints;

[    5.291089] backlight-sensor 1-002c: backlight_sensor bound to 5a000000.dsi.0 at addr 0x2c
[   77.802001] backlight-sensor 1-002c: new backlight value:12
[   77.807269] backlight-sensor 1-002c: new backlight value:17
[   77.812829] backlight-sensor 1-002c: new backlight value:17
[   77.818605] backlight-sensor 1-002c: new backlight value:24

About

Patch that adding the i2c device driver to stm32mp1-openstlinux for changing backlight brightness

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published